Use PIE_SPEC/NO_PIE_SPEC for crtend.o/crtendS.o
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 29 Jun 2015 20:50:57 +0000 (20:50 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 29 Jun 2015 20:50:57 +0000 (13:50 -0700)
We need to link with crtend.o and crtendS.o properly for GCC configured
to generate PIE by default.

* config/gnu-user.h (GNU_USER_TARGET_ENDFILE_SPEC): Use
PIE_SPEC and NO_PIE_SPEC if HAVE_LD_PIE is defined.

From-SVN: r225144

gcc/ChangeLog
gcc/config/gnu-user.h

index a14bb044b9e835e112ae6df28d68d9f121f31f68..6aaa0b0c06cc9b06f1810115f6f64865cf2c84fa 100644 (file)
@@ -1,3 +1,8 @@
+2015-06-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/gnu-user.h (GNU_USER_TARGET_ENDFILE_SPEC): Use
+       PIE_SPEC and NO_PIE_SPEC if HAVE_LD_PIE is defined.
+
 2015-06-29  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (*jcc_1): Use %! in asm template.
index 2fcb55dbdab2071ff7e9e3a04016a1290b5b705d..5b3576bdf950323c629bf038050c1f6ccb69d6d9 100644 (file)
@@ -67,11 +67,20 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    object constructed before entering `main', followed by a normal
    GNU userspace "finalizer" file, `crtn.o'.  */
 
+#if defined HAVE_LD_PIE
+#define GNU_USER_TARGET_ENDFILE_SPEC \
+  "%{fvtable-verify=none:%s; \
+     fvtable-verify=preinit:vtv_end_preinit.o%s; \
+     fvtable-verify=std:vtv_end.o%s} \
+   %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \
+   %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s"
+#else
 #define GNU_USER_TARGET_ENDFILE_SPEC \
   "%{fvtable-verify=none:%s; \
      fvtable-verify=preinit:vtv_end_preinit.o%s; \
      fvtable-verify=std:vtv_end.o%s} \
    %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
+#endif
 #undef  ENDFILE_SPEC
 #define ENDFILE_SPEC GNU_USER_TARGET_ENDFILE_SPEC