mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
[elfabi] Move llvm-elfabi related code to InterfaceStub library
This change moves elfabi related code to llvm/InterfaceStub library so it can be shared by multiple llvm tools without causing cyclic dependencies. Differential Revision: https://reviews.llvm.org/D85678
This commit is contained in:
parent
82307c21a7
commit
d8abdb26ca
@ -13,9 +13,9 @@
|
||||
#ifndef LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H
|
||||
#define LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H
|
||||
|
||||
#include "llvm/InterfaceStub/ELFStub.h"
|
||||
#include "llvm/Object/ELFObjectFile.h"
|
||||
#include "llvm/Object/ELFTypes.h"
|
||||
#include "llvm/TextAPI/ELF/ELFStub.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
#include "llvm/Support/VersionTuple.h"
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
namespace llvm {
|
||||
namespace elfabi {
|
||||
@ -42,15 +42,13 @@ struct ELFSymbol {
|
||||
bool Undefined;
|
||||
bool Weak;
|
||||
Optional<std::string> Warning;
|
||||
bool operator<(const ELFSymbol &RHS) const {
|
||||
return Name < RHS.Name;
|
||||
}
|
||||
bool operator<(const ELFSymbol &RHS) const { return Name < RHS.Name; }
|
||||
};
|
||||
|
||||
// A cumulative representation of ELF stubs.
|
||||
// Both textual and binary stubs will read into and write from this object.
|
||||
class ELFStub {
|
||||
// TODO: Add support for symbol versioning.
|
||||
// TODO: Add support for symbol versioning.
|
||||
public:
|
||||
VersionTuple TbeVersion;
|
||||
Optional<std::string> SoName;
|
@ -15,8 +15,8 @@
|
||||
#ifndef LLVM_TEXTAPI_ELF_TBEHANDLER_H
|
||||
#define LLVM_TEXTAPI_ELF_TBEHANDLER_H
|
||||
|
||||
#include "llvm/Support/VersionTuple.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/VersionTuple.h"
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
@ -3,6 +3,7 @@
|
||||
|
||||
add_subdirectory(IR)
|
||||
add_subdirectory(FuzzMutate)
|
||||
add_subdirectory(InterfaceStub)
|
||||
add_subdirectory(IRReader)
|
||||
add_subdirectory(CodeGen)
|
||||
add_subdirectory(BinaryFormat)
|
||||
|
8
lib/InterfaceStub/CMakeLists.txt
Normal file
8
lib/InterfaceStub/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
add_llvm_component_library(LLVMInterfaceStub
|
||||
ELFObjHandler.cpp
|
||||
ELFStub.cpp
|
||||
TBEHandler.cpp
|
||||
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
"${LLVM_MAIN_INCLUDE_DIR}/llvm/InterfaceStub"
|
||||
)
|
@ -6,14 +6,14 @@
|
||||
//
|
||||
//===-----------------------------------------------------------------------===/
|
||||
|
||||
#include "ELFObjHandler.h"
|
||||
#include "llvm/InterfaceStub/ELFObjHandler.h"
|
||||
#include "llvm/InterfaceStub/ELFStub.h"
|
||||
#include "llvm/Object/Binary.h"
|
||||
#include "llvm/Object/ELFObjectFile.h"
|
||||
#include "llvm/Object/ELFTypes.h"
|
||||
#include "llvm/Support/Errc.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/TextAPI/ELF/ELFStub.h"
|
||||
|
||||
using llvm::MemoryBufferRef;
|
||||
using llvm::object::ELFObjectFile;
|
||||
@ -128,16 +128,14 @@ static Error populateDynamic(DynamicEntries &Dyn,
|
||||
"Couldn't locate dynamic symbol table (no DT_SYMTAB entry)");
|
||||
}
|
||||
if (Dyn.SONameOffset.hasValue() && *Dyn.SONameOffset >= Dyn.StrSize) {
|
||||
return createStringError(
|
||||
object_error::parse_failed,
|
||||
return createStringError(object_error::parse_failed,
|
||||
"DT_SONAME string offset (0x%016" PRIx64
|
||||
") outside of dynamic string table",
|
||||
*Dyn.SONameOffset);
|
||||
}
|
||||
for (uint64_t Offset : Dyn.NeededLibNames) {
|
||||
if (Offset >= Dyn.StrSize) {
|
||||
return createStringError(
|
||||
object_error::parse_failed,
|
||||
return createStringError(object_error::parse_failed,
|
||||
"DT_NEEDED string offset (0x%016" PRIx64
|
||||
") outside of dynamic string table",
|
||||
Offset);
|
||||
@ -355,9 +353,8 @@ buildStub(const ELFObjectFile<ELFT> &ElfObj) {
|
||||
if (!DynSymPtr)
|
||||
return appendToError(DynSymPtr.takeError(),
|
||||
"when locating .dynsym section contents");
|
||||
Elf_Sym_Range DynSyms =
|
||||
ArrayRef<Elf_Sym>(reinterpret_cast<const Elf_Sym *>(*DynSymPtr),
|
||||
*SymCount);
|
||||
Elf_Sym_Range DynSyms = ArrayRef<Elf_Sym>(
|
||||
reinterpret_cast<const Elf_Sym *>(*DynSymPtr), *SymCount);
|
||||
Error SymReadError = populateSymbols<ELFT>(*DestStub, DynSyms, DynStr);
|
||||
if (SymReadError)
|
||||
return appendToError(std::move(SymReadError),
|
@ -6,7 +6,7 @@
|
||||
//
|
||||
//===-----------------------------------------------------------------------===/
|
||||
|
||||
#include "llvm/TextAPI/ELF/ELFStub.h"
|
||||
#include "llvm/InterfaceStub/ELFStub.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::elfabi;
|
21
lib/InterfaceStub/LLVMBuild.txt
Normal file
21
lib/InterfaceStub/LLVMBuild.txt
Normal file
@ -0,0 +1,21 @@
|
||||
;===- ./lib/InterfaceStub/LLVMBuild.txt ------------------------*- Conf -*--===;
|
||||
;
|
||||
; 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
|
||||
;
|
||||
;===------------------------------------------------------------------------===;
|
||||
;
|
||||
; This is an LLVMBuild description file for the components in this subdirectory.
|
||||
;
|
||||
; For more information on the LLVMBuild system, please see:
|
||||
;
|
||||
; http://llvm.org/docs/LLVMBuild.html
|
||||
;
|
||||
;===------------------------------------------------------------------------===;
|
||||
|
||||
[component_0]
|
||||
type = Library
|
||||
name = InterfaceStub
|
||||
parent = Libraries
|
||||
required_libraries = Object Support
|
@ -6,12 +6,12 @@
|
||||
//
|
||||
//===-----------------------------------------------------------------------===/
|
||||
|
||||
#include "llvm/TextAPI/ELF/TBEHandler.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/InterfaceStub/TBEHandler.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/InterfaceStub/ELFStub.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/YAMLTraits.h"
|
||||
#include "llvm/TextAPI/ELF/ELFStub.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::elfabi;
|
@ -30,6 +30,7 @@ subdirectories =
|
||||
FuzzMutate
|
||||
LineEditor
|
||||
Linker
|
||||
InterfaceStub
|
||||
IR
|
||||
IRReader
|
||||
LTO
|
||||
|
@ -1,6 +1,4 @@
|
||||
add_llvm_component_library(LLVMTextAPI
|
||||
ELF/ELFStub.cpp
|
||||
ELF/TBEHandler.cpp
|
||||
MachO/Architecture.cpp
|
||||
MachO/ArchitectureSet.cpp
|
||||
MachO/InterfaceFile.cpp
|
||||
|
@ -1,11 +1,11 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
InterfaceStub
|
||||
Object
|
||||
Support
|
||||
TextAPI
|
||||
)
|
||||
|
||||
add_llvm_tool(llvm-elfabi
|
||||
ELFObjHandler.cpp
|
||||
ErrorCollector.cpp
|
||||
llvm-elfabi.cpp
|
||||
)
|
||||
|
@ -18,4 +18,4 @@
|
||||
type = Tool
|
||||
name = llvm-elfabi
|
||||
parent = Tools
|
||||
required_libraries = Object Support TextAPI
|
||||
required_libraries = InterfaceStub Object Support TextAPI
|
||||
|
@ -6,16 +6,16 @@
|
||||
//
|
||||
//===-----------------------------------------------------------------------===/
|
||||
|
||||
#include "ELFObjHandler.h"
|
||||
#include "ErrorCollector.h"
|
||||
#include "llvm/InterfaceStub/ELFObjHandler.h"
|
||||
#include "llvm/InterfaceStub/TBEHandler.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Errc.h"
|
||||
#include "llvm/Support/FileOutputBuffer.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Support/WithColor.h"
|
||||
#include "llvm/TextAPI/ELF/TBEHandler.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
|
@ -26,6 +26,7 @@ add_subdirectory(Demangle)
|
||||
add_subdirectory(ExecutionEngine)
|
||||
add_subdirectory(Frontend)
|
||||
add_subdirectory(FuzzMutate)
|
||||
add_subdirectory(InterfaceStub)
|
||||
add_subdirectory(IR)
|
||||
add_subdirectory(LineEditor)
|
||||
add_subdirectory(Linker)
|
||||
|
9
unittests/InterfaceStub/CMakeLists.txt
Normal file
9
unittests/InterfaceStub/CMakeLists.txt
Normal file
@ -0,0 +1,9 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
InterfaceStub
|
||||
)
|
||||
|
||||
add_llvm_unittest(InterfaceStubTests
|
||||
ELFYAMLTest.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(InterfaceStubTests PRIVATE LLVMTestingSupport)
|
@ -7,8 +7,8 @@
|
||||
//===-----------------------------------------------------------------------===/
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/TextAPI/ELF/ELFStub.h"
|
||||
#include "llvm/TextAPI/ELF/TBEHandler.h"
|
||||
#include "llvm/InterfaceStub/ELFStub.h"
|
||||
#include "llvm/InterfaceStub/TBEHandler.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Testing/Support/Error.h"
|
||||
#include "gtest/gtest.h"
|
@ -3,7 +3,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
)
|
||||
|
||||
add_llvm_unittest(TextAPITests
|
||||
ELFYAMLTest.cpp
|
||||
TextStubV1Tests.cpp
|
||||
TextStubV2Tests.cpp
|
||||
TextStubV3Tests.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user