Hello,
I simply made a tiny code making dead lock on two threads and tried
unw_step then.
The stack unwinding was stopped at __lll_lock_wait like below while gdb was
fine.
*libunwind*
121e0(sp:b6d149f8) : (_usrSignalHandler+0x124) [0x121e0]
> b6db1931(sp:b6d14aa0) : (__default_rt_sa_restorer_v1+0x10) [0xb6db1931]
> b6f5c7c7(sp:b6d14aa0) : (__lll_lock_wait+0x3e) [0xb6f5c7c7]
> 0(sp:b6d14ab4) : (+0x3e) [(nil)]
*gdb*
#0 __libc_do_syscall () at
> ../ports/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:43
> #1 0xb6eed7c6 in __lll_lock_wait (futex=futex@entry=0x34758 <mutex2>,
> private=0) at ../ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c:46
> #2 0xb6ee9c20 in __GI___pthread_mutex_lock (mutex=0x34758 <mutex2>) at
> pthread_mutex_lock.c:79
> #3 0x00012fe8 in ts1 () at exception.c:833
> #4 0xb6ee8170 in start_thread (arg=0xb6ca6450) at pthread_create.c:314
Here is a log snippet.
>_Uarm_dwarf_extract_proc_info_from_fde: FDE covers IP
> 0xdee9-0xdf77, LSDA=0x0
> >_Uarm_dwarf_find_debug_frame: start_ip = dee9, end_ip =
> df77
> >_Uarm_dwarf_find_debug_frame: found debug_frame table
> `/lib/libpthread.so.0': segbase=0xb6f51000, len=7, gp=0x0,
> table_data=0xb6a007f0
> >lookup: e->start_ip_offset = aa18
> >lookup: e->start_ip_offset = c4e0
> >lookup: e->start_ip_offset = bad0
> >lookup: e->start_ip_offset = b3d0
> >lookup: e->start_ip_offset = b654
> >lookup: e->start_ip_offset = b7e4
> >lookup: e->start_ip_offset = b730
> >lookup: e->start_ip_offset = b788
> >_Uarm_dwarf_search_unwind_table: ip=0xb6f5c7c7,
> start_ip=0xb788
> >_Uarm_dwarf_search_unwind_table: e->fde_offset = 1a84, segbase =
> b6f51000, debug_frame_base = b6a26548, fde_addr = b6a27fcc
> >_Uarm_dwarf_extract_proc_info_from_fde: FDE @ 0xb6a27fcc
> >access_mem: mem[b6a27fcc] -> 1c
> >access_mem: mem[b6a27fcc] -> 1c
> >access_mem: mem[b6a27fcc] -> 1c
> >access_mem: mem[b6a27fcc] -> 1c
> >access_mem: mem[b6a27fd0] -> 1a58
> >access_mem: mem[b6a27fd0] -> 1a58
> >access_mem: mem[b6a27fd0] -> 1a58
> >access_mem: mem[b6a27fd0] -> 1a58
> >_Uarm_dwarf_extract_proc_info_from_fde: looking for CIE at
> address b6a27fa0
> >access_mem: mem[b6a27fa0] -> c
> >access_mem: mem[b6a27fa0] -> c
> >access_mem: mem[b6a27fa0] -> c
> >access_mem: mem[b6a27fa0] -> c
> >access_mem: mem[b6a27fa4] -> ffffffff
> >access_mem: mem[b6a27fa4] -> ffffffff
> >access_mem: mem[b6a27fa4] -> ffffffff
> >access_mem: mem[b6a27fa4] -> ffffffff
> >access_mem: mem[b6a27fa8] -> 7c020001
> >access_mem: mem[b6a27fa8] -> 7c020001
> >access_mem: mem[b6a27fa8] -> 7c020001
> >access_mem: mem[b6a27fa8] -> 7c020001
> >access_mem: mem[b6a27fac] -> d0c0e
> >parse_cie: CIE parsed OK, augmentation = "", handler=0x0
> >access_mem: mem[b6a27fd4] -> b788
> >access_mem: mem[b6a27fd4] -> b788
> >access_mem: mem[b6a27fd4] -> b788
> >access_mem: mem[b6a27fd4] -> b788
> >access_mem: mem[b6a27fd8] -> 5c
> >access_mem: mem[b6a27fd8] -> 5c
> >access_mem: mem[b6a27fd8] -> 5c
> >access_mem: mem[b6a27fd8] -> 5c
> >_Uarm_dwarf_extract_proc_info_from_fde: FDE covers IP
> 0xb788-0xb7e4, LSDA=0x0
> >access_mem: mem[b6a27fac] -> d0c0e
> >access_mem: mem[b6a27fac] -> d0c0e
> >access_mem: mem[b6a27fac] -> d0c0e
> >run_cfi_program: CFA_def_cfa r13+0x0
> >access_mem: mem[b6a27fdc] -> 84140e41
> >run_cfi_program: CFA_advance_loc to 0xb6f5c78a
> >access_mem: mem[b6a27fdc] -> 84140e41
> >access_mem: mem[b6a27fdc] -> 84140e41
> >run_cfi_program: CFA_def_cfa_offset 0x14
> >access_mem: mem[b6a27fdc] -> 84140e41
> >access_mem: mem[b6a27fe0] -> 86048505
> >run_cfi_program: CFA_offset r4 at cfa+0xffffffec
> >access_mem: mem[b6a27fe0] -> 86048505
> >access_mem: mem[b6a27fe0] -> 86048505
> >run_cfi_program: CFA_offset r5 at cfa+0xfffffff0
> >access_mem: mem[b6a27fe0] -> 86048505
> >access_mem: mem[b6a27fe4] -> 8e028703
> >run_cfi_program: CFA_offset r6 at cfa+0xfffffff4
> >access_mem: mem[b6a27fe4] -> 8e028703
> >access_mem: mem[b6a27fe4] -> 8e028703
> >run_cfi_program: CFA_offset r7 at cfa+0xfffffff8
> >access_mem: mem[b6a27fe4] -> 8e028703
> >access_mem: mem[b6a27fe8] -> 1
> >run_cfi_program: CFA_offset r14 at cfa+0xfffffffc
> >access_mem: mem[b6a27fe8] -> 1
> >access_mem: mem[b6a27fe8] -> 1
> >access_mem: mem[b6a27fe8] -> 1
> >put_rs_cache: unmasking signals/interrupts and releasing
> lock
> >access_mem: mem[b6d14ab0] -> 0
> >_Uarm_dwarf_step: returning 1
> >_Uarm_step: dwarf_step()=1
> 0(sp:b6d14ab4) : (+0x3e) [(nil)]
> >_Uarm_step: (cursor=0xb6d109ac)
You can find full logs and readelf dump in http://1drv.ms/1C2ajU4.
I'm using latest libunwind from git with eglibc-linaro-2.18 on armv7 box.
It would be appreciated if someone help me to find a problem.
Regards,
wais
_______________________________________________
Libunwind-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/libunwind-devel