[llvm] e6f8ba1 - Move ELFObjHandler to TextAPI library
Haowei Wu via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 10 21:23:53 PDT 2020
Author: Haowei Wu
Date: 2020-08-10T21:23:39-07:00
New Revision: e6f8ba12e6ea97cbf4374b70e78309c2d859ca1c
URL: https://github.com/llvm/llvm-project/commit/e6f8ba12e6ea97cbf4374b70e78309c2d859ca1c
DIFF: https://github.com/llvm/llvm-project/commit/e6f8ba12e6ea97cbf4374b70e78309c2d859ca1c.diff
LOG: Move ELFObjHandler to TextAPI library
This change moves ELFObjHandler to llvm/TextAPI library so it can
be used by different llvm tools.
Added:
llvm/include/llvm/TextAPI/ELF/ELFObjHandler.h
llvm/lib/TextAPI/ELF/ELFObjHandler.cpp
Modified:
llvm/lib/TextAPI/CMakeLists.txt
llvm/tools/llvm-elfabi/CMakeLists.txt
llvm/tools/llvm-elfabi/llvm-elfabi.cpp
Removed:
llvm/tools/llvm-elfabi/ELFObjHandler.cpp
llvm/tools/llvm-elfabi/ELFObjHandler.h
################################################################################
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 97f0d68f4d4f..5abed3af9f4e 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<std::unique_ptr<ELFStub>> 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 36528f0995d8..ed3cd4ee480d 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 124fffbb9cf6..f43fbf99ba99 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<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;
}
}
@@ -259,8 +257,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.
@@ -311,7 +309,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)
@@ -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),
diff --git a/llvm/tools/llvm-elfabi/CMakeLists.txt b/llvm/tools/llvm-elfabi/CMakeLists.txt
index bd3ec851887a..bd4875f0be4d 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 044b5f77c6d7..e70df2697d1d 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 <string>
More information about the llvm-commits
mailing list