gcc: Enable __cxa_atexit for final GCC
PATCH v2 1/1 gcc: Enable __cxa_atexit for final GCC
This is what GCC manual says [1]:
-------------------------->8---------------------- --enable-__cxa_atexit
Define if you want to use __cxa_atexit, rather than atexit, to register C++ destructors for local statics and global objects.
This is essential for fully standards-compliant handling of destructors, but requires __cxa_atexit in libc.
This option is currently only available on systems with GNU libc
...
-------------------------->8----------------------
Important disadvantages of a simple atexit() are that [2]:
-------------------------->8----------------------
1999 C Standard only requires that the implementation support 32 registered functions, although most implementations support many more.
More important it does not deal at all with the ability in most implementations to remove DSOs from a running program image by calling dlclose prior to program termination. -------------------------->8----------------------
Also it seems like all libc's we support in Buildroot (Glibc, uClibc and musl) support __cxa_at_exit() so enable it unconditionally.
FWIW if we look around we'll see:
1. In OpenEmbedded it is enabled for everything except gcc-cross-initial: [3], [4]
2. In Crosstool-NG it is enabled by default: [5]
3. In OpenWrt it is disabled only for uClibc, otherwise enabled: [6]
So I think we should be good with it as well.
[1] https://gcc.gnu.org/install/configure.html
[2] https://itanium-cxx-abi.github.io/cxx-abi/abi.html#dso-dtor-motivation
[3] https://github.com/openembedded/openembedded-core/blob/master/meta/recipes-devtools/gcc/gcc-configure-common.inc#L59
[4] https://github.com/openembedded/openembedded-core/blob/master/meta/recipes-devtools/gcc/gcc-cross-initial.inc#L23
[5] https://github.com/crosstool-ng/crosstool-ng/blob/master/config/cc/gcc.in#L270
[6] https://github.com/openwrt/openwrt/blob/master/toolchain/gcc/common.mk#L170
---
Changes v1 -> v2:
* Added references to other buildsystems in commit message
* Dropped disable in gcc-initial so we have it enabled always
package/gcc/gcc.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
package/gcc/gcc.mk +1 -1
@@ -87,7 +87,7 @@ HOST_GCC_COMMON_DEPENDENCIES = \ HOST_GCC_COMMON_CONF_OPTS = \ --target=$(GNU_TARGET_NAME) \ --with-sysroot=$(STAGING_DIR) \ - --disable-__cxa_atexit \ + --enable-__cxa_atexit \ --with-gnu-ld \ --disable-libssp \ --disable-multilib \
Signature · 1 line
2.16.2
PATCH v2 1/1 gcc: Enable __cxa_atexit for final GCC
Hello,
Quoted 3 lines · Alexey Brodkin
This is what GCC manual says [1]:
-------------------------->8---------------------- --enable-__cxa_atexit
I've applied to next, but after dropping the "for final GCC" from the commit title, since cxa_atexit is now used for both the initial gcc and the final gcc.
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
PATCH v2 1/1 gcc: Enable __cxa_atexit for final GCC
Hi Peter,
Quoted 11 lines · Thomas Petazzoni
Hello,
Quoted 3 lines · Alexey Brodkin
This is what GCC manual says [1]:
-------------------------->8---------------------- --enable-__cxa_atexitI've applied to next, but after dropping the "for final GCC" from the commit title, since
cxa_atexitis now used for both the initial gcc and the final gcc.
Could this one be applied to Buildroot stable?
The lack of this patch causes is causing issues on Mesa:
https://www.mail-archive.com/mesa-dev at lists.freedesktop.org/msg212440.html
PATCH v2 1/1 gcc: Enable __cxa_atexit for final GCC
Hello *,
Quoted 12 lines · Fabio Estevam
Hi Peter,
Quoted 8 lines · Thomas Petazzoni
Hello,
Quoted 3 lines · Alexey Brodkin
This is what GCC manual says [1]:
-------------------------->8---------------------- --enable-__cxa_atexit
Quoted 5 lines
Quoted 3 lines
I've applied to next, but after dropping the "for final GCC" from the commit title, since
cxa_atexitis now used for both the initial gcc and the final gcc.Could this one be applied to Buildroot stable?
+1
Quoted 3 lines
The lack of this patch causes is causing issues on Mesa:
https://www.mail-archive.com/mesa-dev at lists.freedesktop.org/msg212440.html
Did re-run the same buildroot-2018.11/mesa/etnaviv test, could confirm enabling __cxa_atexit fixes the mesa double-free on exit...
Regards,
Peter
Quoted 4 lines
_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
PATCH v2 1/1 gcc: Enable __cxa_atexit for final GCC
In reply to Fabio EstevamQuoted 13 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Fabio" == Fabio Estevam <[email protected]> writes:
Hi Peter,
Quoted 8 lines · Thomas Petazzoni
Hello,
Quoted 3 lines · Alexey Brodkin
This is what GCC manual says [1]:
-------------------------->8---------------------- --enable-__cxa_atexit
Quoted 8 lines
Quoted 3 lines
I've applied to next, but after dropping the "for final GCC" from the commit title, since
cxa_atexitis now used for both the initial gcc and the final gcc.Could this one be applied to Buildroot stable?
The lack of this patch causes is causing issues on Mesa:
https://www.mail-archive.com/mesa-dev at lists.freedesktop.org/msg212440.html
Yes, sorry for the delay - Committed to 2018.02.x and 2018.11.x, thanks.
Signature · 1 line
Bye, Peter Korsgaard