From e6f8ba12e6ea97cbf4374b70e78309c2d859ca1c Mon Sep 17 00:00:00 2001 From: Haowei Wu Date: Mon, 10 Aug 2020 11:35:01 -0700 Subject: [PATCH] Move ELFObjHandler to TextAPI library This change moves ELFObjHandler to llvm/TextAPI library so it can be used by different llvm tools. --- .../llvm/TextAPI/ELF}/ELFObjHandler.h | 6 +-- llvm/lib/TextAPI/CMakeLists.txt | 3 +- .../TextAPI/ELF}/ELFObjHandler.cpp | 51 ++++++++++------------ llvm/tools/llvm-elfabi/CMakeLists.txt | 1 - llvm/tools/llvm-elfabi/llvm-elfabi.cpp | 4 +- 5 files changed, 31 insertions(+), 34 deletions(-) rename llvm/{tools/llvm-elfabi => include/llvm/TextAPI/ELF}/ELFObjHandler.h (87%) rename llvm/{tools/llvm-elfabi => lib/TextAPI/ELF}/ELFObjHandler.cpp (91%) diff --git a/llvm/tools/llvm-elfabi/ELFObjHandler.h b/llvm/include/llvm/TextAPI/ELF/ELFObjHandler.h similarity index 87% rename from llvm/tools/llvm-elfabi/ELFObjHandler.h rename to llvm/include/llvm/TextAPI/ELF/ELFObjHandler.h index 97f0d68..5abed3a 100644 --- a/llvm/tools/llvm-elfabi/ELFObjHandler.h +++ b/llvm/include/llvm/TextAPI/ELF/ELFObjHandler.h @@ -10,8 +10,8 @@ /// //===-----------------------------------------------------------------------===/ -#ifndef LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H -#define LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H +#ifndef LLVM_TEXTAPI_ELF_ELFOBJHANDLER_H +#define LLVM_TEXTAPI_ELF_ELFOBJHANDLER_H #include "llvm/Object/ELFObjectFile.h" #include "llvm/Object/ELFTypes.h" @@ -29,4 +29,4 @@ Expected> readELFFile(MemoryBufferRef Buf); } // end namespace elfabi } // end namespace llvm -#endif // LLVM_TOOLS_ELFABI_ELFOBJHANDLER_H +#endif // LLVM_TEXTAPI_ELF_ELFOBJHANDLER_H diff --git a/llvm/lib/TextAPI/CMakeLists.txt b/llvm/lib/TextAPI/CMakeLists.txt index 36528f0..ed3cd4e 100644 --- a/llvm/lib/TextAPI/CMakeLists.txt +++ b/llvm/lib/TextAPI/CMakeLists.txt @@ -1,4 +1,5 @@ add_llvm_component_library(LLVMTextAPI + ELF/ELFObjHandler.cpp ELF/ELFStub.cpp ELF/TBEHandler.cpp MachO/Architecture.cpp @@ -13,6 +14,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" ) diff --git a/llvm/tools/llvm-elfabi/ELFObjHandler.cpp b/llvm/lib/TextAPI/ELF/ELFObjHandler.cpp similarity index 91% rename from llvm/tools/llvm-elfabi/ELFObjHandler.cpp rename to llvm/lib/TextAPI/ELF/ELFObjHandler.cpp index 124fffb..f43fbf9 100644 --- a/llvm/tools/llvm-elfabi/ELFObjHandler.cpp +++ b/llvm/lib/TextAPI/ELF/ELFObjHandler.cpp @@ -6,7 +6,7 @@ // //===-----------------------------------------------------------------------===/ -#include "ELFObjHandler.h" +#include "llvm/TextAPI/ELF/ELFObjHandler.h" #include "llvm/Object/Binary.h" #include "llvm/Object/ELFObjectFile.h" #include "llvm/Object/ELFTypes.h" @@ -128,19 +128,17 @@ 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); } } @@ -212,16 +210,16 @@ static Expected 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; } } @@ -259,8 +257,8 @@ static ELFSymbol createELFSym(StringRef SymName, /// @param DynStr StringRef to the dynamic string table. template 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. @@ -311,7 +309,7 @@ buildStub(const ELFObjectFile &ElfObj) { if (Error Err = populateDynamic(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 DynStrPtr = ElfFile->toMappedAddr(DynEnt.StrTabAddr); if (!DynStrPtr) @@ -355,9 +353,8 @@ buildStub(const ELFObjectFile &ElfObj) { if (!DynSymPtr) return appendToError(DynSymPtr.takeError(), "when locating .dynsym section contents"); - Elf_Sym_Range DynSyms = - ArrayRef(reinterpret_cast(*DynSymPtr), - *SymCount); + Elf_Sym_Range DynSyms = ArrayRef( + reinterpret_cast(*DynSymPtr), *SymCount); Error SymReadError = populateSymbols(*DestStub, DynSyms, DynStr); if (SymReadError) return appendToError(std::move(SymReadError), diff --git a/llvm/tools/llvm-elfabi/CMakeLists.txt b/llvm/tools/llvm-elfabi/CMakeLists.txt index bd3ec85..bd4875f 100644 --- a/llvm/tools/llvm-elfabi/CMakeLists.txt +++ b/llvm/tools/llvm-elfabi/CMakeLists.txt @@ -5,7 +5,6 @@ set(LLVM_LINK_COMPONENTS ) add_llvm_tool(llvm-elfabi - ELFObjHandler.cpp ErrorCollector.cpp llvm-elfabi.cpp ) diff --git a/llvm/tools/llvm-elfabi/llvm-elfabi.cpp b/llvm/tools/llvm-elfabi/llvm-elfabi.cpp index 044b5f7..e70df26 100644 --- a/llvm/tools/llvm-elfabi/llvm-elfabi.cpp +++ b/llvm/tools/llvm-elfabi/llvm-elfabi.cpp @@ -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/raw_ostream.h" #include "llvm/Support/WithColor.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/TextAPI/ELF/ELFObjHandler.h" #include "llvm/TextAPI/ELF/TBEHandler.h" #include -- 2.7.4