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 (address@hidden <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)
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