On Wed, Sep 13, 2017 at 05:18:00AM -0700, H.J. Lu wrote:
> > In LINK_EH_SPEC you use %{!static|static-pie:--eh-frame-hdr}, what
> > exactly do you mean by that?  The way that works is if -static
> > isn't present on the command line OR if -static -static-pie OR
> > -static-pie -static is present, you get --eh-frame-hdr.  Didn't you
> > mean %{!static:%{!static-pie:--eh-frame-hdr}}, i.e. don't emit
> > --eh-frame-hdr for either -static or -static-pie?
> 
> It means "pass --eh-frame-hdr to ld if -static isn't used or -static-pie
> is used since -static-pie needs PT_GNU_EH_FRAME segment.

Ok.

So here is an updated patch (also fixed whitespace in i386/gnu-user.h
because the indentation there didn't match the nesting).

Bootstrapped/regtested on {x86_64,i686,powerpc64,powerpc64le}-linux,
ok for trunk?
At least the rs6000 part is really important, as bootstrap
is broken on powerpc*.

2017-09-13  Jakub Jelinek  <ja...@redhat.com>

        * config/alpha/elf.h (LINK_EH_SPEC): Add -static-pie support.
        * config/alpha/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
        * config/netbsd.h (LINK_EH_SPEC): Likewise.
        * config/sol2.h (LINK_EH_SPEC): Likewise.
        * config/arm/uclinux-elf.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
        * config/s390/linux.h (LINK_SPEC): Likewise.
        * config/freebsd.h (LINK_EH_SPEC): Likewise.
        * config/openbsd.h (LINK_EH_SPEC): Likewise.
        * config/lm32/uclinux-elf.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
        * config/aarch64/aarch64-linux.h (LINUX_TARGET_LINK_SPEC): Likewise.
        * config/powerpcspe/sysv4.h (LINK_EH_SPEC): Likewise.
        * config/bfin/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
        * config/rs6000/sysv4.h (STARTFILE_LINUX_SPEC): Likewise.
        (ENDFILE_LINUX_SPEC): Likewise.
        (LINK_EH_SPEC): Likewise.
        * config/rs6000/linux64.h (LINK_SHLIB_SPEC): Likewise.
        (LINK_OS_LINUX_SPEC32): Likewise.
        (LINK_OS_LINUX_SPEC64): Likewise.
        * config/rs6000/linux.h (LINK_SHLIB_SPEC): Likewise.
        (LINK_OS_LINUX_SPEC): Likewise.
        * config/i386/gnu-user64.h (GNU_USER_TARGET_LINK_SPEC): Fix a typo.
        * config/i386/gnu-user.h (GNU_USER_TARGET_LINK_SPEC): Formatting fix.

--- gcc/config/alpha/elf.h.jj   2017-01-01 12:45:40.000000000 +0100
+++ gcc/config/alpha/elf.h      2017-09-13 11:34:37.889721802 +0200
@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu
    I imagine that other systems will catch up.  In the meantime, it
    doesn't harm to make sure that the data exists to be used later.  */
 #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
--- gcc/config/alpha/linux.h.jj 2017-01-01 12:45:40.063647860 +0100
+++ gcc/config/alpha/linux.h    2017-09-13 11:42:01.187281636 +0200
@@ -79,7 +79,8 @@ along with GCC; see the file COPYING3.
 #define TARGET_POSIX_IO
 
 #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
--- gcc/config/netbsd.h.jj      2017-07-13 15:37:54.000000000 +0200
+++ gcc/config/netbsd.h 2017-09-13 11:33:39.105443205 +0200
@@ -125,7 +125,7 @@ along with GCC; see the file COPYING3.
 #define LIBGCC_SPEC NETBSD_LIBGCC_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 TARGET_LIBC_HAS_FUNCTION
--- gcc/config/sol2.h.jj        2017-09-01 09:26:51.000000000 +0200
+++ gcc/config/sol2.h   2017-09-13 11:34:04.628129989 +0200
@@ -372,7 +372,7 @@ along with GCC; see the file COPYING3.
 /* Solaris 11 build 135+ implements dl_iterate_phdr.  GNU ld needs
    --eh-frame-hdr to create the required .eh_frame_hdr sections.  */
 #if defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR)
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
 #endif /* HAVE_LD_EH_FRAME && TARGET_DL_ITERATE_PHDR */
 #endif
 
--- gcc/config/arm/uclinux-elf.h.jj     2017-01-01 12:45:41.382630422 +0100
+++ gcc/config/arm/uclinux-elf.h        2017-09-13 11:42:51.438664949 +0200
@@ -70,7 +70,8 @@
 
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G %L}"
+  "%{static|static-pie:--start-group} %G %L \
+   %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %L}}"
 
 /* Use --as-needed -lgcc_s for eh support.  */
 #ifdef HAVE_LD_AS_NEEDED
--- gcc/config/s390/linux.h.jj  2017-02-06 13:32:14.000000000 +0100
+++ gcc/config/s390/linux.h     2017-09-13 13:21:09.209266231 +0200
@@ -82,10 +82,11 @@ along with GCC; see the file COPYING3.
    %{shared:-shared} \
    %{!shared: \
       %{static:-static} \
-      %{!static: \
+      %{!static:%{!static-pie: \
        %{rdynamic:-export-dynamic} \
        %{m31:-dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "} \
-       %{m64:-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}}"
+       %{m64:-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}}} \
+   %{static-pie:-static -pie --no-dynamic-linker -z text}"
 
 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
 
--- gcc/config/i386/gnu-user64.h.jj     2017-09-12 21:58:08.000000000 +0200
+++ gcc/config/i386/gnu-user64.h        2017-09-13 11:53:27.531835467 +0200
@@ -59,7 +59,7 @@ see the files COPYING3 and COPYING.RUNTI
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
-      %{!static-static: \
+      %{!static-pie: \
        %{rdynamic:-export-dynamic} \
        %{" SPEC_32 ":-dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "} \
        %{" SPEC_64 ":-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "} \
--- gcc/config/i386/gnu-user.h.jj       2017-09-12 21:58:08.000000000 +0200
+++ gcc/config/i386/gnu-user.h  2017-09-13 15:37:39.993512827 +0200
@@ -80,7 +80,7 @@ along with GCC; see the file COPYING3.
       %{!static-pie: \
        %{rdynamic:-export-dynamic} \
        -dynamic-linker %(dynamic_linker)}} \
-      %{static:-static} %{static-pie:-static -pie --no-dynamic-linker -z 
text}}"
+    %{static:-static} %{static-pie:-static -pie --no-dynamic-linker -z text}}"
 
 #undef LINK_SPEC
 #define LINK_SPEC GNU_USER_TARGET_LINK_SPEC
--- gcc/config/freebsd.h.jj     2017-01-01 12:45:40.000000000 +0100
+++ gcc/config/freebsd.h        2017-09-13 11:33:13.095762396 +0200
@@ -45,7 +45,7 @@ along with GCC; see the file COPYING3.
 #define LIB_SPEC FBSD_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
 
 #ifdef TARGET_LIBC_PROVIDES_SSP
--- gcc/config/openbsd.h.jj     2017-01-01 12:45:40.000000000 +0100
+++ gcc/config/openbsd.h        2017-09-13 11:33:26.439598640 +0200
@@ -136,7 +136,7 @@ while (0)
 #define LIB_SPEC OBSD_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 LIB_SPEC
--- gcc/config/lm32/uclinux-elf.h.jj    2017-01-01 12:45:42.000000000 +0100
+++ gcc/config/lm32/uclinux-elf.h       2017-09-13 11:44:50.788200287 +0200
@@ -72,7 +72,8 @@
 #define TARGET_OS_CPP_BUILTINS() GNU_USER_TARGET_OS_CPP_BUILTINS()
 
 #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}}"
 
 #undef  CC1_SPEC
 #define CC1_SPEC "%{G*} %{!fno-PIC:-fPIC}"
--- gcc/config/aarch64/aarch64-linux.h.jj       2017-01-01 12:45:43.000000000 
+0100
+++ gcc/config/aarch64/aarch64-linux.h  2017-09-13 15:49:22.378859547 +0200
@@ -38,9 +38,10 @@
    %{static:-Bstatic}                          \
    %{shared:-shared}                           \
    %{symbolic:-Bsymbolic}                      \
-   %{!static:                                  \
+   %{!static:%{!static-pie:                    \
      %{rdynamic:-export-dynamic}               \
-     %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
+     %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}} \
+   %{static-pie:-Bstatic -pie --no-dynamic-linker -z text} \
    -X                                          \
    %{mbig-endian:-EB} %{mlittle-endian:-EL}     \
    -maarch64linux%{mabi=ilp32:32}%{mbig-endian:b}"
--- gcc/config/powerpcspe/sysv4.h.jj    2017-05-25 10:37:06.000000000 +0200
+++ gcc/config/powerpcspe/sysv4.h       2017-09-13 11:32:38.484187151 +0200
@@ -805,7 +805,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF
   -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
 
 #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
 
 #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
--- gcc/config/bfin/linux.h.jj  2017-01-01 12:45:43.000000000 +0100
+++ gcc/config/bfin/linux.h     2017-09-13 11:44:10.858690304 +0200
@@ -35,8 +35,9 @@ see the files COPYING3 and COPYING.RUNTI
 
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static:--start-group} %{mfast-fp:-lbffastfp} %G %L %{static:--end-group} \
-   %{!static:%{mfast-fp:-lbffastfp} %G}"
+  "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %L \
+   %{static|static-pie:--end-group} \
+   %{!static:%{!static-pie:%{mfast-fp:-lbffastfp} %G}}"
 
 #undef CPP_SPEC
 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
--- gcc/config/rs6000/sysv4.h.jj        2017-09-01 09:26:55.000000000 +0200
+++ gcc/config/rs6000/sysv4.h   2017-09-13 11:38:01.493223171 +0200
@@ -764,11 +764,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF
   "%{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} \
    %{mnewlib:ecrti.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; \
@@ -782,7 +782,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF
      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} \
    %{mnewlib:ecrtn.o%s;:crtn.o%s} \
    " CRTOFFLOADEND
@@ -816,7 +816,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF
   -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
 
 #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
 
 #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
--- gcc/config/rs6000/linux64.h.jj      2017-09-05 23:28:22.000000000 +0200
+++ gcc/config/rs6000/linux64.h 2017-09-13 11:57:54.641531551 +0200
@@ -395,7 +395,8 @@ extern int dot_symbols;
 #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux) %(include_extra)"
 
 #undef  LINK_SHLIB_SPEC
-#define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
+#define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}} \
+  %{static-pie:-static -pie --no-dynamic-linker -z text}"
 
 #undef  LIB_DEFAULT_SPEC
 #define LIB_DEFAULT_SPEC "%(lib_linux)"
@@ -470,13 +471,15 @@ extern int dot_symbols;
 #endif
 
 #define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
-  %{rdynamic:-export-dynamic} \
-  -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \
+  %{!static-pie: \
+    %{rdynamic:-export-dynamic} \
+    -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}} \
   %(link_os_extra_spec32)"
 
 #define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \
-  %{rdynamic:-export-dynamic} \
-  -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \
+  %{!static-pie: \
+    %{rdynamic:-export-dynamic} \
+    -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}} \
   %(link_os_extra_spec64)"
 
 #undef  TOC_SECTION_ASM_OP
--- gcc/config/rs6000/linux.h.jj        2017-01-01 12:45:43.000000000 +0100
+++ gcc/config/rs6000/linux.h   2017-09-13 11:56:33.092540242 +0200
@@ -61,7 +61,8 @@
 #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
 
 #undef  LINK_SHLIB_SPEC
-#define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
+#define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}} \
+  %{static-pie:-static -pie --no-dynamic-linker -z text}"
 
 #undef LIB_DEFAULT_SPEC
 #define LIB_DEFAULT_SPEC "%(lib_linux)"
@@ -93,8 +94,9 @@
 
 #undef LINK_OS_LINUX_SPEC
 #define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \
-  %{rdynamic:-export-dynamic} \
-  -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
+  %{!static-pie: \
+    %{rdynamic:-export-dynamic} \
+    -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}}"
 
 /* For backward compatibility, we must continue to use the AIX
    structure return convention.  */


        Jakub

Reply via email to