aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorBen Langmuir <blangmuir@apple.com>2024-06-11 16:52:42 -0700
committerGitHub <noreply@github.com>2024-06-11 16:52:42 -0700
commit0f286f8a3688250b1f4c263836827ad0e2467f82 (patch)
treef4839b80dba73d97875a3dbc0208ddcf0f425210 /llvm/lib/ExecutionEngine
parent2b6c6bb4985d02056d6d125de185e799988ff763 (diff)
downloadllvm-0f286f8a3688250b1f4c263836827ad0e2467f82.zip
llvm-0f286f8a3688250b1f4c263836827ad0e2467f82.tar.gz
llvm-0f286f8a3688250b1f4c263836827ad0e2467f82.tar.bz2
[ORC][MachO] Register objc protolist, protorefs, nlclslist metadata sections (#95144)
Add missing __DATA sections that the objc runtime expects to register. This fixes running objc code that makes use of `@protocol` references and `__attribute__((objc_nonlazy_class))` classes. rdar://129368761
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp9
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Shared/ObjectFormats.cpp26
2 files changed, 21 insertions, 14 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
index b477a48..0d117f7 100644
--- a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
@@ -206,9 +206,12 @@ private:
};
static StringRef ObjCRuntimeObjectSectionsData[] = {
- MachOObjCCatListSectionName, MachOObjCClassListSectionName,
- MachOObjCClassRefsSectionName, MachOObjCConstSectionName,
- MachOObjCDataSectionName, MachOObjCSelRefsSectionName};
+ MachOObjCCatListSectionName, MachOObjCCatList2SectionName,
+ MachOObjCClassListSectionName, MachOObjCClassRefsSectionName,
+ MachOObjCConstSectionName, MachOObjCDataSectionName,
+ MachOObjCProtoListSectionName, MachOObjCProtoRefsSectionName,
+ MachOObjCNLCatListSectionName, MachOObjCNLClassListSectionName,
+ MachOObjCSelRefsSectionName};
static StringRef ObjCRuntimeObjectSectionsText[] = {
MachOObjCClassNameSectionName, MachOObjCMethNameSectionName,
diff --git a/llvm/lib/ExecutionEngine/Orc/Shared/ObjectFormats.cpp b/llvm/lib/ExecutionEngine/Orc/Shared/ObjectFormats.cpp
index a407fca..f94f483 100644
--- a/llvm/lib/ExecutionEngine/Orc/Shared/ObjectFormats.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Shared/ObjectFormats.cpp
@@ -32,6 +32,9 @@ StringRef MachOObjCImageInfoSectionName = "__DATA,__objc_imageinfo";
StringRef MachOObjCMethNameSectionName = "__TEXT,__objc_methname";
StringRef MachOObjCMethTypeSectionName = "__TEXT,__objc_methtype";
StringRef MachOObjCNLCatListSectionName = "__DATA,__objc_nlcatlist";
+StringRef MachOObjCNLClassListSectionName = "__DATA,__objc_nlclslist";
+StringRef MachOObjCProtoListSectionName = "__DATA,__objc_protolist";
+StringRef MachOObjCProtoRefsSectionName = "__DATA,__objc_protorefs";
StringRef MachOObjCSelRefsSectionName = "__DATA,__objc_selrefs";
StringRef MachOSwift5ProtoSectionName = "__TEXT,__swift5_proto";
StringRef MachOSwift5ProtosSectionName = "__TEXT,__swift5_protos";
@@ -43,17 +46,18 @@ StringRef MachOThreadBSSSectionName = "__DATA,__thread_bss";
StringRef MachOThreadDataSectionName = "__DATA,__thread_data";
StringRef MachOThreadVarsSectionName = "__DATA,__thread_vars";
-StringRef MachOInitSectionNames[19] = {
- MachOModInitFuncSectionName, MachOObjCCatListSectionName,
- MachOObjCCatList2SectionName, MachOObjCClassListSectionName,
- MachOObjCClassNameSectionName, MachOObjCClassRefsSectionName,
- MachOObjCConstSectionName, MachOObjCDataSectionName,
- MachOObjCImageInfoSectionName, MachOObjCMethNameSectionName,
- MachOObjCMethTypeSectionName, MachOObjCNLCatListSectionName,
- MachOObjCSelRefsSectionName, MachOSwift5ProtoSectionName,
- MachOSwift5ProtosSectionName, MachOSwift5TypesSectionName,
- MachOSwift5TypeRefSectionName, MachOSwift5FieldMetadataSectionName,
- MachOSwift5EntrySectionName,
+StringRef MachOInitSectionNames[22] = {
+ MachOModInitFuncSectionName, MachOObjCCatListSectionName,
+ MachOObjCCatList2SectionName, MachOObjCClassListSectionName,
+ MachOObjCClassNameSectionName, MachOObjCClassRefsSectionName,
+ MachOObjCConstSectionName, MachOObjCDataSectionName,
+ MachOObjCImageInfoSectionName, MachOObjCMethNameSectionName,
+ MachOObjCMethTypeSectionName, MachOObjCNLCatListSectionName,
+ MachOObjCNLClassListSectionName, MachOObjCProtoListSectionName,
+ MachOObjCProtoRefsSectionName, MachOObjCSelRefsSectionName,
+ MachOSwift5ProtoSectionName, MachOSwift5ProtosSectionName,
+ MachOSwift5TypesSectionName, MachOSwift5TypeRefSectionName,
+ MachOSwift5FieldMetadataSectionName, MachOSwift5EntrySectionName,
};
StringRef ELFEHFrameSectionName = ".eh_frame";