From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18403 invoked by alias); 30 Dec 2014 21:49:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 18392 invoked by uid 89); 30 Dec 2014 21:49:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.2 required=5.0 tests=AWL,BAYES_50,SPF_PASS,T_RP_MATCHES_RCVD,URIBL_BLACK autolearn=no version=3.3.2 X-HELO: smtp.gentoo.org Received: from smtp.gentoo.org (HELO smtp.gentoo.org) (140.211.166.183) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 30 Dec 2014 21:49:55 +0000 Received: from laptop1.gw.ume.nu (ip1-67.bon.riksnet.se [77.110.8.67]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: zorry) by smtp.gentoo.org (Postfix) with ESMTPSA id D27303406AD; Tue, 30 Dec 2014 21:49:52 +0000 (UTC) From: Magnus Granberg To: gcc-patches@gcc.gnu.org, danielmicay@gmail.com Subject: [PING][PATCH][1-3] New configure options that make the compiler use -fPIE and -pie as default option Date: Tue, 30 Dec 2014 22:04:00 -0000 Message-ID: <1625902.vd5h90ZESU@laptop1.gw.ume.nu> User-Agent: KMail/4.14.3 (Linux/3.17.7-hardened-r1; KDE/4.14.3; x86_64; ; ) In-Reply-To: <3640063.8rDKLvUbS6@laptop1.gw.ume.nu> References: <4827012.p4mTkPPu1h@laptop1.gw.ume.nu> <2546517.6r217PbQ20@laptop1.gw.ume.nu> <3640063.8rDKLvUbS6@laptop1.gw.ume.nu> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart7406160.8o8xornoGE" Content-Transfer-Encoding: 7Bit X-IsSubscribed: yes X-SW-Source: 2014-12/txt/msg01969.txt.bz2 This is a multi-part message in MIME format. --nextPart7406160.8o8xornoGE Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="iso-8859-1" Content-length: 2240 fredag 14 november 2014 23.31.48 skrev Magnus Granberg: > m=E5ndag 10 november 2014 21.26.39 skrev Magnus Granberg: > > > Rainer > >=20 > > Thanks Rainer for the nits and comments. > > Have updated the patches and Changelogs. > > But i still use PIE_DRIVER_SELF_SPECS, do you have a ide where move it = so > > i don't need to duplicate that stuff or how to do it? > >=20 > > Magnus G > >=20 > > 2014-11-10 Magnus Granberg > >=20 > > /gcc > > * config/gnu-user.h (PIE_DRIVER_SELF_SPECS) and > > (GNU_DRIVER_SELF_SPECS): Define. > > * config/i386/gnu-user-common.h (DRIVER_SELF_SPECS): Define > > * configure.ac: Add new option. > > * configure, config.in: Rebuild. > > * Makefile.in (ALL_CFLAGS) and (ALL_CXXFLAGS): Disable PIE. > > * doc/install.texi: New configure option. > > * doc/invoke.texi: Add note to PIE. > > * doc/sourcebuild.texi: New effective target. > > gcc/testsuite > > * gcc/default-pie.c: New test > > * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Skip if default_pie > > * g++.dg/other/anon5.C: Skip if default_pie > > * lib/target-supports.exp (check_effective_target_default_pie): > > New proc. > > /libgcc > > * Makefile.in (CRTSTUFF_CFLAGS): Disable PIE. >=20 > Can this be included for GCC 5 ? >=20 > /Magnus G. One more ping on this. The patches where sent before stage 1 closed but i=20 did't get any feed back from it Have updete the patchses for gcc 5.0 20141228 snapshot. Bootstrapped and tested on x86_64-unknown-linux-gnu (Gentoo) /Magnus 2014-12-30 Magnus Granberg /gcc * config/gnu-user.h (PIE_DRIVER_SELF_SPECS): Define. * config/i386/gnu-user-common.h (DRIVER_SELF_SPECS): Define and add PIE_DRIVER_SELF_SPECS. * configure.ac: Add new option. * configure, config.in: Rebuild. * Makefile.in (ALL_CFLAGS) and (ALL_CXXFLAGS): Disable PIE. * doc/install.texi: New configure option. * doc/invoke.texi: Add note to PIE. * doc/sourcebuild.texi: New effective target. gcc/testsuite * gcc/default-pie.c: New test * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Skip if default_pie * g++.dg/other/anon5.C: Skip if default_pie * lib/target-supports.exp (check_effective_target_default_pie): New proc. /libgcc * Makefile.in (CRTSTUFF_CFLAGS): Disable PIE. --nextPart7406160.8o8xornoGE Content-Disposition: attachment; filename="gcc50_default_pie_doc.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="gcc50_default_pie_doc.patch" Content-length: 2479 --- a/gcc/doc/install.texi 2013-10-01 19:29:40.000000000 +0200 +++ b/gcc/doc/install.texi 2013-11-17 16:13:20.474144921 +0100 @@ -1583,6 +1583,10 @@ do a @samp{make -C gcc gnatlib_and_tools 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*. + @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 --- a/gcc/doc/invoke.texi 2013-10-03 19:13:50.000000000 +0200 +++ b/gcc/doc/invoke.texi 2013-11-17 21:30:02.784220111 +0100 @@ -10898,6 +10898,13 @@ For predictable results, you must also s used for compilation (@option{-fpie}, @option{-fPIE}, or model suboptions) when you specify this linker option. +@emph{Note}: With the @option{--enable-default-pie} configure option, this +options is enabled by default for C, C++, ObjC, ObjC++, if none of +@option{-fno-PIE}, @option{-fno-pie}, @option{-fPIC}, @option{-fpic}, +@option{-fno-PIC}, @option{-fno-pic}, @option{-nostdlib}, +@option{-nostartfiles}, @option{-shared}, @option{-nodefaultlibs}, +nor @option{-static} are found. + @item -rdynamic @opindex rdynamic Pass the flag @option{-export-dynamic} to the ELF linker, on targets @@ -23071,6 +23071,13 @@ used during linking. @code{__pie__} and @code{__PIE__}. The macros have the value 1 for @option{-fpie} and 2 for @option{-fPIE}. +@emph{Note}: With the @option{--enable-default-pie} configure option, this +options is enabled by default for C, C++, ObjC, ObjC++, if none of +@option{-fno-PIE}, @option{-fno-pie}, @option{-fPIC}, @option{-fpic}, +@option{-fno-PIC}, @option{-fno-pic}, @option{-nostdlib}, +@option{-nostartfiles}, @option{-shared}, @option{-nodefaultlibs}, +nor @option{-static} are found. + @item -fno-jump-tables @opindex fno-jump-tables Do not use jump tables for switch statements even where it would be --- a/gcc/doc/sourcebuild.texi 2014-08-20 17:56:45.000000000 +0200 +++ b/gcc/doc/sourcebuild.texi 2014-11-09 23:43:06.254817553 +0100 @@ -1890,6 +1890,9 @@ Target supports @option{-mpe-aligned-com @item pie Target supports @option{-pie}, @option{-fpie} and @option{-fPIE}. +@item default_pie +Target enable @option{-pie}, and @option{-fPIE} as default. + @item section_anchors Target supports section anchors. --nextPart7406160.8o8xornoGE Content-Disposition: attachment; filename="gcc50_default_pie_main.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="gcc50_default_pie_main.patch" Content-length: 5352 --- a/gcc/config/gnu-user.h 2013-08-20 10:31:40.000000000 +0200 +++ b/gcc/config/gnu-user.h 2013-10-23 22:01:42.337238981 +0200 @@ -131,3 +131,13 @@ see the files COPYING3 and COPYING.RUNTI LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \ LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}" #endif + +/* We use this to make the compiler use -fPIE as default and link + with -pie. */ +#ifdef ENABLE_DEFAULT_PIE +#define PIE_DRIVER_SELF_SPECS \ +"%{pie|fpic|fPIC|fpie|fPIE|fno-pic|fno-PIC|fno-pie|fno-PIE| \ + shared|static|nostdlib|nodefaultlibs|nostartfiles:;:-fPIE -pie}" +#else +#define PIE_DRIVER_SELF_SPECS "" +#endif --- a/gcc/config/i386/gnu-user-common.h 2013-01-10 21:38:27.000000000 +0100 +++ b/gcc/config/i386/gnu-user-common.h 2013-10-23 17:37:45.432767049 +0200 @@ -70,3 +70,8 @@ along with GCC; see the file COPYING3. #if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE #define TARGET_CAN_SPLIT_STACK #endif + +/* include PIE_DRIVER_SELF_SPECS. */ +#ifndef DRIVER_SELF_SPECS +#define DRIVER_SELF_SPECS PIE_DRIVER_SELF_SPECS +#endif --- a/gcc/configure.ac 2014-04-28 16:01:40.000000000 +0200 +++ b/gcc/configure.ac 2014-05-08 02:42:30.900883247 +0200 @@ -5754,6 +5754,36 @@ if test x"${LINKER_HASH_STYLE}" != x; th #define GCC_DRIVER_NAME "${target_noncanonical}-gcc-${gcc_BASEVER}${exeext}" EOF +# Check whether --enable-default-pie was given and target have the support. +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_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 + AC_MSG_RESULT($enable_default_pie) +fi +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]) + # Configure the subdirectories # AC_CONFIG_SUBDIRS($subdirs) --- a/gcc/Makefile.in 2013-10-02 21:52:27.000000000 +0200 +++ b/gcc/Makefile.in 2013-10-24 17:46:22.055357122 +0200 @@ -963,14 +963,23 @@ CONTEXT_H = context.h # cross compiler which does not use the native headers and libraries. INTERNAL_CFLAGS = -DIN_GCC $(PICFLAG) @CROSS@ +# We don't want to compile the compiler with -fPIE, it make PCH fail. +enable_default_pie = @enable_default_pie@ +ifeq ($(enable_default_pie),yes) +NOPIE_CFLAGS = -fno-PIE +else +NOPIE_CFLAGS= +endif + # This is the variable actually used when we compile. If you change this, # you probably want to update BUILD_CFLAGS in configure.ac -ALL_CFLAGS = $(T_CFLAGS) $(CFLAGS-$@) \ +ALL_CFLAGS = $(NOPIE_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) \ $(CFLAGS) $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(WARN_CFLAGS) @DEFS@ # The C++ version. -ALL_CXXFLAGS = $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) $(INTERNAL_CFLAGS) \ - $(COVERAGE_FLAGS) $(NOEXCEPTION_FLAGS) $(WARN_CXXFLAGS) @DEFS@ +ALL_CXXFLAGS = $(NOPIE_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) \ + $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(NOEXCEPTION_FLAGS) \ + $(WARN_CXXFLAGS) @DEFS@ # Likewise. Put INCLUDES at the beginning: this way, if some autoconf macro # puts -I options in CPPFLAGS, our include files in the srcdir will always @@ -1854,6 +1854,7 @@ libgcc.mvars: config.status Makefile spe 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 + echo enable_default_pie = '$(enable_default_pie)' >> tmp-libgcc.mvars mv tmp-libgcc.mvars libgcc.mvars @@ -3609,6 +3609,9 @@ site.exp: ./config.status Makefile @if test "@enable_lto@" = "yes" ; then \ echo "set ENABLE_LTO 1" >> ./site.tmp; \ fi + @if test "@enable_default_pie@" = "yes" ; then \ + echo "set ENABLE_DEFAULT_PIE 1" >> ./site.tmp; \ + fi # If newlib has been configured, we need to pass -B to gcc so it can find # newlib's crt0.o if it exists. This will cause a "path prefix not used" # message if it doesn't, but the testsuite is supposed to ignore the message - --- a/libgcc/Makefile.in 2014-10-30 18:28:30.000000000 +0100 +++ b/libgcc/Makefile.in 2014-11-08 20:37:04.462496763 +0100 @@ -282,11 +282,19 @@ override CFLAGS := $(filter-out -fprofil INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ $(INCLUDES) @set_have_cc_tls@ @set_use_emutls@ +#Don't use -fPIE when compiling crtbegin/end. +ifeq ($(enable_default_pie),yes) +NOPIE_CFLAGS = -fno-PIE +else +NOPIE_CFLAGS= +endif + # Options to use when compiling crtbegin/end. CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ -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) \ + $(NOPIE_CFLAGS) \ $(INHIBIT_LIBC_CFLAGS) # Extra flags to use when compiling crt{begin,end}.o. --nextPart7406160.8o8xornoGE Content-Disposition: attachment; filename="gcc50_default_pie_testsuite.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="gcc50_default_pie_testsuite.patch" Content-length: 2361 --- a/gcc/testsuite/gcc.dg/default-pie.c 2013-11-09 21:07:16.741479728 +0100 +++ b/gcc/testsuite/gcc.dg/default-pie.c 2013-11-09 21:05:07.801479218 +0100 @@ -0,0 +1,11 @@ +/* { dg-require-effective-target default_pie } */ +/* { dg-options "-O2" } */ +int foo (void); + +int +main (void) +{ + return foo (); +} + +/* { dg-final { scan-assembler "foo@PLT" } } */ --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c 2012-03-14 17:33:37.000000000 +0100 +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c 2014-07-29 00:55:17.421086416 +0200 @@ -2,6 +2,7 @@ /* Skipped on MIPS GNU/Linux target because __PIC__ can be defined for executables as well as shared libraries. */ /* { dg-skip-if "" { *-*-darwin* hppa*64*-*-* mips*-*-linux* *-*-mingw* } { "*" } { "" } } */ +/* { dg-skip-if "" { default_pie } { "*" } { "" } } */ /* { dg-options "-O2 -fno-common -fdump-tree-optimized" } */ const int conststaticvariable; --- a/gcc/testsuite/g++.dg/other/anon5.C 2012-11-10 15:34:42.000000000 +0100 +++ b/gcc/testsuite/g++.dg/other/anon5.C 2013-11-09 14:49:52.281390127 +0100 @@ -1,5 +1,6 @@ // PR c++/34094 // { dg-do link { target { ! { *-*-darwin* *-*-hpux* *-*-solaris2.* } } } } +// { dg-skip-if "" { default_pie } { "*" } { "" } } // { dg-options "-g" } // Ignore additional message on powerpc-ibm-aix // { dg-prune-output "obtain more information" } */ --- a/gcc/testsuite/lib/target-supports.exp 2013-10-01 11:18:30.000000000 +0200 +++ b/gcc/testsuite/lib/target-supports.exp 2013-10-25 22:01:46.743388469 +0200 @@ -475,6 +475,11 @@ proc check_profiling_available { test_wh } } + # Profiling doesn't work with default -fPIE -pie. + if { [check_effective_target_default_pie] } { + return 0 + } + # Support for -p on solaris2 relies on mcrt1.o which comes with the # vendor compiler. We cannot reliably predict the directory where the # vendor compiler (and thus mcrt1.o) is installed so we can't @@ -927,6 +927,14 @@ proc check_effective_target_pie { } { return 0 } +# Return 1 if -pie, -fPIE are enable by default, 0 otherwise. + +proc check_effective_target_default_pie { } { + global ENABLE_DEFAULT_PIE + return [info exists ENABLE_DEFAULT_PIE] + return 0 +} + # Return true if the target supports -mpaired-single (as used on MIPS). proc check_effective_target_mpaired_single { } { --nextPart7406160.8o8xornoGE--