Objective-C, Darwin : Use special string sections for V2 NeXT runtime.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 26 Sep 2020 09:15:28 +0000 (10:15 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Sat, 10 Oct 2020 16:04:45 +0000 (17:04 +0100)
Newer versions of the runtime expect to find strings for class, method
and method types in set-aside sections rather than the general c_strings
one.

gcc/ChangeLog:

* config/darwin-sections.def (objc2_class_names_section,
objc2_method_names_section, objc2_method_types_section): New
* config/darwin.c (output_objc_section_asm_op): Output new
sections.  (darwin_objc2_section): Select new sections where
used.

gcc/objc/ChangeLog:

* objc-next-runtime-abi-02.c
(next_runtime_abi_02_init_metadata_attributes): Attach metadata
for the special string sections to class, method and method type
string sections.

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

index 98677f6c7e9a56bcb965a29a4d021592a57ab703..d3251db9d89b3d7780a67fd3fe430f390deab101 100644 (file)
@@ -198,3 +198,14 @@ DEF_SECTION (objc2_image_info_section, 0,
             ".section __DATA, __objc_imageinfo, regular, no_dead_strip", 1)
 DEF_SECTION (objc2_constant_string_object_section, 0,
             ".section __DATA, __objc_stringobj, regular, no_dead_strip", 1)
+
+/* Additions for compatibility with later runtime conventions especially for
+   sections containing strings.  */
+DEF_SECTION (objc2_class_names_section, 0,
+            ".section __TEXT, __objc_classname, cstring_literals", 1)
+
+DEF_SECTION (objc2_method_names_section, 0,
+            ".section __TEXT, __objc_methname, cstring_literals", 1)
+
+DEF_SECTION (objc2_method_types_section, 0,
+            ".section __TEXT, __objc_methtype, cstring_literals", 1)
index 23116484724dbbf3bfa79fc82cc1fa9096e7a973..7eb288ec3f8781b0290d9add9dc364eb1ff2b320 100644 (file)
@@ -174,10 +174,12 @@ output_objc_section_asm_op (const void *directive)
       /* ABI=2 */
       static const enum darwin_section_enum tomarkv2[] =
        {
+         objc2_method_names_section,
          objc2_message_refs_section,
          objc2_classdefs_section,
          objc2_metadata_section,
          objc2_classrefs_section,
+         objc2_class_names_section,
          objc2_classlist_section,
          objc2_categorylist_section,
          objc2_selector_refs_section,
@@ -1447,6 +1449,12 @@ darwin_objc2_section (tree decl ATTRIBUTE_UNUSED, tree meta, section * base)
      first.  */
   if      (!strncmp (p, "V2_BASE", 7))
     return base;
+  else if (!strncmp (p, "V2_CNAM", 7))
+    return darwin_sections[objc2_class_names_section];
+  else if (!strncmp (p, "V2_MNAM", 7))
+    return darwin_sections[objc2_method_names_section];
+  else if (!strncmp (p, "V2_MTYP", 7))
+    return darwin_sections[objc2_method_types_section];
   else if (!strncmp (p, "V2_STRG", 7))
     return darwin_sections[cstring_section];
 
index e401906ed012d69d1a0f76ac9fa2e3cd35e6f84d..b4019cd4fe0574ea10446150660168be40be9482 100644 (file)
@@ -323,9 +323,10 @@ next_runtime_abi_02_init_metadata_attributes (void)
 
   meta_sel_refs = get_identifier ("V2_SRFS");
 
-  meta_class_name =
-  meta_meth_name =
-  meta_meth_type =
+  meta_class_name = get_identifier ("V2_CNAM");
+  meta_meth_name = get_identifier ("V2_MNAM");
+
+  meta_meth_type = get_identifier ("V2_MTYP");
   meta_prop_name_attr = get_identifier ("V2_STRG");
 
   meta_mref = get_identifier ("V2_MREF");