Hi Jeff, >>> Thanks for the patch. I'll let you and Jason decide which style solution >>> is preferred. >> This also breaks bootstrap on Darwin at least, so an early solution would be >> welcome (the fix here allows bootstrap to continue, testing on-going). >> thanks, > > I'm using it in the automated tester as well -- without all the *-elf > targets would fail to build libgcc.
things are even worse on targets that lack constructor priority support, like Solaris 11.3 and Mac OS X 10.7/Darwin 11: In file included from /vol/gcc/src/hg/master/local/libgcc/unwind-dw2-fde-dip.c:97: /vol/gcc/src/hg/master/local/libgcc/unwind-dw2-fde.c:54:1: error: destructor priorities are not supported 54 | release_registered_frames (void) __attribute__ ((destructor (110))); | ^~~~~~~~~~~~~~~~~~~~~~~~~ This is already checked for in libgcc/configure, and the situation handled in libgcc/config/i386/cpuinfo.c. The following patch unbroke bootstrap on both affected targets and I saw no apparent regressions. However, I cannot tell if the destructor priority is actually required for correctness. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University
diff --git a/libgcc/unwind-dw2-fde.c b/libgcc/unwind-dw2-fde.c --- a/libgcc/unwind-dw2-fde.c +++ b/libgcc/unwind-dw2-fde.c @@ -47,11 +47,17 @@ typedef __UINTPTR_TYPE__ uintptr_type; #ifdef ATOMIC_FDE_FAST_PATH #include "unwind-dw2-btree.h" +#ifdef HAVE_INIT_PRIORITY +#define DESTRUCTOR_PRIORITY (110) +#else +#define DESTRUCTOR_PRIORITY +#endif + static struct btree registered_frames; static bool in_shutdown; static void -release_registered_frames (void) __attribute__ ((destructor (110))); +release_registered_frames (void) __attribute__ ((destructor DESTRUCTOR_PRIORITY)); static void release_registered_frames (void) {