libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Libunwind-devel] stuck in __lll_lock_wait on ARM


From: Wais Rhie
Subject: [Libunwind-devel] stuck in __lll_lock_wait on ARM
Date: Fri, 6 Feb 2015 17:53:14 -0500

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)

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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]