> From: Jeff Law <l...@redhat.com> > Date: Fri, 19 Sep 2014 08:29:16 +0200
> On 09/12/14 11:51, Hans-Peter Nilsson wrote: > > Ping! <http://gcc.gnu.org/ml/gcc-patches/2014-09/msg00403.html> > >> libgcc: > >> * crtstuff.c [EH_FRAME_SECTION_NAME && !USE_PT_GNU_EH_FRAME]: > >> Sanity-check USE_EH_FRAME_REGISTRY_ALWAYS against > >> EH_FRAME_SECTION_NAME, emit error if unsane. > >> (USE_EH_FRAME_REGISTRY): Let USE_EH_FRAME_REGISTRY_ALWAYS > >> override USE_PT_GNU_EH_FRAME. > >> * Makefile.in (FORCE_EXPLICIT_EH_REGISTRY): New > >> variable for substituted force_explicit_eh_registry. > >> (CRTSTUFF_CFLAGS): Add FORCE_EXPLICIT_EH_REGISTRY. > >> * configure.ac (explicit-exception-frame-registration): > >> New AC_ARG_ENABLE. > >> * configure: Regenerate. > OK. > jeff > Thanks! JFTR, here's the boring rebase needed as per jsm28's s/EH_FRAME_SECTION_NAME/_LIBGCC_EH_FRAME_SECTION_NAME_/g. I started a native build on x86_64-linux and --explicit-exception-frame-registration with this patch and observed it build the first-stage libstdc++.so and inspected the result and crtbegin.o as a sanity-check, as I can't trust myself not to typo. :) libgcc: * crtstuff.c (USE_EH_FRAME_REGISTRY): Let USE_EH_FRAME_REGISTRY_ALWAYS override USE_PT_GNU_EH_FRAME. [__LIBGCC_EH_FRAME_SECTION_NAME__ && !USE_PT_GNU_EH_FRAME]: Sanity- check USE_EH_FRAME_REGISTRY_ALWAYS against __LIBGCC_EH_FRAME_SECTION_NAME__, emit error if unsane. * Makefile.in (FORCE_EXPLICIT_EH_REGISTRY): New variable for substituted force_explicit_eh_registry. (CRTSTUFF_CFLAGS): Add FORCE_EXPLICIT_EH_REGISTRY. * configure.ac (explicit-exception-frame-registration): New AC_ARG_ENABLE. * configure: Regenerate. Index: libgcc/Makefile.in =================================================================== --- libgcc/Makefile.in (revision 215439) +++ libgcc/Makefile.in (working copy) @@ -50,6 +50,8 @@ target_noncanonical = @target_noncanonic # The rules for compiling them should be in the t-* file for the machine. EXTRA_PARTS = @extra_parts@ +FORCE_EXPLICIT_EH_REGISTRY = @force_explicit_eh_registry@ + extra-parts = libgcc-extra-parts # Multilib support variables. @@ -283,7 +285,7 @@ INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CF CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ -finhibit-size-directive -fno-inline -fno-exceptions \ -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \ - -fbuilding-libgcc -fno-stack-protector \ + -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \ $(INHIBIT_LIBC_CFLAGS) # Extra flags to use when compiling crt{begin,end}.o. Index: libgcc/configure.ac =================================================================== --- libgcc/configure.ac (revision 215439) +++ libgcc/configure.ac (working copy) @@ -262,6 +262,22 @@ no) ;; esac +AC_ARG_ENABLE([explicit-exception-frame-registration], + [AC_HELP_STRING([--enable-explicit-exception-frame-registration], + [register exception tables explicitly at module start, for use + e.g. for compatibility with installations without PT_GNU_EH_FRAME support])], +[ +force_explicit_eh_registry= +if test "$enable_explicit_exception_frame_registration" = yes; then + if test "$enable_sjlj_exceptions" = yes; then + AC_MSG_ERROR([Can't enable both of --enable-sjlj-exceptions + and --enable-explicit-exception-frame-registration]) + fi + force_explicit_eh_registry=-DUSE_EH_FRAME_REGISTRY_ALWAYS +fi +]) +AC_SUBST([force_explicit_eh_registry]) + AC_LIB_PROG_LD_GNU AC_MSG_CHECKING([for thread model used by GCC]) Index: libgcc/crtstuff.c =================================================================== --- libgcc/crtstuff.c (revision 215439) +++ libgcc/crtstuff.c (working copy) @@ -131,7 +131,12 @@ call_ ## FUNC (void) \ # define USE_PT_GNU_EH_FRAME #endif -#if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) && !defined(USE_PT_GNU_EH_FRAME) +#ifdef USE_EH_FRAME_REGISTRY_ALWAYS +# ifndef __LIBGCC_EH_FRAME_SECTION_NAME__ +# error "Can't use explicit exception-frame-registration without __LIBGCC_EH_FRAME_SECTION_NAME__" +# endif +#endif +#if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) && (!defined(USE_PT_GNU_EH_FRAME) || defined(USE_EH_FRAME_REGISTRY_ALWAYS)) # define USE_EH_FRAME_REGISTRY #endif #if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) \