]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Objective-C, NeXT: Adjust symbol marking to match host tools.
authorIain Sandoe <iain@sandoe.co.uk>
Mon, 2 May 2022 18:42:49 +0000 (19:42 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Mon, 22 Apr 2024 13:13:11 +0000 (14:13 +0100)
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.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/ChangeLog:

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

gcc/objc/ChangeLog:

* objc-next-runtime-abi-02.c (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.

(cherry picked from commit ecd5727c0a662a8fea6b5f8eac6f3f15bf5ef851)

gcc/config/darwin.c
gcc/objc/objc-next-runtime-abi-02.c

index b79c0d1d2b41bdc9f6172c026c798aeb984a3341..dedf84d6247395ad4f9182b038c93a3ba0b3fa58 100644 (file)
@@ -1933,6 +1933,8 @@ darwin_label_is_anonymous_local_objc_name (const char *name)
     }
   else if (!strncmp ((const char *)p, "ClassMethods", 12))
     return false;
+  else if (!strncmp ((const char *)p, "ClassProtocols", 14))
+    return false;
   else if (!strncmp ((const char *)p, "Instance", 8))
     {
       if (p[8] == 'I' || p[8] == 'M')
index 19f137c632efb1d46bdb1526c236fba63fb09f81..f1c858b2cd7c5ef816455c33be9178d9ba83e9f8 100644 (file)
@@ -1035,6 +1035,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;
 }
 
@@ -2124,8 +2125,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);
     }
 }
@@ -2327,6 +2328,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.  */