On Wed, Mar 18, 2015 at 6:24 AM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> 2015-03-18 15:42 GMT+03:00 Richard Biener <richard.guent...@gmail.com>:
>> On Wed, Mar 18, 2015 at 1:25 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>> On Wed, Mar 18, 2015 at 5:13 AM, Ilya Enkovich <enkovich....@gmail.com> 
>>> wrote:
>>>> 2015-03-18 15:08 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
>>>>> On Wed, Mar 18, 2015 at 5:05 AM, Ilya Enkovich <enkovich....@gmail.com> 
>>>>> wrote:
>>>>>> 2015-03-18 15:02 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
>>>>>>> On Wed, Mar 18, 2015 at 4:56 AM, Ilya Enkovich <enkovich....@gmail.com> 
>>>>>>> wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> This patch fixes PR target/65444 by passing '-z bndplt' to linker when 
>>>>>>>> appropriate.  Bootstrapped and tested on x86_64-unknown-linux-gnu.  
>>>>>>>> Will commit it to trunk in a couple of days if no objections arise.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Ilya
>>>>>>>> --
>>>>>>>> gcc/
>>>>>>>>
>>>>>>>> 2015-03-18  Ilya Enkovich  <ilya.enkov...@intel.com>
>>>>>>>>
>>>>>>>>         PR driver/65444
>>>>>>>>         * config/i386/linux-common.h (MPX_SPEC): New.
>>>>>>>>         (CHKP_SPEC): Add MPX_SPEC.
>>>>>>>>
>>>>>>>> libmpx/
>>>>>>>>
>>>>>>>> 2015-03-18  Ilya Enkovich  <ilya.enkov...@intel.com>
>>>>>>>>
>>>>>>>>         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.
>>>>>>>>
>>>>>>>>
>>>>>>>> diff --git a/gcc/config/i386/linux-common.h 
>>>>>>>> b/gcc/config/i386/linux-common.h
>>>>>>>> index 9c6560b..dd79ec6 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/libmpx/configure.ac b/libmpx/configure.ac
>>>>>>>> index fe0d3f2..3f8b50f 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)
>>>>>>>>
>>>>>>>
>>>>>>> Without -z bndplt, MPX won't work correctly.  We should always pass -z 
>>>>>>> bndplt
>>>>>>> to linker.  If linker doesn't support it, ld will issue a warning, not
>>>>>>> error and users
>>>>>>> will know their linker is too old.  When they update linker, they don't 
>>>>>>> have to
>>>>>>> rebuild GCC.
>>>>>>
>>>>>> If ld issues a warning instead of an error, then configure test passes
>>>>>> and we pass '-z bndplt' to linker.
>>>>>>
>>>>>
>>>>> Can you verify it with an older linker? The unknown XXX in -z XXX is 
>>>>> always
>>>>> warned and ignored in Linux linker.  If testing it on Linux always passes,
>>>>> it is useless.
>>>>
>>>> Old ld issues a warning:
>>>>
>>>> ld: warning: -z bndplt ignored.
>>>
>>> Does configure test pass?
>>>
>>>> But gold issues an error:
>>>>
>>>> ld.gold: bndplt: unknown -z option
>>>> ld.gold: use the --help option for usage information
>>>
>>> If gold is used, MPX won't work.  What should we do here?
>>> Should we hardcode -fuse-ld=bfd for MPX?
>>
>> Is MPX disabled when the host linker is gold and gld isn't available?
>
> No. You may use MPX with gold and old ld but you would loose passed
> bounds when make a call via plt.
>

If gold is default linker, the configure test will fail and we never pass
-z bndplt to linker even if ld.bfd is available and ld.gold is fixed later.
I'd rather always pass -z bndplt to ld.

-- 
H.J.

Reply via email to