summaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp
diff options
context:
space:
mode:
authorvvvv <[email protected]>2024-02-06 20:01:22 +0300
committervvvv <[email protected]>2024-02-06 20:22:16 +0300
commit0203b7a9a40828bb2bd4c32029b79ff0ea3d1f8f (patch)
treee630d0d5bd0bd29fc8c2d2842ed2cfde781b993a /contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp
parentba27db76d99d12a4f1c06960b5449423218614c4 (diff)
llvm16 targets
Diffstat (limited to 'contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp')
-rw-r--r--contrib/libs/llvm16/lib/InterfaceStub/IFSStub.cpp133
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;
+ }
+}