Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Jul 2015 11:46:35 +0200
From:      "Andre Meiser" <ortadur@web.de>
To:        "Konstantin Belousov" <kostikbel@gmail.com>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: Many core dumps in pthread_getspecific.
Message-ID:  <trinity-a61eab47-c174-48a6-9991-1ffac1069609-1437558395543@3capp-webde-bs25>
In-Reply-To: <20150719205722.GT2404@kib.kiev.ua>
References:  <trinity-d3a62468-a8fd-44c3-ab9c-8b177ca8a366-1433331244003@3capp-webde-bs60> <20150603145838.GX2499@kib.kiev.ua> <trinity-15fcacbd-871c-4ea8-9257-5d11e7862ec0-1434103396559@3capp-webde-bs41> <20150614190504.GT2080@kib.kiev.ua> <trinity-e44527ae-e511-4ff3-bcdf-ee8426fc8a94-1434438565708@3capp-webde-bs53> <20150616073637.GO2080@kib.kiev.ua> <trinity-9d219acd-7aa9-4574-a9ad-458b52374069-1435936910016@3capp-webde-bs27> <20150703211111.GZ2080@kib.kiev.ua> <trinity-54f5f349-442e-4777-b35b-866867b763dc-1436977933500@3capp-webde-bs41>,  <20150719205722.GT2404@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jul 19, 2015 at 22:57 +0200, Konstantin Belousov wrote:
> It seems that besides sigreturn(), ucontext symbols must be pre-resolved
> as well.  Try this update (it includes the previous change).

thanks for looking into this, but this patch wasn't funny at all.  Did you tested your patch?  Almost every programme crashed with a core dump.  Here the example for simply starting vim:

% readelf -d vim | grep NEEDED
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.5]
 0x0000000000000001 (NEEDED)             Shared library: [libncurses.so.8]
 0x0000000000000001 (NEEDED)             Shared library: [libintl.so.8]
 0x0000000000000001 (NEEDED)             Shared library: [libpython2.7.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libthr.so.3]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.7]


(gdb) bt
#0  0x00000008014a30d4 in _thr_rtld_init () at /usr/src/lib/libthr/thread/thr_rtld.c:239
#1  0x00000008014a2f03 in _libpthread_init (curthread=<value optimized out>) at /usr/src/lib/libthr/thread/thr_init.c:372
#2  0x00000008014a5c22 in _thread_printf () from /lib/libthr.so.3
#3  0x0000000801498d06 in _init () from /lib/libthr.so.3
#4  0x00007fffffffe000 in ?? ()
#5  0x000000080083d6bf in r_debug_state () from /libexec/ld-elf.so.1
#6  0x000000080083cd17 in __tls_get_addr () from /libexec/ld-elf.so.1
#7  0x000000080083b129 in .text () from /libexec/ld-elf.so.1
#8  0x0000000000000000 in ?? ()


(gdb) info locals
li = {rtli_version = 0, lock_create = 0x8014a30f0 <_thr_rtld_lock_create>, lock_destroy = 0x8014a3160 <_thr_rtld_lock_destroy>,
  rlock_acquire = 0x8014a31b0 <_thr_rtld_rlock_acquire>, wlock_acquire = 0x8014a3270 <_thr_rtld_wlock_acquire>,
  lock_release = 0x8014a3300 <_thr_rtld_lock_release>, thread_set_flag = 0x8014a33c0 <_thr_rtld_set_flag>,
  thread_clr_flag = 0x8014a33d0 <_thr_rtld_clr_flag>, at_fork = 0}
dummy = -1
curthread = (struct pthread *) 0x7fffff0f2650
uc_len = <value optimized out


(gdb) info registers
rax            0xf0b470 15774832
rbx            0x7fffff0f2650   140737472570960
rcx            0x0  0
rdx            0xca0000 13238272
rsi            0x8024064e8  34397512936
rdi            0x7fffff0f2650   140737472570960
rbp            0x7fffffffdb20   0x7fffffffdb20
rsp            0x7fffff0f2650   0x7fffff0f2650
r8             0x0  0
r9             0xfffff8000e35f4c0   -8795854605120
r10            0x0  0
r11            0x246    582
r12            0x800a54a28  34370570792
r13            0x800a545b0  34370569648
r14            0x1  1
r15            0x800855420  34368476192
rip            0x8014a30d4  0x8014a30d4 <_thr_rtld_init+244>
eflags         0x10206  66054
cs             0x43 67
ss             0x3b 59
ds             0x0  0
es             0x0  0
fs             0x0  0
gs             0x0  0


(gdb) disassemble
Dump of assembler code for function _thr_rtld_init:
0x00000008014a2fe0 <_thr_rtld_init+0>:  push   %rbp
0x00000008014a2fe1 <_thr_rtld_init+1>:  mov    %rsp,%rbp
0x00000008014a2fe4 <_thr_rtld_init+4>:  push   %rbx
0x00000008014a2fe5 <_thr_rtld_init+5>:  sub    $0x58,%rsp
0x00000008014a2fe9 <_thr_rtld_init+9>:  movq   $0xffffffffffffffff,-0x58(%rbp)
0x00000008014a2ff1 <_thr_rtld_init+17>: mov    %fs:0x10,%rbx
0x00000008014a2ffa <_thr_rtld_init+26>: lea    -0x58(%rbp),%rdi
0x00000008014a2ffe <_thr_rtld_init+30>: mov    $0x3,%esi
0x00000008014a3003 <_thr_rtld_init+35>: mov    $0x1,%edx
0x00000008014a3008 <_thr_rtld_init+40>: xor    %ecx,%ecx
0x00000008014a300a <_thr_rtld_init+42>: xor    %r8d,%r8d
0x00000008014a300d <_thr_rtld_init+45>: callq  0x8014a5890 <_umtx_op_err>
0x00000008014a3012 <_thr_rtld_init+50>: callq  0x80149916c <__error@plt>
0x00000008014a3017 <_thr_rtld_init+55>: xor    %edi,%edi
0x00000008014a3019 <_thr_rtld_init+57>: xor    %esi,%esi
0x00000008014a301b <_thr_rtld_init+59>: xor    %edx,%edx
0x00000008014a301d <_thr_rtld_init+61>: callq  0x8014990ac <mprotect@plt>
0x00000008014a3022 <_thr_rtld_init+66>: callq  0x8014991ac <_rtld_get_stack_prot@plt>
0x00000008014a3027 <_thr_rtld_init+71>: lea    0xc2(%rip),%rax        # 0x8014a30f0 <_thr_rtld_lock_create>
0x00000008014a302e <_thr_rtld_init+78>: mov    %rax,-0x48(%rbp)
0x00000008014a3032 <_thr_rtld_init+82>: lea    0x127(%rip),%rax        # 0x8014a3160 <_thr_rtld_lock_destroy>
0x00000008014a3039 <_thr_rtld_init+89>: mov    %rax,-0x40(%rbp)
0x00000008014a303d <_thr_rtld_init+93>: lea    0x16c(%rip),%rax        # 0x8014a31b0 <_thr_rtld_rlock_acquire>
0x00000008014a3044 <_thr_rtld_init+100>:    mov    %rax,-0x38(%rbp)
0x00000008014a3048 <_thr_rtld_init+104>:    lea    0x221(%rip),%rax        # 0x8014a3270 <_thr_rtld_wlock_acquire>
0x00000008014a304f <_thr_rtld_init+111>:    mov    %rax,-0x30(%rbp)
0x00000008014a3053 <_thr_rtld_init+115>:    lea    0x2a6(%rip),%rax        # 0x8014a3300 <_thr_rtld_lock_release>
0x00000008014a305a <_thr_rtld_init+122>:    mov    %rax,-0x28(%rbp)
0x00000008014a305e <_thr_rtld_init+126>:    lea    0x35b(%rip),%rax        # 0x8014a33c0 <_thr_rtld_set_flag>
0x00000008014a3065 <_thr_rtld_init+133>:    mov    %rax,-0x20(%rbp)
0x00000008014a3069 <_thr_rtld_init+137>:    lea    0x360(%rip),%rax        # 0x8014a33d0 <_thr_rtld_clr_flag>
0x00000008014a3070 <_thr_rtld_init+144>:    mov    %rax,-0x18(%rbp)
0x00000008014a3074 <_thr_rtld_init+148>:    movq   $0x0,-0x10(%rbp)
0x00000008014a307c <_thr_rtld_init+156>:    xor    %edi,%edi
0x00000008014a307e <_thr_rtld_init+158>:    callq  0x8014991dc <_rtld_atfork_pre@plt>
0x00000008014a3083 <_thr_rtld_init+163>:    xor    %edi,%edi
0x00000008014a3085 <_thr_rtld_init+165>:    callq  0x801498dbc <_rtld_atfork_post@plt>
0x00000008014a308a <_thr_rtld_init+170>:    callq  0x801498e3c <_malloc_prefork@plt>
0x00000008014a308f <_thr_rtld_init+175>:    callq  0x80149919c <_malloc_postfork@plt>
0x00000008014a3094 <_thr_rtld_init+180>:    mov    $0x14,%edi
0x00000008014a3099 <_thr_rtld_init+185>:    xor    %eax,%eax
0x00000008014a309b <_thr_rtld_init+187>:    callq  0x8014990fc <syscall@plt>
0x00000008014a30a0 <_thr_rtld_init+192>:    mov    %rbx,%rdi
0x00000008014a30a3 <_thr_rtld_init+195>:    callq  0x80149e4f0 <_thr_signal_block>
0x00000008014a30a8 <_thr_rtld_init+200>:    lea    -0x50(%rbp),%rdi
0x00000008014a30ac <_thr_rtld_init+204>:    callq  0x801498f3c <_rtld_thread_init@plt>
0x00000008014a30b1 <_thr_rtld_init+209>:    mov    %rbx,%rdi
0x00000008014a30b4 <_thr_rtld_init+212>:    callq  0x80149e530 <_thr_signal_unblock>
0x00000008014a30b9 <_thr_rtld_init+217>:    callq  0x801498dfc <__getcontextx_size@plt>
0x00000008014a30be <_thr_rtld_init+222>:    cltq
0x00000008014a30c0 <_thr_rtld_init+224>:    mov    %rsp,%rbx
0x00000008014a30c3 <_thr_rtld_init+227>:    add    $0xf,%rax
0x00000008014a30c7 <_thr_rtld_init+231>:    and    $0xfffffffffffffff0,%rax
0x00000008014a30cb <_thr_rtld_init+235>:    sub    %rax,%rbx
0x00000008014a30ce <_thr_rtld_init+238>:    mov    %rbx,%rsp
0x00000008014a30d1 <_thr_rtld_init+241>:    mov    %rbx,%rdi
0x00000008014a30d4 <_thr_rtld_init+244>:    callq  0x8014991cc <getcontext@plt>
0x00000008014a30d9 <_thr_rtld_init+249>:    mov    %rbx,%rdi
0x00000008014a30dc <_thr_rtld_init+252>:    callq  0x80149901c <__fillcontextx2@plt>
0x00000008014a30e1 <_thr_rtld_init+257>:    lea    -0x8(%rbp),%rsp
0x00000008014a30e5 <_thr_rtld_init+261>:    pop    %rbx
0x00000008014a30e6 <_thr_rtld_init+262>:    pop    %rbp
0x00000008014a30e7 <_thr_rtld_init+263>:    retq
End of assembler dump.


Sincerely yours Andre.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?trinity-a61eab47-c174-48a6-9991-1ffac1069609-1437558395543>