Seguimiento inverso del "git clone" ejecutándose dentro de arm-chroot basado en qemu-user-emulation

Seguimiento inverso del "git clone" ejecutándose dentro de arm-chroot basado en qemu-user-emulation

Estoy ejecutando un chroot wheezy:armhf usandoemulación de usuario qemuen mi sistema jessie:x86_64. De alguna manera, un git clonerepositorio privado en particular se bloqueará dentro del chroot, pero tendrá éxito de forma nativa. Esto podría ser un error, ¿quién sabe? Para mejorar mi karma, ¡quiero saber qué está pasando!

Como nota al margen: el bloqueo que estoy experimentando también ocurre con git-2.0 dentro de jessie:armel chroot... El bloqueo no ocurre dentro de una emulación de sistema completo. Entonces seguí cavando en elsibilante: armhfRabbithole, sólo porque tuve que elegir uno... No puedo realizar pruebas en una máquina nativa...

Entonces. No hay ningún git-dbgpaquete, hago el mío. Dentro del chroot de wheezy:armhf:

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

Hasta donde yo leí eldocumentación-gcc, configurar DEB_CFLAGS_APPENDy DEB_CXXFLAGS_APPENDademás -fno-stack-protectorno es necesario, pero de todos modos, quiero estar seguro)

Luego, usando la función incorporada de qemugdb_stubdentro del chroot estoy haciendo:

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

La depuración dentro del qemu arroja unsistema no compatible 26error.

Disparando gdb-multiarchfuera del chroot, para conectar:

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?

Dar a continuepara permitir que se realice la clonación resultará en un bloqueo, y ctrl-c se ignora el envío de a.

Generar un archivo central y cargarlo en gdb (dentro del chroot) me dará una pila corrupta:

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?)

Ahora estoy perdido.

¿Dónde está el problema? ¿Me perdí algún detalle en la emulación de usuario de qemu? ¿Tengo que utilizar una máquina de brazo completamente emulada? ¿Un malentendido en la depuración cruzada? ¿Limitaciones de gdb-multiarch? ¿La creación de paquetes de depuración?

Gracias por cualquier sugerencia, sugerencia, sugerencia, consejo, comentario y demás.

Mi mejor suposición en este momento se basa en el hecho de que gitrealiza una clonación (puedo ver dos procesos/hilos), pero QEMU_GDBqemu desactiva la variable de entorno después de usarla. Por lo tanto, solo el proceso inicial irá a gdb. VeraquíPor ejemplo.

Pero aún así: ¿debería poder depurar correctamente el proceso principal? Puedo realizar fácilmente una depuración cruzada de un MWE de hola mundo.

Respuesta1

Resulta que este problema particular de "git clone" es un problema relacionado con qemu... Prevalecen otros problemas en la emulación de usuario de qemu, así que tengo que recurrir a la emulación de todo el sistema... ;-(

Usando un qemu-user-static, compilado desde su git (el qemu-2.0.0+dfsg-4+b1 actualmente en jessie tiene menos correcciones y no funcionará en mi caso...):

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

entonces...

Sin embargo, todavía no puedo obtener rastros de programas complejos...

información relacionada