NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: toolchain/59189: leak sanitizer broken
The following reply was made to PR toolchain/59189; it has been noted by GNATS.
From: Christos Zoulas <christos%zoulas.com@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: toolchain-manager%netbsd.org@localhost,
gnats-admin%netbsd.org@localhost,
netbsd-bugs%netbsd.org@localhost
Subject: Re: toolchain/59189: leak sanitizer broken
Date: Thu, 20 Mar 2025 09:46:40 -0400
--Apple-Mail=_6B2B9F26-2CF6-49AF-8883-96257DE7A8CE
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
So it dies jumping to 0 when trying to call the real ataxit() from =
__interceptor_atexit() in the call ataxit(cleanup) from crt0.
(gdb) where
#0 0x0000000000000000 in ?? ()
#1 0x00007384ff3f44e2 in __interceptor_atexit (
f=3Df@entry=3D0x7f7ff73384cf <_rtld_exit>)
at =
/usr/src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_interceptors.cpp:38=
1
#2 0x00000000004012e7 in ___start (cleanup=3D0x7f7ff73384cf =
<_rtld_exit>,=20
ps_strings=3D0x7f7fff70afe0) at =
/usr/src/lib/csu/common/crt0-common.c:321
#3 0x00007f7ff733ef58 in ?? () from /usr/libexec/ld.elf_so
#4 0x0000000000000001 in ?? ()
#5 0x00007f7fff70a410 in ?? ()
#6 0x0000000000000000 in ?? ()
(gdb) up
#1 0x00007384ff3f44e2 in __interceptor_atexit (
f=3Df@entry=3D0x7f7ff73384cf <_rtld_exit>)
at =
/usr/src/external/gpl3/gcc/dist/libsanitizer/lsan/lsan_interceptors.cpp:38=
1
381 return REAL(__cxa_atexit)((void (*)(void *a))f, 0, 0);
Current language: auto
The current source language is "auto; currently c++".
(gdb) disassemble
Dump of assembler code for function __interceptor_atexit(void (*)()):
0x00007384ff3f44c4 <+0>: push %rbp
0x00007384ff3f44c5 <+1>: mov %rsp,%rbp
0x00007384ff3f44c8 <+4>: push %rbx
0x00007384ff3f44c9 <+5>: sub $0x8,%rsp
0x00007384ff3f44cd <+9>: mov %rdi,%rbx
0x00007384ff3f44d0 <+12>: call 0x7384ff3f9d53 =
<_ZN6__lsan19DisableInThisThreadEv>
0x00007384ff3f44d5 <+17>: xor %edx,%edx
0x00007384ff3f44d7 <+19>: xor %esi,%esi
0x00007384ff3f44d9 <+21>: mov %rbx,%rdi
0x00007384ff3f44dc <+24>: call *0x3bb3e(%rip) # =
0x7384ff430020 <_ZN14__interception17real___cxa_atexitE>
=3D> 0x00007384ff3f44e2 <+30>: mov %eax,%ebx
0x00007384ff3f44e4 <+32>: call 0x7384ff3f9d68 =
<_ZN6__lsan18EnableInThisThreadEv>
0x00007384ff3f44e9 <+37>: mov %ebx,%eax
0x00007384ff3f44eb <+39>: add $0x8,%rsp
0x00007384ff3f44ef <+43>: pop %rbx
0x00007384ff3f44f0 <+44>: pop %rbp
0x00007384ff3f44f1 <+45>: ret
End of assembler dump.
(gdb) info reg
rax 0xffffffffffffffe0 -32
rbx 0x7f7ff73384cf 140187584922831
rcx 0x4033b8 4207544
rdx 0x0 0
rsi 0x0 0
rdi 0x7f7ff73384cf 140187584922831
rbp 0x7f7fff709d50 0x7f7fff709d50
rsp 0x7f7fff709d40 0x7f7fff709d40
r8 0x10 16
r9 0x50654 329300
r10 0x7384ff984438 127015061046328
r11 0x246 582
r12 0x7f7fff70afe0 140187723149280
r13 0x403480 4207744
r14 0x7f7fff709d98 140187723144600
r15 0x104aa88 17083016
rip 0x7384ff3f44e2 0x7384ff3f44e2 =
<__interceptor_atexit(void (*)())+30>
eflags 0x10246 [ PF ZF IF RF ]
cs 0x47 71
ss 0x3f 63
ds 0x23 35
es 0x23 35
fs 0x0 0
gs 0x0 0
fs_base <unavailable>
gs_base <unavailable>
(gdb) print *(char **)(0x7384ff3f44e2+0x3bb3e)
$1 =3D 0x0
Something seems to be wrong with the relocation record of ataxit() but =
it is supposed to work
because the dynamic linking has finished. Adding -Wl,-z,now does not =
help either.
Trying to compile statically does not work at all because we are missing =
libsanitizer.spec:
[9:41am] 182>gcc -static -fsanitize=3Dleak -g -O3 lsan.c
gcc: fatal error: cannot read spec file 'libsanitizer.spec': No such =
file or directory
compilation terminated.
Providing libsanitizer.spec in /usr/lib containing:
[9:42am] 156#cat /usr/lib/libsanitizer.spec=20
# This spec file is read by gcc when linking. It is used to specify the
# standard libraries we need in order to link with various sanitizer =
libs.
*link_libasan: -lrt -lpthread -lm
*link_libhwasan: -lrt -lpthread -lm
*link_libtsan: -lrt -lpthread -lm
*link_libubsan: -lrt -lpthread -lm
*link_liblsan: -lrt -lpthread -lm
We get link errors:
[9:43am] 184>gcc -static -fsanitize=3Dleak -g -O3 lsan.c
ld: /usr/lib/libpthread.a(libpthread.a.o): in function =
`__libc_thr_create':
(.text+0x589e): multiple definition of `pthread_create'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x35b=
): first defined here
ld: /usr/lib/libpthread.a(libpthread.a.o): in function `pthread_detach':
(.text+0x6050): multiple definition of `pthread_detach'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x1b7=
): first defined here
ld: /usr/lib/libpthread.a(libpthread.a.o): in function `pthread_join':
(.text+0x5e56): multiple definition of `pthread_join'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x129=
): first defined here
ld: /usr/lib/libc.a(atexit.o): in function `__cxa_atexit':
atexit.c:(.text+0xe4): multiple definition of `__cxa_atexit'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x56)=
: first defined here
ld: /usr/lib/libc.a(atexit.o): in function `atexit':
atexit.c:(.text+0x290): multiple definition of `atexit'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x94)=
: first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `malloc':
jemalloc.c:(.text+0x921f): multiple definition of `malloc'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x1e0=
8): first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `posix_memalign':
jemalloc.c:(.text+0x92f1): multiple definition of `posix_memalign'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x7bb=
): first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `aligned_alloc':
jemalloc.c:(.text+0x997a): multiple definition of `aligned_alloc'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x5bb=
): first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `calloc':
jemalloc.c:(.text+0x9fa0): multiple definition of `calloc'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x19b=
3): first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `free':
jemalloc.c:(.text+0xabd0): multiple definition of `free'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x18d=
9): first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `valloc':
jemalloc.c:(.text+0xac86): multiple definition of `valloc'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x4c3=
): first defined here
ld: /usr/lib/libc.a(jemalloc.o): in function `realloc':
jemalloc.c:(.text+0xc53f): multiple definition of `realloc'; =
/usr/lib/liblsan.a(lsan_interceptors.o):lsan_interceptors.cpp:(.text+0x1b2=
d): first defined here
Exit 1
Should we fix them (by putting the methods in separate files? I don't =
think that it will work if we do.
Should we provide libsanitizer.spec?
christos
--Apple-Mail=_6B2B9F26-2CF6-49AF-8883-96257DE7A8CE
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=signature.asc
Content-Type: application/pgp-signature;
name=signature.asc
Content-Description: Message signed with OpenPGP
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org
iF0EARECAB0WIQS+BJlbqPkO0MDBdsRxESqxbLM7OgUCZ9wcQAAKCRBxESqxbLM7
OsEhAKCfXto9aWuS2vqltlQ5EY3y0QAICACgom/u7u4hhhimVL5sRg/4Rl5ELCo=
=bNdP
-----END PGP SIGNATURE-----
--Apple-Mail=_6B2B9F26-2CF6-49AF-8883-96257DE7A8CE--
Home |
Main Index |
Thread Index |
Old Index