Current host tools mark some additional symbols as 'no dead strip' and also
expose one additional group to the linker.  This does not affect older Darwin
versions or x86_64, but omitting these changes results in link errors for
aarch64.

Tested on i686, x86_64 and a cross to aarch64 Darwin.
pushed to master, thanks,
Iain

Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>

gcc/ChangeLog:

        * config/darwin.cc (darwin_label_is_anonymous_local_objc_name): Make
        protocol class methods linker-visible.

gcc/objc/ChangeLog:

        * objc-next-runtime-abi-02.cc (next_runtime_abi_02_protocol_decl): Do
        not dead-strip the runtime meta-data symbols.
        (build_v2_classrefs_table): Likewise.
        (build_v2_protocol_list_address_table): Likewise.
---
 gcc/config/darwin.cc                 | 2 ++
 gcc/objc/objc-next-runtime-abi-02.cc | 6 ++++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc
index f065a13d73d..1b3de338926 100644
--- a/gcc/config/darwin.cc
+++ b/gcc/config/darwin.cc
@@ -1936,6 +1936,8 @@ darwin_label_is_anonymous_local_objc_name (const char 
*name)
     }
   else if (startswith ((const char *)p, "ClassMethods"))
     return false;
+  else if (startswith ((const char *)p, "ClassProtocols"))
+    return false;
   else if (startswith ((const char *)p, "Instance"))
     {
       if (p[8] == 'I' || p[8] == 'M')
diff --git a/gcc/objc/objc-next-runtime-abi-02.cc 
b/gcc/objc/objc-next-runtime-abi-02.cc
index e50ca6e89f5..9ea63b189c7 100644
--- a/gcc/objc/objc-next-runtime-abi-02.cc
+++ b/gcc/objc/objc-next-runtime-abi-02.cc
@@ -1033,6 +1033,7 @@ next_runtime_abi_02_protocol_decl (tree p)
   else
     decl = start_var_decl (objc_v2_protocol_template, buf);
   OBJCMETA (decl, objc_meta, meta_protocol);
+  DECL_PRESERVE_P (decl) = 1;
   return decl;
 }
 
@@ -2115,8 +2116,8 @@ build_v2_classrefs_table (void)
          expr = convert (objc_class_type, build_fold_addr_expr (expr));
        }
       /* The runtime wants this, even if it appears unused, so we must force 
the
-        output.
-      DECL_PRESERVE_P (decl) = 1; */
+        output.  */
+      DECL_PRESERVE_P (decl) = 1;
       finish_var_decl (decl, expr);
     }
 }
@@ -2318,6 +2319,7 @@ build_v2_protocol_list_address_table (void)
       expr = convert (objc_protocol_type, build_fold_addr_expr (ref->refdecl));
       OBJCMETA (decl, objc_meta, meta_label_protocollist);
       finish_var_decl (decl, expr);
+      DECL_PRESERVE_P (decl) = 1;
     }
 
     /* TODO: delete the vec.  */
-- 
2.24.3 (Apple Git-128)

Reply via email to