This strips out (%< wise) a few driver specs that are only specifying a default 
state.
Also warn on an option now ignored, and add some comments to the driver specs
section.  Update the comments to explain why we can’t process all the driver 
specs
here.

Tested on x86-64-darwin,
applied to mainline
thanks
Iain

2019-07-19  Iain Sandoe  <i...@sandoe.co.uk>

        * config/darwin.h (DRIVER_SELF_SPECS): Ignore X and Mach specs which
        refer to default conditions.  Warn for the 'y' spec which is ignored
        by current linkers.


diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index e17bc64..ed87984 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -118,13 +118,23 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  
If not, see
 /* True if pragma ms_struct is in effect.  */
 extern GTY(()) int darwin_ms_struct;
 
-#define DRIVER_SELF_SPECS                                      \
-  "%{gfull:-g -fno-eliminate-unused-debug-symbols} %<gfull",   \
-  "%{gused:-g -feliminate-unused-debug-symbols} %<gused",      \
-  "%{fapple-kext|mkernel:-static}",                            \
-  "%{shared:-Zdynamiclib} %<shared",                            \
-  "%{gsplit-dwarf:%ngsplit-dwarf is not supported on this platform} \
-     %<gsplit-dwarf"
+/* The majority of Darwin's special driver opts are direct access to ld flags
+   (to save the user typing -Wl,xxxxx or Xlinker xxxxx) but we can't process
+   them here, since doing so will make it appear that there are linker infiles
+   and the linker will invoked even when it is not necessary.
+
+   However, a few can be handled and we can elide options that are silently-
+   ignored defaults, plus warn on obsolete ones that no longer function.  */
+#define DRIVER_SELF_SPECS                                              \
+"%{fapple-kext|mkernel:-static}",                                      \
+"%{gfull:-g -fno-eliminate-unused-debug-symbols} %<gfull",             \
+"%{gsplit-dwarf:%ngsplit-dwarf is not supported on this platform} \
+   %<gsplit-dwarf",                                                    \
+"%{gused:-g -feliminate-unused-debug-symbols} %<gused",                        
\
+"%{shared:-Zdynamiclib} %<shared",                                     \
+"%{static:%{Zdynamic:%e conflicting code gen style switches are used}}",\
+"%{y*:%nthe y option is obsolete and ignored} %<y*",                   \
+"%<Mach %<X"
 
 #if LD64_HAS_EXPORT_DYNAMIC
 #define DARWIN_RDYNAMIC "%{rdynamic:-export_dynamic}"
@@ -342,13 +352,11 @@ extern GTY(()) int darwin_ms_struct;
    %{Zunexported_symbols_list*:-unexported_symbols_list %*} \
    %{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \
    %{!Zweak_reference_mismatches*:-weak_reference_mismatches non-weak} \
-   %{X} \
-   %{y*} \
    %{w} \
    %{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit}  \
    %{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \
    %{whatsloaded} %{dylinker_install_name*} \
-   %{dylinker} %{Mach} "
+   %{dylinker} "
 
 
 /* Machine dependent libraries.  */

Reply via email to