Hi
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.

tested across the supported Darwin range, and on x86_64-linux,
pushed to master,
thanks
Iain

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 | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index e101f8eb655..370ee5cedaa 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -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;
 
-- 
2.24.1

Reply via email to