aboutsummaryrefslogtreecommitdiff
path: root/ChangeLog
diff options
context:
space:
mode:
authorCarlos O'Donell <carlos@redhat.com>2016-06-06 14:20:58 -0400
committerCarlos O'Donell <carlos@redhat.com>2016-06-06 21:40:25 -0400
commit47dd3543d36465496970406da03db5aecdc377ee (patch)
tree2288d28761125dcb0b27e150f76314d064decc43 /ChangeLog
parent3f61232ab337b8162ed1a37558b30ce714dba894 (diff)
downloadglibc-47dd3543d36465496970406da03db5aecdc377ee.tar.xz
glibc-47dd3543d36465496970406da03db5aecdc377ee.zip
Bug 20198: quick_exit should not call destructors.
In C++11 18.5.12 says "Objects shall not be destroyed as a result of calling quick_exit." In C11 quick_exit is silent about thread object destruction. Therefore to make glibc C++ compliant we do not call any thread local destructors. A new regression test verifies the fix. I will note that C++11 18.5.3 makes it clear that C++ defines additional requirements for _Exit() to prevent it from executing destructors. Given that the point of _Exit() is to terminate the process immediately it makes sense the C and C++ should line up and avoid calling destructors. No failures. New regtest passes.
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog54
1 files changed, 54 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f6304a609f..8697644058 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,57 @@
+2016-06-03 Carlos O'Donell <carlos@redhat.com>
+
+ [BZ #20198]
+ * stdlib/Makefile (tests): Add tst-quick_exit, and
+ tst-thread-quick_exit.
+ [ifeq ($(have-cxx-thread_local),yes)]
+ (CFLAGS-tst-quick_exit.o): Use -stdc=c++11.
+ (CFLAGS-tst-thread-quick_exit.o): Likewise.
+ (LDLIBS-tst-quick_exit): Use -lstdc++ for C++ program.
+ (LDLIBS-tst-thread-quick_exit): Likewise.
+ [ifneq ($(have-cxx-thread_local),yes)]
+ (tests-unsupported): Add tst-quick_exit, and tst-thread-quick_exit.
+ * stdlib/exit.c (__run_exit_handlers): Add run_dtors argument.
+ If run_dtors is true call __call_tls_dtors.
+ (exit): Call __run_exit_handlers with run_dtors set to true.
+ * stdlib/exit.h: Add run_dtors argument to __run_exit_handlers
+ definition.
+ * stdlib/quick_exit.c (quick_exit): Remove function.
+ (__new_quick_exit): New function.
+ [SHLIB_COMPAT(libc, GLIBC_2_10, GLIBC_2_24)] (__old_quick_exit): New
+ function.
+ * stdlib/tst-quick_exit.cc: New file.
+ * stdlib/tst-thread-quick_exit.cc: New file.
+ * stdlib/Versions: Add quick_exit@GLIBC_2.24.
+ * sysdeps/arm/nacl/libc.abilist: Add 'GLIBC_2.24 quick_exit F'.
+ * sysdeps/unix/sysv/linux/aarch64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise
+ * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise
+
2016-06-06 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Fix