[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libunwind-devel] unw_step in ARM?
From: |
Tommi Rantala |
Subject: |
Re: [Libunwind-devel] unw_step in ARM? |
Date: |
Tue, 23 Oct 2012 12:33:33 +0300 |
2012/10/23 Harald Servat <address@hidden>:
> Hello,
>
> I'm using libunwind 1.1 in a Linux with ARM processor. I've found that
> unw_step seems not to work, or at least not as in x86-64 because it does
> not report all the backtrace but only the top of the stack level. I'm
> attaching a simple program (derived from the tests Gtest-bt.c) that
> shows this and also the output in a ARM and in a X86/64 machine.
>
> Do I need to compile something in a special way? I've looked at the
> objdump -D output from the ARM version and the subroutines seem to be
> there.
Greetings,
Here are some debugging hints:
- Try compiling your program with "-g", so that the binary will also
carry the dwarf debugging information that is used for backtracing.
- Try compiling your program with "-funwind-tables", to get ARM unwind
tables that can be alternatively used for backtracing.
- There's also a third backtracing alternative on ARM, the frame chain
following. You'll need to compile with ARM & APCS modes for it to
work.
- To see what's happening inside libunwind, configure it with
"--enable-debug", then "export UNW_DEBUG_LEVEL=99" before running your
program.
- On ARM, you can runtime select which unwind method(s) to use via
environment variable UNW_ARM_UNWIND_METHOD, valid choices from
include/tdep-arm/libunwind_i.h (by default, libunwind tries them all):
#define UNW_ARM_METHOD_ALL 0xFF
#define UNW_ARM_METHOD_DWARF 0x01
#define UNW_ARM_METHOD_FRAME 0x02
#define UNW_ARM_METHOD_EXIDX 0x04
Regards,
Tommi Rantala
> In ARM:
> # gcc -O0 mytest-bt.c -I ../include
> -L /gpfs/CEPBATOOLS/libunwind/1.1/lib -lunwind -lunwind-arm -o mytest-bt
> # LD_LIBRARY_PATH=/gpfs/CEPBATOOLS/libunwind/1.1/lib:
> $LD_LIBRARY_PATH ./mytest-bt
> bar (123)
> foo (123)
> explicit backtrace:
> 0000000000008734 unw_get_proc_name: <do_backtrace+0x3c>
> (sp=00000000becce318)
> proc=0x8658-0x8b6b
> handler=0x0 lsda=0x0 gp=0x0
>
> In X86/64:
> # gcc -O0 mytest-bt.c -I aplic/libunwind/1.1/include -L
> aplic/libunwind/1.1/lib -lunwind -lunwind-x86_64 -o mytest-bt
> # LD_LIBRARY_PATH=aplic/libunwind/1.1/lib:$LD_LIBRARY_PATH ./mytest-bt
> bar (123)
> foo (123)
> explicit backtrace:
> 000000000040092a unw_get_proc_name: <do_backtrace+0x26>
> (sp=00007ffff8c9b150)
> proc=0x400904-0x400b06
> handler=0x0 lsda=0x0 gp=0x6011e0
> 0000000000400b30 unw_get_proc_name: <foo+0x2a> (sp=00007ffff8c9b1c0)
> proc=0x400b06-0x400b32
> handler=0x0 lsda=0x0 gp=0x6011e0
> 0000000000400b63 unw_get_proc_name: <bar+0x31> (sp=00007ffff8c9b1e0)
> proc=0x400b32-0x400b65
> handler=0x0 lsda=0x0 gp=0x6011e0
> 0000000000400b7e unw_get_proc_name: <main+0x19> (sp=00007ffff8c9b200)
> proc=0x400b65-0x400b85
> handler=0x0 lsda=0x0 gp=0x6011e0
> 0000003c4342169d unw_get_proc_name: <__libc_start_main+0xed>
> (sp=00007ffff8c9b220)
> proc=0x3c434215b0-0x3c43421768
> handler=0x0 lsda=0x0 gp=0x3c437b0fe8
> 0000000000400849 unw_get_proc_name: <_start+0x29> (sp=00007ffff8c9b2e0)
> proc=0x400849-0x40084a
> handler=0x0 lsda=0x0 gp=0x0
>
> Regards
>
>
> WARNING / LEGAL TEXT: This message is intended only for the use of the
> individual or entity to which it is addressed and may contain
> information which is privileged, confidential, proprietary, or exempt
> from disclosure under applicable law. If you are not the intended
> recipient or the person responsible for delivering the message to the
> intended recipient, you are strictly prohibited from disclosing,
> distributing, copying, or in any way using this message. If you have
> received this communication in error, please notify the sender and
> destroy and delete any copies you may have received.
>
> http://www.bsc.es/disclaimer
> _______________________________________________
> Libunwind-devel mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/libunwind-devel
>