[Darwin, specs] Tidy some more linker options.
authorIain Sandoe <iain@sandoe.co.uk>
Wed, 19 Jun 2019 19:16:17 +0000 (19:16 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Wed, 19 Jun 2019 19:16:17 +0000 (19:16 +0000)
pie, no-pie and rdynamic are driver options, we can process them in the
relevant place and drop them once dealt with.  There's no need to generate
a new header to process the "no_compact_unwind" which is applied on the
basis of the target system.

Support for the -pie, -no_pie and -no_compact_unwind options should ideally
be checked at configure time, however the status quo is to assert that linkers
capable of targeting the relevant systems support these options (i.e. we trust
that the user doesn't attempt to configure inappropriately).

TODO: check the availability of the linker opts in configure rather than
trusting to the user.

This will fix the fail of pie-7.c, which is a result of failing to handle the
no-pie driver option.

2019-06-19  Iain Sandoe  <iain@sandoe.co.uk>

* config/darwin.h (DRIVER_SELF_SPECS): Add RDYNAMIC, DARWIN_PIE_SPEC
and DARWIN_NOPIE_SPEC.
(RDYNAMIC): New, modified from DARWIN_EXPORT_DYNAMIC.
(DARWIN_PIE_SPEC): Collate from darwin.h and darwin9.h.
(DARWIN_NOPIE_SPEC): Collate from darwin10.h.
(DARWIN_NOCOMPACT_UNWIND): New from darwin10.h
(DARWIN_EXPORT_DYNAMIC): Delete.
* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move no_compact_unwind
and pie options processing to  darwin.h.
* config/darwin9.h (DARWIN_PIE_SPEC): Move pie processing to darwin.h

From-SVN: r272484

gcc/ChangeLog
gcc/config/darwin.h
gcc/config/darwin10.h
gcc/config/darwin9.h

index 919ceafd3a31a7899702a458664b2fdbc62c79ed..6e9ecedf96c09de29aea9f675484a47f90f66a2b 100644 (file)
@@ -1,7 +1,20 @@
 2019-06-19  Iain Sandoe  <iain@sandoe.co.uk>
 
-        * config/darwin-driver.c (darwin_driver_init): Fix off-by-one errors
-        in computing the number of options to be moved.
+       * config/darwin.h (DRIVER_SELF_SPECS): Add RDYNAMIC, DARWIN_PIE_SPEC
+       and DARWIN_NOPIE_SPEC.
+       (RDYNAMIC): New, modified from DARWIN_EXPORT_DYNAMIC.
+       (DARWIN_PIE_SPEC): Collate from darwin.h and darwin9.h.
+       (DARWIN_NOPIE_SPEC): Collate from darwin10.h.
+       (DARWIN_NOCOMPACT_UNWIND): New from darwin10.h
+       (DARWIN_EXPORT_DYNAMIC): Delete.
+       * config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move no_compact_unwind
+       and pie options processing to  darwin.h.
+       * config/darwin9.h (DARWIN_PIE_SPEC): Move pie processing to darwin.h
+
+2019-06-19  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/darwin-driver.c (darwin_driver_init): Fix off-by-one errors
+       in computing the number of options to be moved.
 
 2019-06-19  Maya Rashish  <coypu@sdf.org>
 
index bf44b1069405196cf62a029f1bcc64a8a743146c..ae324f194de68f03aad7f1018dc5eb5ff9b9f64a 100644 (file)
@@ -124,7 +124,30 @@ extern GTY(()) int darwin_ms_struct;
   "%{fapple-kext|mkernel:-static}",                            \
   "%{shared:-Zdynamiclib} %<shared",                            \
   "%{gsplit-dwarf:%ngsplit-dwarf is not supported on this platform} \
-     %<gsplit-dwarf"
+     %<gsplit-dwarf",                                          \
+  DARWIN_PIE_SPEC,                                             \
+  DARWIN_NOPIE_SPEC,                                           \
+  RDYNAMIC
+
+#if LD64_HAS_EXPORT_DYNAMIC
+#define RDYNAMIC "%{rdynamic:-Xlinker -export_dynamic} %<rdynamic"
+#else
+#define RDYNAMIC "%{rdynamic:%nrdynamic is not supported} %<rdynamic"
+#endif
+
+/* FIXME: we should check that the linker supports the -pie and -no_pie.
+   options.  */
+#define DARWIN_PIE_SPEC \
+"%{pie|fpie|fPIE: \
+   %{mdynamic-no-pic: \
+       %n'-mdynamic-no-pic' overrides '-pie', '-fpie' or '-fPIE'; \
+     : %:version-compare(>= 10.5 mmacosx-version-min= -Xlinker) \
+       %:version-compare(>= 10.5 mmacosx-version-min= -pie) }} %<pie "
+
+#define DARWIN_NOPIE_SPEC \
+"%{no-pie|fno-pie|fno-PIE: \
+   %:version-compare(>= 10.7 mmacosx-version-min= -Xlinker ) \
+   %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } %<no-pie "
 
 #define DARWIN_CC1_SPEC                                                        \
   "%{findirect-virtual-calls: -fapple-kext} %<findirect-virtual-calls " \
@@ -156,6 +179,16 @@ extern GTY(()) int darwin_ms_struct;
 #define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}" \
        " %{pthread:-D_REENTRANT}"
 
+/* This is a fix for PR41260 by passing -no_compact_unwind on darwin10 and
+   later until the assembler, linker and libunwind are able to deal with the
+   output from GCC.
+
+   FIXME: we should check that the linker supports the option.
+*/
+
+#define DARWIN_NOCOMPACT_UNWIND \
+" %:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind) "
+
 /* This is mostly a clone of the standard LINK_COMMAND_SPEC, plus
    precomp, libtool, and fat build additions.
 
@@ -164,12 +197,6 @@ extern GTY(()) int darwin_ms_struct;
    specifying the handling of options understood by generic Unix
    linkers, and for positional arguments like libraries.  */
 
-#if LD64_HAS_EXPORT_DYNAMIC
-#define DARWIN_EXPORT_DYNAMIC " %{rdynamic:-export_dynamic}"
-#else
-#define DARWIN_EXPORT_DYNAMIC " %{rdynamic: %nrdynamic is not supported}"
-#endif
-
 #define LINK_COMMAND_SPEC_A \
    "%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
     %(linker)" \
@@ -190,10 +217,11 @@ extern GTY(()) int darwin_ms_struct;
       %{%:sanitize(address): -lasan } \
       %{%:sanitize(undefined): -lubsan } \
       %(link_ssp) \
-      " DARWIN_EXPORT_DYNAMIC " %<rdynamic \
       %(link_gcc_c_sequence) \
     }}}\
-    %{!nostdlib:%{!r:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}"
+    %{!nostdlib:%{!r:%{!nostartfiles:%E}}} %{T*} %{F*} "\
+    DARWIN_NOCOMPACT_UNWIND \
+    "}}}}}}}"
 
 #define DSYMUTIL "\ndsymutil"
 
@@ -230,8 +258,6 @@ extern GTY(()) int darwin_ms_struct;
 #define STANDARD_STARTFILE_PREFIX_1 ""
 #define STANDARD_STARTFILE_PREFIX_2 ""
 
-#define DARWIN_PIE_SPEC "%{fpie|pie|fPIE:}"
-
 /* Please keep the random linker options in alphabetical order (modulo
    'Z' and 'no' prefixes). Note that options taking arguments may appear
    multiple times on a command line with different arguments each time,
@@ -295,7 +321,6 @@ extern GTY(()) int darwin_ms_struct;
      %:version-compare(< 10.5 mmacosx-version-min= -multiply_defined) \
      %:version-compare(< 10.5 mmacosx-version-min= suppress)}} \
    %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \
-   " DARWIN_PIE_SPEC " \
    %{prebind} %{noprebind} %{nofixprebinding} %{prebind_all_twolevel_modules} \
    %{read_only_relocs} \
    %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} \
index 07a2b465a04f337836448a0288415cb6c3fd16e1..a6d1eba6ebd10d4350c1ef635d66086da086c776 100644 (file)
@@ -18,17 +18,12 @@ You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
-/* Fix PR41260 by passing -no_compact_unwind on darwin10 and later until
-   unwinder in libSystem is fixed to digest new epilog unwinding notes.
+/* Fix PR47558 by linking against libSystem ahead of libgcc_ext. */
 
-   Fix PR47558 by linking against libSystem ahead of libgcc_ext. */
 #undef  LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-"%:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind) \
- %{!static:%{!static-libgcc: \
+"%{!static:%{!static-libgcc: \
     %:version-compare(>= 10.6 mmacosx-version-min= -lSystem) } } \
- %{fno-pic|fno-PIC|fno-pie|fno-PIE|fapple-kext|mkernel|static|mdynamic-no-pic: \
-   %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } \
  %{!nostdlib:%:version-compare(>< 10.6 10.7 mmacosx-version-min= -ld10-uwfef.o)} \
   %G %{!nolibc:%L}"
 
index ca5c51718c85bc62a008ab5187238c68b42f94e0..1fd1604aed8e3c5f41abbafc82341a96fe682b76 100644 (file)
@@ -35,12 +35,6 @@ along with GCC; see the file COPYING3.  If not see
 /* Tell collect2 to run dsymutil for us as necessary.  */
 #define COLLECT_RUN_DSYMUTIL 1
 
-#undef DARWIN_PIE_SPEC
-#define DARWIN_PIE_SPEC \
-  "%{fpie|pie|fPIE: \
-     %{mdynamic-no-pic: %n'-mdynamic-no-pic' overrides '-pie', '-fpie' or '-fPIE'; \
-      :-pie}}"
-
 /* Only ask as for debug data if the debug style is stabs (since as doesn't
    yet generate dwarf.)  */