diff options
author | Ben Langmuir <blangmuir@apple.com> | 2024-06-11 16:52:42 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-11 16:52:42 -0700 |
commit | 0f286f8a3688250b1f4c263836827ad0e2467f82 (patch) | |
tree | f4839b80dba73d97875a3dbc0208ddcf0f425210 /llvm/lib/ExecutionEngine | |
parent | 2b6c6bb4985d02056d6d125de185e799988ff763 (diff) | |
download | llvm-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.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Shared/ObjectFormats.cpp | 26 |
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"; |