On Tue, Sep 6, 2011 at 3:49 PM, Arun Sharma
<address@hidden> wrote:
On Tue, Sep 6, 2011 at 3:55 AM, Shan Shan
> Yes, i built libunwind with
> ./configure --host=arm-none-linux-gnueabi
>
> option only. Should i have "--enable-cxx-exceptions" also?
No you shouldn't.
> Also does libunwind dependent on any other libraries (i.e.) is it dependent
> on a debug version of a library? like ld (in Valgrind) or libc? Coz all the
> libraries running in target are stripped production versions without debug.
> Should i include libunwind first in LD_LIBRARY_PATH? Right now it's at the
> end? If libunwind takes over gcc libs, is the order of symbol search in
> LD_LIBRARY_PATH matters?
It's dependent on libdl and libc, but ok to strip symbols. I would be
careful when stripping ELF objects because you could be stripping out
unwind information as well (.eh_frame or .debug_frame sections).
Thanks. Here is the output of target's libc and libdl libraries. .eh_frame seems to be only 4 bytes in both the libraries and i don't see debug frames. When i checked the unwind code, it tries some 4 options to unwind a stack and one of the options look for .extab, .exidx frames too. May be it's picking up from there? May be that's why it's working for a simple application compiled with default gcc options.
Still, I am not sure how those 3 symbols alone causes crash even when not called. Those names doesn't look like one colliding with global namespace?
section size addr
.note.ABI-tag 0x20 0x154
.gnu.hash 0x98 0x174
.dynsym 0x2d0 0x20c
.dynstr 0x211 0x4dc
.gnu.version 0x5a 0x6ee
.gnu.version_d 0x5c 0x748
.gnu.version_r 0x50 0x7a4
.rel.dyn 0xa0 0x7f4
.rel.plt 0xb0 0x894
.init 0xc 0x944
.plt 0x11c 0x950
.text 0x2588 0xa6c
.fini 0x8 0x2ff4
.rodata 0x80 0x2ffc
.interp 0x14 0x307c
.ARM.extab 0x18 0x3090
.ARM.exidx 0x178 0x30a8
.eh_frame 0x4 0x3220
.hash 0x204 0x3224
.init_array 0x8 0xbee4
.fini_array 0x8 0xbeec
.jcr 0x4 0xbef4
.dynamic 0x108 0xbef8
.got 0xa0 0xc000
.data 0x4 0xc0a0
.bss 0x30 0xc0a4
.ARM.attributes 0x2f 0x0
Total 0x34f2
and libc
section size addr
.note.ABI-tag 0x20 0x174
.gnu.hash 0x3888 0x194
.dynsym 0x8340 0x3a1c
.dynstr 0x554c 0xbd5c
.gnu.version 0x1068 0x112a8
.gnu.version_d 0xec 0x12310
.gnu.version_r 0x30 0x123fc
.rel.dyn 0x2798 0x1242c
.rel.plt 0x98 0x14bc4
.plt 0xf8 0x14c5c
.text 0xe73a0 0x14d60
__libc_freeres_fn 0xe88 0xfc100
__libc_thread_freeres_fn 0x160 0xfcf88
.rodata 0x17774 0xfd0e8
.interp 0x14 0x11485c
.ARM.extab 0xd6c 0x114870
.ARM.exidx 0x3f48 0x1155dc
.eh_frame 0x4 0x119524
.hash 0x30bc 0x119528
.tdata 0x8 0x1246e8
.tbss 0x38 0x1246f0
.fini_array 0x4 0x1246f0
.ctors 0x8 0x1246f4
.dtors 0x8 0x1246fc
__libc_subfreeres 0x6c 0x124704
__libc_atexit 0x4 0x124770
__libc_thread_subfreeres 0xc 0x124774
.dynamic 0xe8 0x125f18
.got 0x1ac 0x126000
.data 0x7c4 0x1261b0
.bss 0x28d0 0x126978
.ARM.attributes 0x2d 0x0
.gnu.warning.sigstack 0x50 0x0
.gnu.warning.sigreturn 0x3c 0x0
.gnu.warning.siggetmask 0x3c 0x0
.gnu.warning.getcontext 0x3c 0x0
.gnu.warning.setcontext 0x3c 0x0
.gnu.warning.makecontext 0x40 0x0
.gnu.warning.swapcontext 0x40 0x0
.gnu.warning.tmpnam 0x38 0x0
.gnu.warning.tmpnam_r 0x3c 0x0
.gnu.warning.tempnam 0x38 0x0
.gnu.warning.sys_errlist 0x44 0x0
.gnu.warning.sys_nerr 0x44 0x0
.gnu.warning.gets 0x3c 0x0
.gnu.warning.getpw 0x3c 0x0
.gnu.warning.setlogin 0x3c 0x0
.gnu.warning.getwd 0x78 0x0
.gnu.warning.lchmod 0x38 0x0
.gnu.warning.sync_file_range 0x44 0x0
.gnu.warning.sstk 0x38 0x0
.gnu.warning.mktemp 0x38 0x0
.gnu.warning.gtty 0x38 0x0
.gnu.warning.stty 0x38 0x0
.gnu.warning.chflags 0x3c 0x0
.gnu.warning.fchflags 0x3c 0x0
.gnu.warning.revoke 0x38 0x0
.gnu.warning.llseek 0x40 0x0
.gnu.warning.epoll_pwait 0x40 0x0
.gnu.warning.create_module 0x40 0x0
.gnu.warning.get_kernel_syms 0x44 0x0
.gnu.warning.query_module 0x40 0x0
.gnu.warning.__gets_chk 0x3c 0x0
.gnu.warning.inet6_option_space 0x3c 0x0
.gnu.warning.inet6_option_init 0x3c 0x0
.gnu.warning.inet6_option_append 0x40 0x0
.gnu.warning.inet6_option_alloc 0x3c 0x0
.gnu.warning.inet6_option_next 0x3c 0x0
.gnu.warning.inet6_option_find 0x3c 0x0
.gnu.warning.getmsg 0x38 0x0
.gnu.warning.getpmsg 0x3c 0x0
.gnu.warning.putmsg 0x38 0x0
.gnu.warning.putpmsg 0x3c 0x0
.gnu.warning.fattach 0x3c 0x0
.gnu.warning.fdetach 0x3c 0x0
Total 0x121a99
Sounds like what you want to do is to get a remote gdb working for
your target, so you can have symbols and get a better handle on where
the binary is crashing. This way you won't be space limited due to
having an embedded target.
-Arun