This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PING^2: [PATCH]: New configure options that make the compiler use -fPIE and -pie as default option
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Joseph Myers <joseph at codesourcery dot com>
- Cc: Richard Biener <richard dot guenther at gmail dot com>, Magnus Granberg <zorry at gentoo dot org>, GCC Patches <gcc-patches at gcc dot gnu dot org>, danielmicay <danielmicay at gmail dot com>
- Date: Wed, 11 Feb 2015 08:47:28 -0800
- Subject: PING^2: [PATCH]: New configure options that make the compiler use -fPIE and -pie as default option
- Authentication-results: sourceware.org; auth=none
PING.
On Wed, Jan 28, 2015 at 8:05 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> PING.
>
> On Tue, Jan 13, 2015 at 3:25 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Tue, Jan 13, 2015 at 5:03 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> On Mon, Jan 12, 2015 at 11:50:41PM +0000, Joseph Myers wrote:
>>>> On Mon, 12 Jan 2015, H.J. Lu wrote:
>>>>
>>>> > +if test x$enable_default_pie = xyes; then
>>>> > + AC_MSG_CHECKING(if $target supports default PIE)
>>>> > + enable_default_pie=no
>>>> > + case $target in
>>>> > + i?86*-*-linux* | x86_64*-*-linux*)
>>>> > + saved_LDFLAGS="$LDFLAGS"
>>>> > + saved_CFLAGS="$CFLAGS"
>>>> > + CFLAGS="$CFLAGS -fPIE"
>>>> > + LDFLAGS="$LDFLAGS -fPIE -pie"
>>>> > + AC_TRY_LINK(,,[enable_default_pie=yes],)
>>>> > + LDFLAGS="$saved_LDFLAGS"
>>>> > + CFLAGS="$saved_CFLAGS"
>>>> > + ;;
>>>> > + *)
>>>> > + ;;
>>>> > + esac
>>>>
>>>> There should not be any such hardcoding of targets here without concrete
>>>> evidence that the targets for which this sets enable_default_pie=no really
>>>> cannot support PIE. In particular, there is no reason at all for this to
>>>> be architecture-specific; all GNU/Linux architectures should support PIE.
>>>>
>>>> I believe AC_TRY_LINK here will test for the host, whereas what you want
>>>> to know is what's supported for the target (but it's not possible to run
>>>> link tests for the target at this point; the compiler for the target
>>>> hasn't even been built).
>>>>
>>>> So: just presume that if the user passes --enable-default-pie then they
>>>> know what they are doing, and don't try to override their choice.
>>>>
>>>> > diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
>>>> > index c9e3bf1..89fc305 100644
>>>> > --- a/gcc/doc/install.texi
>>>> > +++ b/gcc/doc/install.texi
>>>> > @@ -1583,6 +1583,10 @@ not be built.
>>>> > Specify that the run-time libraries for stack smashing protection
>>>> > should not be built.
>>>> >
>>>> > +@item --enable-default-pie
>>>> > +Turn on @option{-fPIE} and @option{-pie} by default if supported.
>>>> > +Currently supported targets are i?86-*-linux* and x86-64-*-linux*.
>>>>
>>>> The "if supported" and target list can then be removed here.
>>>>
>>>
>>> Here is the updated patch. To support --enable-default-pie, each target
>>> must update STARTFILE_SPEC to support PIE_SPEC and NO_PIE_SPEC. I can
>>> provide STARTFILE_SPEC patch if needed.
>>>
>>> Thanks.
>>>
>>>
>>> H.J.
>>> ---
>>> gcc/
>>>
>>> 2015-01-12 Magnus Granberg <zorry@gentoo.org>
>>> H.J. Lu <hongjiu.lu@intel.com>
>>>
>>> * Makefile.in (COMPILER): Add @NO_PIE_CFLAGS@.
>>> (LINKER): Add @NO_PIE_FLAG@.
>>> (libgcc.mvars): Set NO_PIE_CFLAGS to -fno-PIE for
>>> --enable-default-pie.
>>> * common.opt (fPIE): Initialize to -1.
>>> (fpie): Likewise.
>>> (static): Add "RejectNegative Negative(shared)".
>>> (no-pie): New option.
>>> (pie): Replace "Negative(shared)" with "Negative(no-pie)".
>>> * configure.ac: Add --enable-default-pie.
>>> (NO_PIE_CFLAGS): New. Check if -fno-PIE works. AC_SUBST.
>>> (NO_PIE_FLAG): New. Check if -no-pie works. AC_SUBST.
>>> * defaults.h (DEFAULT_FLAG_PIE): New. Default PIE to -fPIE.
>>> * gcc.c (NO_PIE_SPEC): New.
>>> (PIE_SPEC): Likewise.
>>> (LD_PIE_SPEC): Likewise.
>>> (LINK_PIE_SPEC): Handle -no-pie. Use PIE_SPEC and LD_PIE_SPEC.
>>> * opts.c (DEFAULT_FLAG_PIE): New. Set to 0 if ENABLE_DEFAULT_PIE
>>> is undefined.
>>> (finish_options): Update opts->x_flag_pie if it is -1.
>>> * config/gnu-user.h (FVTABLE_VERIFY_SPEC): New.
>>> (GNU_USER_TARGET_STARTFILE_SPEC): Use FVTABLE_VERIFY_SPEC. Use
>>> NO_PIE_SPEC and NO_PIE_SPEC if ENABLE_DEFAULT_PIE is defined.
>>> (GNU_USER_TARGET_STARTFILE_SPEC): Use FVTABLE_VERIFY_SPEC.
>>> * doc/install.texi: Document --enable-default-pie.
>>> * doc/invoke.texi: Document -no-pie.
>>> * config.in: Regenerated.
>>> * configure: Likewise.
>>>
>>> gcc/ada/
>>>
>>> 2015-01-12 H.J. Lu <hongjiu.lu@intel.com>
>>>
>>> * gcc-interface/Makefile.in (TOOLS_LIBS): Add @NO_PIE_FLAG@.
>>>
>>> libgcc/
>>>
>>> 2015-01-12 H.J. Lu <hongjiu.lu@intel.com>
>>>
>>> * Makefile.in (CRTSTUFF_CFLAGS): Add $(NO_PIE_CFLAGS).
>>>
>>
>> This is the updated patch. I fixed the -r regression. LTO tests
>> pass now.
>>
>> --
>> H.J.
>
>
>
> --
> H.J.
--
H.J.