[lld] aae3835 - [lld-macho] Make category merging symbol names match ld64 (#90864)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 2 17:25:17 PDT 2024
Author: alx32
Date: 2024-05-02T17:25:13-07:00
New Revision: aae3835ecdf598e212d73265a6bea9e50187b546
URL: https://github.com/llvm/llvm-project/commit/aae3835ecdf598e212d73265a6bea9e50187b546
DIFF: https://github.com/llvm/llvm-project/commit/aae3835ecdf598e212d73265a6bea9e50187b546.diff
LOG: [lld-macho] Make category merging symbol names match ld64 (#90864)
When generating symbols for various category constructs, make sure the
symbol names match the format of those generated by ld64 when it does
category merging.
Added:
Modified:
lld/MachO/ObjC.cpp
lld/test/MachO/objc-category-merging-complete-test.s
lld/test/MachO/objc-category-merging-extern-class-minimal.s
Removed:
################################################################################
diff --git a/lld/MachO/ObjC.cpp b/lld/MachO/ObjC.cpp
index b8c895b2215d0c..4760fffebe3b30 100644
--- a/lld/MachO/ObjC.cpp
+++ b/lld/MachO/ObjC.cpp
@@ -780,7 +780,7 @@ void ObjcCategoryMerger::emitAndLinkProtocolList(
listSec->parent = infoCategoryWriter.catPtrListInfo.outputSection;
std::string symName = ptrList.categoryPrefix;
- symName += extInfo.baseClassName + "_$_(" + extInfo.mergedContainerName + ")";
+ symName += extInfo.baseClassName + "(" + extInfo.mergedContainerName + ")";
Defined *ptrListSym = make<Defined>(
newStringData(symName.c_str()), /*file=*/parentSym->getObjectFile(),
@@ -838,7 +838,7 @@ void ObjcCategoryMerger::emitAndLinkPointerList(
listSec->parent = infoCategoryWriter.catPtrListInfo.outputSection;
std::string symName = ptrList.categoryPrefix;
- symName += extInfo.baseClassName + "_$_" + extInfo.mergedContainerName;
+ symName += extInfo.baseClassName + "(" + extInfo.mergedContainerName + ")";
Defined *ptrListSym = make<Defined>(
newStringData(symName.c_str()), /*file=*/parentSym->getObjectFile(),
@@ -915,7 +915,7 @@ Defined *ObjcCategoryMerger::emitCategoryBody(const std::string &name,
addInputSection(newBodySec);
std::string symName =
- objc::symbol_names::category + baseClassName + "_$_(" + name + ")";
+ objc::symbol_names::category + baseClassName + "(" + name + ")";
Defined *catBodySym = make<Defined>(
newStringData(symName.c_str()), /*file=*/objFile, newBodySec,
/*value=*/0, bodyData.size(), /*isWeakDef=*/false, /*isExternal=*/false,
diff --git a/lld/test/MachO/objc-category-merging-complete-test.s b/lld/test/MachO/objc-category-merging-complete-test.s
index 3bc3ca26b6ae6c..d2d264a3f26c2d 100644
--- a/lld/test/MachO/objc-category-merging-complete-test.s
+++ b/lld/test/MachO/objc-category-merging-complete-test.s
@@ -13,7 +13,7 @@
# RUN: llvm-objdump --objc-meta-data --macho a64_file2_merge.exe | FileCheck %s --check-prefixes=MERGE_CATS
-MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_(Category02|Category03)
+MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass(Category02|Category03)
MERGE_CATS-NEXT: name {{.*}} Category02|Category03
MERGE_CATS: instanceMethods
MERGE_CATS-NEXT: entsize 24
@@ -90,7 +90,7 @@ MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
MERGE_CATS-NEXT: attributes {{.*}} Ti,R,D
-NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_(Category02|Category03)
+NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass(Category02|Category03)
NO_MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category02
NO_MERGE_CATS: instanceMethods
NO_MERGE_CATS-NEXT: 24
diff --git a/lld/test/MachO/objc-category-merging-extern-class-minimal.s b/lld/test/MachO/objc-category-merging-extern-class-minimal.s
index ede7ef5d9c32d4..ea79f29a421c5c 100644
--- a/lld/test/MachO/objc-category-merging-extern-class-minimal.s
+++ b/lld/test/MachO/objc-category-merging-extern-class-minimal.s
@@ -20,7 +20,7 @@ MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_Category01
MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_Category02
# Check that the merged cateogry is there, in the correct format
-MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_(Category01|Category02)
+MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass(Category01|Category02)
MERGE_CATS-NEXT: name {{.*}} Category01|Category02
MERGE_CATS: instanceMethods
MERGE_CATS-NEXT: 24
@@ -37,7 +37,7 @@ MERGE_CATS-NEXT: instanceProperties 0x0
#### Check merge categories disabled ###
# Check that the merged category is not there
-NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_(Category01|Category02)
+NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass(Category01|Category02)
# Check that the original categories are there
NO_MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category01
More information about the llvm-commits
mailing list