diff options
author | Hubert Tong <hstong@ca.ibm.com> | 2020-04-23 21:20:45 -0400 |
---|---|---|
committer | Hubert Tong <hubert.reinterpretcast@gmail.com> | 2020-04-23 21:24:37 -0400 |
commit | 2f9d1533d94699d943b34f1ba87f80fbd2e8c144 (patch) | |
tree | 1e185a9ff672b7300b14e0b5b6d9639fa9344fea /llvm/tools/llvm-objdump | |
parent | 3291efc2b3bb7f438f9076f6c4484cadbbda899f (diff) | |
download | llvm-2f9d1533d94699d943b34f1ba87f80fbd2e8c144.zip llvm-2f9d1533d94699d943b34f1ba87f80fbd2e8c144.tar.gz llvm-2f9d1533d94699d943b34f1ba87f80fbd2e8c144.tar.bz2 |
[llvm-objdump][ELF][NFC] Create ELFDump.h
Summary:
Continuing from D77285, the external interfaces implemented by
`ELFDump.cpp` are now declared in `ELFDump.h` and moved into the
`llvm::objdump` namespace. Externs defined in `ELFDump.cpp` that are
unreferenced externally are also made static.
Reviewers: jhenderson, MaskRay, DiggerLin, jasonliu, daltenty
Reviewed By: jhenderson, MaskRay
Subscribers: RKSimon, rupprecht, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D78695
Diffstat (limited to 'llvm/tools/llvm-objdump')
-rw-r--r-- | llvm/tools/llvm-objdump/ELFDump.cpp | 36 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/ELFDump.h | 39 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.h | 9 |
4 files changed, 59 insertions, 26 deletions
diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp index dea23b2..d9b1bad 100644 --- a/llvm/tools/llvm-objdump/ELFDump.cpp +++ b/llvm/tools/llvm-objdump/ELFDump.cpp @@ -11,6 +11,8 @@ /// //===----------------------------------------------------------------------===// +#include "ELFDump.h" + #include "llvm-objdump.h" #include "llvm/Demangle/Demangle.h" #include "llvm/Object/ELFObjectFile.h" @@ -18,10 +20,10 @@ #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" +using namespace llvm; using namespace llvm::object; using namespace llvm::objdump; -namespace llvm { template <class ELFT> static Expected<StringRef> getDynamicStrTab(const ELFFile<ELFT> *Elf) { auto DynamicEntriesOrError = Elf->dynamicEntries(); @@ -117,9 +119,9 @@ static Error getRelocationValueString(const ELFObjectFile<ELFT> *Obj, return Error::success(); } -Error getELFRelocationValueString(const ELFObjectFileBase *Obj, - const RelocationRef &Rel, - SmallVectorImpl<char> &Result) { +Error objdump::getELFRelocationValueString(const ELFObjectFileBase *Obj, + const RelocationRef &Rel, + SmallVectorImpl<char> &Result) { if (auto *ELF32LE = dyn_cast<ELF32LEObjectFile>(Obj)) return getRelocationValueString(ELF32LE, Rel, Result); if (auto *ELF64LE = dyn_cast<ELF64LEObjectFile>(Obj)) @@ -148,7 +150,7 @@ static uint64_t getSectionLMA(const ELFFile<ELFT> *Obj, return Sec.getAddress(); } -uint64_t getELFSectionLMA(const object::ELFSectionRef &Sec) { +uint64_t objdump::getELFSectionLMA(const object::ELFSectionRef &Sec) { if (const auto *ELFObj = dyn_cast<ELF32LEObjectFile>(Sec.getObject())) return getSectionLMA(ELFObj->getELFFile(), Sec); else if (const auto *ELFObj = dyn_cast<ELF32BEObjectFile>(Sec.getObject())) @@ -160,7 +162,7 @@ uint64_t getELFSectionLMA(const object::ELFSectionRef &Sec) { } template <class ELFT> -void printDynamicSection(const ELFFile<ELFT> *Elf, StringRef Filename) { +static void printDynamicSection(const ELFFile<ELFT> *Elf, StringRef Filename) { ArrayRef<typename ELFT::Dyn> DynamicEntries = unwrapOrError(Elf->dynamicEntries(), Filename); @@ -196,7 +198,7 @@ void printDynamicSection(const ELFFile<ELFT> *Elf, StringRef Filename) { } } -template <class ELFT> void printProgramHeaders(const ELFFile<ELFT> *o) { +template <class ELFT> static void printProgramHeaders(const ELFFile<ELFT> *o) { outs() << "Program Header:\n"; auto ProgramHeaderOrError = o->program_headers(); if (!ProgramHeaderOrError) @@ -263,8 +265,8 @@ template <class ELFT> void printProgramHeaders(const ELFFile<ELFT> *o) { } template <class ELFT> -void printSymbolVersionDependency(ArrayRef<uint8_t> Contents, - StringRef StrTab) { +static void printSymbolVersionDependency(ArrayRef<uint8_t> Contents, + StringRef StrTab) { outs() << "Version References:\n"; const uint8_t *Buf = Contents.data(); @@ -288,9 +290,9 @@ void printSymbolVersionDependency(ArrayRef<uint8_t> Contents, } template <class ELFT> -void printSymbolVersionDefinition(const typename ELFT::Shdr &Shdr, - ArrayRef<uint8_t> Contents, - StringRef StrTab) { +static void printSymbolVersionDefinition(const typename ELFT::Shdr &Shdr, + ArrayRef<uint8_t> Contents, + StringRef StrTab) { outs() << "Version definitions:\n"; const uint8_t *Buf = Contents.data(); @@ -320,7 +322,8 @@ void printSymbolVersionDefinition(const typename ELFT::Shdr &Shdr, } template <class ELFT> -void printSymbolVersionInfo(const ELFFile<ELFT> *Elf, StringRef FileName) { +static void printSymbolVersionInfo(const ELFFile<ELFT> *Elf, + StringRef FileName) { ArrayRef<typename ELFT::Shdr> Sections = unwrapOrError(Elf->sections(), FileName); for (const typename ELFT::Shdr &Shdr : Sections) { @@ -341,7 +344,7 @@ void printSymbolVersionInfo(const ELFFile<ELFT> *Elf, StringRef FileName) { } } -void printELFFileHeader(const object::ObjectFile *Obj) { +void objdump::printELFFileHeader(const object::ObjectFile *Obj) { if (const auto *ELFObj = dyn_cast<ELF32LEObjectFile>(Obj)) printProgramHeaders(ELFObj->getELFFile()); else if (const auto *ELFObj = dyn_cast<ELF32BEObjectFile>(Obj)) @@ -352,7 +355,7 @@ void printELFFileHeader(const object::ObjectFile *Obj) { printProgramHeaders(ELFObj->getELFFile()); } -void printELFDynamicSection(const object::ObjectFile *Obj) { +void objdump::printELFDynamicSection(const object::ObjectFile *Obj) { if (const auto *ELFObj = dyn_cast<ELF32LEObjectFile>(Obj)) printDynamicSection(ELFObj->getELFFile(), Obj->getFileName()); else if (const auto *ELFObj = dyn_cast<ELF32BEObjectFile>(Obj)) @@ -363,7 +366,7 @@ void printELFDynamicSection(const object::ObjectFile *Obj) { printDynamicSection(ELFObj->getELFFile(), Obj->getFileName()); } -void printELFSymbolVersionInfo(const object::ObjectFile *Obj) { +void objdump::printELFSymbolVersionInfo(const object::ObjectFile *Obj) { if (const auto *ELFObj = dyn_cast<ELF32LEObjectFile>(Obj)) printSymbolVersionInfo(ELFObj->getELFFile(), Obj->getFileName()); else if (const auto *ELFObj = dyn_cast<ELF32BEObjectFile>(Obj)) @@ -373,4 +376,3 @@ void printELFSymbolVersionInfo(const object::ObjectFile *Obj) { else if (const auto *ELFObj = dyn_cast<ELF64BEObjectFile>(Obj)) printSymbolVersionInfo(ELFObj->getELFFile(), Obj->getFileName()); } -} // namespace llvm diff --git a/llvm/tools/llvm-objdump/ELFDump.h b/llvm/tools/llvm-objdump/ELFDump.h new file mode 100644 index 0000000..9b6b1f3 --- /dev/null +++ b/llvm/tools/llvm-objdump/ELFDump.h @@ -0,0 +1,39 @@ +//===-- ELFDump.h - ELF-specific dumper -------------------------*- 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_LLVM_OBJDUMP_ELFDUMP_H +#define LLVM_TOOLS_LLVM_OBJDUMP_ELFDUMP_H + +#include "llvm/ADT/SmallVector.h" + +namespace llvm { + +class Error; + +namespace object { +class ELFObjectFileBase; +class ELFSectionRef; +class ObjectFile; +class RelocationRef; +} // namespace object + +namespace objdump { + +Error getELFRelocationValueString(const object::ELFObjectFileBase *Obj, + const object::RelocationRef &Rel, + llvm::SmallVectorImpl<char> &Result); +uint64_t getELFSectionLMA(const object::ELFSectionRef &Sec); + +void printELFFileHeader(const object::ObjectFile *O); +void printELFDynamicSection(const object::ObjectFile *Obj); +void printELFSymbolVersionInfo(const object::ObjectFile *Obj); + +} // namespace objdump +} // namespace llvm + +#endif diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 92c130b..a68a8c5 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -17,6 +17,7 @@ #include "llvm-objdump.h" #include "COFFDump.h" +#include "ELFDump.h" #include "MachODump.h" #include "WasmDump.h" #include "XCOFFDump.h" diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h index 360ff09..8e6c105 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/tools/llvm-objdump/llvm-objdump.h @@ -117,16 +117,7 @@ private: SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O, uint64_t *Idx = nullptr); -Error getELFRelocationValueString(const object::ELFObjectFileBase *Obj, - const object::RelocationRef &Rel, - llvm::SmallVectorImpl<char> &Result); - -uint64_t getELFSectionLMA(const object::ELFSectionRef& Sec); - bool isRelocAddressLess(object::RelocationRef A, object::RelocationRef B); -void printELFFileHeader(const object::ObjectFile *O); -void printELFDynamicSection(const object::ObjectFile *Obj); -void printELFSymbolVersionInfo(const object::ObjectFile *Obj); void printRawClangAST(const object::ObjectFile *O); void printRelocations(const object::ObjectFile *O); void printDynamicRelocations(const object::ObjectFile *O); |