1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

Revert "Move ELFObjHandler to TextAPI library"

This reverts commit e6f8ba12e6ea97cbf4374b70e78309c2d859ca1c due
to build failures.
This commit is contained in:
Haowei Wu 2020-08-10 21:30:01 -07:00
parent 4e781c06b8
commit f44281335e
5 changed files with 34 additions and 31 deletions

View File

@ -1,5 +1,4 @@
add_llvm_component_library(LLVMTextAPI
ELF/ELFObjHandler.cpp
ELF/ELFStub.cpp
ELF/TBEHandler.cpp
MachO/Architecture.cpp
@ -14,6 +13,6 @@ add_llvm_component_library(LLVMTextAPI
ADDITIONAL_HEADER_DIRS
"${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI"
"${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI/ELF"
"${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI/Elf"
"${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI/MachO"
)

View File

@ -5,6 +5,7 @@ set(LLVM_LINK_COMPONENTS
)
add_llvm_tool(llvm-elfabi
ELFObjHandler.cpp
ErrorCollector.cpp
llvm-elfabi.cpp
)

View File

@ -6,7 +6,7 @@
//
//===-----------------------------------------------------------------------===/
#include "llvm/TextAPI/ELF/ELFObjHandler.h"
#include "ELFObjHandler.h"
#include "llvm/Object/Binary.h"
#include "llvm/Object/ELFObjectFile.h"
#include "llvm/Object/ELFTypes.h"
@ -128,17 +128,19 @@ 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,
"DT_SONAME string offset (0x%016" PRIx64
") outside of dynamic string table",
*Dyn.SONameOffset);
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,
"DT_NEEDED string offset (0x%016" PRIx64
") outside of dynamic string table",
Offset);
return createStringError(
object_error::parse_failed,
"DT_NEEDED string offset (0x%016" PRIx64
") outside of dynamic string table",
Offset);
}
}
@ -210,16 +212,16 @@ static Expected<uint64_t> getNumSyms(DynamicEntries &Dyn,
static ELFSymbolType convertInfoToType(uint8_t Info) {
Info = Info & 0xf;
switch (Info) {
case ELF::STT_NOTYPE:
return ELFSymbolType::NoType;
case ELF::STT_OBJECT:
return ELFSymbolType::Object;
case ELF::STT_FUNC:
return ELFSymbolType::Func;
case ELF::STT_TLS:
return ELFSymbolType::TLS;
default:
return ELFSymbolType::Unknown;
case ELF::STT_NOTYPE:
return ELFSymbolType::NoType;
case ELF::STT_OBJECT:
return ELFSymbolType::Object;
case ELF::STT_FUNC:
return ELFSymbolType::Func;
case ELF::STT_TLS:
return ELFSymbolType::TLS;
default:
return ELFSymbolType::Unknown;
}
}
@ -257,8 +259,8 @@ static ELFSymbol createELFSym(StringRef SymName,
/// @param DynStr StringRef to the dynamic string table.
template <class ELFT>
static Error populateSymbols(ELFStub &TargetStub,
const typename ELFT::SymRange DynSym,
StringRef DynStr) {
const typename ELFT::SymRange DynSym,
StringRef DynStr) {
// Skips the first symbol since it's the NULL symbol.
for (auto RawSym : DynSym.drop_front(1)) {
// If a symbol does not have global or weak binding, ignore it.
@ -309,7 +311,7 @@ buildStub(const ELFObjectFile<ELFT> &ElfObj) {
if (Error Err = populateDynamic<ELFT>(DynEnt, *DynTable))
return std::move(Err);
// Get pointer to in-memory location of .dynstr section.
// Get pointer to in-memory location of .dynstr section.
Expected<const uint8_t *> DynStrPtr =
ElfFile->toMappedAddr(DynEnt.StrTabAddr);
if (!DynStrPtr)
@ -353,8 +355,9 @@ 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),

View File

@ -10,8 +10,8 @@
///
//===-----------------------------------------------------------------------===/
#ifndef LLVM_TEXTAPI_ELF_ELFOBJHANDLER_H
#define LLVM_TEXTAPI_ELF_ELFOBJHANDLER_H
#ifndef LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H
#define LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H
#include "llvm/Object/ELFObjectFile.h"
#include "llvm/Object/ELFTypes.h"
@ -29,4 +29,4 @@ Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf);
} // end namespace elfabi
} // end namespace llvm
#endif // LLVM_TEXTAPI_ELF_ELFOBJHANDLER_H
#endif // LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H

View File

@ -6,15 +6,15 @@
//
//===-----------------------------------------------------------------------===/
#include "ELFObjHandler.h"
#include "ErrorCollector.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/WithColor.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TextAPI/ELF/ELFObjHandler.h"
#include "llvm/Support/WithColor.h"
#include "llvm/TextAPI/ELF/TBEHandler.h"
#include <string>