public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* PING^3: [PATCH]: New configure options that make the compiler use -fPIE and -pie as default option
@ 2015-03-06 17:31 H.J. Lu
  2015-03-06 20:22 ` Magnus Granberg
  2015-05-07 21:17 ` Joseph Myers
  0 siblings, 2 replies; 52+ messages in thread
From: H.J. Lu @ 2015-03-06 17:31 UTC (permalink / raw)
  To: Joseph Myers; +Cc: Richard Biener, Magnus Granberg, GCC Patches, danielmicay

[-- Attachment #1: Type: text/plain, Size: 4813 bytes --]

PING.  I am enclosing the patch here for review.

On Wed, Feb 11, 2015 at 8:47 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> 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.



-- 
H.J.

[-- Attachment #2: 0001-Add-enable-default-pie-option-to-GCC-configure.patch --]
[-- Type: text/x-patch, Size: 15742 bytes --]

From 46faeb11166103c6a8b1608731eccf75385fe5c9 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Fri, 6 Mar 2015 09:07:54 -0800
Subject: [PATCH] Add --enable-default-pie option to GCC configure

Add --enable-default-pie option to configure GCC to generate PIE by
default.

gcc/

	* 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.
	(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
	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/

	* gcc-interface/Makefile.in (TOOLS_LIBS): Add @NO_PIE_FLAG@.

libgcc/

	* Makefile.in (CRTSTUFF_CFLAGS): Add $(NO_PIE_CFLAGS).
---
 gcc/Makefile.in                   | 12 ++++++
 gcc/ada/gcc-interface/Makefile.in |  3 ++
 gcc/common.opt                    | 10 +++--
 gcc/config.in                     |  6 +++
 gcc/config/gnu-user.h             | 26 +++++++++----
 gcc/configure                     | 79 ++++++++++++++++++++++++++++++++++++++-
 gcc/configure.ac                  | 40 ++++++++++++++++++++
 gcc/defaults.h                    |  6 +++
 gcc/doc/install.texi              |  3 ++
 gcc/doc/invoke.texi               |  4 ++
 gcc/gcc.c                         | 12 +++++-
 gcc/opts.c                        | 14 +++++++
 libgcc/Makefile.in                |  2 +-
 13 files changed, 201 insertions(+), 16 deletions(-)

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index de1f3b6..46c3ed3 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -252,6 +252,12 @@ LINKER = $(CC)
 LINKER_FLAGS = $(CFLAGS)
 endif
 
+# We don't want to compile the compiler with -fPIE, it make PCH fail.
+COMPILER += @NO_PIE_CFLAGS@
+
+# Link with -no-pie since we compile the compiler with -fno-PIE.
+LINKER += @NO_PIE_FLAG@
+
 # Like LINKER, but use a mutex for serializing front end links.
 ifeq (@DO_LINK_MUTEX@,true)
 LLINKER = $(SHELL) $(srcdir)/lock-and-run.sh linkfe.lck $(LINKER)
@@ -1854,6 +1860,12 @@ libgcc.mvars: config.status Makefile specs xgcc$(exeext)
 	echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars
 	echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars
 	echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars
+	if test @enable_default_pie@ = yes; then \
+	  NO_PIE_CFLAGS="-fno-PIE"; \
+	else \
+	  NO_PIE_CFLAGS=; \
+	fi; \
+	echo NO_PIE_CFLAGS = "$$NO_PIE_CFLAGS" >> tmp-libgcc.mvars
 
 	mv tmp-libgcc.mvars libgcc.mvars
 
diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
index 60c1b5b..e09b921 100644
--- a/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc/ada/gcc-interface/Makefile.in
@@ -267,6 +267,9 @@ TOOLS_LIBS = ../link.o ../targext.o ../../ggc-none.o ../../libcommon-target.a \
   ../../libcommon.a ../../../libcpp/libcpp.a $(LIBGNAT) $(LIBINTL) $(LIBICONV) \
   ../$(LIBBACKTRACE) ../$(LIBIBERTY) $(SYSLIBS) $(TGT_LIB)
 
+# Add -no-pie to TOOLS_LIBS since some of them are compiled with -fno-PIE.
+TOOLS_LIBS += @NO_PIE_FLAG@
+
 # Specify the directories to be searched for header files.
 # Both . and srcdir are used, in that order,
 # so that tm.h and config.h will be found in the compilation
diff --git a/gcc/common.opt b/gcc/common.opt
index b49ac46..51f17c0 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1765,7 +1765,7 @@ Common Report Var(flag_pic,2) Negative(fPIE)
 Generate position-independent code if possible (large mode)
 
 fPIE
-Common Report Var(flag_pie,2) Negative(fpic)
+Common Report Var(flag_pie,2) Negative(fpic) Init(-1)
 Generate position-independent code for executables if possible (large mode)
 
 fpic
@@ -1773,7 +1773,7 @@ Common Report Var(flag_pic,1) Negative(fpie)
 Generate position-independent code if possible (small mode)
 
 fpie
-Common Report Var(flag_pie,1) Negative(fPIC)
+Common Report Var(flag_pie,1) Negative(fPIC) Init(-1)
 Generate position-independent code for executables if possible (small mode)
 
 fplugin=
@@ -2846,8 +2846,12 @@ Driver
 symbolic
 Driver
 
-pie
+no-pie
 Driver RejectNegative Negative(shared)
+Don't create a position independent executable
+
+pie
+Driver RejectNegative Negative(no-pie)
 Create a position independent executable
 
 z
diff --git a/gcc/config.in b/gcc/config.in
index 7bde5b1..b708f3a 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -89,6 +89,12 @@
 #endif
 
 
+/* Define if your target supports default PIE and it is enabled. */
+#ifndef USED_FOR_TARGET
+#undef ENABLE_DEFAULT_PIE
+#endif
+
+
 /* Define if you want more run-time sanity checks for dataflow. */
 #ifndef USED_FOR_TARGET
 #undef ENABLE_DF_CHECKING
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
index 2faa2e5..5cbe5da 100644
--- a/gcc/config/gnu-user.h
+++ b/gcc/config/gnu-user.h
@@ -41,19 +41,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    object constructed before entering `main'.  */
 
 #if defined HAVE_LD_PIE
-#define GNU_USER_TARGET_STARTFILE_SPEC \
-  "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
-   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
-   %{fvtable-verify=none:%s; \
+#define FVTABLE_VERIFY_SPEC \
+  "%{fvtable-verify=none:%s; \
      fvtable-verify=preinit:vtv_start_preinit.o%s; \
      fvtable-verify=std:vtv_start.o%s}"
+#if defined ENABLE_DEFAULT_PIE
+#define GNU_USER_TARGET_STARTFILE_SPEC \
+  "%{!shared: %{pg|p|profile:gcrt1.o%s;: \
+    %{" PIE_SPEC ":Scrt1.o%s} %{" NO_PIE_SPEC ":crt1.o%s}}} \
+   crti.o%s %{static:crtbeginT.o%s;: %{shared:crtbeginS.o%s} \
+	      %{" PIE_SPEC ":crtbeginS.o%s} \
+	      %{" NO_PIE_SPEC ":crtbegin.o%s}}" \
+   FVTABLE_VERIFY_SPEC
+#else
+#define GNU_USER_TARGET_STARTFILE_SPEC \
+  "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
+   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" \
+   FVTABLE_VERIFY_SPEC
+#endif
 #else
 #define GNU_USER_TARGET_STARTFILE_SPEC \
   "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
-   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
-   %{fvtable-verify=none:%s; \
-     fvtable-verify=preinit:vtv_start_preinit.o%s; \
-     fvtable-verify=std:vtv_start.o%s}"
+   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" \
+   FVTABLE_VERIFY_SPEC
 #endif
 #undef  STARTFILE_SPEC
 #define STARTFILE_SPEC GNU_USER_TARGET_STARTFILE_SPEC
diff --git a/gcc/configure b/gcc/configure
index 1a35d5a..b419791 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -600,6 +600,9 @@ ac_includes_default="\
 
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+NO_PIE_FLAG
+NO_PIE_CFLAGS
+enable_default_pie
 PICFLAG
 enable_host_shared
 enable_plugin
@@ -937,6 +940,7 @@ enable_host_shared
 enable_libquadmath_support
 with_linker_hash_style
 with_diagnostics_color
+enable_default_pie
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1665,6 +1669,7 @@ Optional Features:
   --enable-host-shared    build host code as shared libraries
   --disable-libquadmath-support
                           disable libquadmath support for Fortran
+  --enable-default-pie    enable Position Independent Executable as default
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -18147,7 +18152,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 18150 "configure"
+#line 18155 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -18253,7 +18258,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 18256 "configure"
+#line 18261 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -28432,6 +28437,76 @@ cat > gcc-driver-name.h <<EOF
 #define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_BASEVER}${exeext}"
 EOF
 
+# Check whether --enable-default-pie was given.
+# Check whether --enable-default-pie was given.
+if test "${enable_default_pie+set}" = set; then :
+  enableval=$enable_default_pie; enable_default_pie=$enableval
+else
+  enable_default_pie=no
+fi
+
+if test x$enable_default_pie == xyes ; then
+
+$as_echo "#define ENABLE_DEFAULT_PIE 1" >>confdefs.h
+
+fi
+
+
+# Check if -fno-PIE works.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
+$as_echo_n "checking for -fno-PIE option... " >&6; }
+if test "${gcc_cv_c_no_fpie+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  saved_CFLAGS="$CFLAGS"
+   CFLAGS="$CFLAGS -fno-PIE"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void) {return 0;}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gcc_cv_c_no_fpie=yes
+else
+  gcc_cv_c_no_fpie=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS="$saved_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5
+$as_echo "$gcc_cv_c_no_fpie" >&6; }
+if test "$gcc_cv_c_no_fpie" = "yes"; then
+  NO_PIE_CFLAGS="-fno-PIE"
+fi
+
+
+# Check if -no-pie works.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
+$as_echo_n "checking for -no-pie option... " >&6; }
+if test "${gcc_cv_no_pie+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  saved_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -no-pie"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void) {return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gcc_cv_no_pie=yes
+else
+  gcc_cv_no_pie=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+   LDFLAGS="$saved_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5
+$as_echo "$gcc_cv_no_pie" >&6; }
+if test "$gcc_cv_no_pie" = "yes"; then
+  NO_PIE_FLAG="-no-pie"
+fi
+
+
 # Configure the subdirectories
 # AC_CONFIG_SUBDIRS($subdirs)
 
diff --git a/gcc/configure.ac b/gcc/configure.ac
index a553a65..dfd1537 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5759,6 +5759,46 @@ cat > gcc-driver-name.h <<EOF
 #define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_BASEVER}${exeext}"
 EOF
 
+# Check whether --enable-default-pie was given.
+AC_ARG_ENABLE(default-pie,
+[AS_HELP_STRING([--enable-default-pie],
+  [enable Position Independent Executable as default])],
+enable_default_pie=$enableval,
+enable_default_pie=no)
+if test x$enable_default_pie == xyes ; then
+  AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
+      [Define if your target supports default PIE and it is enabled.])
+fi
+AC_SUBST([enable_default_pie])
+
+# Check if -fno-PIE works.
+AC_CACHE_CHECK([for -fno-PIE option],
+  [gcc_cv_c_no_fpie],
+  [saved_CFLAGS="$CFLAGS"
+   CFLAGS="$CFLAGS -fno-PIE"
+   AC_COMPILE_IFELSE([int main(void) {return 0;}],
+     [gcc_cv_c_no_fpie=yes],
+     [gcc_cv_c_no_fpie=no])
+   CFLAGS="$saved_CFLAGS"])
+if test "$gcc_cv_c_no_fpie" = "yes"; then
+  NO_PIE_CFLAGS="-fno-PIE"
+fi
+AC_SUBST([NO_PIE_CFLAGS])
+
+# Check if -no-pie works.
+AC_CACHE_CHECK([for -no-pie option],
+  [gcc_cv_no_pie],
+  [saved_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -no-pie"
+   AC_LINK_IFELSE([int main(void) {return 0;}],
+     [gcc_cv_no_pie=yes],
+     [gcc_cv_no_pie=no])
+   LDFLAGS="$saved_LDFLAGS"])
+if test "$gcc_cv_no_pie" = "yes"; then
+  NO_PIE_FLAG="-no-pie"
+fi
+AC_SUBST([NO_PIE_FLAG])
+
 # Configure the subdirectories
 # AC_CONFIG_SUBDIRS($subdirs)
 
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 1d54798..f0acadc 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1186,6 +1186,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define DEFAULT_PCC_STRUCT_RETURN 1
 #endif
 
+/* Default PIE to -fPIE.  */
+#ifndef DEFAULT_FLAG_PIE
+# define DEFAULT_FLAG_PIE 2
+#endif
+
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions
 
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index b8bb4bd..761e929 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1583,6 +1583,9 @@ 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.
+
 @item --disable-libquadmath
 Specify that the GCC quad-precision math library should not be built.
 On some systems, the library is required to be linkable when building
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 006a852..7fcc8d1 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -11029,6 +11029,10 @@ For predictable results, you must also specify the same set of options
 used for compilation (@option{-fpie}, @option{-fPIE},
 or model suboptions) when you specify this linker option.
 
+@item -no-pie
+@opindex no-pie
+Don't produce a position independent executable.
+
 @item -rdynamic
 @opindex rdynamic
 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 8a163a1..233a3db 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -737,12 +737,20 @@ proper position among the other output files.  */
 #endif
 #endif
 
+#ifdef ENABLE_DEFAULT_PIE
+#define NO_PIE_SPEC	"no-pie|static"
+#define PIE_SPEC	NO_PIE_SPEC "|r|shared:;"
+#else
+#define PIE_SPEC "pie"
+#endif
+
 #ifndef LINK_PIE_SPEC
 #ifdef HAVE_LD_PIE
-#define LINK_PIE_SPEC "%{pie:-pie} "
+#define LD_PIE_SPEC "-pie"
 #else
-#define LINK_PIE_SPEC "%{pie:} "
+#define LD_PIE_SPEC ""
 #endif
+#define LINK_PIE_SPEC "%{no-pie:} " "%{" PIE_SPEC ":" LD_PIE_SPEC "} "
 #endif
 
 #ifndef LINK_BUILDID_SPEC
diff --git a/gcc/opts.c b/gcc/opts.c
index 39c190d..748238e 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -739,8 +739,22 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
       opts->x_flag_section_anchors = 0;
     }
 
+#ifndef ENABLE_DEFAULT_PIE
+#undef DEFAULT_FLAG_PIE
+#define DEFAULT_FLAG_PIE 0
+#endif
+
   if (!opts->x_flag_opts_finished)
     {
+      /* We initialize opts->x_flag_pie to -1 so that targets can set a
+	 default value.  */
+      if (opts->x_flag_pie == -1)
+	{
+	  if (opts->x_flag_pic == 0)
+	    opts->x_flag_pie = DEFAULT_FLAG_PIE;
+	  else
+	    opts->x_flag_pie = 0;
+	}
       if (opts->x_flag_pie)
 	opts->x_flag_pic = opts->x_flag_pie;
       if (opts->x_flag_pic && !opts->x_flag_pie)
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index 88ddfea..4fa0f78 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -284,7 +284,7 @@ INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
 
 # Options to use when compiling crtbegin/end.
 CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-  -finhibit-size-directive -fno-inline -fno-exceptions \
+  $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
   -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
   -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
   $(INHIBIT_LIBC_CFLAGS)
-- 
1.9.3


^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2015-10-29 11:16 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-06 17:31 PING^3: [PATCH]: New configure options that make the compiler use -fPIE and -pie as default option H.J. Lu
2015-03-06 20:22 ` Magnus Granberg
2015-03-06 20:25   ` H.J. Lu
2015-05-07 21:17 ` Joseph Myers
2015-05-08 17:35   ` H.J. Lu
2015-05-18 22:53     ` Magnus Granberg
2015-05-19  1:25       ` Joseph Myers
2015-05-19  1:34         ` H.J. Lu
2015-05-19 15:27           ` Joseph Myers
2015-05-19 15:33             ` H.J. Lu
2015-05-19 15:33               ` Paul_Koning
2015-05-19 15:43                 ` H.J. Lu
2015-05-19 15:37               ` Joseph Myers
2015-05-19 19:33                 ` H.J. Lu
2015-05-20 21:29                   ` Joseph Myers
2015-05-20 23:01                   ` Hans-Peter Nilsson
2015-05-20 23:54                     ` H.J. Lu
2015-05-21 14:42                   ` Rainer Orth
2015-05-21 17:19                     ` Joseph Myers
2015-05-21 17:57                     ` H.J. Lu
2015-06-03 12:48                       ` Rainer Orth
     [not found]                   ` <CAMe9rOpZow4w3zcycLoTb5LZdLKP2QWNpsU5oLMJCyZGUTd1fg@mail.gmail.com>
     [not found]                     ` <87vbflkh05.fsf@igel.home>
     [not found]                       ` <CAMe9rOr0SApdtzeOrc-uNDRH8=z6c4EzHUkyXmERW_q9BYjrAQ@mail.gmail.com>
     [not found]                         ` <87k2w1k54t.fsf@igel.home>
2015-05-22 15:39                           ` Fwd: " H.J. Lu
2015-05-26 22:42                             ` Bill Schmidt
2015-05-26 22:53                               ` Bill Schmidt
2015-05-27 15:42                                 ` Peter Bergner
2015-05-27 15:59                                   ` H.J. Lu
2015-05-27 16:17                                     ` Peter Bergner
2015-05-27 16:34                                       ` H.J. Lu
2015-05-27 17:43                                         ` David Edelsohn
2015-05-27 17:44                                           ` H.J. Lu
2015-05-30 15:45                             ` Andreas Schwab
2015-05-30 16:24                               ` H.J. Lu
2015-05-30 16:44                                 ` Andreas Schwab
2015-05-30 17:04                                   ` H.J. Lu
2015-05-30 20:08                                     ` Andreas Schwab
2015-05-30 21:42                                       ` H.J. Lu
2015-05-31  0:52                                         ` Andreas Schwab
2015-05-31  7:13                                           ` H.J. Lu
2015-05-31  8:23                                             ` Andreas Schwab
2015-05-31 15:52                                               ` H.J. Lu
2015-05-30 20:04                             ` Andreas Schwab
2015-05-30 21:08                               ` Andreas Schwab
2015-10-23 11:57                             ` Marcus Shawcroft
2015-10-23 12:44                               ` H.J. Lu
2015-10-23 14:27                                 ` Marcus Shawcroft
2015-10-28 16:06                                 ` Marcus Shawcroft
2015-10-29 11:02                                 ` Richard Earnshaw
2015-10-29 11:18                                   ` H.J. Lu
2015-06-10 13:26                   ` Rainer Orth
2015-05-26 23:09     ` Matthew Fortune
2015-05-27  2:49       ` Matthew Fortune
2015-05-27  4:59       ` H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).