From 2aab46ab0282b968de8593f916950d793a5a76d6 Mon Sep 17 00:00:00 2001 From: Hubert Tong Date: Thu, 2 Apr 2020 18:17:52 -0400 Subject: [PATCH] [llvm-objdump][COFF][NFC] Split format-specific interfaces; add namespace Summary: This patch addresses, for the interfaces implemented by `COFFDump.cpp`, multiple issues identified with the current structure of `llvm-objdump.h` in the review of D72973. This patch moves implementation details of the tool into an `llvm::objdump` namespace for external linkage names, splits the implementation details into separate headers for each implementation file, and uses qualified names when declaring members of the `llvm::objdump` namespace in place of leaving the namespace definition open. Reviewers: jhenderson, DiggerLin, jasonliu, daltenty, MaskRay Reviewed By: jhenderson, MaskRay Subscribers: MaskRay, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D77285 --- llvm/tools/llvm-objdump/COFFDump.cpp | 19 ++++++------ llvm/tools/llvm-objdump/COFFDump.h | 37 ++++++++++++++++++++++++ llvm/tools/llvm-objdump/llvm-objdump.cpp | 2 ++ llvm/tools/llvm-objdump/llvm-objdump.h | 9 ------ 4 files changed, 49 insertions(+), 18 deletions(-) create mode 100644 llvm/tools/llvm-objdump/COFFDump.h diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp index 60b0f5a3cbd1..aea0d266f98d 100644 --- a/llvm/tools/llvm-objdump/COFFDump.cpp +++ b/llvm/tools/llvm-objdump/COFFDump.cpp @@ -14,6 +14,8 @@ /// //===----------------------------------------------------------------------===// +#include "COFFDump.h" + #include "llvm-objdump.h" #include "llvm/Demangle/Demangle.h" #include "llvm/Object/COFF.h" @@ -24,10 +26,10 @@ #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" +using namespace llvm; using namespace llvm::object; using namespace llvm::Win64EH; -namespace llvm { // Returns the name of the unwind code. static StringRef getUnwindCodeTypeName(uint8_t Code) { switch(Code) { @@ -473,9 +475,9 @@ static bool getPDataSection(const COFFObjectFile *Obj, return false; } -Error getCOFFRelocationValueString(const COFFObjectFile *Obj, - const RelocationRef &Rel, - SmallVectorImpl &Result) { +Error objdump::getCOFFRelocationValueString(const COFFObjectFile *Obj, + const RelocationRef &Rel, + SmallVectorImpl &Result) { symbol_iterator SymI = Rel.getSymbol(); Expected SymNameOrErr = SymI->getName(); if (!SymNameOrErr) @@ -596,7 +598,7 @@ static void printRuntimeFunctionRels(const COFFObjectFile *Obj, printWin64EHUnwindInfo(UI); } -void printCOFFUnwindInfo(const COFFObjectFile *Obj) { +void objdump::printCOFFUnwindInfo(const COFFObjectFile *Obj) { if (Obj->getMachine() != COFF::IMAGE_FILE_MACHINE_AMD64) { WithColor::error(errs(), "llvm-objdump") << "unsupported image machine type " @@ -625,7 +627,7 @@ void printCOFFUnwindInfo(const COFFObjectFile *Obj) { } } -void printCOFFFileHeader(const object::ObjectFile *Obj) { +void objdump::printCOFFFileHeader(const object::ObjectFile *Obj) { const COFFObjectFile *file = dyn_cast(Obj); printTLSDirectory(file); printLoadConfiguration(file); @@ -633,7 +635,7 @@ void printCOFFFileHeader(const object::ObjectFile *Obj) { printExportTable(file); } -void printCOFFSymbolTable(const object::COFFImportFile *i) { +void objdump::printCOFFSymbolTable(const object::COFFImportFile *i) { unsigned Index = 0; bool IsCode = i->getCOFFImportHeader()->getType() == COFF::IMPORT_CODE; @@ -656,7 +658,7 @@ void printCOFFSymbolTable(const object::COFFImportFile *i) { } } -void printCOFFSymbolTable(const COFFObjectFile *coff) { +void objdump::printCOFFSymbolTable(const COFFObjectFile *coff) { for (unsigned SI = 0, SE = coff->getNumberOfSymbols(); SI != SE; ++SI) { Expected Symbol = coff->getSymbol(SI); if (!Symbol) @@ -735,4 +737,3 @@ void printCOFFSymbolTable(const COFFObjectFile *coff) { } } } -} // namespace llvm diff --git a/llvm/tools/llvm-objdump/COFFDump.h b/llvm/tools/llvm-objdump/COFFDump.h new file mode 100644 index 000000000000..21f97bdeb83c --- /dev/null +++ b/llvm/tools/llvm-objdump/COFFDump.h @@ -0,0 +1,37 @@ +//===-- COFFDump.h ----------------------------------------------*- 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_COFFDUMP_H +#define LLVM_TOOLS_LLVM_OBJDUMP_COFFDUMP_H + +#include "llvm/ADT/SmallVector.h" + +namespace llvm { + +class Error; + +namespace object { +class COFFObjectFile; +class COFFImportFile; +class ObjectFile; +class RelocationRef; +} // namespace object + +namespace objdump { +Error getCOFFRelocationValueString(const object::COFFObjectFile *Obj, + const object::RelocationRef &Rel, + llvm::SmallVectorImpl &Result); + +void printCOFFUnwindInfo(const object::COFFObjectFile *O); +void printCOFFFileHeader(const object::ObjectFile *O); +void printCOFFSymbolTable(const object::COFFImportFile *I); +void printCOFFSymbolTable(const object::COFFObjectFile *O); +} // namespace objdump +} // namespace llvm + +#endif diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 4d5e09f14b55..6f284159cb21 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -16,6 +16,7 @@ //===----------------------------------------------------------------------===// #include "llvm-objdump.h" +#include "COFFDump.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SetOperations.h" @@ -72,6 +73,7 @@ #include using namespace llvm::object; +using namespace llvm::objdump; namespace llvm { diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h index e75b80af60f1..f834f11def39 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/tools/llvm-objdump/llvm-objdump.h @@ -18,8 +18,6 @@ namespace llvm { class StringRef; namespace object { -class COFFObjectFile; -class COFFImportFile; class ELFObjectFileBase; class ELFSectionRef; class MachOObjectFile; @@ -97,9 +95,6 @@ SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O, Error getELFRelocationValueString(const object::ELFObjectFileBase *Obj, const object::RelocationRef &Rel, llvm::SmallVectorImpl &Result); -Error getCOFFRelocationValueString(const object::COFFObjectFile *Obj, - const object::RelocationRef &Rel, - llvm::SmallVectorImpl &Result); Error getWasmRelocationValueString(const object::WasmObjectFile *Obj, const object::RelocationRef &RelRef, llvm::SmallVectorImpl &Result); @@ -115,7 +110,6 @@ uint64_t getELFSectionLMA(const object::ELFSectionRef& Sec); bool isRelocAddressLess(object::RelocationRef A, object::RelocationRef B); void parseInputMachO(StringRef Filename); void parseInputMachO(object::MachOUniversalBinary *UB); -void printCOFFUnwindInfo(const object::COFFObjectFile *O); void printMachOUnwindInfo(const object::MachOObjectFile *O); void printMachOExportsTrie(const object::MachOObjectFile *O); void printMachORebaseTable(object::MachOObjectFile *O); @@ -125,9 +119,6 @@ void printMachOWeakBindTable(object::MachOObjectFile *O); void printELFFileHeader(const object::ObjectFile *O); void printELFDynamicSection(const object::ObjectFile *Obj); void printELFSymbolVersionInfo(const object::ObjectFile *Obj); -void printCOFFFileHeader(const object::ObjectFile *O); -void printCOFFSymbolTable(const object::COFFImportFile *I); -void printCOFFSymbolTable(const object::COFFObjectFile *O); void printMachOFileHeader(const object::ObjectFile *O); void printMachOLoadCommands(const object::ObjectFile *O); void printWasmFileHeader(const object::ObjectFile *O);