diff mbox

backport PIE support for FreeBSD to gcc-49

Message ID 564093B2.5020500@fgznet.ch
State New
Headers show

Commit Message

Andreas Tobler Nov. 9, 2015, 12:38 p.m. UTC
Hi,

any objections that I apply this patch to gcc-4.9?

It is FreeBSD only.


TIA,
Andreas

2015-11-09  Andreas Tobler  <andreast@gcc.gnu.org>

	Backport from mainline
	2015-05-18  Andreas Tobler  <andreast@gcc.gnu.org>

	* config/freebsd-spec.h (FBSD_STARTFILE_SPEC): Add the bits to build
	pie executables.
	(FBSD_ENDFILE_SPEC): Likewise.
	* config/i386/freebsd.h (STARTFILE_SPEC): Remove and use the one from
	config/freebsd-spec.h.
	(ENDFILE_SPEC): Likewise.

	2015-11-02  Andreas Tobler  <andreast@gcc.gnu.org>

	* config/rs6000/freebsd64.h (ASM_SPEC32): Adust spec to handle
	PIE executables.

Comments

Andreas Tobler Nov. 11, 2015, 9:22 p.m. UTC | #1
On 09.11.15 13:38, Andreas Tobler wrote:
> Hi,
>
> any objections that I apply this patch to gcc-4.9?
>
> It is FreeBSD only.

committed as: 230192

Andreas

> 2015-11-09  Andreas Tobler  <andreast@gcc.gnu.org>
>
> 	Backport from mainline
> 	2015-05-18  Andreas Tobler  <andreast@gcc.gnu.org>
>
> 	* config/freebsd-spec.h (FBSD_STARTFILE_SPEC): Add the bits to build
> 	pie executables.
> 	(FBSD_ENDFILE_SPEC): Likewise.
> 	* config/i386/freebsd.h (STARTFILE_SPEC): Remove and use the one from
> 	config/freebsd-spec.h.
> 	(ENDFILE_SPEC): Likewise.
>
> 	2015-11-02  Andreas Tobler  <andreast@gcc.gnu.org>
>
> 	* config/rs6000/freebsd64.h (ASM_SPEC32): Adust spec to handle
> 	PIE executables.
>
diff mbox

Patch

Index: gcc/config/freebsd-spec.h
===================================================================
--- gcc/config/freebsd-spec.h	(revision 230016)
+++ gcc/config/freebsd-spec.h	(working copy)
@@ -66,8 +66,9 @@ 
   "%{!shared: \
      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
 		       %{!p:%{profile:gcrt1.o%s} \
-			 %{!profile:crt1.o%s}}}} \
-   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+			 %{!profile: \
+                            %{pie: Scrt1.o%s;:crt1.o%s}}}}} \
+   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
 
 /* Provide a ENDFILE_SPEC appropriate for FreeBSD.  Here we tack on
    the magical crtend.o file (see crtstuff.c) which provides part of 
@@ -76,7 +77,7 @@ 
 	`crtn.o'.  */
 
 #define FBSD_ENDFILE_SPEC \
-  "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+  "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
 
 /* Provide a LIB_SPEC appropriate for FreeBSD as configured and as
    required by the user-land thread model.  Before __FreeBSD_version
Index: gcc/config/i386/freebsd.h
===================================================================
--- gcc/config/i386/freebsd.h	(revision 230016)
+++ gcc/config/i386/freebsd.h	(working copy)
@@ -59,29 +59,16 @@ 
 #define SUBTARGET_EXTRA_SPECS \
   { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
     
-/* Provide a STARTFILE_SPEC appropriate for FreeBSD.  Here we add
-   the magical crtbegin.o file (see crtstuff.c) which provides part 
-	of the support for getting C++ file-scope static object constructed 
-	before entering `main'.  */
-   
-#undef	STARTFILE_SPEC
-#define STARTFILE_SPEC \
-  "%{!shared: \
-     %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
-		       %{!p:%{profile:gcrt1.o%s} \
-			 %{!profile:crt1.o%s}}}} \
-   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+/* Use the STARTFILE_SPEC from config/freebsd-spec.h.  */
 
-/* Provide a ENDFILE_SPEC appropriate for FreeBSD.  Here we tack on
-   the magical crtend.o file (see crtstuff.c) which provides part of 
-	the support for getting C++ file-scope static object constructed 
-	before entering `main', followed by a normal "finalizer" file, 
-	`crtn.o'.  */
+#undef  STARTFILE_SPEC
+#define STARTFILE_SPEC FBSD_STARTFILE_SPEC
 
-#undef	ENDFILE_SPEC
-#define ENDFILE_SPEC \
-  "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+/* Use the ENDFILE_SPEC from config/freebsd-spec.h.  */
 
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC FBSD_ENDFILE_SPEC
+
 /* Provide a LINK_SPEC appropriate for FreeBSD.  Here we provide support
    for the special GCC options -static and -shared, which allow us to
    link things in one of these three modes by applying the appropriate
Index: gcc/config/rs6000/freebsd64.h
===================================================================
--- gcc/config/rs6000/freebsd64.h	(revision 230016)
+++ gcc/config/rs6000/freebsd64.h	(working copy)
@@ -130,7 +130,7 @@ 
 #define	LINK_OS_FREEBSD_SPEC "%{m32:%(link_os_freebsd_spec32)}%{!m32:%(link_os_freebsd_spec64)}"
 
 #define ASM_SPEC32 "-a32 \
-%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \
+%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
 %{memb} %{!memb: %{msdata=eabi: -memb}} \
 %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
     %{mcall-freebsd: -mbig} \