diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/ObjDumper.h')
| -rw-r--r-- | llvm/tools/llvm-readobj/ObjDumper.h | 144 | 
1 files changed, 144 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/ObjDumper.h new file mode 100644 index 000000000000..2ba441342499 --- /dev/null +++ b/llvm/tools/llvm-readobj/ObjDumper.h @@ -0,0 +1,144 @@ +//===-- ObjDumper.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_READOBJ_OBJDUMPER_H +#define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H + +#include <memory> +#include <system_error> + +#include "llvm/ADT/StringRef.h" +#include "llvm/Object/ObjectFile.h" +#include "llvm/Support/CommandLine.h" + +namespace llvm { +namespace object { +class COFFImportFile; +class ObjectFile; +} +namespace codeview { +class GlobalTypeTableBuilder; +class MergingTypeTableBuilder; +} // namespace codeview + +class ScopedPrinter; + +class ObjDumper { +public: +  ObjDumper(ScopedPrinter &Writer); +  virtual ~ObjDumper(); + +  virtual void printFileHeaders() = 0; +  virtual void printSectionHeaders() = 0; +  virtual void printRelocations() = 0; +  virtual void printSymbols(bool PrintSymbols, bool PrintDynamicSymbols) { +    if (PrintSymbols) +      printSymbols(); +    if (PrintDynamicSymbols) +      printDynamicSymbols(); +  } +  virtual void printProgramHeaders(bool PrintProgramHeaders, +                                   cl::boolOrDefault PrintSectionMapping) { +    if (PrintProgramHeaders) +      printProgramHeaders(); +    if (PrintSectionMapping == cl::BOU_TRUE) +      printSectionMapping(); +  } + +  virtual void printUnwindInfo() = 0; + +  // Only implemented for ELF at this time. +  virtual void printDynamicRelocations() { } +  virtual void printDynamicTable() { } +  virtual void printNeededLibraries() { } +  virtual void printSectionAsHex(StringRef SectionName) {} +  virtual void printHashTable() { } +  virtual void printGnuHashTable() { } +  virtual void printHashSymbols() {} +  virtual void printLoadName() {} +  virtual void printVersionInfo() {} +  virtual void printGroupSections() {} +  virtual void printHashHistogram() {} +  virtual void printCGProfile() {} +  virtual void printAddrsig() {} +  virtual void printNotes() {} +  virtual void printELFLinkerOptions() {} +  virtual void printStackSizes() {} +  virtual void printArchSpecificInfo() { } + +  // Only implemented for PE/COFF. +  virtual void printCOFFImports() { } +  virtual void printCOFFExports() { } +  virtual void printCOFFDirectives() { } +  virtual void printCOFFBaseReloc() { } +  virtual void printCOFFDebugDirectory() { } +  virtual void printCOFFResources() {} +  virtual void printCOFFLoadConfig() { } +  virtual void printCodeViewDebugInfo() { } +  virtual void +  mergeCodeViewTypes(llvm::codeview::MergingTypeTableBuilder &CVIDs, +                     llvm::codeview::MergingTypeTableBuilder &CVTypes, +                     llvm::codeview::GlobalTypeTableBuilder &GlobalCVIDs, +                     llvm::codeview::GlobalTypeTableBuilder &GlobalCVTypes, +                     bool GHash) {} + +  // Only implemented for MachO. +  virtual void printMachODataInCode() { } +  virtual void printMachOVersionMin() { } +  virtual void printMachODysymtab() { } +  virtual void printMachOSegment() { } +  virtual void printMachOIndirectSymbols() { } +  virtual void printMachOLinkerOptions() { } + +  virtual void printStackMap() const = 0; + +  void printSectionsAsString(const object::ObjectFile *Obj, +                             ArrayRef<std::string> Sections); +  void printSectionsAsHex(const object::ObjectFile *Obj, +                          ArrayRef<std::string> Sections); + +protected: +  ScopedPrinter &W; + +private: +  virtual void printSymbols() {} +  virtual void printDynamicSymbols() {} +  virtual void printProgramHeaders() {} +  virtual void printSectionMapping() {} +}; + +std::error_code createCOFFDumper(const object::ObjectFile *Obj, +                                 ScopedPrinter &Writer, +                                 std::unique_ptr<ObjDumper> &Result); + +std::error_code createELFDumper(const object::ObjectFile *Obj, +                                ScopedPrinter &Writer, +                                std::unique_ptr<ObjDumper> &Result); + +std::error_code createMachODumper(const object::ObjectFile *Obj, +                                  ScopedPrinter &Writer, +                                  std::unique_ptr<ObjDumper> &Result); + +std::error_code createWasmDumper(const object::ObjectFile *Obj, +                                 ScopedPrinter &Writer, +                                 std::unique_ptr<ObjDumper> &Result); + +std::error_code createXCOFFDumper(const object::ObjectFile *Obj, +                                  ScopedPrinter &Writer, +                                  std::unique_ptr<ObjDumper> &Result); + +void dumpCOFFImportFile(const object::COFFImportFile *File, +                        ScopedPrinter &Writer); + +void dumpCodeViewMergedTypes(ScopedPrinter &Writer, +                             ArrayRef<ArrayRef<uint8_t>> IpiRecords, +                             ArrayRef<ArrayRef<uint8_t>> TpiRecords); + +} // namespace llvm + +#endif  | 
