Darwin : Only emit Objective-C section switches for older linkers.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 3 Oct 2020 12:51:29 +0000 (13:51 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Sat, 10 Oct 2020 16:23:10 +0000 (17:23 +0100)
At one time, the system linkers needed to have at least a dummy
entry for every Objective-C section in use.  This removes the extra
emitted code when it is not needed by the linker.

gcc/ChangeLog:

* config/darwin.c (output_objc_section_asm_op): Avoid extra
objective-c section switches unless the linker needs them.

gcc/config/darwin.c

index e101f8eb65594b328c1cda60e83d47f0afadda52..370ee5cedaa8567bdbff59d46d30120c51757247 100644 (file)
@@ -136,7 +136,7 @@ output_objc_section_asm_op (const void *directive)
      order in the object.  The code below implements this by emitting
      a section header for each ObjC section the first time that an ObjC
      section is requested.  */
-  if (! been_here)
+  if (darwin_symbol_stubs && ! been_here)
     {
       section *saved_in_section = in_section;
       static const enum darwin_section_enum tomark[] =
@@ -176,20 +176,21 @@ output_objc_section_asm_op (const void *directive)
        {
          objc2_method_names_section,
          objc2_message_refs_section,
+         objc2_selector_refs_section,
+         objc2_ivar_section,
          objc2_classdefs_section,
          objc2_metadata_section,
          objc2_classrefs_section,
          objc2_class_names_section,
          objc2_classlist_section,
          objc2_categorylist_section,
-         objc2_selector_refs_section,
          objc2_nonlazy_class_section,
          objc2_nonlazy_category_section,
          objc2_protocollist_section,
          objc2_protocolrefs_section,
          objc2_super_classrefs_section,
+         objc2_constant_string_object_section,
          objc2_image_info_section,
-         objc2_constant_string_object_section
        } ;
       size_t i;