2015-03-18 16:31 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
> 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.

If gold is used and it doesn't support '-z bndplt' then it doesn't
mean user can't use MPX.

Ilya

>
> --
> H.J.

Reply via email to