diff --git a/llvm/tools/llvm-objdump/COFFDump.h b/llvm/tools/llvm-objdump/COFFDump.h new file mode 100644 --- /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/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp --- 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 @@ 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 @@ 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 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 @@ 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 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 @@ } } } -} // namespace llvm diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/tools/llvm-objdump/llvm-objdump.h @@ -18,8 +18,6 @@ class StringRef; namespace object { -class COFFObjectFile; -class COFFImportFile; class ELFObjectFileBase; class ELFSectionRef; class MachOObjectFile; @@ -97,9 +95,6 @@ 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 @@ 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 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); diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- 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 {