Module Name: src
Committed By: bouyer
Date: Tue Aug 29 09:43:20 UTC 2017
Modified Files:
src/distrib/sets/lists/debug [netbsd-8]: mi shl.mi
src/distrib/sets/lists/tests [netbsd-8]: mi shl.mi
src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm [netbsd-8]: c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64 [netbsd-8]:
c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax [netbsd-8]: c++config.h
src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64 [netbsd-8]:
c++config.h
src/include [netbsd-8]: dlfcn.h
src/lib/libc/dlfcn [netbsd-8]: dlfcn_elf.c
src/lib/libc/stdlib [netbsd-8]: Makefile.inc exit.c
src/lib/libpthread [netbsd-8]: pthread.c
src/libexec/ld.elf_so [netbsd-8]: rtld.c rtld.h symbols.map
src/tests/lib/libpthread [netbsd-8]: Makefile
src/tests/libexec/ld.elf_so [netbsd-8]: Makefile
Added Files:
src/lib/libc/include [netbsd-8]: atexit.h
src/lib/libc/stdlib [netbsd-8]: cxa_thread_atexit.c
src/tests/libexec/ld.elf_so [netbsd-8]: h_thread_local_dtor.c
t_thread_local_dtor.sh
src/tests/libexec/ld.elf_so/helper_dso3 [netbsd-8]: Makefile
h_helper_dso3.cpp
Removed Files:
src/lib/libc/stdlib [netbsd-8]: atexit.h
Log Message:
Pull up following revision(s) (requested by joerg in ticket #127):
tests/libexec/ld.elf_so/h_thread_local_dtor.c: revision 1.1
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h: revision
1.14
external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h: revision
1.17
lib/libc/stdlib/atexit.h: file removal
lib/libc/stdlib/exit.c: revision 1.16
external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h: revision
1.8
lib/libc/stdlib/exit.c: revision 1.17
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h: revision
1.14
distrib/sets/lists/debug/shl.mi: revision 1.178
external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h: revision 1.21
distrib/sets/lists/debug/shl.mi: revision 1.179
distrib/sets/lists/debug/mi: revision 1.219
lib/libpthread/pthread.c: revision 1.150
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h: revision
1.14
libexec/ld.elf_so/symbols.map: revision 1.2
include/dlfcn.h: revision 1.25
external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h: revision 1.21
external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h: revision
1.23
external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h: revision
1.18
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h: revision
1.14
external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h: revision 1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h: revision
1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h: revision 1.5
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h: revision
1.14
external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h: revision
1.17
distrib/sets/lists/tests/mi: revision 1.755
external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h: revision
1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h: revision 1.20
external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h: revision 1.21
external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h: revision 1.21
external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h: revision 1.20
lib/libc/dlfcn/dlfcn_elf.c: revision 1.14
tests/libexec/ld.elf_so/t_thread_local_dtor.sh: revision 1.1
tests/lib/libpthread/t_thread_local_dtor.sh: revision 1.1
lib/libc/stdlib/Makefile.inc: revision 1.93
lib/libc/include/atexit.h: revision 1.1
lib/libc/include/atexit.h: revision 1.2
external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h: revision 1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h: revision
1.14
distrib/sets/lists/debug/shl.mi: revision 1.180
external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h: revision
1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h:
revision 1.14
external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h: revision 1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h:
revision 1.14
lib/libc/stdlib/cxa_thread_atexit.c: revision 1.1
tests/libexec/ld.elf_so/helper_dso3/h_helper_dso3.cpp: revision 1.1
tests/libexec/ld.elf_so/helper_dso3/Makefile: revision 1.1
external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h: revision
1.5
libexec/ld.elf_so/rtld.c: revision 1.185
external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h: revision 1.19
external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h: revision
1.5
external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h: revision
1.15
external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h: revision
1.21
external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h: revision
1.12
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h: revision
1.14
external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h: revision
1.15
external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h: revision 1.19
tests/libexec/ld.elf_so/Makefile: revision 1.9
external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h: revision
1.20
external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h: revision
1.14
tests/lib/libpthread/h_thread_local_dtor.cpp: revision 1.1
distrib/sets/lists/tests/shl.mi: revision 1.11
tests/lib/libpthread/Makefile: revision 1.13
libexec/ld.elf_so/rtld.h: revision 1.129
external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h: revision 1.6
Implement __cxa_thread_atexit and __cxa_thread_atexit_impl. This
functions are used for destructors of thread_local objects.
If a pending destructor exists, prevent unloading of shared objects.
Introduce __dl_cxa_refcount interface for this purpose. When the last
reference is gone and the object has been dlclose'd before, the
unloading is finalized.
Ideally, __cxa_thread_atexit_impl wouldn't exist, but libstdc++ insists
on providing __cxa_thread_atexit as direct wrapper without further
patching.
Fix filename of new debug file
Add misising DEBUGLIB file
Avoid common declaration.
Drop TLS variant checks, emutls is enough for VAX and Sun2.
To generate a diff of this commit:
cvs rdiff -u -r1.216.2.1 -r1.216.2.2 src/distrib/sets/lists/debug/mi
cvs rdiff -u -r1.176.2.1 -r1.176.2.2 src/distrib/sets/lists/debug/shl.mi
cvs rdiff -u -r1.752 -r1.752.2.1 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.10 -r1.10.8.1 src/distrib/sets/lists/tests/shl.mi
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h
cvs rdiff -u -r1.20 -r1.20.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h
cvs rdiff -u -r1.20 -r1.20.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h
cvs rdiff -u -r1.11 -r1.11.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h
cvs rdiff -u -r1.16 -r1.16.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h
cvs rdiff -u -r1.16 -r1.16.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h
cvs rdiff -u -r1.14 -r1.14.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h
cvs rdiff -u -r1.19 -r1.19.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h
cvs rdiff -u -r1.4 -r1.4.8.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h
cvs rdiff -u -r1.13 -r1.13.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h
cvs rdiff -u -r1.17 -r1.17.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h
cvs rdiff -u -r1.20 -r1.20.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h
cvs rdiff -u -r1.5 -r1.5.8.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h
cvs rdiff -u -r1.19 -r1.19.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h
cvs rdiff -u -r1.7 -r1.7.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h
cvs rdiff -u -r1.4 -r1.4.8.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h
cvs rdiff -u -r1.4 -r1.4.8.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h
cvs rdiff -u -r1.20 -r1.20.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h
cvs rdiff -u -r1.19 -r1.19.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h
cvs rdiff -u -r1.18 -r1.18.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h
cvs rdiff -u -r1.20 -r1.20.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h
cvs rdiff -u -r1.22 -r1.22.6.1 \
src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h
cvs rdiff -u -r1.24 -r1.24.24.1 src/include/dlfcn.h
cvs rdiff -u -r1.13 -r1.13.24.1 src/lib/libc/dlfcn/dlfcn_elf.c
cvs rdiff -u -r0 -r1.2.2.2 src/lib/libc/include/atexit.h
cvs rdiff -u -r1.92 -r1.92.8.1 src/lib/libc/stdlib/Makefile.inc
cvs rdiff -u -r1.11 -r0 src/lib/libc/stdlib/atexit.h
cvs rdiff -u -r0 -r1.1.4.2 src/lib/libc/stdlib/cxa_thread_atexit.c
cvs rdiff -u -r1.15 -r1.15.36.1 src/lib/libc/stdlib/exit.c
cvs rdiff -u -r1.147 -r1.147.8.1 src/lib/libpthread/pthread.c
cvs rdiff -u -r1.183.4.1 -r1.183.4.2 src/libexec/ld.elf_so/rtld.c
cvs rdiff -u -r1.126.6.2 -r1.126.6.3 src/libexec/ld.elf_so/rtld.h
cvs rdiff -u -r1.1 -r1.1.8.1 src/libexec/ld.elf_so/symbols.map
cvs rdiff -u -r1.12 -r1.12.6.1 src/tests/lib/libpthread/Makefile
cvs rdiff -u -r1.8 -r1.8.8.1 src/tests/libexec/ld.elf_so/Makefile
cvs rdiff -u -r0 -r1.2.2.2 src/tests/libexec/ld.elf_so/h_thread_local_dtor.c
cvs rdiff -u -r0 -r1.1.4.2 src/tests/libexec/ld.elf_so/t_thread_local_dtor.sh
cvs rdiff -u -r0 -r1.1.4.2 src/tests/libexec/ld.elf_so/helper_dso3/Makefile \
src/tests/libexec/ld.elf_so/helper_dso3/h_helper_dso3.cpp
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/debug/mi
diff -u src/distrib/sets/lists/debug/mi:1.216.2.1 src/distrib/sets/lists/debug/mi:1.216.2.2
--- src/distrib/sets/lists/debug/mi:1.216.2.1 Tue Jul 18 17:32:50 2017
+++ src/distrib/sets/lists/debug/mi Tue Aug 29 09:43:16 2017
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.216.2.1 2017/07/18 17:32:50 snj Exp $
+# $NetBSD: mi,v 1.216.2.2 2017/08/29 09:43:16 bouyer Exp $
./etc/mtree/set.debug comp-sys-root
./usr/lib comp-sys-usr compatdir
./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile
@@ -2196,6 +2196,7 @@
./usr/libdata/debug/usr/tests/lib/libpthread/h_cancel.debug tests-lib-tests debug,atf,compattestfile
./usr/libdata/debug/usr/tests/lib/libpthread/h_exit.debug tests-lib-tests debug,atf,compattestfile
./usr/libdata/debug/usr/tests/lib/libpthread/h_resolv.debug tests-lib-tests debug,atf,compattestfile
+./usr/libdata/debug/usr/tests/lib/libpthread/h_thread_local_dtor.debug tests-lib-tests debug,atf,compattestfile
./usr/libdata/debug/usr/tests/lib/libpthread/t_barrier.debug tests-lib-tests debug,atf,compattestfile
./usr/libdata/debug/usr/tests/lib/libpthread/t_cond.debug tests-lib-tests debug,atf,compattestfile
./usr/libdata/debug/usr/tests/lib/libpthread/t_condwait.debug tests-lib-tests debug,atf,compattestfile
Index: src/distrib/sets/lists/debug/shl.mi
diff -u src/distrib/sets/lists/debug/shl.mi:1.176.2.1 src/distrib/sets/lists/debug/shl.mi:1.176.2.2
--- src/distrib/sets/lists/debug/shl.mi:1.176.2.1 Wed Jun 21 18:03:17 2017
+++ src/distrib/sets/lists/debug/shl.mi Tue Aug 29 09:43:16 2017
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.176.2.1 2017/06/21 18:03:17 snj Exp $
+# $NetBSD: shl.mi,v 1.176.2.2 2017/08/29 09:43:16 bouyer Exp $
./usr/lib/libbfd_g.a comp-c-debuglib debuglib,compatfile,binutils
./usr/libdata/debug/lib base-sys-usr debug,dynamicroot,compatdir
./usr/libdata/debug/lib/libblacklist.so.0.0.debug comp-sys-debug debug,dynamicroot
@@ -307,12 +307,16 @@
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/h_helper_symver_dso0/libh_helper_symver_dso.so.1.debug tests-libexec-debug debug,compattestfile,atf
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/h_helper_symver_dso1/libh_helper_symver_dso.so.1.debug tests-libexec-debug debug,compattestfile,atf
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/h_helper_symver_dso2/libh_helper_symver_dso.so.1.debug tests-libexec-debug debug,compattestfile,atf
+./usr/libdata/debug/usr/tests/libexec/ld.elf_so/h_thread_local_dtor.debug tests-libexec-debug debug,compattestfile,atf
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/libh_helper_dso1.so.1.debug tests-libexec-debug debug,compattestfile,atf
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/libh_helper_dso2.so.1.debug tests-libexec-debug debug,compattestfile,atf
+./usr/libdata/debug/usr/tests/libexec/ld.elf_so/libh_helper_dso3.so.1.debug tests-libexec-debug debug,compattestfile,atf
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/libh_helper_ifunc_dso.so.1.debug tests-libexec-debug debug,compattestfile,atf
./usr/tests/libexec/ld.elf_so/h_helper_symver_dso0/libh_helper_symver_dso_g.a comp-c-debuglib atf,debuglib,compattestfile
./usr/tests/libexec/ld.elf_so/h_helper_symver_dso1/libh_helper_symver_dso_g.a comp-c-debuglib atf,debuglib,compattestfile
./usr/tests/libexec/ld.elf_so/h_helper_symver_dso2/libh_helper_symver_dso_g.a comp-c-debuglib atf,debuglib,compattestfile
./usr/tests/libexec/ld.elf_so/libh_helper_dso1_g.a comp-c-debuglib atf,debuglib,compattestfile
./usr/tests/libexec/ld.elf_so/libh_helper_dso2_g.a comp-c-debuglib atf,debuglib,compattestfile
+./usr/tests/libexec/ld.elf_so/libh_helper_dso3_g.a comp-c-debuglib atf,debuglib,compattestfile
./usr/tests/libexec/ld.elf_so/libh_helper_ifunc_dso_g.a comp-c-debuglib atf,debuglib,compattestfile
+
Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.752 src/distrib/sets/lists/tests/mi:1.752.2.1
--- src/distrib/sets/lists/tests/mi:1.752 Thu Jun 1 15:45:02 2017
+++ src/distrib/sets/lists/tests/mi Tue Aug 29 09:43:17 2017
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.752 2017/06/01 15:45:02 perseant Exp $
+# $NetBSD: mi,v 1.752.2.1 2017/08/29 09:43:17 bouyer Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -3043,6 +3043,7 @@
./usr/tests/lib/libpthread/h_cancel tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/h_exit tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/h_resolv tests-lib-tests compattestfile,atf
+./usr/tests/lib/libpthread/h_thread_local_dtor tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/t_atexit tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/t_barrier tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/t_cancel tests-lib-tests compattestfile,atf
@@ -3068,6 +3069,7 @@
./usr/tests/lib/libpthread/t_sleep tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/t_status tests-obsolete obsolete
./usr/tests/lib/libpthread/t_swapcontext tests-lib-tests compattestfile,atf
+./usr/tests/lib/libpthread/t_thread_local_dtor tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread/t_timedmutex tests-lib-tests compattestfile,atf
./usr/tests/lib/libpthread_dbg tests-obsolete obsolete
./usr/tests/lib/libpthread_dbg/Atffile tests-obsolete obsolete
@@ -3205,6 +3207,7 @@
./usr/tests/libexec/ld.elf_so/h_helper_symver_dso2 tests-libexec-tests compattestfile,atf
./usr/tests/libexec/ld.elf_so/h_ifunc tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/h_locking tests-libexec-tests compattestfile,atf,pic
+./usr/tests/libexec/ld.elf_so/h_thread_local_dtor tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_df_1_noopen tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_dl_symver tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_dlerror-cleared tests-libexec-tests compattestfile,atf,pic
@@ -3212,6 +3215,7 @@
./usr/tests/libexec/ld.elf_so/t_dlinfo tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_dlvsym tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_ifunc tests-libexec-tests compattestfile,atf,pic
+./usr/tests/libexec/ld.elf_so/t_thread_local_dtor tests-libexec-tests compattestfile,atf,pic
./usr/tests/modules tests-sys-tests compattestfile,atf
./usr/tests/net tests-net-tests compattestfile,atf
./usr/tests/net/Atffile tests-net-tests compattestfile,atf
Index: src/distrib/sets/lists/tests/shl.mi
diff -u src/distrib/sets/lists/tests/shl.mi:1.10 src/distrib/sets/lists/tests/shl.mi:1.10.8.1
--- src/distrib/sets/lists/tests/shl.mi:1.10 Mon Jun 22 06:02:02 2015
+++ src/distrib/sets/lists/tests/shl.mi Tue Aug 29 09:43:18 2017
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.10 2015/06/22 06:02:02 matt Exp $
+# $NetBSD: shl.mi,v 1.10.8.1 2017/08/29 09:43:18 bouyer Exp $
#
./usr/tests/lib/csu/h_initfini3_dso.so tests-lib-tests compattestfile,atf
./usr/tests/lib/csu/h_initfini3_dso.so.1 tests-lib-tests compattestfile,atf
@@ -20,6 +20,8 @@
./usr/tests/libexec/ld.elf_so/libh_helper_dso1.so.1 tests-libexec-tests compattestfile,atf
./usr/tests/libexec/ld.elf_so/libh_helper_dso2.so tests-libexec-tests compattestfile,atf
./usr/tests/libexec/ld.elf_so/libh_helper_dso2.so.1 tests-libexec-tests compattestfile,atf
+./usr/tests/libexec/ld.elf_so/libh_helper_dso3.so tests-libexec-tests compattestfile,atf
+./usr/tests/libexec/ld.elf_so/libh_helper_dso3.so.1 tests-libexec-tests compattestfile,atf
./usr/tests/libexec/ld.elf_so/libh_helper_ifunc_dso.so tests-libexec-tests compattestfile,atf
./usr/tests/libexec/ld.elf_so/libh_helper_ifunc_dso.so.1 tests-libexec-tests compattestfile,atf
./usr/tests/util/id/libfake.so.0 tests-obsolete obsolete
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h:1.18 Tue Oct 18 01:32:56 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h Tue Aug 29 09:43:20 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h:1.20 src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h:1.20.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h:1.20 Tue Oct 18 01:32:56 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h:1.20 src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h:1.20.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h:1.20 Tue Oct 18 01:32:56 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h:1.11 src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h:1.11.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h:1.11 Tue Oct 18 01:32:56 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h:1.18 Tue Oct 18 01:32:56 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h:1.16 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h:1.16.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h:1.16 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h Tue Aug 29 09:43:16 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h:1.16 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h:1.16.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h:1.16 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h:1.14 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h:1.14.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h:1.14 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h Tue Aug 29 09:43:20 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h Tue Aug 29 09:43:16 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h Tue Aug 29 09:43:16 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h:1.13 Tue Oct 18 01:32:57 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h Tue Aug 29 09:43:20 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h:1.13 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h Tue Aug 29 09:43:16 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h:1.13 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h:1.18 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h:1.19 src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h:1.19.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h:1.19 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h:1.4 src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h:1.4.8.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h:1.4 Thu Jun 30 01:44:49 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h:1.13 src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h:1.13.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h:1.13 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h:1.18 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h:1.18 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h:1.17 src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h:1.17.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h:1.17 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h:1.20 src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h:1.20.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h:1.20 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h:1.18 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h:1.5 src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h:1.5.8.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h:1.5 Sat Jan 10 22:59:40 2015
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h Tue Aug 29 09:43:20 2017
@@ -1132,7 +1132,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h:1.19 src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h:1.19.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h:1.19 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h Tue Aug 29 09:43:20 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h:1.7 src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h:1.7.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h:1.7 Tue Oct 18 01:32:58 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h Tue Aug 29 09:43:16 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h:1.4 src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h:1.4.8.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h:1.4 Sat Jan 10 22:59:40 2015
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h Tue Aug 29 09:43:19 2017
@@ -1132,7 +1132,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h:1.4 src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h:1.4.8.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h:1.4 Sat Jan 10 22:59:40 2015
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h Tue Aug 29 09:43:19 2017
@@ -1132,7 +1132,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h:1.18 Tue Oct 18 01:32:59 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h Tue Aug 29 09:43:19 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h:1.20 src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h:1.20.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h:1.20 Tue Oct 18 01:32:59 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h Tue Aug 29 09:43:16 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h:1.19 src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h:1.19.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h:1.19 Tue Oct 18 01:32:59 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h:1.18 src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h:1.18.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h:1.18 Tue Oct 18 01:32:59 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h:1.20 src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h:1.20.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h:1.20 Tue Oct 18 01:32:59 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h Tue Aug 29 09:43:18 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h
diff -u src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h:1.22 src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h:1.22.6.1
--- src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h:1.22 Tue Oct 18 01:32:59 2016
+++ src/external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h Tue Aug 29 09:43:17 2017
@@ -1203,7 +1203,7 @@ namespace std
/* #undef _GLIBCXX_HAVE__TANL */
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
-/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
+#define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
/* Define as const if the declaration of iconv() needs const. */
#define _GLIBCXX_ICONV_CONST const
Index: src/include/dlfcn.h
diff -u src/include/dlfcn.h:1.24 src/include/dlfcn.h:1.24.24.1
--- src/include/dlfcn.h:1.24 Thu Feb 16 23:00:39 2012
+++ src/include/dlfcn.h Tue Aug 29 09:43:17 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: dlfcn.h,v 1.24 2012/02/16 23:00:39 joerg Exp $ */
+/* $NetBSD: dlfcn.h,v 1.24.24.1 2017/08/29 09:43:17 bouyer Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -34,6 +34,12 @@
#include <sys/featuretest.h>
#include <sys/cdefs.h>
+#include <machine/ansi.h>
+
+#ifdef _BSD_SSIZE_T_
+typedef _BSD_SSIZE_T_ ssize_t;
+#undef _BSD_SSIZE_T_
+#endif
#if defined(_NETBSD_SOURCE)
typedef struct _dl_info {
@@ -59,6 +65,7 @@ int dlctl(void *, int, void *);
int dlinfo(void *, int, void *);
void *dlvsym(void * __restrict, const char * __restrict,
const char * __restrict);
+void __dl_cxa_refcount(void *, ssize_t);
#endif
__aconst char *dlerror(void);
__END_DECLS
Index: src/lib/libc/dlfcn/dlfcn_elf.c
diff -u src/lib/libc/dlfcn/dlfcn_elf.c:1.13 src/lib/libc/dlfcn/dlfcn_elf.c:1.13.24.1
--- src/lib/libc/dlfcn/dlfcn_elf.c:1.13 Sun Jun 24 15:26:03 2012
+++ src/lib/libc/dlfcn/dlfcn_elf.c Tue Aug 29 09:43:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: dlfcn_elf.c,v 1.13 2012/06/24 15:26:03 christos Exp $ */
+/* $NetBSD: dlfcn_elf.c,v 1.13.24.1 2017/08/29 09:43:18 bouyer Exp $ */
/*
* Copyright (c) 2000 Takuya SHIOZAKI
@@ -27,7 +27,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: dlfcn_elf.c,v 1.13 2012/06/24 15:26:03 christos Exp $");
+__RCSID("$NetBSD: dlfcn_elf.c,v 1.13.24.1 2017/08/29 09:43:18 bouyer Exp $");
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
@@ -75,6 +75,7 @@ __weak_alias(__dlerror,___dlerror)
__weak_alias(__dladdr,___dladdr)
__weak_alias(__dlinfo,___dlinfo)
__weak_alias(__dl_iterate_phdr,___dl_iterate_phdr)
+__weak_alias(__dl_cxa_refcount, ___dl_cxa_refcount)
#endif
/*
@@ -203,3 +204,11 @@ dl_iterate_phdr(int (*callback)(struct d
return callback(&phdr_info, sizeof(phdr_info), data);
}
+
+void ___dl_cxa_refcount(void *, ssize_t);
+
+/*ARGSUSED*/
+void
+___dl_cxa_refcount(void *dso_symbol, ssize_t delta)
+{
+}
Index: src/lib/libc/stdlib/Makefile.inc
diff -u src/lib/libc/stdlib/Makefile.inc:1.92 src/lib/libc/stdlib/Makefile.inc:1.92.8.1
--- src/lib/libc/stdlib/Makefile.inc:1.92 Fri Apr 1 12:37:48 2016
+++ src/lib/libc/stdlib/Makefile.inc Tue Aug 29 09:43:16 2017
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.inc,v 1.92 2016/04/01 12:37:48 msaitoh Exp $
+# $NetBSD: Makefile.inc,v 1.92.8.1 2017/08/29 09:43:16 bouyer Exp $
# from: @(#)Makefile.inc 8.3 (Berkeley) 2/4/95
# stdlib sources
@@ -6,7 +6,7 @@
SRCS+= _env.c _rand48.c \
a64l.c abort.c aligned_alloc.c atexit.c atof.c atoi.c atol.c atoll.c \
- bsearch.c drand48.c exit.c \
+ bsearch.c cxa_thread_atexit.c drand48.c exit.c \
getenv.c getopt.c getopt_long.c getsubopt.c \
hcreate.c heapsort.c imaxdiv.c insque.c jrand48.c l64a.c lldiv.c \
lcong48.c lrand48.c lsearch.c merge.c mi_vector_hash.c mrand48.c \
Index: src/lib/libc/stdlib/exit.c
diff -u src/lib/libc/stdlib/exit.c:1.15 src/lib/libc/stdlib/exit.c:1.15.36.1
--- src/lib/libc/stdlib/exit.c:1.15 Wed May 18 19:36:36 2011
+++ src/lib/libc/stdlib/exit.c Tue Aug 29 09:43:16 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: exit.c,v 1.15 2011/05/18 19:36:36 dsl Exp $ */
+/* $NetBSD: exit.c,v 1.15.36.1 2017/08/29 09:43:16 bouyer Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)exit.c 8.1 (Berkeley) 6/4/93";
#else
-__RCSID("$NetBSD: exit.c,v 1.15 2011/05/18 19:36:36 dsl Exp $");
+__RCSID("$NetBSD: exit.c,v 1.15.36.1 2017/08/29 09:43:16 bouyer Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -55,6 +55,8 @@ exit(int status)
{
#ifdef _LIBC
+ if (__cxa_thread_atexit_used)
+ __cxa_thread_run_atexit();
__cxa_finalize(NULL);
#endif
if (__cleanup)
Index: src/lib/libpthread/pthread.c
diff -u src/lib/libpthread/pthread.c:1.147 src/lib/libpthread/pthread.c:1.147.8.1
--- src/lib/libpthread/pthread.c:1.147 Fri May 29 16:05:13 2015
+++ src/lib/libpthread/pthread.c Tue Aug 29 09:43:16 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: pthread.c,v 1.147 2015/05/29 16:05:13 christos Exp $ */
+/* $NetBSD: pthread.c,v 1.147.8.1 2017/08/29 09:43:16 bouyer Exp $ */
/*-
* Copyright (c) 2001, 2002, 2003, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread.c,v 1.147 2015/05/29 16:05:13 christos Exp $");
+__RCSID("$NetBSD: pthread.c,v 1.147.8.1 2017/08/29 09:43:16 bouyer Exp $");
#define __EXPOSE_STACK 1
@@ -57,6 +57,7 @@ __RCSID("$NetBSD: pthread.c,v 1.147 2015
#include <unistd.h>
#include <sched.h>
+#include "atexit.h"
#include "pthread.h"
#include "pthread_int.h"
#include "pthread_makelwp.h"
@@ -638,6 +639,10 @@ pthread_exit(void *retval)
pthread_mutex_lock(&self->pt_lock);
}
+ pthread_mutex_unlock(&self->pt_lock);
+ __cxa_thread_run_atexit();
+ pthread_mutex_lock(&self->pt_lock);
+
/* Perform cleanup of thread-specific data */
pthread__destroy_tsd(self);
Index: src/libexec/ld.elf_so/rtld.c
diff -u src/libexec/ld.elf_so/rtld.c:1.183.4.1 src/libexec/ld.elf_so/rtld.c:1.183.4.2
--- src/libexec/ld.elf_so/rtld.c:1.183.4.1 Sat Jun 10 06:27:51 2017
+++ src/libexec/ld.elf_so/rtld.c Tue Aug 29 09:43:17 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rtld.c,v 1.183.4.1 2017/06/10 06:27:51 snj Exp $ */
+/* $NetBSD: rtld.c,v 1.183.4.2 2017/08/29 09:43:17 bouyer Exp $ */
/*
* Copyright 1996 John D. Polstra.
@@ -40,7 +40,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: rtld.c,v 1.183.4.1 2017/06/10 06:27:51 snj Exp $");
+__RCSID("$NetBSD: rtld.c,v 1.183.4.2 2017/08/29 09:43:17 bouyer Exp $");
#endif /* not lint */
#include <sys/param.h>
@@ -1425,6 +1425,45 @@ dl_iterate_phdr(int (*callback)(struct d
return error;
}
+void
+__dl_cxa_refcount(void *addr, ssize_t delta)
+{
+ sigset_t mask;
+ Obj_Entry *obj;
+
+ if (delta == 0)
+ return;
+
+ dbg(("__dl_cxa_refcount of %p with %zd", addr, delta));
+
+ _rtld_exclusive_enter(&mask);
+ obj = _rtld_obj_from_addr(addr);
+
+ if (obj == NULL) {
+ dbg(("__dl_cxa_refcont: address not found"));
+ _rtld_error("No shared object contains address");
+ _rtld_exclusive_exit(&mask);
+ return;
+ }
+ if (delta > 0 && obj->cxa_refcount > SIZE_MAX - delta)
+ _rtld_error("Reference count overflow");
+ else if (delta < 0 && obj->cxa_refcount < -1 + (size_t)-(delta + 1))
+ _rtld_error("Reference count underflow");
+ else {
+ if (obj->cxa_refcount == 0)
+ ++obj->refcount;
+ obj->cxa_refcount += delta;
+ dbg(("new reference count: %zu", obj->cxa_refcount));
+ if (obj->cxa_refcount == 0) {
+ --obj->refcount;
+ if (obj->refcount == 0)
+ _rtld_unload_object(&mask, obj, true);
+ }
+ }
+
+ _rtld_exclusive_exit(&mask);
+}
+
/*
* Error reporting function. Use it like printf. If formats the message
* into a buffer, and sets things up so that the next call to dlerror()
Index: src/libexec/ld.elf_so/rtld.h
diff -u src/libexec/ld.elf_so/rtld.h:1.126.6.2 src/libexec/ld.elf_so/rtld.h:1.126.6.3
--- src/libexec/ld.elf_so/rtld.h:1.126.6.2 Mon Jul 24 06:15:54 2017
+++ src/libexec/ld.elf_so/rtld.h Tue Aug 29 09:43:17 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rtld.h,v 1.126.6.2 2017/07/24 06:15:54 snj Exp $ */
+/* $NetBSD: rtld.h,v 1.126.6.3 2017/08/29 09:43:17 bouyer Exp $ */
/*
* Copyright 1996 John D. Polstra.
@@ -298,6 +298,7 @@ typedef struct Struct_Obj_Entry {
size_t init_arraysz; /* # of entries in it */
Elf_Addr *fini_array; /* start of fini array */
size_t fini_arraysz; /* # of entries in it */
+ size_t cxa_refcount; /* For TLS destructors. */
#ifdef __ARM_EABI__
void *exidx_start;
size_t exidx_sz;
@@ -355,6 +356,7 @@ __dso_public int dl_iterate_phdr(int (*)
void *);
__dso_public void *_dlauxinfo(void) __pure;
+__dso_public void __dl_cxa_refcount(void *addr, ssize_t delta);
#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
/*
Index: src/libexec/ld.elf_so/symbols.map
diff -u src/libexec/ld.elf_so/symbols.map:1.1 src/libexec/ld.elf_so/symbols.map:1.1.8.1
--- src/libexec/ld.elf_so/symbols.map:1.1 Thu Dec 1 14:29:15 2016
+++ src/libexec/ld.elf_so/symbols.map Tue Aug 29 09:43:17 2017
@@ -22,5 +22,6 @@
__tls_get_addr;
___tls_get_addr;
__gnu_Unwind_Find_exidx;
+ __dl_cxa_refcount;
local: *;
};
Index: src/tests/lib/libpthread/Makefile
diff -u src/tests/lib/libpthread/Makefile:1.12 src/tests/lib/libpthread/Makefile:1.12.6.1
--- src/tests/lib/libpthread/Makefile:1.12 Sun Oct 30 16:17:16 2016
+++ src/tests/lib/libpthread/Makefile Tue Aug 29 09:43:18 2017
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.12 2016/10/30 16:17:16 kamil Exp $
+# $NetBSD: Makefile,v 1.12.6.1 2017/08/29 09:43:18 bouyer Exp $
NOMAN= # defined
@@ -38,6 +38,7 @@ TESTS_C+= t_sigsuspend
TESTS_C+= t_siglongjmp
TESTS_C+= t_sleep
TESTS_C+= t_swapcontext
+TESTS_SH+= t_thread_local_dtor
TESTS_C+= t_timedmutex
LDADD.t_sem+= -lrt
@@ -47,6 +48,11 @@ PROGS= h_atexit
PROGS+= h_cancel
PROGS+= h_exit
PROGS+= h_resolv
+PROGS_CXX+= h_thread_local_dtor
+
+COPTS.h_thread_local_dtor.cpp+= -std=c++11
+# Deal with questionable warning and header quality in libstdc++.
+COPTS.h_thread_local_dtor.cpp+= ${${ACTIVE_CC} == "gcc" :? -Wno-ctor-dtor-privacy -Wno-sign-compare -Wno-shadow :}
FILESDIR= ${TESTSDIR}
FILES= d_mach
Index: src/tests/libexec/ld.elf_so/Makefile
diff -u src/tests/libexec/ld.elf_so/Makefile:1.8 src/tests/libexec/ld.elf_so/Makefile:1.8.8.1
--- src/tests/libexec/ld.elf_so/Makefile:1.8 Mon Aug 25 20:40:53 2014
+++ src/tests/libexec/ld.elf_so/Makefile Tue Aug 29 09:43:16 2017
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.8 2014/08/25 20:40:53 joerg Exp $
+# $NetBSD: Makefile,v 1.8.8.1 2017/08/29 09:43:16 bouyer Exp $
#
NOMAN= # defined
@@ -7,7 +7,7 @@ NOMAN= # defined
.if ${MKPIC} != "no"
-SUBDIR+= helper_dso1 .WAIT helper_dso2 .WAIT \
+SUBDIR+= helper_dso1 helper_dso3 .WAIT helper_dso2 .WAIT \
helper_ifunc_dso \
helper_symver_dso0 .WAIT helper_symver_dso1 .WAIT \
helper_symver_dso2 .WAIT \
@@ -22,7 +22,7 @@ LDADD.t_dlvsym= -Wl,-rpath,${TESTSDIR}/
LDADD.t_ifunc= -Wl,-rpath,${TESTSDIR} -lutil
DPADD.t_ifunc= ${LIBUTIL}
-TESTS_SH+= t_df_1_noopen t_dl_symver
+TESTS_SH+= t_df_1_noopen t_dl_symver t_thread_local_dtor
BINDIR= ${TESTSDIR}
PROGS+= h_df_1_noopen1
@@ -32,6 +32,9 @@ PROGS+= h_df_1_noopen2
SRCS.h_df_1_noopen2= h_df_1_noopen.c
LDADD.h_df_1_noopen2= -lpthread
+PROGS+= h_thread_local_dtor
+LDADD.h_thread_local_dtor= -Wl,-rpath,${TESTSDIR} -lpthread
+
PROGS+= h_ifunc
SRCS.h_ifunc= h_ifunc.c
IFUNCDIR!= cd ${.CURDIR}/helper_ifunc_dso && ${PRINTOBJDIR}
Added files:
Index: src/lib/libc/include/atexit.h
diff -u /dev/null src/lib/libc/include/atexit.h:1.2.2.2
--- /dev/null Tue Aug 29 09:43:21 2017
+++ src/lib/libc/include/atexit.h Tue Aug 29 09:43:18 2017
@@ -0,0 +1,41 @@
+/* $NetBSD: atexit.h,v 1.2.2.2 2017/08/29 09:43:18 bouyer Exp $ */
+
+/*-
+ * Copyright (c) 2003 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdbool.h>
+
+int __cxa_atexit(void (*)(void *), void *, void *);
+void __cxa_finalize(void *);
+void __cxa_thread_run_atexit(void);
+int __cxa_thread_atexit(void (*)(void *), void *, void *);
+
+#ifdef _LIBC
+extern __dso_hidden bool __cxa_thread_atexit_used;
+#endif
Index: src/lib/libc/stdlib/cxa_thread_atexit.c
diff -u /dev/null src/lib/libc/stdlib/cxa_thread_atexit.c:1.1.4.2
--- /dev/null Tue Aug 29 09:43:21 2017
+++ src/lib/libc/stdlib/cxa_thread_atexit.c Tue Aug 29 09:43:16 2017
@@ -0,0 +1,88 @@
+/* $NetBSD: cxa_thread_atexit.c,v 1.1.4.2 2017/08/29 09:43:16 bouyer Exp $ */
+
+/*-
+ * Copyright (c) 2017 Joerg Sonnenberger <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: cxa_thread_atexit.c,v 1.1.4.2 2017/08/29 09:43:16 bouyer Exp $");
+
+#include <sys/queue.h>
+#include <dlfcn.h>
+#include <stdlib.h>
+
+#include "atexit.h"
+
+__dso_hidden bool __cxa_thread_atexit_used;
+
+struct cxa_dtor {
+ SLIST_ENTRY(cxa_dtor) link;
+ void *dso_symbol;
+ void *obj;
+ void (*dtor)(void *);
+};
+
+/* Assumes NULL initialization. */
+static __thread SLIST_HEAD(, cxa_dtor) cxa_dtors = SLIST_HEAD_INITIALIZER(cxa_dstors);
+
+void
+__cxa_thread_run_atexit(void)
+{
+ struct cxa_dtor *entry;
+
+ while ((entry = SLIST_FIRST(&cxa_dtors)) != NULL) {
+ SLIST_REMOVE_HEAD(&cxa_dtors, link);
+ (*entry->dtor)(entry->obj);
+ if (entry->dso_symbol)
+ __dl_cxa_refcount(entry->dso_symbol, -1);
+ free(entry);
+ }
+}
+
+/*
+ * This dance is necessary since libstdc++ includes
+ * __cxa_thread_atexit unconditionally.
+ */
+__weak_alias(__cxa_thread_atexit, __cxa_thread_atexit_impl)
+int __cxa_thread_atexit_impl(void (*)(void *), void *, void *);
+
+int
+__cxa_thread_atexit_impl(void (*dtor)(void *), void *obj, void *dso_symbol)
+{
+ struct cxa_dtor *entry;
+
+ __cxa_thread_atexit_used = true;
+
+ entry = malloc(sizeof(*entry));
+ if (entry == NULL)
+ return -1;
+ entry->dso_symbol = dso_symbol;
+ if (dso_symbol)
+ __dl_cxa_refcount(entry->dso_symbol, 1);
+ entry->obj = obj;
+ entry->dtor = dtor;
+ SLIST_INSERT_HEAD(&cxa_dtors, entry, link);
+ return 0;
+}
Index: src/tests/libexec/ld.elf_so/h_thread_local_dtor.c
diff -u /dev/null src/tests/libexec/ld.elf_so/h_thread_local_dtor.c:1.2.2.2
--- /dev/null Tue Aug 29 09:43:21 2017
+++ src/tests/libexec/ld.elf_so/h_thread_local_dtor.c Tue Aug 29 09:43:16 2017
@@ -0,0 +1,92 @@
+/*-
+ * Copyright (c) 2017 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Joerg Sonnenberger.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <dlfcn.h>
+#include <err.h>
+#include <pthread.h>
+#include <stdio.h>
+
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER;
+static pthread_cond_t cond2 = PTHREAD_COND_INITIALIZER;
+
+static void *
+thread_helper(void *arg)
+{
+ void (*testfunc)(void) = arg;
+ testfunc();
+
+ pthread_mutex_lock(&mutex);
+ pthread_cond_broadcast(&cond1);
+ pthread_mutex_unlock(&mutex);
+
+ pthread_mutex_lock(&mutex);
+ pthread_cond_wait(&cond2, &mutex);
+ pthread_mutex_unlock(&mutex);
+
+ return NULL;
+}
+
+int
+main(void)
+{
+ void *dso;
+ void (*testfunc)(void);
+ pthread_t thread;
+
+ dso = dlopen("libh_helper_dso3.so", RTLD_LAZY);
+ if (dso == NULL)
+ errx(1, "%s", dlerror());
+ testfunc = dlsym(dso, "testfunc");
+ if (testfunc == NULL)
+ errx(1, "%s", dlerror());
+
+ pthread_mutex_lock(&mutex);
+
+ if (pthread_create(&thread, NULL, thread_helper, testfunc))
+ err(1, "pthread_create");
+
+ pthread_cond_wait(&cond1, &mutex);
+ pthread_mutex_unlock(&mutex);
+
+ pthread_mutex_lock(&mutex);
+ pthread_cond_signal(&cond2);
+ pthread_mutex_unlock(&mutex);
+
+ printf("before dlclose\n");
+ dlclose(dso);
+ printf("after dlclose\n");
+ dso = dlopen("libh_helper_dso3.so", RTLD_LAZY);
+ if (dso == NULL)
+ errx(1, "%s", dlerror());
+ dlclose(dso);
+ if (pthread_join(thread, NULL))
+ err(1, "pthread_join");
+ return 0;
+}
Index: src/tests/libexec/ld.elf_so/t_thread_local_dtor.sh
diff -u /dev/null src/tests/libexec/ld.elf_so/t_thread_local_dtor.sh:1.1.4.2
--- /dev/null Tue Aug 29 09:43:21 2017
+++ src/tests/libexec/ld.elf_so/t_thread_local_dtor.sh Tue Aug 29 09:43:16 2017
@@ -0,0 +1,54 @@
+# $NetBSD: t_thread_local_dtor.sh,v 1.1.4.2 2017/08/29 09:43:16 bouyer Exp $
+#
+# Copyright (c) 2017 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+atf_test_case thread_local_dtor
+thread_local_dtor_head()
+{
+ atf_set "descr" "Checks dlclose vs thread_local"
+}
+thread_local_dtor_body()
+{
+ $(atf_get_srcdir)/h_thread_local_dtor >out \
+ || atf_fail "h_thread_local_dtor failed, see output of the test for details"
+
+ cat >exp <<EOF
+in ctor: global_dtor
+in ctor: thread_local
+before dlclose
+after dlclose
+in dtor: thread_local
+in dtor: global_dtor
+EOF
+
+ diff -Nru exp out \
+ || atf_fail "h_thread_local_dtor failed, see output of the test for details"
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case thread_local_dtor
+}
Index: src/tests/libexec/ld.elf_so/helper_dso3/Makefile
diff -u /dev/null src/tests/libexec/ld.elf_so/helper_dso3/Makefile:1.1.4.2
--- /dev/null Tue Aug 29 09:43:21 2017
+++ src/tests/libexec/ld.elf_so/helper_dso3/Makefile Tue Aug 29 09:43:19 2017
@@ -0,0 +1,22 @@
+# $NetBSD: Makefile,v 1.1.4.2 2017/08/29 09:43:19 bouyer Exp $
+
+.include <bsd.own.mk>
+
+LIB= h_helper_dso3
+LIBISCXX= yes
+SRCS= h_helper_dso3.cpp
+
+LIBDIR= ${TESTSBASE}/libexec/ld.elf_so
+SHLIBDIR= ${TESTSBASE}/libexec/ld.elf_so
+SHLIB_MAJOR= 1
+
+MKSTATICLIB= no
+MKPROFILE= no
+MKPICINSTALL= no
+MKLINT= no
+
+NOMAN= # defined
+
+CXXFLAGS+= -std=c++11
+
+.include <bsd.lib.mk>
Index: src/tests/libexec/ld.elf_so/helper_dso3/h_helper_dso3.cpp
diff -u /dev/null src/tests/libexec/ld.elf_so/helper_dso3/h_helper_dso3.cpp:1.1.4.2
--- /dev/null Tue Aug 29 09:43:21 2017
+++ src/tests/libexec/ld.elf_so/helper_dso3/h_helper_dso3.cpp Tue Aug 29 09:43:19 2017
@@ -0,0 +1,46 @@
+/*-
+ * Copyright (c) 2017 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Joerg Sonnenberger.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <cstdio>
+
+struct VerboseDestructor {
+ const char *identifier;
+ VerboseDestructor(const char *identifier_) : identifier(identifier_) {
+ printf("in ctor: %s\n", identifier);
+ }
+ ~VerboseDestructor() {
+ printf("in dtor: %s\n", identifier);
+ }
+};
+
+static VerboseDestructor global_dtor("global_dtor");
+
+extern "C" void testfunc(void) {
+ static thread_local VerboseDestructor tls_dtor("thread_local");
+}