Message ID | 5551123B.7030706@fgznet.ch |
---|---|
State | New |
Headers | show |
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. >
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
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
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;