Path: blob/main/contrib/llvm-project/llvm/lib/InterfaceStub/IFSStub.cpp
35233 views
//===- IFSStub.cpp --------------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===-----------------------------------------------------------------------===/78#include "llvm/InterfaceStub/IFSStub.h"9#include "llvm/BinaryFormat/ELF.h"10#include "llvm/Support/ErrorHandling.h"1112using namespace llvm;13using namespace llvm::ifs;1415IFSStub::IFSStub(IFSStub const &Stub) {16IfsVersion = Stub.IfsVersion;17Target = Stub.Target;18SoName = Stub.SoName;19NeededLibs = Stub.NeededLibs;20Symbols = Stub.Symbols;21}2223IFSStub::IFSStub(IFSStub &&Stub) {24IfsVersion = std::move(Stub.IfsVersion);25Target = std::move(Stub.Target);26SoName = std::move(Stub.SoName);27NeededLibs = std::move(Stub.NeededLibs);28Symbols = std::move(Stub.Symbols);29}3031IFSStubTriple::IFSStubTriple(IFSStubTriple const &Stub) : IFSStub() {32IfsVersion = Stub.IfsVersion;33Target = Stub.Target;34SoName = Stub.SoName;35NeededLibs = Stub.NeededLibs;36Symbols = Stub.Symbols;37}3839IFSStubTriple::IFSStubTriple(IFSStub const &Stub) {40IfsVersion = Stub.IfsVersion;41Target = Stub.Target;42SoName = Stub.SoName;43NeededLibs = Stub.NeededLibs;44Symbols = Stub.Symbols;45}4647IFSStubTriple::IFSStubTriple(IFSStubTriple &&Stub) {48IfsVersion = std::move(Stub.IfsVersion);49Target = std::move(Stub.Target);50SoName = std::move(Stub.SoName);51NeededLibs = std::move(Stub.NeededLibs);52Symbols = std::move(Stub.Symbols);53}5455bool IFSTarget::empty() {56return !Triple && !ObjectFormat && !Arch && !ArchString && !Endianness &&57!BitWidth;58}5960uint8_t ifs::convertIFSBitWidthToELF(IFSBitWidthType BitWidth) {61switch (BitWidth) {62case IFSBitWidthType::IFS32:63return ELF::ELFCLASS32;64case IFSBitWidthType::IFS64:65return ELF::ELFCLASS64;66default:67llvm_unreachable("unknown bitwidth");68}69}7071uint8_t ifs::convertIFSEndiannessToELF(IFSEndiannessType Endianness) {72switch (Endianness) {73case IFSEndiannessType::Little:74return ELF::ELFDATA2LSB;75case IFSEndiannessType::Big:76return ELF::ELFDATA2MSB;77default:78llvm_unreachable("unknown endianness");79}80}8182uint8_t ifs::convertIFSSymbolTypeToELF(IFSSymbolType SymbolType) {83switch (SymbolType) {84case IFSSymbolType::Object:85return ELF::STT_OBJECT;86case IFSSymbolType::Func:87return ELF::STT_FUNC;88case IFSSymbolType::TLS:89return ELF::STT_TLS;90case IFSSymbolType::NoType:91return ELF::STT_NOTYPE;92default:93llvm_unreachable("unknown symbol type");94}95}9697IFSBitWidthType ifs::convertELFBitWidthToIFS(uint8_t BitWidth) {98switch (BitWidth) {99case ELF::ELFCLASS32:100return IFSBitWidthType::IFS32;101case ELF::ELFCLASS64:102return IFSBitWidthType::IFS64;103default:104return IFSBitWidthType::Unknown;105}106}107108IFSEndiannessType ifs::convertELFEndiannessToIFS(uint8_t Endianness) {109switch (Endianness) {110case ELF::ELFDATA2LSB:111return IFSEndiannessType::Little;112case ELF::ELFDATA2MSB:113return IFSEndiannessType::Big;114default:115return IFSEndiannessType::Unknown;116}117}118119IFSSymbolType ifs::convertELFSymbolTypeToIFS(uint8_t SymbolType) {120SymbolType = SymbolType & 0xf;121switch (SymbolType) {122case ELF::STT_OBJECT:123return IFSSymbolType::Object;124case ELF::STT_FUNC:125return IFSSymbolType::Func;126case ELF::STT_TLS:127return IFSSymbolType::TLS;128case ELF::STT_NOTYPE:129return IFSSymbolType::NoType;130default:131return IFSSymbolType::Unknown;132}133}134135136