On 9/12/2013 6:51 PM, Rajendra Dendukuri wrote:
Filippo,

That really helps!
great!
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.
I got a full backtrace also with this test.

root@arcidiaf:/home/filippo# gcc -o crash_test_1 -g -O0 -fexceptions -finstrument-functions crash_tst_1.c
root@arcidiaf:/home/filippo# ./crash_test_1

Trying to construct invalid buffer!
SIGSEGV Handler!
Got Backtrace Size=10
0x00008854
0x0000894c
0x76e62c24
0x76e8c890
0x76e862d0
0x76e837cc
0x76e835a8
0x00008a6c
0x00008b18
0x76ead7bc

To fix this you need some patches that are on my list to be submitted to the mailing list.
I'm going to submit at least the patch you need.



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
0x000087bc
0x0000887c
0xb6f02420
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?
yes, as I said before.

/Thanks
you are welcome.

regards,
Filippo

-----Original Message-----
From: Filippo ARCIDIACONO [mailto:filippo.arcidiac...@st.com]
Sent: Thursday, September 12, 2013 10:14 AM
To: Rajendra Dendukuri
Cc: SHREYAS JOSHI; uclibc@uclibc.org
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
http://stackoverflow.com/questions/9229702/gcc-return-address-of-calling-function-in-arm-architecture
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
http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Code-Gen-Options.html#Code-Gen-Options)
I got a full backtrace:

root@arcidiaf:/home/filippo# gcc -o crash_test -O0 -fexceptions
-finstrument-functions crash_tst.c
root@arcidiaf:/home/filippo# ./crash_test
Trying to access NULL pointer!
SIGSEGV Handler!
Got Backtrace Size=6
0x00008854
0x0000894c
0x76ef1c24
0x000089b4
0x00008b18
0x76f3c7bc



||
/Thanks

From: SHREYAS JOSHI [mailto:dexterous.m...@yahoo.com]
Sent: Thursday, September 12, 2013 2:33 AM
To: Rajendra Dendukuri; uclibc@uclibc.org
Subject: Re: backtrace() not working on ARMv7a

Try -fexceptions.

For further details, check the following link.

http://www.tune2wizard.com/backtrace/


Thanks & regards,
Shreyas Joshi


________________________________
From: Rajendra Dendukuri <rajen...@broadcom.com<mailto:rajen...@broadcom.com>>
To: "uclibc@uclibc.org<mailto:uclibc@uclibc.org>" 
<uclibc@uclibc.org<mailto:uclibc@uclibc.org>>
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-0.9.33.2, 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@uclibc.org<mailto:uClibc@uclibc.org>
http://lists.busybox.net/mailman/listinfo/uclibc
_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc




_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to