1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[llvm-objdump] Reorganize cl::opt variables and move Mach-O specifics to MachODump.cpp

llvm-svn: 358415
This commit is contained in:
Fangrui Song 2019-04-15 15:00:10 +00:00
parent e9fb8ae4a6
commit 4b9bb185d6
3 changed files with 289 additions and 299 deletions

View File

@ -58,6 +58,44 @@ extern "C" {
using namespace llvm;
using namespace object;
namespace llvm {
extern cl::opt<bool> ArchiveHeaders;
extern cl::opt<bool> Disassemble;
extern cl::opt<bool> DisassembleAll;
extern cl::opt<DIDumpType> DwarfDumpType;
extern cl::list<std::string> FilterSections;
extern cl::list<std::string> MAttrs;
extern cl::opt<std::string> MCPU;
extern cl::opt<bool> NoShowRawInsn;
extern cl::opt<bool> NoLeadingAddr;
extern cl::opt<bool> PrintImmHex;
extern cl::opt<bool> PrivateHeaders;
extern cl::opt<bool> Relocations;
extern cl::opt<bool> SectionHeaders;
extern cl::opt<bool> SectionContents;
extern cl::opt<bool> SymbolTable;
extern cl::opt<std::string> TripleName;
extern cl::opt<bool> UnwindInfo;
cl::opt<bool>
FirstPrivateHeader("private-header",
cl::desc("Display only the first format specific file "
"header"));
cl::opt<bool> ExportsTrie("exports-trie",
cl::desc("Display mach-o exported symbols"));
cl::opt<bool> Rebase("rebase", cl::desc("Display mach-o rebasing info"));
cl::opt<bool> Bind("bind", cl::desc("Display mach-o binding info"));
cl::opt<bool> LazyBind("lazy-bind",
cl::desc("Display mach-o lazy binding info"));
cl::opt<bool> WeakBind("weak-bind",
cl::desc("Display mach-o weak binding info"));
static cl::opt<bool>
UseDbg("g", cl::Grouping,
cl::desc("Print line information from debug info if available"));
@ -71,9 +109,9 @@ static cl::opt<bool> FullLeadingAddr("full-leading-addr",
static cl::opt<bool> NoLeadingHeaders("no-leading-headers",
cl::desc("Print no leading headers"));
cl::opt<bool> llvm::UniversalHeaders("universal-headers",
cl::desc("Print Mach-O universal headers "
"(requires -macho)"));
cl::opt<bool> UniversalHeaders("universal-headers",
cl::desc("Print Mach-O universal headers "
"(requires -macho)"));
cl::opt<bool>
ArchiveMemberOffsets("archive-member-offsets",
@ -81,47 +119,43 @@ cl::opt<bool>
"Mach-O archives (requires -macho and "
"-archive-headers)"));
cl::opt<bool>
llvm::IndirectSymbols("indirect-symbols",
cl::desc("Print indirect symbol table for Mach-O "
"objects (requires -macho)"));
cl::opt<bool> IndirectSymbols("indirect-symbols",
cl::desc("Print indirect symbol table for Mach-O "
"objects (requires -macho)"));
cl::opt<bool>
llvm::DataInCode("data-in-code",
cl::desc("Print the data in code table for Mach-O objects "
"(requires -macho)"));
DataInCode("data-in-code",
cl::desc("Print the data in code table for Mach-O objects "
"(requires -macho)"));
cl::opt<bool> LinkOptHints("link-opt-hints",
cl::desc("Print the linker optimization hints for "
"Mach-O objects (requires -macho)"));
cl::opt<bool> InfoPlist("info-plist",
cl::desc("Print the info plist section as strings for "
"Mach-O objects (requires -macho)"));
cl::opt<bool> DylibsUsed("dylibs-used",
cl::desc("Print the shared libraries used for linked "
"Mach-O files (requires -macho)"));
cl::opt<bool>
llvm::LinkOptHints("link-opt-hints",
cl::desc("Print the linker optimization hints for "
"Mach-O objects (requires -macho)"));
DylibId("dylib-id",
cl::desc("Print the shared library's id for the dylib Mach-O "
"file (requires -macho)"));
cl::opt<bool>
llvm::InfoPlist("info-plist",
cl::desc("Print the info plist section as strings for "
"Mach-O objects (requires -macho)"));
NonVerbose("non-verbose",
cl::desc("Print the info for Mach-O objects in "
"non-verbose or numeric form (requires -macho)"));
cl::opt<bool>
llvm::DylibsUsed("dylibs-used",
cl::desc("Print the shared libraries used for linked "
"Mach-O files (requires -macho)"));
ObjcMetaData("objc-meta-data",
cl::desc("Print the Objective-C runtime meta data for "
"Mach-O files (requires -macho)"));
cl::opt<bool>
llvm::DylibId("dylib-id",
cl::desc("Print the shared library's id for the dylib Mach-O "
"file (requires -macho)"));
cl::opt<bool>
llvm::NonVerbose("non-verbose",
cl::desc("Print the info for Mach-O objects in "
"non-verbose or numeric form (requires -macho)"));
cl::opt<bool>
llvm::ObjcMetaData("objc-meta-data",
cl::desc("Print the Objective-C runtime meta data for "
"Mach-O files (requires -macho)"));
cl::opt<std::string> llvm::DisSymName(
cl::opt<std::string> DisSymName(
"dis-symname",
cl::desc("disassemble just this symbol's instructions (requires -macho)"));
@ -132,6 +166,7 @@ static cl::opt<bool> NoSymbolicOperands(
static cl::list<std::string>
ArchFlags("arch", cl::desc("architecture(s) from a Mach-O file to dump"),
cl::ZeroOrMore);
} // namespace llvm
bool ArchAll = false;
@ -10216,3 +10251,52 @@ static const char *get_dyld_bind_info_symbolname(uint64_t ReferenceValue,
return !name.empty() ? name.data() : nullptr;
}
void llvm::printLazyBindTable(ObjectFile *o) {
outs() << "Lazy bind table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOLazyBindTable(MachO);
else
WithColor::error()
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printWeakBindTable(ObjectFile *o) {
outs() << "Weak bind table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOWeakBindTable(MachO);
else
WithColor::error()
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printExportsTrie(const ObjectFile *o) {
outs() << "Exports trie:\n";
if (const MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOExportsTrie(MachO);
else
WithColor::error()
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printRebaseTable(ObjectFile *o) {
outs() << "Rebase table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachORebaseTable(MachO);
else
WithColor::error()
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printBindTable(ObjectFile *o) {
outs() << "Bind table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOBindTable(MachO);
else
WithColor::error()
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}

View File

@ -70,93 +70,131 @@
using namespace llvm;
using namespace object;
cl::opt<unsigned long long> AdjustVMA(
namespace llvm {
// MachO specific
extern cl::opt<bool> Bind;
extern cl::opt<bool> DataInCode;
extern cl::opt<bool> DylibsUsed;
extern cl::opt<bool> DylibId;
extern cl::opt<bool> ExportsTrie;
extern cl::opt<bool> FirstPrivateHeader;
extern cl::opt<bool> IndirectSymbols;
extern cl::opt<bool> InfoPlist;
extern cl::opt<bool> LazyBind;
extern cl::opt<bool> LinkOptHints;
extern cl::opt<bool> ObjcMetaData;
extern cl::opt<bool> Rebase;
extern cl::opt<bool> UniversalHeaders;
extern cl::opt<bool> WeakBind;
static cl::opt<unsigned long long> AdjustVMA(
"adjust-vma",
cl::desc("Increase the displayed address by the specified offset"),
cl::value_desc("offset"), cl::init(0));
cl::opt<bool>
llvm::AllHeaders("all-headers",
cl::desc("Display all available header information"));
static cl::opt<bool>
AllHeaders("all-headers",
cl::desc("Display all available header information"));
static cl::alias AllHeadersShort("x", cl::desc("Alias for --all-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(AllHeaders));
static cl::list<std::string>
InputFilenames(cl::Positional, cl::desc("<input object files>"),cl::ZeroOrMore);
static cl::opt<std::string>
ArchName("arch-name", cl::desc("Target arch to disassemble for, "
"see -version for available targets"));
cl::opt<bool>
llvm::Disassemble("disassemble",
cl::desc("Display assembler mnemonics for the machine instructions"));
static cl::alias Disassembled("d", cl::desc("Alias for --disassemble"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(Disassemble));
cl::opt<bool>
llvm::DisassembleAll("disassemble-all",
cl::desc("Display assembler mnemonics for the machine instructions"));
static cl::alias DisassembleAlld("D", cl::desc("Alias for --disassemble-all"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(DisassembleAll));
cl::opt<bool> llvm::Demangle("demangle", cl::desc("Demangle symbols names"),
cl::init(false));
cl::opt<bool> ArchiveHeaders("archive-headers",
cl::desc("Display archive header information"));
static cl::alias ArchiveHeadersShort("a",
cl::desc("Alias for --archive-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(ArchiveHeaders));
cl::opt<bool> Demangle("demangle", cl::desc("Demangle symbols names"),
cl::init(false));
static cl::alias DemangleShort("C", cl::desc("Alias for --demangle"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(llvm::Demangle));
cl::aliasopt(Demangle));
cl::opt<bool> Disassemble(
"disassemble",
cl::desc("Display assembler mnemonics for the machine instructions"));
static cl::alias DisassembleShort("d", cl::desc("Alias for --disassemble"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(Disassemble));
cl::opt<bool> DisassembleAll(
"disassemble-all",
cl::desc("Display assembler mnemonics for the machine instructions"));
static cl::alias DisassembleAllShort("D",
cl::desc("Alias for --disassemble-all"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(DisassembleAll));
static cl::list<std::string>
DisassembleFunctions("disassemble-functions",
cl::CommaSeparated,
cl::desc("List of functions to disassemble"));
static StringSet<> DisasmFuncsSet;
cl::opt<bool>
llvm::Relocations("reloc",
cl::desc("Display the relocation entries in the file"));
static cl::alias RelocationsShort("r", cl::desc("Alias for --reloc"),
static cl::opt<bool> DisassembleZeroes(
"disassemble-zeroes",
cl::desc("Do not skip blocks of zeroes when disassembling"));
static cl::alias
DisassembleZeroesShort("z", cl::desc("Alias for --disassemble-zeroes"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(DisassembleZeroes));
static cl::list<std::string>
DisassemblerOptions("disassembler-options",
cl::desc("Pass target specific disassembler options"),
cl::value_desc("options"), cl::CommaSeparated);
static cl::alias
DisassemblerOptionsShort("M", cl::desc("Alias for --disassembler-options"),
cl::NotHidden, cl::Grouping, cl::Prefix,
cl::CommaSeparated,
cl::aliasopt(DisassemblerOptions));
cl::opt<DIDumpType> DwarfDumpType(
"dwarf", cl::init(DIDT_Null), cl::desc("Dump of dwarf debug sections:"),
cl::values(clEnumValN(DIDT_DebugFrame, "frames", ".debug_frame")));
static cl::opt<bool> DynamicRelocations(
"dynamic-reloc",
cl::desc("Display the dynamic relocation entries in the file"));
static cl::alias DynamicRelocationShort("R",
cl::desc("Alias for --dynamic-reloc"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(DynamicRelocations));
static cl::opt<bool>
FaultMapSection("fault-map-section",
cl::desc("Display contents of faultmap section"));
static cl::opt<bool>
FileHeaders("file-headers",
cl::desc("Display the contents of the overall file header"));
static cl::alias FileHeadersShort("f", cl::desc("Alias for --file-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(llvm::Relocations));
cl::aliasopt(FileHeaders));
cl::opt<bool>
llvm::DynamicRelocations("dynamic-reloc",
cl::desc("Display the dynamic relocation entries in the file"));
static cl::alias DynamicRelocationsd("R", cl::desc("Alias for --dynamic-reloc"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(DynamicRelocations));
cl::opt<bool>
llvm::SectionContents("full-contents",
cl::desc("Display the content of each section"));
cl::opt<bool> SectionContents("full-contents",
cl::desc("Display the content of each section"));
static cl::alias SectionContentsShort("s",
cl::desc("Alias for --full-contents"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(SectionContents));
cl::opt<bool> llvm::SymbolTable("syms", cl::desc("Display the symbol table"));
static cl::alias SymbolTableShort("t", cl::desc("Alias for --syms"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(llvm::SymbolTable));
static cl::list<std::string>
InputFilenames(cl::Positional, cl::desc("<input object files>"),cl::ZeroOrMore);
cl::opt<bool>
llvm::ExportsTrie("exports-trie", cl::desc("Display mach-o exported symbols"));
cl::opt<bool>
llvm::Rebase("rebase", cl::desc("Display mach-o rebasing info"));
cl::opt<bool>
llvm::Bind("bind", cl::desc("Display mach-o binding info"));
cl::opt<bool>
llvm::LazyBind("lazy-bind", cl::desc("Display mach-o lazy binding info"));
cl::opt<bool>
llvm::WeakBind("weak-bind", cl::desc("Display mach-o weak binding info"));
cl::opt<bool>
llvm::RawClangAST("raw-clang-ast",
cl::desc("Dump the raw binary contents of the clang AST section"));
static cl::opt<bool>
PrintLines("line-numbers",
cl::desc("Display source line numbers with "
"disassembly. Implies disassemble object"));
static cl::alias PrintLinesShort("l", cl::desc("Alias for --line-numbers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(PrintLines));
static cl::opt<bool>
MachOOpt("macho", cl::desc("Use MachO specific object file parser"));
@ -164,22 +202,55 @@ static cl::alias MachOm("m", cl::desc("Alias for --macho"), cl::NotHidden,
cl::Grouping, cl::aliasopt(MachOOpt));
cl::opt<std::string>
llvm::TripleName("triple", cl::desc("Target triple to disassemble for, "
"see -version for available targets"));
MCPU("mcpu",
cl::desc("Target a specific cpu type (-mcpu=help for details)"),
cl::value_desc("cpu-name"), cl::init(""));
cl::opt<std::string>
llvm::MCPU("mcpu",
cl::desc("Target a specific cpu type (-mcpu=help for details)"),
cl::value_desc("cpu-name"),
cl::init(""));
cl::list<std::string> MAttrs("mattr", cl::CommaSeparated,
cl::desc("Target specific attributes"),
cl::value_desc("a1,+a2,-a3,..."));
cl::opt<std::string>
llvm::ArchName("arch-name", cl::desc("Target arch to disassemble for, "
"see -version for available targets"));
cl::opt<bool> NoShowRawInsn("no-show-raw-insn",
cl::desc("When disassembling "
"instructions, do not print "
"the instruction bytes."));
cl::opt<bool> NoLeadingAddr("no-leading-addr",
cl::desc("Print no leading address"));
static cl::opt<bool> RawClangAST(
"raw-clang-ast",
cl::desc("Dump the raw binary contents of the clang AST section"));
cl::opt<bool>
llvm::SectionHeaders("section-headers", cl::desc("Display summaries of the "
"headers for each section."));
Relocations("reloc",
cl::desc("Display the relocation entries in the file"));
static cl::alias RelocationsShort("r", cl::desc("Alias for --reloc"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(Relocations));
cl::opt<bool>
PrintImmHex("print-imm-hex",
cl::desc("Use hex format for immediate values"));
cl::opt<bool>
PrivateHeaders("private-headers",
cl::desc("Display format specific file headers"));
static cl::alias PrivateHeadersShort("p",
cl::desc("Alias for --private-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(PrivateHeaders));
cl::list<std::string>
FilterSections("section",
cl::desc("Operate on the specified sections only. "
"With -macho dump segment,section"));
static cl::alias FilterSectionsj("j", cl::desc("Alias for --section"),
cl::NotHidden, cl::Grouping, cl::Prefix,
cl::aliasopt(FilterSections));
cl::opt<bool> SectionHeaders("section-headers",
cl::desc("Display summaries of the "
"headers for each section."));
static cl::alias SectionHeadersShort("headers",
cl::desc("Alias for --section-headers"),
cl::NotHidden,
@ -193,120 +264,43 @@ static cl::opt<bool>
ShowLMA("show-lma",
cl::desc("Display LMA column when dumping ELF section headers"));
cl::list<std::string>
llvm::FilterSections("section", cl::desc("Operate on the specified sections only. "
"With -macho dump segment,section"));
cl::alias static FilterSectionsj("j", cl::desc("Alias for --section"),
cl::NotHidden, cl::Grouping, cl::Prefix,
cl::aliasopt(llvm::FilterSections));
static cl::opt<bool> PrintSource(
"source",
cl::desc(
"Display source inlined with disassembly. Implies disassemble object"));
static cl::alias PrintSourceShort("S", cl::desc("Alias for -source"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(PrintSource));
cl::list<std::string>
llvm::MAttrs("mattr",
cl::CommaSeparated,
cl::desc("Target specific attributes"),
cl::value_desc("a1,+a2,-a3,..."));
static cl::opt<unsigned long long>
StartAddress("start-address", cl::desc("Disassemble beginning at address"),
cl::value_desc("address"), cl::init(0));
static cl::opt<unsigned long long>
StopAddress("stop-address", cl::desc("Stop disassembly at address"),
cl::value_desc("address"), cl::init(UINT64_MAX));
cl::opt<bool>
llvm::NoShowRawInsn("no-show-raw-insn", cl::desc("When disassembling "
"instructions, do not print "
"the instruction bytes."));
cl::opt<bool>
llvm::NoLeadingAddr("no-leading-addr", cl::desc("Print no leading address"));
cl::opt<bool> SymbolTable("syms", cl::desc("Display the symbol table"));
static cl::alias SymbolTableShort("t", cl::desc("Alias for --syms"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(SymbolTable));
cl::opt<bool>
llvm::UnwindInfo("unwind-info", cl::desc("Display unwind information"));
cl::opt<std::string> TripleName("triple",
cl::desc("Target triple to disassemble for, "
"see -version for available targets"));
cl::opt<bool> UnwindInfo("unwind-info",
cl::desc("Display unwind information"));
static cl::alias UnwindInfoShort("u", cl::desc("Alias for --unwind-info"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(UnwindInfo));
cl::opt<bool>
llvm::PrivateHeaders("private-headers",
cl::desc("Display format specific file headers"));
cl::opt<bool>
llvm::FirstPrivateHeader("private-header",
cl::desc("Display only the first format specific file "
"header"));
static cl::alias PrivateHeadersShort("p",
cl::desc("Alias for --private-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(PrivateHeaders));
cl::opt<bool> llvm::FileHeaders(
"file-headers",
cl::desc("Display the contents of the overall file header"));
static cl::alias FileHeadersShort("f", cl::desc("Alias for --file-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(FileHeaders));
cl::opt<bool>
llvm::ArchiveHeaders("archive-headers",
cl::desc("Display archive header information"));
cl::alias ArchiveHeadersShort("a", cl::desc("Alias for --archive-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(ArchiveHeaders));
cl::opt<bool>
llvm::PrintImmHex("print-imm-hex",
cl::desc("Use hex format for immediate values"));
cl::opt<bool> PrintFaultMaps("fault-map-section",
cl::desc("Display contents of faultmap section"));
cl::opt<DIDumpType> llvm::DwarfDumpType(
"dwarf", cl::init(DIDT_Null), cl::desc("Dump of dwarf debug sections:"),
cl::values(clEnumValN(DIDT_DebugFrame, "frames", ".debug_frame")));
cl::opt<bool> PrintSource(
"source",
cl::desc(
"Display source inlined with disassembly. Implies disassemble object"));
cl::alias PrintSourceShort("S", cl::desc("Alias for -source"), cl::NotHidden,
cl::Grouping, cl::aliasopt(PrintSource));
cl::opt<bool> PrintLines("line-numbers",
cl::desc("Display source line numbers with "
"disassembly. Implies disassemble object"));
cl::alias PrintLinesShort("l", cl::desc("Alias for -line-numbers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(PrintLines));
cl::opt<unsigned long long>
StartAddress("start-address", cl::desc("Disassemble beginning at address"),
cl::value_desc("address"), cl::init(0));
cl::opt<unsigned long long>
StopAddress("stop-address",
cl::desc("Stop disassembly at address"),
cl::value_desc("address"), cl::init(UINT64_MAX));
cl::opt<bool> DisassembleZeroes(
"disassemble-zeroes",
cl::desc("Do not skip blocks of zeroes when disassembling"));
cl::alias DisassembleZeroesShort("z",
cl::desc("Alias for --disassemble-zeroes"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(DisassembleZeroes));
static cl::list<std::string>
DisassemblerOptions("disassembler-options",
cl::desc("Pass target specific disassembler options"),
cl::value_desc("options"), cl::CommaSeparated);
static cl::alias
DisassemblerOptionsShort("M", cl::desc("Alias for --disassembler-options"),
cl::NotHidden, cl::Grouping, cl::Prefix,
cl::CommaSeparated,
cl::aliasopt(DisassemblerOptions));
static cl::opt<bool>
Wide("wide", cl::desc("Ignored for compatibility with GNU objdump"));
static cl::alias WideShort("w", cl::Grouping, cl::aliasopt(Wide));
} // namespace llvm
static StringSet<> DisasmFuncsSet;
static StringRef ToolName;
typedef std::vector<std::tuple<uint64_t, StringRef, uint8_t>> SectionSymbolsTy;
@ -1728,56 +1722,6 @@ static void printUnwindInfo(const ObjectFile *O) {
"for COFF and MachO object files.\n";
}
void llvm::printExportsTrie(const ObjectFile *o) {
outs() << "Exports trie:\n";
if (const MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOExportsTrie(MachO);
else
WithColor::error(errs(), ToolName)
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printRebaseTable(ObjectFile *o) {
outs() << "Rebase table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachORebaseTable(MachO);
else
WithColor::error(errs(), ToolName)
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printBindTable(ObjectFile *o) {
outs() << "Bind table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOBindTable(MachO);
else
WithColor::error(errs(), ToolName)
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printLazyBindTable(ObjectFile *o) {
outs() << "Lazy bind table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOLazyBindTable(MachO);
else
WithColor::error(errs(), ToolName)
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
void llvm::printWeakBindTable(ObjectFile *o) {
outs() << "Weak bind table:\n";
if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
printMachOWeakBindTable(MachO);
else
WithColor::error(errs(), ToolName)
<< "This operation is only currently supported "
"for Mach-O executable files.\n";
}
/// Dump the raw contents of the __clangast section so the output can be piped
/// into llvm-bcanalyzer.
void llvm::printRawClangAST(const ObjectFile *Obj) {
@ -1979,7 +1923,7 @@ static void dumpObject(ObjectFile *O, const Archive *A = nullptr,
printWeakBindTable(O);
if (RawClangAST)
printRawClangAST(O);
if (PrintFaultMaps)
if (FaultMapSection)
printFaultMaps(O);
if (DwarfDumpType != DIDT_Null) {
std::unique_ptr<DIContext> DICtx = DWARFContext::create(*O);
@ -2105,7 +2049,7 @@ int main(int argc, char **argv) {
&& !(DylibId && MachOOpt)
&& !(ObjcMetaData && MachOOpt)
&& !(!FilterSections.empty() && MachOOpt)
&& !PrintFaultMaps
&& !FaultMapSection
&& DwarfDumpType == DIDT_Null) {
cl::PrintHelpMessage();
return 2;

View File

@ -29,45 +29,7 @@ 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> AllHeaders;
extern cl::opt<bool> Demangle;
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> FileHeaders;
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> DynamicRelocations;
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;
typedef std::function<bool(llvm::object::SectionRef const &)> FilterPredicate;