diff options
| author | vvvv <[email protected]> | 2024-02-06 20:01:22 +0300 |
|---|---|---|
| committer | vvvv <[email protected]> | 2024-02-06 20:22:16 +0300 |
| commit | 0203b7a9a40828bb2bd4c32029b79ff0ea3d1f8f (patch) | |
| tree | e630d0d5bd0bd29fc8c2d2842ed2cfde781b993a /contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp | |
| parent | ba27db76d99d12a4f1c06960b5449423218614c4 (diff) | |
llvm16 targets
Diffstat (limited to 'contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp')
| -rw-r--r-- | contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp b/contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp new file mode 100644 index 00000000000..f043f7e9e38 --- /dev/null +++ b/contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp @@ -0,0 +1,133 @@ +//===- IFSStub.cpp --------------------------------------------------------===// +// +// 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 +// +//===-----------------------------------------------------------------------===/ + +#include "llvm/InterfaceStub/IFSStub.h" +#include "llvm/BinaryFormat/ELF.h" +#include "llvm/Support/ErrorHandling.h" + +using namespace llvm; +using namespace llvm::ifs; + +IFSStub::IFSStub(IFSStub const &Stub) { + IfsVersion = Stub.IfsVersion; + Target = Stub.Target; + SoName = Stub.SoName; + NeededLibs = Stub.NeededLibs; + Symbols = Stub.Symbols; +} + +IFSStub::IFSStub(IFSStub &&Stub) { + IfsVersion = std::move(Stub.IfsVersion); + Target = std::move(Stub.Target); + SoName = std::move(Stub.SoName); + NeededLibs = std::move(Stub.NeededLibs); + Symbols = std::move(Stub.Symbols); +} + +IFSStubTriple::IFSStubTriple(IFSStubTriple const &Stub) : IFSStub() { + IfsVersion = Stub.IfsVersion; + Target = Stub.Target; + SoName = Stub.SoName; + NeededLibs = Stub.NeededLibs; + Symbols = Stub.Symbols; +} + +IFSStubTriple::IFSStubTriple(IFSStub const &Stub) { + IfsVersion = Stub.IfsVersion; + Target = Stub.Target; + SoName = Stub.SoName; + NeededLibs = Stub.NeededLibs; + Symbols = Stub.Symbols; +} + +IFSStubTriple::IFSStubTriple(IFSStubTriple &&Stub) { + IfsVersion = std::move(Stub.IfsVersion); + Target = std::move(Stub.Target); + SoName = std::move(Stub.SoName); + NeededLibs = std::move(Stub.NeededLibs); + Symbols = std::move(Stub.Symbols); +} + +bool IFSTarget::empty() { + return !Triple && !ObjectFormat && !Arch && !ArchString && !Endianness && + !BitWidth; +} + +uint8_t ifs::convertIFSBitWidthToELF(IFSBitWidthType BitWidth) { + switch (BitWidth) { + case IFSBitWidthType::IFS32: + return ELF::ELFCLASS32; + case IFSBitWidthType::IFS64: + return ELF::ELFCLASS64; + default: + llvm_unreachable("unknown bitwidth"); + } +} + +uint8_t ifs::convertIFSEndiannessToELF(IFSEndiannessType Endianness) { + switch (Endianness) { + case IFSEndiannessType::Little: + return ELF::ELFDATA2LSB; + case IFSEndiannessType::Big: + return ELF::ELFDATA2MSB; + default: + llvm_unreachable("unknown endianness"); + } +} + +uint8_t ifs::convertIFSSymbolTypeToELF(IFSSymbolType SymbolType) { + switch (SymbolType) { + case IFSSymbolType::Object: + return ELF::STT_OBJECT; + case IFSSymbolType::Func: + return ELF::STT_FUNC; + case IFSSymbolType::TLS: + return ELF::STT_TLS; + case IFSSymbolType::NoType: + default: + return ELF::STT_NOTYPE; + } +} + +IFSBitWidthType ifs::convertELFBitWidthToIFS(uint8_t BitWidth) { + switch (BitWidth) { + case ELF::ELFCLASS32: + return IFSBitWidthType::IFS32; + case ELF::ELFCLASS64: + return IFSBitWidthType::IFS64; + default: + return IFSBitWidthType::Unknown; + } +} + +IFSEndiannessType ifs::convertELFEndiannessToIFS(uint8_t Endianness) { + switch (Endianness) { + case ELF::ELFDATA2LSB: + return IFSEndiannessType::Little; + case ELF::ELFDATA2MSB: + return IFSEndiannessType::Big; + default: + return IFSEndiannessType::Unknown; + } +} + +IFSSymbolType ifs::convertELFSymbolTypeToIFS(uint8_t SymbolType) { + SymbolType = SymbolType & 0xf; + switch (SymbolType) { + case ELF::STT_OBJECT: + return IFSSymbolType::Object; + case ELF::STT_FUNC: + return IFSSymbolType::Func; + case ELF::STT_TLS: + return IFSSymbolType::TLS; + case ELF::STT_NOTYPE: + return IFSSymbolType::NoType; + default: + return IFSSymbolType::Unknown; + } +} |
