| //===---------- ObjectFormats.cpp - Object 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 object format details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/ExecutionEngine/Orc/Shared/ObjectFormats.h" | |
| #include "llvm/ADT/STLExtras.h" | |
| namespace llvm { | |
| namespace orc { | |
| StringRef ELFEHFrameSectionName = ".eh_frame"; | |
| StringRef ELFInitArrayFuncSectionName = ".init_array"; | |
| StringRef ELFInitFuncSectionName = ".init"; | |
| StringRef ELFFiniArrayFuncSectionName = ".fini_array"; | |
| StringRef ELFFiniFuncSectionName = ".fini"; | |
| StringRef ELFCtorArrayFuncSectionName = ".ctors"; | |
| StringRef ELFDtorArrayFuncSectionName = ".dtors"; | |
| StringRef ELFInitSectionNames[3]{ | |
| ELFInitArrayFuncSectionName, | |
| ELFInitFuncSectionName, | |
| ELFCtorArrayFuncSectionName, | |
| }; | |
| StringRef ELFFiniSectionNames[3]{ | |
| ELFFiniArrayFuncSectionName, | |
| ELFFiniFuncSectionName, | |
| ELFDtorArrayFuncSectionName, | |
| }; | |
| StringRef ELFThreadBSSSectionName = ".tbss"; | |
| StringRef ELFThreadDataSectionName = ".tdata"; | |
| bool isMachOInitializerSection(StringRef QualifiedName) { | |
| return llvm::is_contained(MachOInitSectionNames, QualifiedName); | |
| } | |
| bool isELFInitializerSection(StringRef SecName) { | |
| for (StringRef InitSection : ELFInitSectionNames) { | |
| StringRef Name = SecName; | |
| if (Name.consume_front(InitSection) && (Name.empty() || Name[0] == '.')) | |
| return true; | |
| } | |
| return false; | |
| } | |
| bool isELFFinalizerSection(StringRef SecName) { | |
| for (StringRef FiniSection : ELFFiniSectionNames) { | |
| StringRef Name = SecName; | |
| if (Name.consume_front(FiniSection) && (Name.empty() || Name[0] == '.')) | |
| return true; | |
| } | |
| return false; | |
| } | |
| bool isCOFFInitializerSection(StringRef SecName) { | |
| return SecName.starts_with(".CRT"); | |
| } | |
| } // namespace orc | |
| } // namespace llvm |