backtrace() not working on ARMv7a

Rajendra Dendukuri rajendra at
Thu Sep 12 16:51:39 UTC 2013


That really helps! Now a minor variation of the program does not throw a full backtrace and stops short after showing the c library call. Again on x86 host machine it correctly shows a deep backtrace.

Attached is the file. I am calling "func1()" which crashes inside snprintf library call implementation.

ARMv7a# ./crash_test

Trying to construct invalid buffer!
SIGSEGV Handler!
Got Backtrace Size=3
ARMv7a #

I think we need to add unwind-tables or -finstrument-functions for uClibc as well. I am using buildroot for the toolchain. Any ideas?


-----Original Message-----
From: Filippo ARCIDIACONO [mailto:filippo.arcidiacono at] 
Sent: Thursday, September 12, 2013 10:14 AM
To: Rajendra Dendukuri
Cc: SHREYAS JOSHI; uclibc at
Subject: Re: backtrace() not working on ARMv7a

On 9/12/2013 2:49 PM, Rajendra Dendukuri wrote:
> Thanks Shreyas for the tip. But it is not working even with "-fexceptions" or "-fasynchronous-unwind-tables" options.
> Forum,
> Anyone faced this issue before?
Yes. I got the same behavior using your test.
Doing some googling , see
on ARM arch the gcc __builtin_return_address() function does not work 
beyond the current function|||| (only __builtin_return_address(0) works),
this explain because we don't obtain a full backtrace.
Using -finstrument-function compiler option (see gcc documentation at
I got a full backtrace:

root at arcidiaf:/home/filippo# gcc -o crash_test -O0 -fexceptions 
-finstrument-functions crash_tst.c
root at arcidiaf:/home/filippo# ./crash_test
Trying to access NULL pointer!
SIGSEGV Handler!
Got Backtrace Size=6

> /Thanks
> From: SHREYAS JOSHI [mailto:dexterous.me82 at]
> Sent: Thursday, September 12, 2013 2:33 AM
> To: Rajendra Dendukuri; uclibc at
> Subject: Re: backtrace() not working on ARMv7a
> Try -fexceptions.
> For further details, check the following link.
> Thanks & regards,
> Shreyas Joshi
> ________________________________
> From: Rajendra Dendukuri <rajendra at<mailto:rajendra at>>
> To: "uclibc at<mailto:uclibc at>" <uclibc at<mailto:uclibc at>>
> Sent: Wednesday, September 11, 2013 10:01 PM
> Subject: backtrace() not working on ARMv7a
> Hi uclibc list,
> I am trying to generate a call stack trace using backtrace() API which is part of libubacktrace. The idea is to catch a SIGSEGV signal and call backtrace() to print all the address values and compare the obtained addresses from objdump -D of executable. Attached is a simplified version of the application. Following is the output seen on ARMv7a platform with buildroot cross-toolchain (gcc- 4.6.3, uClibc-, binutis-2.21.1).
> To compile the application:
> ${CROSS_COMPILE}gcc -o crash_test -O0 -funwind-tables -rdynamic crash_test.c
> ARMv7a# ./crash_test
> Trying to access NULL pointer!
> SIGSEGV Handler!
> Got Backtrace Size=2
> 0x00008724
> 0x000087c4
> ARMv7a#
> The above function call trace is only that of the signal hander (print_back_trace, sigsegv_handler) and does not show the entire call stack for the function where program crashed (print_back_trace, sigsegv_handler, func2, main).
> On x86 host same program shows a deeper function call trace right up to the main function and even beyond:
> x86-RHEL5-host$./crash_test
> Trying to access NULL pointer!
> SIGSEGV Handler!
> Got Backtrace Size=7
> 0x00400939
> 0x004009ab
> 0x30930302f0
> 0x004009d3
> 0x00400a7b
> 0x309301d994
> 0x00400889
> x86-RHEL5-host$
> Can someone please comment on what is going wrong. Any special flags that need to be used while compiling/linking the program.
> /Thanks
> _______________________________________________
> uClibc mailing list
> uClibc at<mailto:uClibc at>
> _______________________________________________
> uClibc mailing list
> uClibc at

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: crash_test.c
URL: <>

More information about the uClibc mailing list