Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Wed, Sep 13, 2017 at 08:57:39AM +0200, Markus Trippelsdorf wrote: > On 2017.09.12 at 13:48 -0500, Aaron Sawdey wrote: > > On Tue, 2017-09-12 at 16:20 +, Joseph Myers wrote: > > > On Mon, 28 Aug 2017, H.J. Lu wrote: > > > > > > > Here is the updated patch. OK for trunk? > > > > > > OK. > > > > This seems to be causing an issue for me on powerpc: > > > > ../../trunk/gcc/config/rs6000/sysv4.h:819:0: error: "LINK_EH_SPEC" > > redefined [-Werror] > > # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " > > It will cause problems on other platforms as well: > > gcc/config/alpha/elf.h:171:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " > gcc/config/alpha/vms.h:209:#define LINK_EH_SPEC "vms-dwarf2eh.o%s " > gcc/config/dragonfly.h:64:#define LINK_EH_SPEC "--eh-frame-hdr" > gcc/config/freebsd.h:48:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " > gcc/config/gnu-user.h:135:#define LINK_EH_SPEC > "%{!static|static-pie:--eh-frame-hdr} " > gcc/config/netbsd.h:128:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " > gcc/config/openbsd.h:139:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " > gcc/config/powerpcspe/sysv4.h:808:# define LINK_EH_SPEC > "%{!static:--eh-frame-hdr} " > gcc/config/rs6000/sysv4.h:819:# define LINK_EH_SPEC > "%{!static:--eh-frame-hdr} " > gcc/config/sol2.h:375:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " Most of these aren't including gnu-user.h and then the other header. It is only rs6000/sysv4.h and powerpcspe/sysv4.h where gnu-user.h is (sometimes, which is why you can't remove it from there altogether) included first, and alpha/elf.h where gnu-user.h is not included, yet it is a linux target where you probably want to handle it similarly. Although, perhaps -static-pie should be supported by other ELF targets like Solaris, NetBSD, OpenBSD, FreeBSD and therefore the other LINK_EH_SPEC that have !static:--eh-frame-hdr should be tweaked too. I'd say the urgent thing is to patch rs6000/sysv4.h to match the new gnu-user.h definition. Reorganizing headers so that for linux and hurd it is solely gnu-user.h that defines this kind of macros is lots of work. Jakub
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On 2017.09.12 at 13:48 -0500, Aaron Sawdey wrote: > On Tue, 2017-09-12 at 16:20 +, Joseph Myers wrote: > > On Mon, 28 Aug 2017, H.J. Lu wrote: > > > > > Here is the updated patch. OK for trunk? > > > > OK. > > This seems to be causing an issue for me on powerpc: > > ../../trunk/gcc/config/rs6000/sysv4.h:819:0: error: "LINK_EH_SPEC" redefined > [-Werror] > # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " It will cause problems on other platforms as well: gcc/config/alpha/elf.h:171:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " gcc/config/alpha/vms.h:209:#define LINK_EH_SPEC "vms-dwarf2eh.o%s " gcc/config/dragonfly.h:64:#define LINK_EH_SPEC "--eh-frame-hdr" gcc/config/freebsd.h:48:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " gcc/config/gnu-user.h:135:#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " gcc/config/netbsd.h:128:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " gcc/config/openbsd.h:139:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " gcc/config/powerpcspe/sysv4.h:808:# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " gcc/config/rs6000/sysv4.h:819:# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " gcc/config/sol2.h:375:#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -- Markus
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Tue, Sep 12, 2017 at 11:48 AM, Aaron Sawdeywrote: > On Tue, 2017-09-12 at 16:20 +, Joseph Myers wrote: >> On Mon, 28 Aug 2017, H.J. Lu wrote: >> >> > Here is the updated patch. OK for trunk? >> >> OK. > > This seems to be causing an issue for me on powerpc: > > /home/sawdey/src/gcc/trunk/build/./prev-gcc/xg++ > -B/home/sawdey/src/gcc/trunk/build/./prev-gcc/ > -B/home/sawdey/install/gcc/trunk_str/powerpc64le-unknown-linux-gnu/bin/ > -nostdinc++ > -B/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs > > -B/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs > > -I/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/powerpc64le-unknown-linux-gnu > > -I/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include > -I/home/sawdey/src/gcc/trunk/trunk/libstdc++-v3/libsupc++ > -L/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs > > -L/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs > -c -g -O2 -gtoggle -DIN_GCC -fno-exceptions -fno-rtti > -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings > -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic > -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror > -fno-common -DHAVE_CONFIG_H -DGENERATOR_FILE -fno-PIE -I. -Ibuild > -I../../trunk/gcc -I../../trunk/gcc/build -I../../trunk/gcc/../include > -I../../trunk/gcc/../libcpp/include \ > -o build/gencheck.o ../../trunk/gcc/gencheck.c > In file included from ./tm.h:30:0, > from ../../trunk/gcc/gencheck.c:23: > ../../trunk/gcc/config/rs6000/sysv4.h:819:0: error: "LINK_EH_SPEC" redefined > [-Werror] > # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " > > In file included from ./tm.h:28:0, > from ../../trunk/gcc/gencheck.c:23: > ../../trunk/gcc/config/gnu-user.h:135:0: note: this is the location of the > previous definition > #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " > > I don't see the problem on 252033. > There are several problems in rs6000/sysv4.h: 1. It doesn't undef LINK_EH_SPEC before define it. 2. It shouldn't define it for Linux since it has been defined in gnu-user.h. You didn't see the problem since there were the same before my patch. Can you not define LINK_EH_SPEC for Linux targets? -- H.J.
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Tue, 2017-09-12 at 16:20 +, Joseph Myers wrote: > On Mon, 28 Aug 2017, H.J. Lu wrote: > > > Here is the updated patch. OK for trunk? > > OK. This seems to be causing an issue for me on powerpc: /home/sawdey/src/gcc/trunk/build/./prev-gcc/xg++ -B/home/sawdey/src/gcc/trunk/build/./prev-gcc/ -B/home/sawdey/install/gcc/trunk_str/powerpc64le-unknown-linux-gnu/bin/ -nostdinc++ -B/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs -B/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -I/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/powerpc64le-unknown-linux-gnu -I/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include -I/home/sawdey/src/gcc/trunk/trunk/libstdc++-v3/libsupc++ -L/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs -L/home/sawdey/src/gcc/trunk/build/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -c -g -O2 -gtoggle -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -fno-common -DHAVE_CONFIG_H -DGENERATOR_FILE -fno-PIE -I. -Ibuild -I../../trunk/gcc -I../../trunk/gcc/build -I../../trunk/gcc/../include -I../../trunk/gcc/../libcpp/include \ -o build/gencheck.o ../../trunk/gcc/gencheck.c In file included from ./tm.h:30:0, from ../../trunk/gcc/gencheck.c:23: ../../trunk/gcc/config/rs6000/sysv4.h:819:0: error: "LINK_EH_SPEC" redefined [-Werror] # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " In file included from ./tm.h:28:0, from ../../trunk/gcc/gencheck.c:23: ../../trunk/gcc/config/gnu-user.h:135:0: note: this is the location of the previous definition #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " I don't see the problem on 252033. Thanks, Aaron -- Aaron Sawdey, Ph.D. acsaw...@linux.vnet.ibm.com 050-2/C113 (507) 253-7520 home: 507/263-0782 IBM Linux Technology Center - PPC Toolchain
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Mon, 28 Aug 2017, H.J. Lu wrote: > Here is the updated patch. OK for trunk? OK. -- Joseph S. Myers jos...@codesourcery.com
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Mon, Aug 28, 2017 at 9:10 AM, Joseph Myerswrote: > On Tue, 8 Aug 2017, H.J. Lu wrote: > >> This patch adds -static-pie to GCC driver to create static PIE. A static >> position independent executable (PIE) is similar to static executable, >> but can be loaded at any address without a dynamic linker. All linker >> input files must be compiled with -fpie or -fPIE and linker must support >> --no-dynamic-linker to avoid linking with dynamic linker. "-z text" is >> also needed to prevent dynamic relocations in read-only segments. >> >> OK for trunk? > > I think the documentation for various options needs updating to clarify > exactly what they mean. (And potentially help text, which for driver > options is in gcc.c:display_help with the common.opt text being ignored in > that case.) Done. > -static is no longer just "prevents linking with the shared libraries" as > the documentation says, given it's also overriding (explicit or > configure-time default) -pie. -pie is no longer just "Produce a position > independent executable", it's producing a *dynamically linked* PIE. Done. >> +@item -static-pie >> +@opindex static-pie >> +Produce a static position independent executable on targets that support >> +it. A static position independent executable is similar to static >> +executable, but can be loaded at any address without a dynamic linker. > > "to a static executable". > Done. Here is the updated patch. OK for trunk? Thanks. -- H.J. From da4fdd54c53cfafbd45c7a7fe996f907b6d141f4 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 20 Jul 2017 14:08:18 -0700 Subject: [PATCH] Add -static-pie to GCC driver to create static PIE This patch adds -static-pie to GCC driver to create static PIE. A static position independent executable (PIE) is similar to static executable, but can be loaded at any address without a dynamic linker. All linker input files must be compiled with -fpie or -fPIE and linker must support --no-dynamic-linker to avoid linking with dynamic linker. "-z text" is also needed to prevent dynamic relocations in read-only segments. PR driver/81498 * common.opt (-static-pie): New alias. (shared): Negate static-pie. (-no-pie): Update help text. (-pie): Likewise. (static-pie): New option. * config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Add -static-pie support. (GNU_USER_TARGET_ENDFILE_SPEC): Likewise. (LINK_EH_SPEC): Likewise. (LINK_GCC_C_SEQUENCE_SPEC): Likewise. * config/i386/gnu-user.h (GNU_USER_TARGET_LINK_SPEC): Likewise. * config/i386/gnu-user64.h (GNU_USER_TARGET_LINK_SPEC): Likewise. * gcc.c (LINK_COMMAND_SPEC): Likewise. (init_gcc_specs): Likewise. (init_spec): Likewise. (display_help): Update help message for -pie. * doc/invoke.texi: Update -pie, -no-pie and -static. Document -static-pie. --- gcc/common.opt | 13 ++--- gcc/config/gnu-user.h| 15 --- gcc/config/i386/gnu-user.h | 7 --- gcc/config/i386/gnu-user64.h | 11 ++- gcc/doc/invoke.texi | 24 +--- gcc/gcc.c| 20 6 files changed, 57 insertions(+), 33 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index 1331008f811..fb88ed655fe 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -353,6 +353,9 @@ Common Alias(pedantic-errors) -pie Driver Alias(pie) +-static-pie +Driver Alias(static-pie) + -pipe Driver Alias(pipe) @@ -3062,7 +3065,7 @@ x Driver Joined Separate shared -Driver RejectNegative Negative(pie) +Driver RejectNegative Negative(static-pie) Create a shared library. shared-libgcc @@ -3108,11 +3111,15 @@ Driver no-pie Driver RejectNegative Negative(shared) -Don't create a position independent executable. +Don't create a dynamically linked position independent executable. pie Driver RejectNegative Negative(no-pie) -Create a position independent executable. +Create a dynamically linked position independent executable. + +static-pie +Driver RejectNegative Negative(pie) +Create a static position independent executable. z Driver Joined Separate diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index de605b0c466..a967b69a350 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -53,11 +53,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see "%{shared:; \ pg|p|profile:gcrt1.o%s; \ static:crt1.o%s; \ - " PIE_SPEC ":Scrt1.o%s; \ + static-pie|" PIE_SPEC ":Scrt1.o%s; \ :crt1.o%s} \ crti.o%s \ %{static:crtbeginT.o%s; \ - shared|" PIE_SPEC ":crtbeginS.o%s; \ + shared|static-pie|" PIE_SPEC ":crtbeginS.o%s; \ :crtbegin.o%s} \ %{fvtable-verify=none:%s; \ fvtable-verify=preinit:vtv_start_preinit.o%s; \ @@ -70,7 +70,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see :crt1.o%s} \ crti.o%s \ %{static:crtbeginT.o%s; \ - shared|pie:crtbeginS.o%s; \ +
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Tue, 8 Aug 2017, H.J. Lu wrote: > This patch adds -static-pie to GCC driver to create static PIE. A static > position independent executable (PIE) is similar to static executable, > but can be loaded at any address without a dynamic linker. All linker > input files must be compiled with -fpie or -fPIE and linker must support > --no-dynamic-linker to avoid linking with dynamic linker. "-z text" is > also needed to prevent dynamic relocations in read-only segments. > > OK for trunk? I think the documentation for various options needs updating to clarify exactly what they mean. (And potentially help text, which for driver options is in gcc.c:display_help with the common.opt text being ignored in that case.) -static is no longer just "prevents linking with the shared libraries" as the documentation says, given it's also overriding (explicit or configure-time default) -pie. -pie is no longer just "Produce a position independent executable", it's producing a *dynamically linked* PIE. > +@item -static-pie > +@opindex static-pie > +Produce a static position independent executable on targets that support > +it. A static position independent executable is similar to static > +executable, but can be loaded at any address without a dynamic linker. "to a static executable". -- Joseph S. Myers jos...@codesourcery.com
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Wed, Aug 9, 2017 at 3:39 AM, H.J. Luwrote: > On Tue, Aug 8, 2017 at 10:36 PM, Richard Biener > wrote: >> On August 9, 2017 12:18:41 AM GMT+02:00, "H.J. Lu" >> wrote: >>>This patch adds -static-pie to GCC driver to create static PIE. A >>>static >>>position independent executable (PIE) is similar to static executable, >>>but can be loaded at any address without a dynamic linker. All linker >>>input files must be compiled with -fpie or -fPIE and linker must >>>support >>>--no-dynamic-linker to avoid linking with dynamic linker. "-z text" is >>>also needed to prevent dynamic relocations in read-only segments. >>> >>>OK for trunk? >> >> What's wrong with -static -pie? >> > > -static -pie behaved differently depending on if --enable-default-pie > was used: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81523 > > I just checked in a patch to make -static always override -pie. > Hi Joseph, Can you take a look at this patch? I am enclosing it here. Thanks. -- H.J. From d5b7ffdb48d18b65e071b9e064e7d73ac58573da Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 20 Jul 2017 14:08:18 -0700 Subject: [PATCH] Add -static-pie to GCC driver to create static PIE This patch adds -static-pie to GCC driver to create static PIE. A static position independent executable (PIE) is similar to static executable, but can be loaded at any address without a dynamic linker. All linker input files must be compiled with -fpie or -fPIE and linker must support --no-dynamic-linker to avoid linking with dynamic linker. "-z text" is also needed to prevent dynamic relocations in read-only segments. PR driver/81498 * common.opt (-static-pie): New alias. (shared): Negate static-pie. (static-pie): New option. * config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Add -static-pie support. (GNU_USER_TARGET_ENDFILE_SPEC): Likewise. (LINK_EH_SPEC): Likewise. (LINK_GCC_C_SEQUENCE_SPEC): Likewise. * config/i386/gnu-user.h (GNU_USER_TARGET_LINK_SPEC): Likewise. * config/i386/gnu-user64.h (GNU_USER_TARGET_LINK_SPEC): Likewise. * gcc.c (LINK_COMMAND_SPEC): Likewise. (init_gcc_specs): Likewise. (init_spec): Likewise. * doc/invoke.texi: Document -static-pie. --- gcc/common.opt | 9 - gcc/config/gnu-user.h| 15 --- gcc/config/i386/gnu-user.h | 7 --- gcc/config/i386/gnu-user64.h | 11 ++- gcc/doc/invoke.texi | 11 ++- gcc/gcc.c| 17 ++--- 6 files changed, 46 insertions(+), 24 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index 1cb1c83d306..246566168cc 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -353,6 +353,9 @@ Common Alias(pedantic-errors) -pie Driver Alias(pie) +-static-pie +Driver Alias(static-pie) + -pipe Driver Alias(pipe) @@ -3062,7 +3065,7 @@ x Driver Joined Separate shared -Driver RejectNegative Negative(pie) +Driver RejectNegative Negative(static-pie) Create a shared library. shared-libgcc @@ -3114,6 +3117,10 @@ pie Driver RejectNegative Negative(no-pie) Create a position independent executable. +static-pie +Driver RejectNegative Negative(pie) +Create a static position independent executable. + z Driver Joined Separate diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index de605b0c466..a967b69a350 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -53,11 +53,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see "%{shared:; \ pg|p|profile:gcrt1.o%s; \ static:crt1.o%s; \ - " PIE_SPEC ":Scrt1.o%s; \ + static-pie|" PIE_SPEC ":Scrt1.o%s; \ :crt1.o%s} \ crti.o%s \ %{static:crtbeginT.o%s; \ - shared|" PIE_SPEC ":crtbeginS.o%s; \ + shared|static-pie|" PIE_SPEC ":crtbeginS.o%s; \ :crtbegin.o%s} \ %{fvtable-verify=none:%s; \ fvtable-verify=preinit:vtv_start_preinit.o%s; \ @@ -70,7 +70,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see :crt1.o%s} \ crti.o%s \ %{static:crtbeginT.o%s; \ - shared|pie:crtbeginS.o%s; \ + shared|pie|static-pie:crtbeginS.o%s; \ :crtbegin.o%s} \ %{fvtable-verify=none:%s; \ fvtable-verify=preinit:vtv_start_preinit.o%s; \ @@ -92,7 +92,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see fvtable-verify=preinit:vtv_end_preinit.o%s; \ fvtable-verify=std:vtv_end.o%s} \ %{static:crtend.o%s; \ - shared|" PIE_SPEC ":crtendS.o%s; \ + shared|static-pie|" PIE_SPEC ":crtendS.o%s; \ :crtend.o%s} \ crtn.o%s \ " CRTOFFLOADEND @@ -102,7 +102,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see fvtable-verify=preinit:vtv_end_preinit.o%s; \ fvtable-verify=std:vtv_end.o%s} \ %{static:crtend.o%s; \ - shared|pie:crtendS.o%s; \ + shared|pie|static-pie:crtendS.o%s; \ :crtend.o%s} \ crtn.o%s \
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On Tue, Aug 8, 2017 at 10:36 PM, Richard Bienerwrote: > On August 9, 2017 12:18:41 AM GMT+02:00, "H.J. Lu" > wrote: >>This patch adds -static-pie to GCC driver to create static PIE. A >>static >>position independent executable (PIE) is similar to static executable, >>but can be loaded at any address without a dynamic linker. All linker >>input files must be compiled with -fpie or -fPIE and linker must >>support >>--no-dynamic-linker to avoid linking with dynamic linker. "-z text" is >>also needed to prevent dynamic relocations in read-only segments. >> >>OK for trunk? > > What's wrong with -static -pie? > -static -pie behaved differently depending on if --enable-default-pie was used: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81523 I just checked in a patch to make -static always override -pie. -- H.J.
Re: [PATCH] Add -static-pie to GCC driver to create static PIE
On August 9, 2017 12:18:41 AM GMT+02:00, "H.J. Lu"wrote: >This patch adds -static-pie to GCC driver to create static PIE. A >static >position independent executable (PIE) is similar to static executable, >but can be loaded at any address without a dynamic linker. All linker >input files must be compiled with -fpie or -fPIE and linker must >support >--no-dynamic-linker to avoid linking with dynamic linker. "-z text" is >also needed to prevent dynamic relocations in read-only segments. > >OK for trunk? What's wrong with -static -pie? >H.J. >--- > PR driver/81498 > * common.opt (-static-pie): New alias. > (shared): Negate static-pie. > (static-pie): New option. > * config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Add > -static-pie support. > (GNU_USER_TARGET_ENDFILE_SPEC): Likewise. > (LINK_EH_SPEC): Likewise. > (LINK_GCC_C_SEQUENCE_SPEC): Likewise. > * config/i386/gnu-user.h (GNU_USER_TARGET_LINK_SPEC): Likewise. > * config/i386/gnu-user64.h (GNU_USER_TARGET_LINK_SPEC): Likewise. > * gcc.c (LINK_COMMAND_SPEC): Likewise. > (init_gcc_specs): Likewise. > (init_spec): Likewise. > * doc/invoke.texi: Document -static-pie. >--- > gcc/common.opt | 9 - > gcc/config/gnu-user.h| 15 --- > gcc/config/i386/gnu-user.h | 7 --- > gcc/config/i386/gnu-user64.h | 11 ++- > gcc/doc/invoke.texi | 11 ++- > gcc/gcc.c| 17 ++--- > 6 files changed, 46 insertions(+), 24 deletions(-) > >diff --git a/gcc/common.opt b/gcc/common.opt >index 1cb1c83d306..246566168cc 100644 >--- a/gcc/common.opt >+++ b/gcc/common.opt >@@ -353,6 +353,9 @@ Common Alias(pedantic-errors) > -pie > Driver Alias(pie) > >+-static-pie >+Driver Alias(static-pie) >+ > -pipe > Driver Alias(pipe) > >@@ -3062,7 +3065,7 @@ x > Driver Joined Separate > > shared >-Driver RejectNegative Negative(pie) >+Driver RejectNegative Negative(static-pie) > Create a shared library. > > shared-libgcc >@@ -3114,6 +3117,10 @@ pie > Driver RejectNegative Negative(no-pie) > Create a position independent executable. > >+static-pie >+Driver RejectNegative Negative(pie) >+Create a static position independent executable. >+ > z > Driver Joined Separate > >diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h >index de605b0c466..a967b69a350 100644 >--- a/gcc/config/gnu-user.h >+++ b/gcc/config/gnu-user.h >@@ -53,11 +53,11 @@ see the files COPYING3 and COPYING.RUNTIME >respectively. If not, see > "%{shared:; \ > pg|p|profile:gcrt1.o%s; \ > static:crt1.o%s; \ >- " PIE_SPEC ":Scrt1.o%s; \ >+ static-pie|" PIE_SPEC ":Scrt1.o%s; \ > :crt1.o%s} \ >crti.o%s \ >%{static:crtbeginT.o%s; \ >- shared|" PIE_SPEC ":crtbeginS.o%s; \ >+ shared|static-pie|" PIE_SPEC ":crtbeginS.o%s; \ > :crtbegin.o%s} \ >%{fvtable-verify=none:%s; \ > fvtable-verify=preinit:vtv_start_preinit.o%s; \ >@@ -70,7 +70,7 @@ see the files COPYING3 and COPYING.RUNTIME >respectively. If not, see > :crt1.o%s} \ >crti.o%s \ >%{static:crtbeginT.o%s; \ >- shared|pie:crtbeginS.o%s; \ >+ shared|pie|static-pie:crtbeginS.o%s; \ > :crtbegin.o%s} \ >%{fvtable-verify=none:%s; \ > fvtable-verify=preinit:vtv_start_preinit.o%s; \ >@@ -92,7 +92,7 @@ see the files COPYING3 and COPYING.RUNTIME >respectively. If not, see > fvtable-verify=preinit:vtv_end_preinit.o%s; \ > fvtable-verify=std:vtv_end.o%s} \ >%{static:crtend.o%s; \ >- shared|" PIE_SPEC ":crtendS.o%s; \ >+ shared|static-pie|" PIE_SPEC ":crtendS.o%s; \ > :crtend.o%s} \ >crtn.o%s \ >" CRTOFFLOADEND >@@ -102,7 +102,7 @@ see the files COPYING3 and COPYING.RUNTIME >respectively. If not, see > fvtable-verify=preinit:vtv_end_preinit.o%s; \ > fvtable-verify=std:vtv_end.o%s} \ >%{static:crtend.o%s; \ >- shared|pie:crtendS.o%s; \ >+ shared|pie|static-pie:crtendS.o%s; \ > :crtend.o%s} \ >crtn.o%s \ >" CRTOFFLOADEND >@@ -132,12 +132,13 @@ see the files COPYING3 and COPYING.RUNTIME >respectively. If not, see > #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC > > #if defined(HAVE_LD_EH_FRAME_HDR) >-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " >+#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " > #endif > > #undef LINK_GCC_C_SEQUENCE_SPEC > #define LINK_GCC_C_SEQUENCE_SPEC \ >- "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" >+ "%{static|static-pie:--start-group} %G %L \ >+ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" > > /* Use --as-needed -lgcc_s for eh support. */ > #ifdef HAVE_LD_AS_NEEDED >diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h >index a4c88f1a848..8983dc9ecd7 100644 >--- a/gcc/config/i386/gnu-user.h >+++ b/gcc/config/i386/gnu-user.h >@@ -77,9 +77,10 @@ along with GCC; see the file COPYING3. If not see >#define