From a788c4555c6d17a5b37516e28844e6fd6013eb3e Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Sat, 26 Sep 2020 10:15:28 +0100 Subject: [PATCH] Objective-C, Darwin : Use special string sections for V2 NeXT runtime. 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 | 11 +++++++++++ gcc/config/darwin.c | 8 ++++++++ gcc/objc/objc-next-runtime-abi-02.c | 7 ++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gcc/config/darwin-sections.def b/gcc/config/darwin-sections.def index 98677f6c7e9..d3251db9d89 100644 --- a/gcc/config/darwin-sections.def +++ b/gcc/config/darwin-sections.def @@ -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) diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 23116484724..7eb288ec3f8 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -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]; diff --git a/gcc/objc/objc-next-runtime-abi-02.c b/gcc/objc/objc-next-runtime-abi-02.c index e401906ed01..b4019cd4fe0 100644 --- a/gcc/objc/objc-next-runtime-abi-02.c +++ b/gcc/objc/objc-next-runtime-abi-02.c @@ -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"); -- 2.30.2