aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/lib/Object/IRObjectFile.cpp
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:44:49 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:44:49 +0300
commit718c552901d703c502ccbefdfc3c9028d608b947 (patch)
tree46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/llvm12/lib/Object/IRObjectFile.cpp
parente9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff)
downloadydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/llvm12/lib/Object/IRObjectFile.cpp')
-rw-r--r--contrib/libs/llvm12/lib/Object/IRObjectFile.cpp312
1 files changed, 156 insertions, 156 deletions
diff --git a/contrib/libs/llvm12/lib/Object/IRObjectFile.cpp b/contrib/libs/llvm12/lib/Object/IRObjectFile.cpp
index befba5d571..e183cc6db5 100644
--- a/contrib/libs/llvm12/lib/Object/IRObjectFile.cpp
+++ b/contrib/libs/llvm12/lib/Object/IRObjectFile.cpp
@@ -1,156 +1,156 @@
-//===- IRObjectFile.cpp - IR object file implementation ---------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-//
-// Part of the IRObjectFile class implementation.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Object/IRObjectFile.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/BinaryFormat/Magic.h"
-#include "llvm/Bitcode/BitcodeReader.h"
-#include "llvm/IR/GVMaterializer.h"
-#include "llvm/IR/LLVMContext.h"
-#include "llvm/IR/Mangler.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Object/ObjectFile.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/TargetRegistry.h"
-#include "llvm/Support/raw_ostream.h"
-using namespace llvm;
-using namespace object;
-
-IRObjectFile::IRObjectFile(MemoryBufferRef Object,
- std::vector<std::unique_ptr<Module>> Mods)
- : SymbolicFile(Binary::ID_IR, Object), Mods(std::move(Mods)) {
- for (auto &M : this->Mods)
- SymTab.addModule(M.get());
-}
-
-IRObjectFile::~IRObjectFile() {}
-
-static ModuleSymbolTable::Symbol getSym(DataRefImpl &Symb) {
- return *reinterpret_cast<ModuleSymbolTable::Symbol *>(Symb.p);
-}
-
-void IRObjectFile::moveSymbolNext(DataRefImpl &Symb) const {
- Symb.p += sizeof(ModuleSymbolTable::Symbol);
-}
-
-Error IRObjectFile::printSymbolName(raw_ostream &OS, DataRefImpl Symb) const {
- SymTab.printSymbolName(OS, getSym(Symb));
- return Error::success();
-}
-
-Expected<uint32_t> IRObjectFile::getSymbolFlags(DataRefImpl Symb) const {
- return SymTab.getSymbolFlags(getSym(Symb));
-}
-
-basic_symbol_iterator IRObjectFile::symbol_begin() const {
- DataRefImpl Ret;
- Ret.p = reinterpret_cast<uintptr_t>(SymTab.symbols().data());
- return basic_symbol_iterator(BasicSymbolRef(Ret, this));
-}
-
-basic_symbol_iterator IRObjectFile::symbol_end() const {
- DataRefImpl Ret;
- Ret.p = reinterpret_cast<uintptr_t>(SymTab.symbols().data() +
- SymTab.symbols().size());
- return basic_symbol_iterator(BasicSymbolRef(Ret, this));
-}
-
-StringRef IRObjectFile::getTargetTriple() const {
- // Each module must have the same target triple, so we arbitrarily access the
- // first one.
- return Mods[0]->getTargetTriple();
-}
-
-Expected<MemoryBufferRef>
-IRObjectFile::findBitcodeInObject(const ObjectFile &Obj) {
- for (const SectionRef &Sec : Obj.sections()) {
- if (Sec.isBitcode()) {
- Expected<StringRef> Contents = Sec.getContents();
- if (!Contents)
- return Contents.takeError();
- if (Contents->size() <= 1)
- return errorCodeToError(object_error::bitcode_section_not_found);
- return MemoryBufferRef(*Contents, Obj.getFileName());
- }
- }
-
- return errorCodeToError(object_error::bitcode_section_not_found);
-}
-
-Expected<MemoryBufferRef>
-IRObjectFile::findBitcodeInMemBuffer(MemoryBufferRef Object) {
- file_magic Type = identify_magic(Object.getBuffer());
- switch (Type) {
- case file_magic::bitcode:
- return Object;
- case file_magic::elf_relocatable:
- case file_magic::macho_object:
- case file_magic::wasm_object:
- case file_magic::coff_object: {
- Expected<std::unique_ptr<ObjectFile>> ObjFile =
- ObjectFile::createObjectFile(Object, Type);
- if (!ObjFile)
- return ObjFile.takeError();
- return findBitcodeInObject(*ObjFile->get());
- }
- default:
- return errorCodeToError(object_error::invalid_file_type);
- }
-}
-
-Expected<std::unique_ptr<IRObjectFile>>
-IRObjectFile::create(MemoryBufferRef Object, LLVMContext &Context) {
- Expected<MemoryBufferRef> BCOrErr = findBitcodeInMemBuffer(Object);
- if (!BCOrErr)
- return BCOrErr.takeError();
-
- Expected<std::vector<BitcodeModule>> BMsOrErr =
- getBitcodeModuleList(*BCOrErr);
- if (!BMsOrErr)
- return BMsOrErr.takeError();
-
- std::vector<std::unique_ptr<Module>> Mods;
- for (auto BM : *BMsOrErr) {
- Expected<std::unique_ptr<Module>> MOrErr =
- BM.getLazyModule(Context, /*ShouldLazyLoadMetadata*/ true,
- /*IsImporting*/ false);
- if (!MOrErr)
- return MOrErr.takeError();
-
- Mods.push_back(std::move(*MOrErr));
- }
-
- return std::unique_ptr<IRObjectFile>(
- new IRObjectFile(*BCOrErr, std::move(Mods)));
-}
-
-Expected<IRSymtabFile> object::readIRSymtab(MemoryBufferRef MBRef) {
- IRSymtabFile F;
- Expected<MemoryBufferRef> BCOrErr =
- IRObjectFile::findBitcodeInMemBuffer(MBRef);
- if (!BCOrErr)
- return BCOrErr.takeError();
-
- Expected<BitcodeFileContents> BFCOrErr = getBitcodeFileContents(*BCOrErr);
- if (!BFCOrErr)
- return BFCOrErr.takeError();
-
- Expected<irsymtab::FileContents> FCOrErr = irsymtab::readBitcode(*BFCOrErr);
- if (!FCOrErr)
- return FCOrErr.takeError();
-
- F.Mods = std::move(BFCOrErr->Mods);
- F.Symtab = std::move(FCOrErr->Symtab);
- F.Strtab = std::move(FCOrErr->Strtab);
- F.TheReader = std::move(FCOrErr->TheReader);
- return std::move(F);
-}
+//===- IRObjectFile.cpp - IR object file implementation ---------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Part of the IRObjectFile class implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Object/IRObjectFile.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/BinaryFormat/Magic.h"
+#include "llvm/Bitcode/BitcodeReader.h"
+#include "llvm/IR/GVMaterializer.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Mangler.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Object/ObjectFile.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/TargetRegistry.h"
+#include "llvm/Support/raw_ostream.h"
+using namespace llvm;
+using namespace object;
+
+IRObjectFile::IRObjectFile(MemoryBufferRef Object,
+ std::vector<std::unique_ptr<Module>> Mods)
+ : SymbolicFile(Binary::ID_IR, Object), Mods(std::move(Mods)) {
+ for (auto &M : this->Mods)
+ SymTab.addModule(M.get());
+}
+
+IRObjectFile::~IRObjectFile() {}
+
+static ModuleSymbolTable::Symbol getSym(DataRefImpl &Symb) {
+ return *reinterpret_cast<ModuleSymbolTable::Symbol *>(Symb.p);
+}
+
+void IRObjectFile::moveSymbolNext(DataRefImpl &Symb) const {
+ Symb.p += sizeof(ModuleSymbolTable::Symbol);
+}
+
+Error IRObjectFile::printSymbolName(raw_ostream &OS, DataRefImpl Symb) const {
+ SymTab.printSymbolName(OS, getSym(Symb));
+ return Error::success();
+}
+
+Expected<uint32_t> IRObjectFile::getSymbolFlags(DataRefImpl Symb) const {
+ return SymTab.getSymbolFlags(getSym(Symb));
+}
+
+basic_symbol_iterator IRObjectFile::symbol_begin() const {
+ DataRefImpl Ret;
+ Ret.p = reinterpret_cast<uintptr_t>(SymTab.symbols().data());
+ return basic_symbol_iterator(BasicSymbolRef(Ret, this));
+}
+
+basic_symbol_iterator IRObjectFile::symbol_end() const {
+ DataRefImpl Ret;
+ Ret.p = reinterpret_cast<uintptr_t>(SymTab.symbols().data() +
+ SymTab.symbols().size());
+ return basic_symbol_iterator(BasicSymbolRef(Ret, this));
+}
+
+StringRef IRObjectFile::getTargetTriple() const {
+ // Each module must have the same target triple, so we arbitrarily access the
+ // first one.
+ return Mods[0]->getTargetTriple();
+}
+
+Expected<MemoryBufferRef>
+IRObjectFile::findBitcodeInObject(const ObjectFile &Obj) {
+ for (const SectionRef &Sec : Obj.sections()) {
+ if (Sec.isBitcode()) {
+ Expected<StringRef> Contents = Sec.getContents();
+ if (!Contents)
+ return Contents.takeError();
+ if (Contents->size() <= 1)
+ return errorCodeToError(object_error::bitcode_section_not_found);
+ return MemoryBufferRef(*Contents, Obj.getFileName());
+ }
+ }
+
+ return errorCodeToError(object_error::bitcode_section_not_found);
+}
+
+Expected<MemoryBufferRef>
+IRObjectFile::findBitcodeInMemBuffer(MemoryBufferRef Object) {
+ file_magic Type = identify_magic(Object.getBuffer());
+ switch (Type) {
+ case file_magic::bitcode:
+ return Object;
+ case file_magic::elf_relocatable:
+ case file_magic::macho_object:
+ case file_magic::wasm_object:
+ case file_magic::coff_object: {
+ Expected<std::unique_ptr<ObjectFile>> ObjFile =
+ ObjectFile::createObjectFile(Object, Type);
+ if (!ObjFile)
+ return ObjFile.takeError();
+ return findBitcodeInObject(*ObjFile->get());
+ }
+ default:
+ return errorCodeToError(object_error::invalid_file_type);
+ }
+}
+
+Expected<std::unique_ptr<IRObjectFile>>
+IRObjectFile::create(MemoryBufferRef Object, LLVMContext &Context) {
+ Expected<MemoryBufferRef> BCOrErr = findBitcodeInMemBuffer(Object);
+ if (!BCOrErr)
+ return BCOrErr.takeError();
+
+ Expected<std::vector<BitcodeModule>> BMsOrErr =
+ getBitcodeModuleList(*BCOrErr);
+ if (!BMsOrErr)
+ return BMsOrErr.takeError();
+
+ std::vector<std::unique_ptr<Module>> Mods;
+ for (auto BM : *BMsOrErr) {
+ Expected<std::unique_ptr<Module>> MOrErr =
+ BM.getLazyModule(Context, /*ShouldLazyLoadMetadata*/ true,
+ /*IsImporting*/ false);
+ if (!MOrErr)
+ return MOrErr.takeError();
+
+ Mods.push_back(std::move(*MOrErr));
+ }
+
+ return std::unique_ptr<IRObjectFile>(
+ new IRObjectFile(*BCOrErr, std::move(Mods)));
+}
+
+Expected<IRSymtabFile> object::readIRSymtab(MemoryBufferRef MBRef) {
+ IRSymtabFile F;
+ Expected<MemoryBufferRef> BCOrErr =
+ IRObjectFile::findBitcodeInMemBuffer(MBRef);
+ if (!BCOrErr)
+ return BCOrErr.takeError();
+
+ Expected<BitcodeFileContents> BFCOrErr = getBitcodeFileContents(*BCOrErr);
+ if (!BFCOrErr)
+ return BFCOrErr.takeError();
+
+ Expected<irsymtab::FileContents> FCOrErr = irsymtab::readBitcode(*BFCOrErr);
+ if (!FCOrErr)
+ return FCOrErr.takeError();
+
+ F.Mods = std::move(BFCOrErr->Mods);
+ F.Symtab = std::move(FCOrErr->Symtab);
+ F.Strtab = std::move(FCOrErr->Strtab);
+ F.TheReader = std::move(FCOrErr->TheReader);
+ return std::move(F);
+}