aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2014-09-22 00:49:01 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2014-09-22 00:49:01 +0000
commit598a1586818e46033b66cd1535a84c248b9c087f (patch)
treeb6f33662c68bf5cebe1c4bee71f55e32a48e2490 /libgcc
parent794eb939b95bd1753a32116ead05d6f98a05add4 (diff)
downloadgcc-598a1586818e46033b66cd1535a84c248b9c087f.zip
gcc-598a1586818e46033b66cd1535a84c248b9c087f.tar.gz
gcc-598a1586818e46033b66cd1535a84c248b9c087f.tar.bz2
crtstuff.c (USE_EH_FRAME_REGISTRY): Let USE_EH_FRAME_REGISTRY_ALWAYS override USE_PT_GNU_EH_FRAME.
* 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. From-SVN: r215443
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog14
-rw-r--r--libgcc/Makefile.in4
-rw-r--r--libgcc/configure22
-rw-r--r--libgcc/configure.ac16
-rw-r--r--libgcc/crtstuff.c7
5 files changed, 61 insertions, 2 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index ca0f530..7c7d965 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,17 @@
+2014-09-22 Hans-Peter Nilsson <hp@axis.com>
+
+ * 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.
+
2014-09-19 Olivier Hainque <hainque@adacore.com>
* config.host (powerpc-wrs-vxworksmils): New configuration,
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index de03c47..0d2c0b4 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -50,6 +50,8 @@ target_noncanonical = @target_noncanonical@
# 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_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
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.
diff --git a/libgcc/configure b/libgcc/configure
index 35896de..19c4ed6 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -566,6 +566,7 @@ sfp_machine_header
set_use_emutls
set_have_cc_tls
vis_hide
+force_explicit_eh_registry
fixed_point
enable_decimal_float
decimal_float
@@ -664,6 +665,7 @@ with_build_libsubdir
enable_decimal_float
with_system_libunwind
enable_sjlj_exceptions
+enable_explicit_exception_frame_registration
enable_tls
'
ac_precious_vars='build_alias
@@ -1301,6 +1303,10 @@ Optional Features:
to use
--enable-sjlj-exceptions
force use of builtin_setjmp for exceptions
+ --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
--enable-tls Use thread-local storage [default=yes]
Optional Packages:
@@ -4270,6 +4276,22 @@ no)
;;
esac
+# Check whether --enable-explicit-exception-frame-registration was given.
+if test "${enable_explicit_exception_frame_registration+set}" = set; then :
+ enableval=$enable_explicit_exception_frame_registration;
+force_explicit_eh_registry=
+if test "$enable_explicit_exception_frame_registration" = yes; then
+ if test "$enable_sjlj_exceptions" = yes; then
+ as_fn_error "Can't enable both of --enable-sjlj-exceptions
+ and --enable-explicit-exception-frame-registration" "$LINENO" 5
+ fi
+ force_explicit_eh_registry=-DUSE_EH_FRAME_REGISTRY_ALWAYS
+fi
+
+fi
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
if test "${acl_cv_prog_gnu_ld+set}" = set; then :
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index d877d21..72a21a9 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -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])
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 4bea6b9..03a30fe 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -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__) \