NetBSD-Bugs archive

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

lib/57638: thread local storage broken on evbarm (armv5)



>Number:         57638
>Category:       lib
>Synopsis:       thread local storage broken on evbarm (armv5)
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Sep 30 17:55:00 +0000 2023
>Originator:     Martin Husemann
>Release:        NetBSD 10.99.9
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD unpluged.duskware.de 10.99.9 NetBSD 10.99.9 (UNPLUGED) #521: Sat Sep 30 13:40:22 CEST 2023 martin%seven-days-to-the-wolves.aprisoft.de@localhost:/work/src/sys/arch/evbarm/compile/UNPLUGED evbarm
Architecture: earmv5
Machine: evbarm
>Description:

Many (all?) TLS related tests crash on evbarm, like:

tp-start: 1696095219.51665, t_tls_extern, 21
tc-start: 1696095219.52148, dynamic_abusedef
tc-se:Test program crashed; attempting to get stack trace

Unfortunately gdb is not helpfull (11.0.50 hangs, 13.2 crashes).
Extracting the core and examining with gdb 11.0.50 shows:

Core was generated by `t_tls_extern'.
Program terminated with signal SIGBUS, Bus error.
#0  0xbbed8c78 in _rtld_symlook_list (
    name=name@entry=0xbbbc0233 "__aeabi_read_tp", hash=hash@entry=0xbfffe624, 
    objlist=0xbbef1258 <_rtld_list_main>, 
    defobj_out=defobj_out@entry=0xbfffe5d8, flags=flags@entry=1, 
    ventry=ventry@entry=0x0, dlp=dlp@entry=0xbfffe5dc)
    at /work/src/libexec/ld.elf_so/symbol.c:88
88      /work/src/libexec/ld.elf_so/symbol.c: No such file or directory.
(gdb) info thread
  Id   Target Id         Frame 
* 1    process 9670      0xbbed8c78 in _rtld_symlook_list (
    name=name@entry=0xbbbc0233 "__aeabi_read_tp", hash=hash@entry=0xbfffe624, 
    objlist=0xbbef1258 <_rtld_list_main>, 
    defobj_out=defobj_out@entry=0xbfffe5d8, flags=flags@entry=1, 
    ventry=ventry@entry=0x0, dlp=dlp@entry=0xbfffe5dc)
    at /work/src/libexec/ld.elf_so/symbol.c:88
(gdb) info locals
symp = <optimized out>
def = 0x0
defobj = 0x0
elm = 0xbbef80e0
(gdb) p *elm
$1 = {link = {sqe_next = 0xbbef8140}, obj = 0xbbefc000}
(gdb) info dll
From        To          Syms Read   Shared Object Library
0xbbea4270  0xbbead1c8  Yes         /usr/lib/libatf-c.so.0
0xbbd3df60  0xbbe3f104  Yes         /usr/lib/libc.so.12
0xbbbe0320  0xbbbe040c  Yes         /usr/tests/libexec/ld.elf_so/libh_use_static.so
0xbbbc0328  0xbbbc0414  Yes         /usr/tests/libexec/ld.elf_so/libh_def_static.so.1
0xbbed0608  0xbbedd154  Yes         /usr/libexec/ld.elf_so
(gdb) info reg
r0             0xbbbc0233          3149660723
r1             0xbfffe624          3221218852
r2             0xbbef1258          3153007192
r3             0xbfffe5d8          3221218776
r4             0xbbef80e0          3153035488
r5             0xbfffe5dc          3221218780
r6             0xbbbc0233          3149660723
r7             0x0                 0
r8             0x1                 1
r9             0xbfffe5d8          3221218776
r10            0xbfffe624          3221218852
r11            0xbfffe610          3221218832
r12            0x40                64
sp             0xbfffe55c          0xbfffe55c
lr             0xbbed91b8          3152908728
pc             0xbbed8c78          0xbbed8c78 <_rtld_symlook_list+24>
cpsr           0xa0000010          2684354576
(gdb) x/16i _rtld_symlook_list   
   0xbbed8c60 <_rtld_symlook_list>:     
    push        {r4, r5, r6, r7, r8, r9, r10, r11, lr}
   0xbbed8c64 <_rtld_symlook_list+4>:   ldr     r4, [r2]
   0xbbed8c68 <_rtld_symlook_list+8>:   sub     sp, sp, #20
   0xbbed8c6c <_rtld_symlook_list+12>:  cmp     r4, #0
   0xbbed8c70 <_rtld_symlook_list+16>:  ldr     r5, [sp, #64]   ; 0x40
   0xbbed8c74 <_rtld_symlook_list+20>:  str     r3, [sp, #12]
=> 0xbbed8c78 <_rtld_symlook_list+24>:  ldrd    r8, [sp, #56]   ; 0x38
   0xbbed8c7c <_rtld_symlook_list+28>:  
    beq 0xbbed8d70 <_rtld_symlook_list+272>
   0xbbed8c80 <_rtld_symlook_list+32>:  mov     r10, #0
   0xbbed8c84 <_rtld_symlook_list+36>:  mov     r7, r0
   0xbbed8c88 <_rtld_symlook_list+40>:  mov     r11, r1
   0xbbed8c8c <_rtld_symlook_list+44>:  mov     r6, r10
   0xbbed8c90 <_rtld_symlook_list+48>:  ldr     r12, [r5, #8]
   0xbbed8c94 <_rtld_symlook_list+52>:  ldr     r2, [r4, #4]
   0xbbed8c98 <_rtld_symlook_list+56>:  cmp     r12, #0
   0xbbed8c9c <_rtld_symlook_list+60>:  
    beq 0xbbed8cf0 <_rtld_symlook_list+144>


... which looks exactly like the crash gdb 13.2 dies with.

>How-To-Repeat:
s/a

>Fix:
n/a



Home | Main Index | Thread Index | Old Index