Skip to content

Commit aae3835

Browse files
authored
[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.
1 parent ff0d09c commit aae3835

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

lld/MachO/ObjC.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ void ObjcCategoryMerger::emitAndLinkProtocolList(
780780
listSec->parent = infoCategoryWriter.catPtrListInfo.outputSection;
781781

782782
std::string symName = ptrList.categoryPrefix;
783-
symName += extInfo.baseClassName + "_$_(" + extInfo.mergedContainerName + ")";
783+
symName += extInfo.baseClassName + "(" + extInfo.mergedContainerName + ")";
784784

785785
Defined *ptrListSym = make<Defined>(
786786
newStringData(symName.c_str()), /*file=*/parentSym->getObjectFile(),
@@ -838,7 +838,7 @@ void ObjcCategoryMerger::emitAndLinkPointerList(
838838
listSec->parent = infoCategoryWriter.catPtrListInfo.outputSection;
839839

840840
std::string symName = ptrList.categoryPrefix;
841-
symName += extInfo.baseClassName + "_$_" + extInfo.mergedContainerName;
841+
symName += extInfo.baseClassName + "(" + extInfo.mergedContainerName + ")";
842842

843843
Defined *ptrListSym = make<Defined>(
844844
newStringData(symName.c_str()), /*file=*/parentSym->getObjectFile(),
@@ -915,7 +915,7 @@ Defined *ObjcCategoryMerger::emitCategoryBody(const std::string &name,
915915
addInputSection(newBodySec);
916916

917917
std::string symName =
918-
objc::symbol_names::category + baseClassName + "_$_(" + name + ")";
918+
objc::symbol_names::category + baseClassName + "(" + name + ")";
919919
Defined *catBodySym = make<Defined>(
920920
newStringData(symName.c_str()), /*file=*/objFile, newBodySec,
921921
/*value=*/0, bodyData.size(), /*isWeakDef=*/false, /*isExternal=*/false,

lld/test/MachO/objc-category-merging-complete-test.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# RUN: llvm-objdump --objc-meta-data --macho a64_file2_merge.exe | FileCheck %s --check-prefixes=MERGE_CATS
1414

1515

16-
MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_(Category02|Category03)
16+
MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass(Category02|Category03)
1717
MERGE_CATS-NEXT: name {{.*}} Category02|Category03
1818
MERGE_CATS: instanceMethods
1919
MERGE_CATS-NEXT: entsize 24
@@ -90,7 +90,7 @@ MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
9090
MERGE_CATS-NEXT: attributes {{.*}} Ti,R,D
9191

9292

93-
NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_(Category02|Category03)
93+
NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass(Category02|Category03)
9494
NO_MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category02
9595
NO_MERGE_CATS: instanceMethods
9696
NO_MERGE_CATS-NEXT: 24

lld/test/MachO/objc-category-merging-extern-class-minimal.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_Category01
2020
MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_Category02
2121

2222
# Check that the merged cateogry is there, in the correct format
23-
MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_(Category01|Category02)
23+
MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass(Category01|Category02)
2424
MERGE_CATS-NEXT: name {{.*}} Category01|Category02
2525
MERGE_CATS: instanceMethods
2626
MERGE_CATS-NEXT: 24
@@ -37,7 +37,7 @@ MERGE_CATS-NEXT: instanceProperties 0x0
3737

3838
#### Check merge categories disabled ###
3939
# Check that the merged category is not there
40-
NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_(Category01|Category02)
40+
NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass(Category01|Category02)
4141

4242
# Check that the original categories are there
4343
NO_MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category01

0 commit comments

Comments
 (0)