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

Properly categorize llvm-objdump options

Filters out noise, and distinguish Mach-O related options from others.

Differential Revision: https://reviews.llvm.org/D62195

llvm-svn: 361351
This commit is contained in:
Serge Guelton 2019-05-22 06:30:46 +00:00
parent 604cef45ab
commit 6354b229e0
2 changed files with 127 additions and 71 deletions

View File

@ -59,6 +59,8 @@ using namespace llvm::object;
namespace llvm {
cl::OptionCategory MachOCat("llvm-objdump MachO Specific Options");
extern cl::opt<bool> ArchiveHeaders;
extern cl::opt<bool> Disassemble;
extern cl::opt<bool> DisassembleAll;
@ -80,91 +82,113 @@ extern cl::opt<bool> UnwindInfo;
cl::opt<bool>
FirstPrivateHeader("private-header",
cl::desc("Display only the first format specific file "
"header"));
"header"),
cl::cat(MachOCat));
cl::opt<bool> ExportsTrie("exports-trie",
cl::desc("Display mach-o exported symbols"));
cl::desc("Display mach-o exported symbols"),
cl::cat(MachOCat));
cl::opt<bool> Rebase("rebase", cl::desc("Display mach-o rebasing info"));
cl::opt<bool> Rebase("rebase", cl::desc("Display mach-o rebasing info"),
cl::cat(MachOCat));
cl::opt<bool> Bind("bind", cl::desc("Display mach-o binding info"));
cl::opt<bool> Bind("bind", cl::desc("Display mach-o binding info"),
cl::cat(MachOCat));
cl::opt<bool> LazyBind("lazy-bind",
cl::desc("Display mach-o lazy binding info"));
cl::desc("Display mach-o lazy binding info"),
cl::cat(MachOCat));
cl::opt<bool> WeakBind("weak-bind",
cl::desc("Display mach-o weak binding info"));
cl::desc("Display mach-o weak binding info"),
cl::cat(MachOCat));
static cl::opt<bool>
UseDbg("g", cl::Grouping,
cl::desc("Print line information from debug info if available"));
cl::desc("Print line information from debug info if available"),
cl::cat(MachOCat));
static cl::opt<std::string> DSYMFile("dsym",
cl::desc("Use .dSYM file for debug info"));
cl::desc("Use .dSYM file for debug info"),
cl::cat(MachOCat));
static cl::opt<bool> FullLeadingAddr("full-leading-addr",
cl::desc("Print full leading address"));
cl::desc("Print full leading address"),
cl::cat(MachOCat));
static cl::opt<bool> NoLeadingHeaders("no-leading-headers",
cl::desc("Print no leading headers"));
cl::desc("Print no leading headers"),
cl::cat(MachOCat));
cl::opt<bool> UniversalHeaders("universal-headers",
cl::desc("Print Mach-O universal headers "
"(requires -macho)"));
"(requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool>
ArchiveMemberOffsets("archive-member-offsets",
cl::desc("Print the offset to each archive member for "
"Mach-O archives (requires -macho and "
"-archive-headers)"));
"-archive-headers)"),
cl::cat(MachOCat));
cl::opt<bool> IndirectSymbols("indirect-symbols",
cl::desc("Print indirect symbol table for Mach-O "
"objects (requires -macho)"));
"objects (requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool>
DataInCode("data-in-code",
cl::desc("Print the data in code table for Mach-O objects "
"(requires -macho)"));
"(requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool> LinkOptHints("link-opt-hints",
cl::desc("Print the linker optimization hints for "
"Mach-O objects (requires -macho)"));
"Mach-O objects (requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool> InfoPlist("info-plist",
cl::desc("Print the info plist section as strings for "
"Mach-O objects (requires -macho)"));
"Mach-O objects (requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool> DylibsUsed("dylibs-used",
cl::desc("Print the shared libraries used for linked "
"Mach-O files (requires -macho)"));
"Mach-O files (requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool>
DylibId("dylib-id",
cl::desc("Print the shared library's id for the dylib Mach-O "
"file (requires -macho)"));
"file (requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool>
NonVerbose("non-verbose",
cl::desc("Print the info for Mach-O objects in "
"non-verbose or numeric form (requires -macho)"));
"non-verbose or numeric form (requires -macho)"),
cl::cat(MachOCat));
cl::opt<bool>
ObjcMetaData("objc-meta-data",
cl::desc("Print the Objective-C runtime meta data for "
"Mach-O files (requires -macho)"));
"Mach-O files (requires -macho)"),
cl::cat(MachOCat));
cl::opt<std::string> DisSymName(
"dis-symname",
cl::desc("disassemble just this symbol's instructions (requires -macho)"));
cl::desc("disassemble just this symbol's instructions (requires -macho)"),
cl::cat(MachOCat));
static cl::opt<bool> NoSymbolicOperands(
"no-symbolic-operands",
cl::desc("do not symbolic operands when disassembling (requires -macho)"));
cl::desc("do not symbolic operands when disassembling (requires -macho)"),
cl::cat(MachOCat));
static cl::list<std::string>
ArchFlags("arch", cl::desc("architecture(s) from a Mach-O file to dump"),
cl::ZeroOrMore);
cl::ZeroOrMore, cl::cat(MachOCat));
bool ArchAll = false;

View File

@ -71,7 +71,10 @@ using namespace llvm::object;
namespace llvm {
cl::OptionCategory ObjdumpCat("llvm-objdump Options");
// MachO specific
extern cl::OptionCategory MachOCat;
extern cl::opt<bool> Bind;
extern cl::opt<bool> DataInCode;
extern cl::opt<bool> DylibsUsed;
@ -90,55 +93,62 @@ extern cl::opt<bool> WeakBind;
static cl::opt<uint64_t> AdjustVMA(
"adjust-vma",
cl::desc("Increase the displayed address by the specified offset"),
cl::value_desc("offset"), cl::init(0));
cl::value_desc("offset"), cl::init(0), cl::cat(ObjdumpCat));
static cl::opt<bool>
AllHeaders("all-headers",
cl::desc("Display all available header information"));
cl::desc("Display all available header information"),
cl::cat(ObjdumpCat));
static cl::alias AllHeadersShort("x", cl::desc("Alias for --all-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(AllHeaders));
static cl::opt<std::string>
ArchName("arch-name", cl::desc("Target arch to disassemble for, "
"see -version for available targets"));
ArchName("arch-name",
cl::desc("Target arch to disassemble for, "
"see -version for available targets"),
cl::cat(ObjdumpCat));
cl::opt<bool> ArchiveHeaders("archive-headers",
cl::desc("Display archive header information"));
cl::desc("Display archive header information"),
cl::cat(ObjdumpCat));
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));
cl::init(false), cl::cat(ObjdumpCat));
static cl::alias DemangleShort("C", cl::desc("Alias for --demangle"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(Demangle));
cl::opt<bool> Disassemble(
"disassemble",
cl::desc("Display assembler mnemonics for the machine instructions"));
cl::desc("Display assembler mnemonics for the machine instructions"),
cl::cat(ObjdumpCat));
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"));
cl::desc("Display assembler mnemonics for the machine instructions"),
cl::cat(ObjdumpCat));
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"));
DisassembleFunctions("disassemble-functions", cl::CommaSeparated,
cl::desc("List of functions to disassemble"),
cl::cat(ObjdumpCat));
static cl::opt<bool> DisassembleZeroes(
"disassemble-zeroes",
cl::desc("Do not skip blocks of zeroes when disassembling"));
cl::desc("Do not skip blocks of zeroes when disassembling"),
cl::cat(ObjdumpCat));
static cl::alias
DisassembleZeroesShort("z", cl::desc("Alias for --disassemble-zeroes"),
cl::NotHidden, cl::Grouping,
@ -147,7 +157,8 @@ static cl::alias
static cl::list<std::string>
DisassemblerOptions("disassembler-options",
cl::desc("Pass target specific disassembler options"),
cl::value_desc("options"), cl::CommaSeparated);
cl::value_desc("options"), cl::CommaSeparated,
cl::cat(ObjdumpCat));
static cl::alias
DisassemblerOptionsShort("M", cl::desc("Alias for --disassembler-options"),
cl::NotHidden, cl::Grouping, cl::Prefix,
@ -156,11 +167,13 @@ static cl::alias
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::values(clEnumValN(DIDT_DebugFrame, "frames", ".debug_frame")),
cl::cat(ObjdumpCat));
static cl::opt<bool> DynamicRelocations(
"dynamic-reloc",
cl::desc("Display the dynamic relocation entries in the file"));
cl::desc("Display the dynamic relocation entries in the file"),
cl::cat(ObjdumpCat));
static cl::alias DynamicRelocationShort("R",
cl::desc("Alias for --dynamic-reloc"),
cl::NotHidden, cl::Grouping,
@ -168,72 +181,83 @@ static cl::alias DynamicRelocationShort("R",
static cl::opt<bool>
FaultMapSection("fault-map-section",
cl::desc("Display contents of faultmap section"));
cl::desc("Display contents of faultmap section"),
cl::cat(ObjdumpCat));
static cl::opt<bool>
FileHeaders("file-headers",
cl::desc("Display the contents of the overall file header"));
cl::desc("Display the contents of the overall file header"),
cl::cat(ObjdumpCat));
static cl::alias FileHeadersShort("f", cl::desc("Alias for --file-headers"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(FileHeaders));
cl::opt<bool> SectionContents("full-contents",
cl::desc("Display the content of each section"));
cl::desc("Display the content of each section"),
cl::cat(ObjdumpCat));
static cl::alias SectionContentsShort("s",
cl::desc("Alias for --full-contents"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(SectionContents));
static cl::list<std::string>
InputFilenames(cl::Positional, cl::desc("<input object files>"),cl::ZeroOrMore);
static cl::list<std::string> InputFilenames(cl::Positional,
cl::desc("<input object files>"),
cl::ZeroOrMore,
cl::cat(ObjdumpCat));
static cl::opt<bool>
PrintLines("line-numbers",
cl::desc("Display source line numbers with "
"disassembly. Implies disassemble object"));
"disassembly. Implies disassemble object"),
cl::cat(ObjdumpCat));
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"));
static cl::opt<bool> MachOOpt("macho",
cl::desc("Use MachO specific object file parser"),
cl::cat(ObjdumpCat));
static cl::alias MachOm("m", cl::desc("Alias for --macho"), cl::NotHidden,
cl::Grouping, cl::aliasopt(MachOOpt));
cl::opt<std::string>
MCPU("mcpu",
cl::desc("Target a specific cpu type (-mcpu=help for details)"),
cl::value_desc("cpu-name"), cl::init(""));
cl::value_desc("cpu-name"), cl::init(""), cl::cat(ObjdumpCat));
cl::list<std::string> MAttrs("mattr", cl::CommaSeparated,
cl::desc("Target specific attributes"),
cl::value_desc("a1,+a2,-a3,..."));
cl::value_desc("a1,+a2,-a3,..."),
cl::cat(ObjdumpCat));
cl::opt<bool> NoShowRawInsn("no-show-raw-insn",
cl::desc("When disassembling "
"instructions, do not print "
"the instruction bytes."));
"the instruction bytes."),
cl::cat(ObjdumpCat));
cl::opt<bool> NoLeadingAddr("no-leading-addr",
cl::desc("Print no leading address"));
cl::desc("Print no leading address"),
cl::cat(ObjdumpCat));
static cl::opt<bool> RawClangAST(
"raw-clang-ast",
cl::desc("Dump the raw binary contents of the clang AST section"));
cl::desc("Dump the raw binary contents of the clang AST section"),
cl::cat(ObjdumpCat));
cl::opt<bool>
Relocations("reloc",
cl::desc("Display the relocation entries in the file"));
Relocations("reloc", cl::desc("Display the relocation entries in the file"),
cl::cat(ObjdumpCat));
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> PrintImmHex("print-imm-hex",
cl::desc("Use hex format for immediate values"),
cl::cat(ObjdumpCat));
cl::opt<bool>
PrivateHeaders("private-headers",
cl::desc("Display format specific file headers"));
cl::opt<bool> PrivateHeaders("private-headers",
cl::desc("Display format specific file headers"),
cl::cat(ObjdumpCat));
static cl::alias PrivateHeadersShort("p",
cl::desc("Alias for --private-headers"),
cl::NotHidden, cl::Grouping,
@ -242,14 +266,16 @@ static cl::alias PrivateHeadersShort("p",
cl::list<std::string>
FilterSections("section",
cl::desc("Operate on the specified sections only. "
"With -macho dump segment,section"));
"With -macho dump segment,section"),
cl::cat(ObjdumpCat));
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."));
"headers for each section."),
cl::cat(ObjdumpCat));
static cl::alias SectionHeadersShort("headers",
cl::desc("Alias for --section-headers"),
cl::NotHidden,
@ -261,42 +287,46 @@ static cl::alias SectionHeadersShorter("h",
static cl::opt<bool>
ShowLMA("show-lma",
cl::desc("Display LMA column when dumping ELF section headers"));
cl::desc("Display LMA column when dumping ELF section headers"),
cl::cat(ObjdumpCat));
static cl::opt<bool> PrintSource(
"source",
cl::desc(
"Display source inlined with disassembly. Implies disassemble object"));
"Display source inlined with disassembly. Implies disassemble object"),
cl::cat(ObjdumpCat));
static cl::alias PrintSourceShort("S", cl::desc("Alias for -source"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(PrintSource));
static cl::opt<uint64_t>
StartAddress("start-address", cl::desc("Disassemble beginning at address"),
cl::value_desc("address"), cl::init(0));
cl::value_desc("address"), cl::init(0), cl::cat(ObjdumpCat));
static cl::opt<uint64_t> StopAddress("stop-address",
cl::desc("Stop disassembly at address"),
cl::value_desc("address"),
cl::init(UINT64_MAX));
cl::init(UINT64_MAX), cl::cat(ObjdumpCat));
cl::opt<bool> SymbolTable("syms", cl::desc("Display the symbol table"));
cl::opt<bool> SymbolTable("syms", cl::desc("Display the symbol table"),
cl::cat(ObjdumpCat));
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"));
"see -version for available targets"),
cl::cat(ObjdumpCat));
cl::opt<bool> UnwindInfo("unwind-info",
cl::desc("Display unwind information"));
cl::opt<bool> UnwindInfo("unwind-info", cl::desc("Display unwind information"),
cl::cat(ObjdumpCat));
static cl::alias UnwindInfoShort("u", cl::desc("Alias for --unwind-info"),
cl::NotHidden, cl::Grouping,
cl::aliasopt(UnwindInfo));
static cl::opt<bool>
Wide("wide", cl::desc("Ignored for compatibility with GNU objdump"));
Wide("wide", cl::desc("Ignored for compatibility with GNU objdump"),
cl::cat(ObjdumpCat));
static cl::alias WideShort("w", cl::Grouping, cl::aliasopt(Wide));
static StringSet<> DisasmFuncsSet;
@ -2011,6 +2041,8 @@ static void dumpInput(StringRef file) {
int main(int argc, char **argv) {
using namespace llvm;
InitLLVM X(argc, argv);
const cl::OptionCategory *OptionFilters[] = {&ObjdumpCat, &MachOCat};
cl::HideUnrelatedOptions(OptionFilters);
// Initialize targets and assembly printers/parsers.
InitializeAllTargetInfos();