diff mbox

FreeBSD add functionality to build PIE executables.

Message ID 5551123B.7030706@fgznet.ch
State New
Headers show

Commit Message

Andreas Tobler May 11, 2015, 8:34 p.m. UTC
All,

this patch adds the ability to build PIE executables for FreeBSD. The 
core is since a longer time in the code base of FreeBSD itself and is 
working fine.

This patch makes it available for all FreeBSD targets.
Tested on x86_64-*-freebsd11.0 and armv6/hf-*-freebsd11.0, 
i386-*-freebsd11.0 is progress.

In the same turn I removed the STARTFILE/ENDFILE_SPEC from 
config/i386/freebsd.h and use the ones from config/freebsd-spec.h.

Here the results before the patch:

https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01267.html

and with the patch:

https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01324.html

Is this ok for trunk and for 5.1X?

Thanks,
Andreas

2015-05-11  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-05-11  Andreas Tobler  <andreast@gcc.gnu.org>

	* lib/target-supports.exp (check_effective_target_pie): Add *-*-freebsd*
	to the familiy of pie capable targets.

Comments

Andreas Tobler May 17, 2015, 8:42 p.m. UTC | #1
Ping?!

Thanks,
Andreas

On 11.05.15 22:34, Andreas Tobler wrote:
> All,
>
> this patch adds the ability to build PIE executables for FreeBSD. The
> core is since a longer time in the code base of FreeBSD itself and is
> working fine.
>
> This patch makes it available for all FreeBSD targets.
> Tested on x86_64-*-freebsd11.0 and armv6/hf-*-freebsd11.0,
> i386-*-freebsd11.0 is progress.
>
> In the same turn I removed the STARTFILE/ENDFILE_SPEC from
> config/i386/freebsd.h and use the ones from config/freebsd-spec.h.
>
> Here the results before the patch:
>
> https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01267.html
>
> and with the patch:
>
> https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01324.html
>
> Is this ok for trunk and for 5.1X?
>
> Thanks,
> Andreas
>
> 2015-05-11  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-05-11  Andreas Tobler  <andreast@gcc.gnu.org>
>
> 	* lib/target-supports.exp (check_effective_target_pie): Add *-*-freebsd*
> 	to the familiy of pie capable targets.
>
Jeff Law May 18, 2015, 5:36 p.m. UTC | #2
On 05/17/2015 02:42 PM, Andreas Tobler wrote:
> Ping?!
>
> Thanks,
> Andreas
>
> On 11.05.15 22:34, Andreas Tobler wrote:
>> All,
>>
>> this patch adds the ability to build PIE executables for FreeBSD. The
>> core is since a longer time in the code base of FreeBSD itself and is
>> working fine.
>>
>> This patch makes it available for all FreeBSD targets.
>> Tested on x86_64-*-freebsd11.0 and armv6/hf-*-freebsd11.0,
>> i386-*-freebsd11.0 is progress.
>>
>> In the same turn I removed the STARTFILE/ENDFILE_SPEC from
>> config/i386/freebsd.h and use the ones from config/freebsd-spec.h.
>>
>> Here the results before the patch:
>>
>> https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01267.html
>>
>> and with the patch:
>>
>> https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01324.html
>>
>> Is this ok for trunk and for 5.1X?
>>
>> Thanks,
>> Andreas
>>
>> 2015-05-11  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-05-11  Andreas Tobler  <andreast@gcc.gnu.org>
>>
>>     * lib/target-supports.exp (check_effective_target_pie): Add
>> *-*-freebsd*
>>     to the familiy of pie capable targets.
OK for the trunk, please install.  Release managers have final say for 
the release branches.

jeff
Andreas Tobler May 18, 2015, 8:32 p.m. UTC | #3
On 18.05.15 19:36, Jeff Law wrote:
> On 05/17/2015 02:42 PM, Andreas Tobler wrote:
>> Ping?!
>>
>> Thanks,
>> Andreas
>>
>> On 11.05.15 22:34, Andreas Tobler wrote:
>>> All,
>>>
>>> this patch adds the ability to build PIE executables for FreeBSD. The
>>> core is since a longer time in the code base of FreeBSD itself and is
>>> working fine.
>>>
>>> This patch makes it available for all FreeBSD targets.
>>> Tested on x86_64-*-freebsd11.0 and armv6/hf-*-freebsd11.0,
>>> i386-*-freebsd11.0 is progress.
>>>
>>> In the same turn I removed the STARTFILE/ENDFILE_SPEC from
>>> config/i386/freebsd.h and use the ones from config/freebsd-spec.h.
>>>
>>> Here the results before the patch:
>>>
>>> https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01267.html
>>>
>>> and with the patch:
>>>
>>> https://gcc.gnu.org/ml/gcc-testresults/2015-05/msg01324.html
>>>
>>> Is this ok for trunk and for 5.1X?
>>>
>>> Thanks,
>>> Andreas
>>>
>>> 2015-05-11  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-05-11  Andreas Tobler  <andreast@gcc.gnu.org>
>>>
>>>      * lib/target-supports.exp (check_effective_target_pie): Add
>>> *-*-freebsd*
>>>      to the familiy of pie capable targets.
> OK for the trunk, please install.  Release managers have final say for
> the release branches.


Done.

Thanks for the review.
Andreas
diff mbox

Patch

Index: gcc/config/freebsd-spec.h
===================================================================
--- gcc/config/freebsd-spec.h	(revision 223017)
+++ 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 223017)
+++ 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/testsuite/lib/target-supports.exp
===================================================================
--- gcc/testsuite/lib/target-supports.exp	(revision 223017)
+++ gcc/testsuite/lib/target-supports.exp	(working copy)
@@ -954,6 +954,7 @@ 
 
 proc check_effective_target_pie { } {
     if { [istarget *-*-darwin\[912\]*]
+	 || [istarget *-*-freebsd*]
 	 || [istarget *-*-linux*]
 	 || [istarget *-*-gnu*] } {
 	return 1;