| //===---------- 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" |
| |
| 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 ELFThreadBSSSectionName = ".tbss"; |
| StringRef ELFThreadDataSectionName = ".tdata"; |
| |
| bool isMachOInitializerSection(StringRef QualifiedName) { |
| for (auto &InitSection : MachOInitSectionNames) |
| if (InitSection == QualifiedName) |
| return true; |
| return false; |
| } |
| |
| 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 isCOFFInitializerSection(StringRef SecName) { |
| return SecName.starts_with(".CRT"); |
| } |
| |
| } // namespace orc |
| } // namespace llvm |