mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 14:46:53 +00:00
1ae32f1960
and test cases for each of the error checks. To do this more plumbing was needed so that the segment indexes and segment offsets can be checked. Basically what was done was the SegInfo from llvm-objdump’s MachODump.cpp was moved into libObject for Mach-O objects as BindRebaseSegInfo and it is only created when an iterator for bind or rebase entries are created. This commit really only adds the error checking and test cases for the bind table entires and the checking for the lazy bind and weak bind entries are still to be fully done as well as the rebase entires. Though some of the plumbing for those are added with this commit. Those other error checks and test cases will be added in follow on commits. Note, the two llvm_unreachable() calls should now actually be unreachable with the error checks in place and would take a logic bug in the error checking code to be reached if the segment indexes and segment offsets are used from a checked bind entry. Comments have been added to the methods that require the arguments to have been checked prior to calling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298292 91177308-0d34-0410-b5e6-96231b3b80d8
113 lines
4.4 KiB
C++
113 lines
4.4 KiB
C++
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TOOLS_LLVM_OBJDUMP_LLVM_OBJDUMP_H
|
|
#define LLVM_TOOLS_LLVM_OBJDUMP_LLVM_OBJDUMP_H
|
|
|
|
#include "llvm/DebugInfo/DIContext.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/Compiler.h"
|
|
#include "llvm/Support/DataTypes.h"
|
|
#include "llvm/Object/Archive.h"
|
|
|
|
namespace llvm {
|
|
class StringRef;
|
|
|
|
namespace object {
|
|
class COFFObjectFile;
|
|
class COFFImportFile;
|
|
class MachOObjectFile;
|
|
class ObjectFile;
|
|
class Archive;
|
|
class RelocationRef;
|
|
}
|
|
|
|
extern cl::opt<std::string> TripleName;
|
|
extern cl::opt<std::string> ArchName;
|
|
extern cl::opt<std::string> MCPU;
|
|
extern cl::list<std::string> MAttrs;
|
|
extern cl::list<std::string> FilterSections;
|
|
extern cl::opt<bool> Disassemble;
|
|
extern cl::opt<bool> DisassembleAll;
|
|
extern cl::opt<bool> NoShowRawInsn;
|
|
extern cl::opt<bool> NoLeadingAddr;
|
|
extern cl::opt<bool> PrivateHeaders;
|
|
extern cl::opt<bool> FirstPrivateHeader;
|
|
extern cl::opt<bool> ExportsTrie;
|
|
extern cl::opt<bool> Rebase;
|
|
extern cl::opt<bool> Bind;
|
|
extern cl::opt<bool> LazyBind;
|
|
extern cl::opt<bool> WeakBind;
|
|
extern cl::opt<bool> RawClangAST;
|
|
extern cl::opt<bool> UniversalHeaders;
|
|
extern cl::opt<bool> ArchiveHeaders;
|
|
extern cl::opt<bool> IndirectSymbols;
|
|
extern cl::opt<bool> DataInCode;
|
|
extern cl::opt<bool> LinkOptHints;
|
|
extern cl::opt<bool> InfoPlist;
|
|
extern cl::opt<bool> DylibsUsed;
|
|
extern cl::opt<bool> DylibId;
|
|
extern cl::opt<bool> ObjcMetaData;
|
|
extern cl::opt<std::string> DisSymName;
|
|
extern cl::opt<bool> NonVerbose;
|
|
extern cl::opt<bool> Relocations;
|
|
extern cl::opt<bool> SectionHeaders;
|
|
extern cl::opt<bool> SectionContents;
|
|
extern cl::opt<bool> SymbolTable;
|
|
extern cl::opt<bool> UnwindInfo;
|
|
extern cl::opt<bool> PrintImmHex;
|
|
extern cl::opt<DIDumpType> DwarfDumpType;
|
|
|
|
// Various helper functions.
|
|
void error(std::error_code ec);
|
|
bool RelocAddressLess(object::RelocationRef a, object::RelocationRef b);
|
|
void ParseInputMachO(StringRef Filename);
|
|
void printCOFFUnwindInfo(const object::COFFObjectFile* o);
|
|
void printMachOUnwindInfo(const object::MachOObjectFile* o);
|
|
void printMachOExportsTrie(const object::MachOObjectFile* o);
|
|
void printMachORebaseTable(object::MachOObjectFile* o);
|
|
void printMachOBindTable(object::MachOObjectFile* o);
|
|
void printMachOLazyBindTable(object::MachOObjectFile* o);
|
|
void printMachOWeakBindTable(object::MachOObjectFile* o);
|
|
void printELFFileHeader(const object::ObjectFile *o);
|
|
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);
|
|
void printExportsTrie(const object::ObjectFile *o);
|
|
void printRebaseTable(object::ObjectFile *o);
|
|
void printBindTable(object::ObjectFile *o);
|
|
void printLazyBindTable(object::ObjectFile *o);
|
|
void printWeakBindTable(object::ObjectFile *o);
|
|
void printRawClangAST(const object::ObjectFile *o);
|
|
void PrintRelocations(const object::ObjectFile *o);
|
|
void PrintSectionHeaders(const object::ObjectFile *o);
|
|
void PrintSectionContents(const object::ObjectFile *o);
|
|
void PrintSymbolTable(const object::ObjectFile *o, StringRef ArchiveName,
|
|
StringRef ArchitectureName = StringRef());
|
|
LLVM_ATTRIBUTE_NORETURN void error(Twine Message);
|
|
LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, Twine Message);
|
|
LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, std::error_code EC);
|
|
LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, llvm::Error E);
|
|
LLVM_ATTRIBUTE_NORETURN void report_error(StringRef FileName,
|
|
StringRef ArchiveName,
|
|
llvm::Error E,
|
|
StringRef ArchitectureName
|
|
= StringRef());
|
|
LLVM_ATTRIBUTE_NORETURN void report_error(StringRef ArchiveName,
|
|
const object::Archive::Child &C,
|
|
llvm::Error E,
|
|
StringRef ArchitectureName
|
|
= StringRef());
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|