From 512470bb907b267e6cf5b990215dd4d22425d95d Mon Sep 17 00:00:00 2001 From: Ilya Enkovich Date: Thu, 2 Apr 2015 08:15:49 +0000 Subject: [PATCH] re PR driver/65444 (-z bndplt isn't passed to linker for -mmpx when building dynamic objects) gcc/ PR driver/65444 * config/i386/linux-common.h (MPX_SPEC): New. (CHKP_SPEC): Add MPX_SPEC. * doc/invoke.texi (-fcheck-pointer-boudns): Document possible issues with '-z bndplt' support in linker. libmpx/ PR driver/65444 * configure.ac: Add check for '-z bndplt' support by linker. Add link_mpx output variable. * libmpx.spec.in (link_mpx): New. * configure: Regenerate. From-SVN: r221831 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/linux-common.h | 7 ++++++- gcc/doc/invoke.texi | 11 ++++++++++- libmpx/ChangeLog | 8 ++++++++ libmpx/configure | 24 ++++++++++++++++++++++-- libmpx/configure.ac | 11 +++++++++++ libmpx/libmpx.spec.in | 4 +++- 7 files changed, 68 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 937d5cdf2fd..4c832e7f1dd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-04-02 Ilya Enkovich + + PR driver/65444 + * config/i386/linux-common.h (MPX_SPEC): New. + (CHKP_SPEC): Add MPX_SPEC. + * doc/invoke.texi (-fcheck-pointer-boudns): Document + possible issues with '-z bndplt' support in linker. + 2015-04-02 Uros Bizjak * config/i386/sync.md (UNSPEC_FILD_ATOMIC, UNSPEC_FIST_ATOMIC): New. diff --git a/gcc/config/i386/linux-common.h b/gcc/config/i386/linux-common.h index 9c6560b695f..dd79ec663e9 100644 --- a/gcc/config/i386/linux-common.h +++ b/gcc/config/i386/linux-common.h @@ -59,6 +59,11 @@ along with GCC; see the file COPYING3. If not see %:include(libmpx.spec)%(link_libmpx)" #endif +#ifndef MPX_SPEC +#define MPX_SPEC "\ + %{mmpx:%{fcheck-pointer-bounds:%{!static:%:include(libmpx.spec)%(link_mpx)}}}" +#endif + #ifndef LIBMPX_SPEC #if defined(HAVE_LD_STATIC_DYNAMIC) #define LIBMPX_SPEC "\ @@ -89,5 +94,5 @@ along with GCC; see the file COPYING3. If not see #ifndef CHKP_SPEC #define CHKP_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" MPX_SPEC #endif diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index bf8afadfb94..c0587102348 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -5857,7 +5857,16 @@ MPX-based instrumentation requires a runtime library to enable MPX in hardware and handle bounds violation signals. By default when @option{-fcheck-pointer-bounds} and @option{-mmpx} options are used to link a program, the GCC driver -links against the @file{libmpx} runtime library. MPX-based instrumentation +links against the @file{libmpx} runtime library and @file{libmpxwrappers} +library. It also passes '-z bndplt' to a linker in case it supports this +option (which is checked on libmpx configuration). Note that old versions +of linker may ignore option. Gold linker doesn't support '-z bndplt' +option. With no '-z bndplt' support in linker all calls to dynamic libraries +lose passed bounds reducing overall protection level. It's highly +recommended to use linker with '-z bndplt' support. In case such linker +is not available it is adviced to always use @option{-static-libmpxwrappers} +for better protection level or use @option{-static} to completely avoid +external calls to dynamic libraries. MPX-based instrumentation may be used for debugging and also may be included in production code to increase program security. Depending on usage, you may have different requirements for the runtime library. The current version diff --git a/libmpx/ChangeLog b/libmpx/ChangeLog index 35bdeab35ee..6b05278b0d0 100644 --- a/libmpx/ChangeLog +++ b/libmpx/ChangeLog @@ -1,3 +1,11 @@ +2015-04-02 Ilya Enkovich + + PR driver/65444 + * configure.ac: Add check for '-z bndplt' support + by linker. Add link_mpx output variable. + * libmpx.spec.in (link_mpx): New. + * configure: Regenerate. + 2015-03-12 Ilya Enkovich PR other/65384 diff --git a/libmpx/configure b/libmpx/configure index 3bbb54c2987..aeaa4839352 100644 --- a/libmpx/configure +++ b/libmpx/configure @@ -670,6 +670,7 @@ am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM +link_mpx link_libmpx LIBMPX_SUPPORTED_FALSE LIBMPX_SUPPORTED_TRUE @@ -2523,6 +2524,25 @@ fi link_libmpx="-lpthread" +link_mpx="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld accepts -z bndplt" >&5 +$as_echo_n "checking whether ld accepts -z bndplt... " >&6; } +echo "int main() {};" > conftest.c +if { ac_try='${CC} ${CFLAGS} -Wl,-z,bndplt -o conftest conftest.c 1>&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + link_mpx="$link_mpx -z bndplt" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + am__api_version='1.11' @@ -11648,7 +11668,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11651 "configure" +#line 11671 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11754,7 +11774,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11757 "configure" +#line 11777 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libmpx/configure.ac b/libmpx/configure.ac index fe0d3f2266e..3f8b50f8eba 100644 --- a/libmpx/configure.ac +++ b/libmpx/configure.ac @@ -40,7 +40,18 @@ AC_MSG_RESULT($LIBMPX_SUPPORTED) AM_CONDITIONAL(LIBMPX_SUPPORTED, [test "x$LIBMPX_SUPPORTED" = "xyes"]) link_libmpx="-lpthread" +link_mpx="" +AC_MSG_CHECKING([whether ld accepts -z bndplt]) +echo "int main() {};" > conftest.c +if AC_TRY_COMMAND([${CC} ${CFLAGS} -Wl,-z,bndplt -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD]) +then + AC_MSG_RESULT([yes]) + link_mpx="$link_mpx -z bndplt" +else + AC_MSG_RESULT([no]) +fi AC_SUBST(link_libmpx) +AC_SUBST(link_mpx) AM_INIT_AUTOMAKE(foreign no-dist no-dependencies) AM_ENABLE_MULTILIB(, ..) diff --git a/libmpx/libmpx.spec.in b/libmpx/libmpx.spec.in index a265e286b4f..34d0bdf165a 100644 --- a/libmpx/libmpx.spec.in +++ b/libmpx/libmpx.spec.in @@ -1,3 +1,5 @@ # This spec file is read by gcc when linking. It is used to specify the -# standard libraries we need in order to link with libcilkrts. +# standard libraries we need in order to link with libmpx. *link_libmpx: @link_libmpx@ + +*link_mpx: @link_mpx@ -- 2.30.2