From 50bebf531193c18efb0982ac119694aa9f650e44 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 25 Jun 2015 03:04:56 -0700 Subject: [PATCH 1/2] Use PIE_SPEC/NO_PIE_SPEC for crtend.o/crtendS.o 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. --- gcc/config/gnu-user.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index 2fcb55d..5b3576b 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -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 -- 2.1.0