diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2013-08-07 13:54:01 +0800 |
---|---|---|
committer | Andrew Hsieh <andrewhsieh@google.com> | 2013-08-07 13:58:28 +0800 |
commit | 5e6cdf76af295c9a39b695ca228cff675e8ff4ae (patch) | |
tree | 9822016264ef3488c1a80bf220d891cf34238627 /gcc-4.8/gcc/configure.ac | |
parent | 34cef20a1108ff399ecbe13f42e1f6bc8c909b27 (diff) | |
download | toolchain_gcc-5e6cdf76af295c9a39b695ca228cff675e8ff4ae.tar.gz toolchain_gcc-5e6cdf76af295c9a39b695ca228cff675e8ff4ae.tar.bz2 toolchain_gcc-5e6cdf76af295c9a39b695ca228cff675e8ff4ae.zip |
[4.8] Always enable --eh-frame-hdr for static executable
See 23e3137ee2897464b051599b85a09f130d3ad05d for the reason why
Port patch from http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00969.html
gcc/
2012-09-14 H.J. Lu <hongjiu.lu@intel.com>
PR debug/54568
* configure.ac: Add --enable-eh-frame-hdr-for-static. Set
USE_EH_FRAME_HDR_FOR_STATIC if PT_GNU_EH_FRAME is supported for
static executable.
* config.in: Regenerated.
* configure: Likewise.
* config/gnu-user.h (LINK_EH_SPEC): Defined as "--eh-frame-hdr "
if USE_EH_FRAME_HDR_FOR_STATIC is defined.
* config/sol2.h (LINK_EH_SPEC): Likewise.
* config/openbsd.h (LINK_EH_SPEC): Likewise.
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
* config/freebsd.h (LINK_EH_SPEC): Likewise.
* config/rs6000/sysv4.h (LINK_EH_SPEC): Likewise.
gcc/testsuite/
2012-09-13 H.J. Lu <hongjiu.lu@intel.com>
PR debug/54568
* g++.dg/eh/spec3-static.C: New test.
libgcc/
2012-09-14 H.J. Lu <hongjiu.lu@intel.com>
PR debug/54568
* crtstuff.c (USE_PT_GNU_EH_FRAME): Check CRTSTUFFT_O together
with USE_EH_FRAME_HDR_FOR_STATIC.
Change-Id: If442d27eeb1347ac5a1b943acbbeff5f708a9929
Diffstat (limited to 'gcc-4.8/gcc/configure.ac')
-rw-r--r-- | gcc-4.8/gcc/configure.ac | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/configure.ac b/gcc-4.8/gcc/configure.ac index f68c5aa75..6dd0b7e46 100644 --- a/gcc-4.8/gcc/configure.ac +++ b/gcc-4.8/gcc/configure.ac @@ -4334,6 +4334,35 @@ GCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR]) if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1, [Define if your linker supports .eh_frame_hdr.]) + AC_ARG_ENABLE(eh-frame-hdr-for-static, + [AS_HELP_STRING([--enable-eh-frame-hdr-for-static], + [enable linker PT_GNU_EH_FRAME support for static executable])], + [case $enable_eh_frame_hdr_for_static in + yes | no) ;; + *) AC_MSG_ERROR(['$enable_eh_frame_hdr_for_static' is an invalid +value for --enable-eh-frame-hdr-for-static. +Valid choices are 'yes' and 'no'.]) ;; + esac], +# Only support for glibc 2.3.0 or higher with AT_PHDR/AT_PHNUM from +# Linux kernel. + [[if test x$host = x$build -a x$host = x$target && + ldd --version 2>&1 >/dev/null && + glibcver=`ldd --version 2>/dev/null | sed 's/.* //;q'`; then + glibcmajor=`expr "$glibcver" : "\([0-9]*\)"` + glibcminor=`expr "$glibcver" : "[2-9]*\.\([0-9]*\)"` + glibcnum=`expr $glibcmajor \* 1000 + $glibcminor` + if test "$glibcnum" -ge 2003 ; then + auvx=`LD_SHOW_AUXV=1 ldd 2>/dev/null` + if echo "$auvx" | grep AT_PHDR > /dev/null && + echo "$auvx" | grep AT_PHNUM > /dev/null; then + enable_eh_frame_hdr_for_static=yes + fi + fi + fi]]) + if test x$enable_eh_frame_hdr_for_static = xyes; then + AC_DEFINE(USE_EH_FRAME_HDR_FOR_STATIC, 1, +[Define if your system supports PT_GNU_EH_FRAME for static executable.]) + fi fi AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr) |