Commit 7e495577 by Alexander Ivchenko Committed by H.J. Lu

re PR target/77267 (MPX does not work in a presence of "-Wl,-as-needed" option (Ubuntu default))

Fix PR target/77267

2016-09-10  Alexander Ivchenko  <alexander.ivchenko@intel.com>

	PR target/77267
	* config.in: Regenerate.
	* config/i386/linux-common.h (MPX_LD_AS_NEEDED_GUARD_PUSH):
	New macro.
	(MPX_LD_AS_NEEDED_GUARD_PUSH): Ditto.
	(LIBMPXWRAPPERS_SPEC): Remove "--no-whole-archive" from
	static-libmpxwrappers case.
	(LIBMPX_SPEC): Add guards with MPX_LD_AS_NEEDED_GUARD_PUSH and
	MPX_LD_AS_NEEDED_GUARD_POP.
	* configure: Regenerate.
	* configure.ac (HAVE_LD_PUSHPOPSTATE_SUPPORT): New variable.
	defined if linker support "--push-state"/"--pop-state".

From-SVN: r240057
parent af63ba4b
2016-09-10 Alexander Ivchenko <alexander.ivchenko@intel.com>
PR target/77267
* config.in: Regenerate.
* config/i386/linux-common.h (MPX_LD_AS_NEEDED_GUARD_PUSH):
New macro.
(MPX_LD_AS_NEEDED_GUARD_PUSH): Ditto.
(LIBMPXWRAPPERS_SPEC): Remove "--no-whole-archive" from
static-libmpxwrappers case.
(LIBMPX_SPEC): Add guards with MPX_LD_AS_NEEDED_GUARD_PUSH and
MPX_LD_AS_NEEDED_GUARD_POP.
* configure: Regenerate.
* configure.ac (HAVE_LD_PUSHPOPSTATE_SUPPORT): New variable.
defined if linker support "--push-state"/"--pop-state".
2016-09-09 Bernd Edlinger <bernd.edlinger@hotmail.de>
* doc/cpp.texi (__*_WIDTH__): Small wording fixes.
......
......@@ -1538,6 +1538,12 @@
#endif
/* Define if your linker supports --push-state/--pop-state */
#ifndef USED_FOR_TARGET
#undef HAVE_LD_PUSHPOPSTATE_SUPPORT
#endif
/* Define if your linker links a mix of read-only and read-write sections into
a read-write section. */
#ifndef USED_FOR_TARGET
......
......@@ -79,13 +79,23 @@ along with GCC; see the file COPYING3. If not see
#endif
#endif
#ifdef HAVE_LD_PUSHPOPSTATE_SUPPORT
#define MPX_LD_AS_NEEDED_GUARD_PUSH "--push-state --no-as-needed"
#define MPX_LD_AS_NEEDED_GUARD_POP "--pop-state"
#else
#define MPX_LD_AS_NEEDED_GUARD_PUSH ""
#define MPX_LD_AS_NEEDED_GUARD_POP ""
#endif
#ifndef LIBMPX_SPEC
#if defined(HAVE_LD_STATIC_DYNAMIC)
#define LIBMPX_SPEC "\
%{mmpx:%{fcheck-pointer-bounds:\
%{static:--whole-archive -lmpx --no-whole-archive" LIBMPX_LIBS "}\
%{!static:%{static-libmpx:" LD_STATIC_OPTION " --whole-archive}\
-lmpx %{static-libmpx:--no-whole-archive " LD_DYNAMIC_OPTION \
%{!static-libmpx:" MPX_LD_AS_NEEDED_GUARD_PUSH "} -lmpx \
%{!static-libmpx:" MPX_LD_AS_NEEDED_GUARD_POP "} \
%{static-libmpx:--no-whole-archive " LD_DYNAMIC_OPTION \
LIBMPX_LIBS "}}}}"
#else
#define LIBMPX_SPEC "\
......@@ -98,8 +108,8 @@ along with GCC; see the file COPYING3. If not see
#define LIBMPXWRAPPERS_SPEC "\
%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\
%{static:-lmpxwrappers}\
%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " --whole-archive}\
-lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\
%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION "}\
-lmpxwrappers %{static-libmpxwrappers: "\
LD_DYNAMIC_OPTION "}}}}}"
#else
#define LIBMPXWRAPPERS_SPEC "\
......
......@@ -29609,6 +29609,30 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_bndplt_support" >&5
$as_echo "$ld_bndplt_support" >&6; }
# Check linker supports '--push-state'/'--pop-state'
ld_pushpopstate_support=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --push-state/--pop-state options" >&5
$as_echo_n "checking linker --push-state/--pop-state options... " >&6; }
if test x"$ld_is_gold" = xno; then
if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
ld_pushpopstate_support=yes
fi
elif test x$gcc_cv_ld != x; then
# Check if linker supports --push-state/--pop-state options
if $gcc_cv_ld --help 2>/dev/null | grep -- '--push-state' > /dev/null; then
ld_pushpopstate_support=yes
fi
fi
fi
if test x"$ld_pushpopstate_support" = xyes; then
$as_echo "#define HAVE_LD_PUSHPOPSTATE_SUPPORT 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_pushpopstate_support" >&5
$as_echo "$ld_pushpopstate_support" >&6; }
# Configure the subdirectories
# AC_CONFIG_SUBDIRS($subdirs)
......
......@@ -6237,6 +6237,27 @@ if test x"$ld_bndplt_support" = xyes; then
fi
AC_MSG_RESULT($ld_bndplt_support)
# Check linker supports '--push-state'/'--pop-state'
ld_pushpopstate_support=no
AC_MSG_CHECKING(linker --push-state/--pop-state options)
if test x"$ld_is_gold" = xno; then
if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
ld_pushpopstate_support=yes
fi
elif test x$gcc_cv_ld != x; then
# Check if linker supports --push-state/--pop-state options
if $gcc_cv_ld --help 2>/dev/null | grep -- '--push-state' > /dev/null; then
ld_pushpopstate_support=yes
fi
fi
fi
if test x"$ld_pushpopstate_support" = xyes; then
AC_DEFINE(HAVE_LD_PUSHPOPSTATE_SUPPORT, 1,
[Define if your linker supports --push-state/--pop-state])
fi
AC_MSG_RESULT($ld_pushpopstate_support)
# Configure the subdirectories
# AC_CONFIG_SUBDIRS($subdirs)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment