[PATCH v4] Destructor support for C++11 thread_local variables

Siddhesh Poyarekar siddhesh@redhat.com
Tue Oct 30 14:07:00 GMT 2012


Hi,

Here's another iteration of the patch rebased on top of Roland's
clock_* changes.  I have also added a test case to verify the DSO
unload behaviour using a C program instead of trying to figure out the
gcc version.  Thanks to Jakub for the idea of figuring out the code
generated by gcc and writing the test case based on it using __thread
that does not depend on the compiler.

Regards,
Siddhesh


ChangeLog:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* include/link.h (struct link_map): New member l_tls_dtor_count.
	* include/stdlib.h (__cxa_thread_atexit_impl): Declare.
	(__call_tls_dtors): Likewise.
	* sysdeps/unix/sysv/linux/i386/nptl/libc.abilist: Add
	__cxa_thread_atexit_impl.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sh/nptl/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/nptl/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/nptl/libc.abilist:
	Likewise.
	* stdlib/Makefile (routines): Add __cxa_thread_atexit_impl.
	(tests): Add test case tst-tls-atexit.
	(modules-names): Add shared library for tst-tls-atexit.
	* stdlib/Versions (GLIBC_2.17): Add __cxa_thread_atexit_impl.
	(GLIBC_PRIVATE): Add __call_tls_dtors.
	* stdlib/cxa_thread_atexit_impl.c: New file with helper function
	for libstdc++.
	* stdlib/exit.c (__run_exit_handlers): Call __call_tls_dtors.
	* stdlib/tst-tls-atexit.c: New test case.
	* stdlib/tst-tls-atexit-lib.c: New test case.


ChangeLog.alpha:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/alpha/nptl/libc.abilist: Add
	__cxa_thread_atexit_impl.


ChangeLog.arm:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/arm/nptl/libc.abilist: Add
	__cxa_thread_atexit_impl.


ChangeLog.ia64:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/ia64/nptl/libc.abilist: Add
	__cxa_thread_atexit_impl.


ChangeLog.m68k:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libc.abilist: Add
	__cxa_thread_atexit_impl.
	* sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libc.abilist:
	Likewise.


ChangeLog.mips:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/mips/mips32/nptl/libc.abilist: Add
	__cxa_thread_atexit_impl.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libc.abilist:
	Likewise.


ChangeLog.powerpc:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
	Add __cxa_thread_atexit_impl.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist:
	Likewise.


ChangeLog.tile:
2012-10-30  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist:
	Add __cxa_thread_atexit_impl.
	* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist:
	Likewise.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: thread-local-3.patch
Type: text/x-patch
Size: 22093 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20121030/5d9158a7/attachment.bin>


More information about the Libc-alpha mailing list