| //===-------- MachOObjectFormat.cpp -- MachO format details for ORC -------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // ORC-specific MachO object format details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/ExecutionEngine/Orc/Shared/MachOObjectFormat.h" |
| |
| namespace llvm { |
| namespace orc { |
| |
| StringRef MachODataCommonSectionName = "__DATA,__common"; |
| StringRef MachODataDataSectionName = "__DATA,__data"; |
| StringRef MachOEHFrameSectionName = "__TEXT,__eh_frame"; |
| StringRef MachOCompactUnwindSectionName = "__LD,__compact_unwind"; |
| StringRef MachOCStringSectionName = "__TEXT,__cstring"; |
| StringRef MachOModInitFuncSectionName = "__DATA,__mod_init_func"; |
| StringRef MachOObjCCatListSectionName = "__DATA,__objc_catlist"; |
| StringRef MachOObjCCatList2SectionName = "__DATA,__objc_catlist2"; |
| StringRef MachOObjCClassListSectionName = "__DATA,__objc_classlist"; |
| StringRef MachOObjCClassNameSectionName = "__TEXT,__objc_classname"; |
| StringRef MachOObjCClassRefsSectionName = "__DATA,__objc_classrefs"; |
| StringRef MachOObjCConstSectionName = "__DATA,__objc_const"; |
| StringRef MachOObjCDataSectionName = "__DATA,__objc_data"; |
| 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"; |
| StringRef MachOSwift5TypesSectionName = "__TEXT,__swift5_types"; |
| StringRef MachOSwift5TypeRefSectionName = "__TEXT,__swift5_typeref"; |
| StringRef MachOSwift5FieldMetadataSectionName = "__TEXT,__swift5_fieldmd"; |
| StringRef MachOSwift5EntrySectionName = "__TEXT,__swift5_entry"; |
| StringRef MachOTextTextSectionName = "__TEXT,__text"; |
| StringRef MachOThreadBSSSectionName = "__DATA,__thread_bss"; |
| StringRef MachOThreadDataSectionName = "__DATA,__thread_data"; |
| StringRef MachOThreadVarsSectionName = "__DATA,__thread_vars"; |
| StringRef MachOUnwindInfoSectionName = "__TEXT,__unwind_info"; |
| |
| 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, |
| }; |
| |
| bool isMachOInitializerSection(StringRef SegName, StringRef SecName) { |
| for (auto &InitSection : MachOInitSectionNames) { |
| // Loop below assumes all MachO init sectios have a length-6 |
| // segment name. |
| assert(InitSection[6] == ',' && "Init section seg name has length != 6"); |
| if (InitSection.starts_with(SegName) && InitSection.substr(7) == SecName) |
| return true; |
| } |
| return false; |
| } |
| |
| } // namespace orc |
| } // namespace llvm |