Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Libbacktrace doesn't work on Linux ARM-32 bits #114

Open
clopez opened this issue Oct 17, 2023 · 2 comments
Open

Libbacktrace doesn't work on Linux ARM-32 bits #114

clopez opened this issue Oct 17, 2023 · 2 comments

Comments

@clopez
Copy link

clopez commented Oct 17, 2023

When I try to use libbacktrace on Linux 32-bits I get an empty backtrace.

See the following example program: http://ix.io/4Jf4

Build it like:

curl http://ix.io/4Jf4 > testbt.c
gcc -c testbt.c -o testbt.o
gcc testbt.o /path/to/libbacktrace.a -o testbt

And then execute it.

On Debian/arm64 (64-bits) you get this:

$ ./testbt
At main() call into bt()
At bt() call backtrace_print
0xaaaac1df1333 ???
	???:0
0xaaaac1df13b7 ???
	???:0
0xffffb6d6be17 __libc_start_main
	../csu/libc-start.c:308
0xaaaac1df1077 ???
	???:0
At bt() call backtrace_simple
aaaac1df1363 bt ??:0
aaaac1df13b7 main ??:0
ffffb6d6be17 __libc_start_main ../csu/libc-start.c:308
aaaac1df1077 ?? ??:0
Program end

So far, so good

However, on Debian/armhf (ARM 32-bits) you get this:

$ ./testbt
At main() call into bt()
At bt() call backtrace_print
At bt() call backtrace_simple
Program end

So it prints nothing.

Some info about my test environment in case it is useful:

  • I'm testing with the very last version of libbacktrace as of today (9ae4f4a)
  • I'm building libbacktrace from source and linking with this last version for testing this
  • I tested this on Debian version bullseye
  • To discard that is a 32-bit pointer issue I tested this on Intel 32-bits (i686) on an Ubuntu-18.04 32-bits container and there it worked as expected.
  • I also tested this on the last version of Yocto as of today (Yocto Mickledore) and I can reproduce the issue there on an ARM-32 build
  • I tested to run the libbacktrace testsuite with make check and it passes fine (also it passes on ARM-32 bits)
@ianlancetaylor
Copy link
Owner

Does it help if you run gcc -c -g testbt.c -o testbt.o? I added the -g option.

@clopez
Copy link
Author

clopez commented Oct 17, 2023

I just tested to add the -g option and unfortunately it doesn't help.

This is the info about the testbt binary that gets built, just in case is useful.

$ file testbt
testbt: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=ff2046b946518a75d05e88704a33c7429a1d991d, for GNU/Linux 3.2.0, with debug_info, not stripped

$ ldd testbt
	linux-vdso.so.1 (0xf7907000)
	libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xf7887000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xf7788000)
	/lib/ld-linux-armhf.so.3 (0xf78df000)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants