diff options
author | Fangrui Song <maskray@google.com> | 2019-04-15 15:00:10 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-04-15 15:00:10 +0000 |
commit | 9d812f44994231772508d12cd56685d26917dab6 (patch) | |
tree | 22fa689bda8bdbbb836f026e0c3461ac88c3f6d9 /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 70921d4a86e0cbe4978e4306984e9923411dfff2 (diff) | |
download | llvm-9d812f44994231772508d12cd56685d26917dab6.zip llvm-9d812f44994231772508d12cd56685d26917dab6.tar.gz llvm-9d812f44994231772508d12cd56685d26917dab6.tar.bz2 |
[llvm-objdump] Reorganize cl::opt variables and move Mach-O specifics to MachODump.cpp
llvm-svn: 358415
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 392 |
1 files changed, 168 insertions, 224 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 0722db0..f81238e 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -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); - -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)); +static cl::opt<std::string> + ArchName("arch-name", cl::desc("Target arch to disassemble for, " + "see -version for available targets")); -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"), - cl::NotHidden, cl::Grouping, - cl::aliasopt(llvm::Relocations)); +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)); -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)); +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<bool> - llvm::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<DIDumpType> DwarfDumpType( + "dwarf", cl::init(DIDT_Null), cl::desc("Dump of dwarf debug sections:"), + cl::values(clEnumValN(DIDT_DebugFrame, "frames", ".debug_frame"))); -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::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)); -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")); +static cl::opt<bool> + FaultMapSection("fault-map-section", + cl::desc("Display contents of faultmap section")); -cl::opt<bool> -llvm::Bind("bind", cl::desc("Display mach-o binding info")); +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(FileHeaders)); -cl::opt<bool> -llvm::LazyBind("lazy-bind", cl::desc("Display mach-o lazy binding info")); +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::WeakBind("weak-bind", cl::desc("Display mach-o weak binding info")); +static cl::list<std::string> +InputFilenames(cl::Positional, cl::desc("<input object files>"),cl::ZeroOrMore); -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::list<std::string> MAttrs("mattr", cl::CommaSeparated, + cl::desc("Target specific attributes"), + cl::value_desc("a1,+a2,-a3,...")); + +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<std::string> -llvm::MCPU("mcpu", - cl::desc("Target a specific cpu type (-mcpu=help for details)"), - cl::value_desc("cpu-name"), - cl::init("")); +cl::opt<bool> + 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<std::string> -llvm::ArchName("arch-name", cl::desc("Target arch to disassemble for, " - "see -version for available targets")); +cl::opt<bool> + PrintImmHex("print-imm-hex", + cl::desc("Use hex format for immediate values")); cl::opt<bool> -llvm::SectionHeaders("section-headers", cl::desc("Display summaries of the " - "headers for each section.")); + 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)); - -cl::list<std::string> -llvm::MAttrs("mattr", - cl::CommaSeparated, - cl::desc("Target specific attributes"), - cl::value_desc("a1,+a2,-a3,...")); - -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> -llvm::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( +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::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> +static 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"), +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> DisassembleZeroes( - "disassemble-zeroes", - cl::desc("Do not skip blocks of zeroes when disassembling")); -cl::alias DisassembleZeroesShort("z", - cl::desc("Alias for --disassemble-zeroes"), +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<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(DisassembleZeroes)); + cl::aliasopt(UnwindInfo)); -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; |