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

Reply via email to