qemu-user-emulationに基づいてarm-chrootで実行されている「git clone」の逆追跡

qemu-user-emulationに基づいてarm-chrootで実行されている「git clone」の逆追跡

私はwheezy:armhf chrootを使って実行しています。qemu ユーザーエミュレーション私のjessie:x86_64システムで。どういうわけか、git clone特定のプライベートストアのaは、このシステムでの成功中にchrootの内部で停止します。これはバグかもしれません。誰が知っていますか?カルマを改善するために何が起こっているのか知りたかったです!

注:私が経験した静止現象はjessie:armel chroot内のgit-2.0でも発生しました...システム全体のシミュレーションでは静止現象は発生しません。だから掘り続けています。ゆがみ: armhfウサギの牡蠣、一つだけ選ばなければならないから…ネイティブマシンではテストできないですね…

だから。バッグはなく、git-dbg私が直接巻きました。 wheezy:armhf chrootから:

sudo apt-get install build-essential fakeroot
sudo apt-get build-dep git
apt-get source git && cd git-1.7.10.4
DEB_CFLAGS_APPEND="-fno-stack-protector" DEB_CXXFLAGS_APPEND="-fno-stack-protector" DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector,-fortify DEB_BUILD_OPTIONS="noopt nostrip nocheck" fakeroot dpkg-buildpackage -j´getconf _NPROCESSORS_ONLN`
sudo dpkg -i ../git_1.7.10.4-1+wheezy1_armhf.deb

私が読む限りgccドキュメント、設定DEB_CFLAGS_APPENDおよびDEB_CXXFLAGS_APPEND追加では-fno-stack-protector必要ありませんが、とにかく必ず)

次に、qemuの組み込み機能を使用します。gdb_stub私がやっているchrootの内部:

QEMU_GDB=1234 git clone /path/to/breaking/repo /tmp/bla

qemu内でデバッグすると、次のようになります。サポートされていないシステム 26間違い。

gdb-multiarchchrootの外部から起動して接続します。

gdb-multiarch -q
(gdb) set architecture arm                    # prevents "warning: Architecture rejected target-supplied description"
(gdb) target remote localhost:1234
(gdb) set sysroot /opt/chroots/wheezy:armhf
(gdb) file /opt/chroots/wheezy:armhf/usr/bin/git
Reading symbols from /opt/chroots/wheezy:armhf/usr/bin/git...done. # good! has debug symbols!
(gdb) list                                    # works! code is not stripped
(gdb) step
Cannot find bounds of current function        # meh...
(gdb) backtracke
#0  0xf67e0c90 in ?? ()
#1  0x00000000 in ?? ()                       # wtf?

continue複製が発生するように送信すると中断が発生し、送信すると無視されますctrl-c

コアファイルを作成してgdb(chroot内)にロードすると、破損したスタックが提供されます。

gdb -q /usr/bin/git qemu_git_20140514-160951_22373.core
Reading symbols from /usr/bin/git...done.
[New LWP 22373]
Cannot access memory at address 0xf67fe948
Cannot access memory at address 0xf67fe944
(gdb) bt
#0  0xf678b3e4 in ?? ()
#1  0xf678b3d4 in ?? ()
#2  0xf678b3d4 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

今私は迷子になりました。

何が問題なの? qemu-user-emulationの一部の詳細を見逃しましたか?完全にシミュレートされたアームマシンを使用する必要がありますか?クロスデバッグ誤解? gdb-multiarchに制限がありますか?デバッグパッケージを作成しますか?

提案、指示、ヒント、ヒント、コメントなどを送信していただきありがとうございます。

現在の最良の推測はgit複製が行われるという事実に基づいていますが(プロセス/スレッドの両方を見ることができます)、QEMU_GDBqemuを使用した後に環境変数は設定されませんでした。したがって、初期プロセスだけがgdbに入ります。バラよりここ例えば。

しかし、それでも親プロセスを正しくデバッグできるはずですか? hello-world MWEを簡単にクロスデバッグできます。

ベストアンサー1

この「git clone」の特定の中断はqemu関連の問題であることがわかりました...

gitでコンパイルされたものを使用するとqemu-user-static(現在のjessieのqemu-2.0.0 + dfsg-4 + b1には修正が少なく、私の場合は機能しません...):

git clone git://git.qemu-project.org/qemu.git $HOME/qemu.git && cd $HOME/qemu.git
./configure --static --disable-system --target-list=arm-linux-user --prefix=$HOME/qemu.install --disable-libssh2
make && make install
sudo cp $HOME/qemu.install/bin/qemu-arm /opt/chroots/wheezy:armhf/usr/bin/qemu-arm-static

だから...

しかし、複雑なプログラムについてはまだ追跡を得ることはできません...

おすすめ記事