mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[llvm-dwarfdump] Print [=<offset>] after --debug-* options in help output.
Some of the --debug-* options can take an optional offset. Although the man page does a good job of making that clear, it's much harder to discover from the help output. Currently the only reference to this is the following sentence: > Where applicable these parameters take an optional =<offset> argument > to dump only the entry at the specified offset. This patch changes the help output from to print [=<offset>] after the options that take an offset. --debug-info[=<offset>] - Dump the .debug_info section rdar://problem/63150066 Differential revision: https://reviews.llvm.org/D80959
This commit is contained in:
parent
f2733aab9a
commit
2b24554801
@ -149,7 +149,7 @@ OPTIONS
|
||||
|
||||
Display the version of the tool.
|
||||
|
||||
.. option:: --debug-abbrev, --debug-addr, --debug-aranges, --debug-cu-index, --debug-frame [=<offset>], --debug-gnu-pubnames, --debug-gnu-pubtypes, --debug-info [=<offset>], --debug-line [=<offset>], --debug-line-str, --debug-loc [=<offset>], --debug-loclists [=<offset>], --debug-macro, --debug-names, --debug-pubnames, --debug-pubtypes, --debug-ranges, --debug-rnglists, --debug-str, --debug-str-offsets, --debug-tu-index, --debug-types, --eh-frame [=<offset>], --gdb-index, --apple-names, --apple-types, --apple-namespaces, --apple-objc
|
||||
.. option:: --debug-abbrev, --debug-addr, --debug-aranges, --debug-cu-index, --debug-frame[=<offset>], --debug-gnu-pubnames, --debug-gnu-pubtypes, --debug-info[=<offset>], --debug-line[=<offset>], --debug-line-str, --debug-loc[=<offset>], --debug-loclists[=<offset>], --debug-macro, --debug-names, --debug-pubnames, --debug-pubtypes, --debug-ranges, --debug-rnglists, --debug-str, --debug-str-offsets, --debug-tu-index, --debug-types[=<offset>], --eh-frame[=<offset>], --gdb-index, --apple-names, --apple-types, --apple-namespaces, --apple-objc
|
||||
|
||||
Dump the specified DWARF section by name. Only the
|
||||
`.debug_info` section is shown by default. Some entries
|
||||
|
@ -117,7 +117,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef HANDLE_DWARF_SECTION
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME)
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME, OPTION)
|
||||
#endif
|
||||
|
||||
#ifndef HANDLE_DW_IDX
|
||||
@ -924,38 +924,38 @@ HANDLE_DW_UT(0x04, skeleton)
|
||||
HANDLE_DW_UT(0x05, split_compile)
|
||||
HANDLE_DW_UT(0x06, split_type)
|
||||
|
||||
// DWARF section types. (enum name, ELF name, ELF DWO name, cmdline name)
|
||||
// DWARF section types. (enum name, ELF name, ELF DWO name, cmdline name, option)
|
||||
// Note that these IDs don't mean anything.
|
||||
// TODO: Add Mach-O and COFF names.
|
||||
// Official DWARF sections.
|
||||
HANDLE_DWARF_SECTION(DebugAbbrev, ".debug_abbrev", "debug-abbrev")
|
||||
HANDLE_DWARF_SECTION(DebugAddr, ".debug_addr", "debug-addr")
|
||||
HANDLE_DWARF_SECTION(DebugAranges, ".debug_aranges", "debug-aranges")
|
||||
HANDLE_DWARF_SECTION(DebugInfo, ".debug_info", "debug-info")
|
||||
HANDLE_DWARF_SECTION(DebugTypes, ".debug_types", "debug-types")
|
||||
HANDLE_DWARF_SECTION(DebugLine, ".debug_line", "debug-line")
|
||||
HANDLE_DWARF_SECTION(DebugLineStr, ".debug_line_str", "debug-line-str")
|
||||
HANDLE_DWARF_SECTION(DebugLoc, ".debug_loc", "debug-loc")
|
||||
HANDLE_DWARF_SECTION(DebugLoclists, ".debug_loclists", "debug-loclists")
|
||||
HANDLE_DWARF_SECTION(DebugFrame, ".debug_frame", "debug-frame")
|
||||
HANDLE_DWARF_SECTION(DebugMacro, ".debug_macro", "debug-macro")
|
||||
HANDLE_DWARF_SECTION(DebugNames, ".debug_names", "debug-names")
|
||||
HANDLE_DWARF_SECTION(DebugPubnames, ".debug_pubnames", "debug-pubnames")
|
||||
HANDLE_DWARF_SECTION(DebugPubtypes, ".debug_pubtypes", "debug-pubtypes")
|
||||
HANDLE_DWARF_SECTION(DebugGnuPubnames, ".debug_gnu_pubnames", "debug-gnu-pubnames")
|
||||
HANDLE_DWARF_SECTION(DebugGnuPubtypes, ".debug_gnu_pubtypes", "debug-gnu-pubtypes")
|
||||
HANDLE_DWARF_SECTION(DebugRanges, ".debug_ranges", "debug-ranges")
|
||||
HANDLE_DWARF_SECTION(DebugRnglists, ".debug_rnglists", "debug-rnglists")
|
||||
HANDLE_DWARF_SECTION(DebugStr, ".debug_str", "debug-str")
|
||||
HANDLE_DWARF_SECTION(DebugStrOffsets, ".debug_str_offsets", "debug-str-offsets")
|
||||
HANDLE_DWARF_SECTION(DebugCUIndex, ".debug_cu_index", "debug-cu-index")
|
||||
HANDLE_DWARF_SECTION(DebugTUIndex, ".debug_tu_index", "debug-tu-index")
|
||||
HANDLE_DWARF_SECTION(DebugAbbrev, ".debug_abbrev", "debug-abbrev", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugAddr, ".debug_addr", "debug-addr", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugAranges, ".debug_aranges", "debug-aranges", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugInfo, ".debug_info", "debug-info", OffsetOption)
|
||||
HANDLE_DWARF_SECTION(DebugTypes, ".debug_types", "debug-types", OffsetOption)
|
||||
HANDLE_DWARF_SECTION(DebugLine, ".debug_line", "debug-line", OffsetOption)
|
||||
HANDLE_DWARF_SECTION(DebugLineStr, ".debug_line_str", "debug-line-str", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugLoc, ".debug_loc", "debug-loc", OffsetOption)
|
||||
HANDLE_DWARF_SECTION(DebugLoclists, ".debug_loclists", "debug-loclists", OffsetOption)
|
||||
HANDLE_DWARF_SECTION(DebugFrame, ".debug_frame", "debug-frame", OffsetOption)
|
||||
HANDLE_DWARF_SECTION(DebugMacro, ".debug_macro", "debug-macro", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugNames, ".debug_names", "debug-names", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugPubnames, ".debug_pubnames", "debug-pubnames", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugPubtypes, ".debug_pubtypes", "debug-pubtypes", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugGnuPubnames, ".debug_gnu_pubnames", "debug-gnu-pubnames", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugGnuPubtypes, ".debug_gnu_pubtypes", "debug-gnu-pubtypes", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugRanges, ".debug_ranges", "debug-ranges", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugRnglists, ".debug_rnglists", "debug-rnglists", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugStr, ".debug_str", "debug-str", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugStrOffsets, ".debug_str_offsets", "debug-str-offsets", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugCUIndex, ".debug_cu_index", "debug-cu-index", BoolOption)
|
||||
HANDLE_DWARF_SECTION(DebugTUIndex, ".debug_tu_index", "debug-tu-index", BoolOption)
|
||||
// Vendor extensions.
|
||||
HANDLE_DWARF_SECTION(AppleNames, ".apple_names", "apple-names")
|
||||
HANDLE_DWARF_SECTION(AppleTypes, ".apple_types", "apple-types")
|
||||
HANDLE_DWARF_SECTION(AppleNamespaces, ".apple_namespaces", "apple-namespaces")
|
||||
HANDLE_DWARF_SECTION(AppleObjC, ".apple_objc", "apple-objc")
|
||||
HANDLE_DWARF_SECTION(GdbIndex, ".gdb_index", "gdb-index")
|
||||
HANDLE_DWARF_SECTION(AppleNames, ".apple_names", "apple-names", BoolOption)
|
||||
HANDLE_DWARF_SECTION(AppleTypes, ".apple_types", "apple-types", BoolOption)
|
||||
HANDLE_DWARF_SECTION(AppleNamespaces, ".apple_namespaces", "apple-namespaces", BoolOption)
|
||||
HANDLE_DWARF_SECTION(AppleObjC, ".apple_objc", "apple-objc", BoolOption)
|
||||
HANDLE_DWARF_SECTION(GdbIndex, ".gdb_index", "gdb-index", BoolOption)
|
||||
|
||||
HANDLE_DW_IDX(0x01, compile_unit)
|
||||
HANDLE_DW_IDX(0x02, type_unit)
|
||||
|
@ -156,7 +156,7 @@ struct DILineInfoSpecifier {
|
||||
|
||||
/// This is just a helper to programmatically construct DIDumpType.
|
||||
enum DIDumpTypeCounter {
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME) \
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME, OPTION) \
|
||||
DIDT_ID_##ENUM_NAME,
|
||||
#include "llvm/BinaryFormat/Dwarf.def"
|
||||
#undef HANDLE_DWARF_SECTION
|
||||
@ -169,7 +169,7 @@ static_assert(DIDT_ID_Count <= 32, "section types overflow storage");
|
||||
enum DIDumpType : unsigned {
|
||||
DIDT_Null,
|
||||
DIDT_All = ~0U,
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME) \
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME, OPTION) \
|
||||
DIDT_##ENUM_NAME = 1U << DIDT_ID_##ENUM_NAME,
|
||||
#include "llvm/BinaryFormat/Dwarf.def"
|
||||
#undef HANDLE_DWARF_SECTION
|
||||
|
@ -1778,9 +1778,10 @@ void basic_parser_impl::printOptionInfo(const Option &O,
|
||||
if (!ValName.empty()) {
|
||||
if (O.getMiscFlags() & PositionalEatsArgs) {
|
||||
outs() << " <" << getValueStr(O, ValName) << ">...";
|
||||
} else {
|
||||
} else if (O.getValueExpectedFlag() == ValueOptional)
|
||||
outs() << "[=<" << getValueStr(O, ValName) << ">]";
|
||||
else
|
||||
outs() << "=<" << getValueStr(O, ValName) << '>';
|
||||
}
|
||||
}
|
||||
|
||||
Option::printHelpStr(O.HelpStr, GlobalWidth, getOptionWidth(O));
|
||||
|
@ -8,8 +8,9 @@ HELP: --help
|
||||
HELP: --help-list
|
||||
HELP: --version
|
||||
HELP: Section-specific Dump Options
|
||||
HELP: --debug-info - Dump the .debug_info section
|
||||
HELP: --eh-frame
|
||||
HELP: --debug-info[=<offset>] - Dump the .debug_info section
|
||||
HELP: --debug-names - Dump the .debug_names section
|
||||
HELP: --eh-frame - Alias for -debug-frame
|
||||
HELP: Specific Options
|
||||
HELP: --diff
|
||||
HELP: --find
|
||||
@ -32,3 +33,6 @@ VERSION: {{ version }}
|
||||
|
||||
RUN: llvm-dwarfdump -diff -verbose 2>&1 | FileCheck --check-prefix=INCOMPATIBLE %s
|
||||
INCOMPATIBLE: error: incompatible arguments: specifying both -diff and -verbose is currently not supported
|
||||
|
||||
RUN: not llvm-dwarfdump --debug-names=0x0 2>&1 | FileCheck --check-prefix=FLAG %s
|
||||
FLAG: for the --debug-names option: this is a flag and does not take a value.
|
||||
|
@ -44,6 +44,7 @@ struct OffsetOption {
|
||||
bool HasValue = false;
|
||||
bool IsRequested = false;
|
||||
};
|
||||
struct BoolOption : public OffsetOption {};
|
||||
} // namespace
|
||||
|
||||
namespace llvm {
|
||||
@ -72,16 +73,39 @@ public:
|
||||
return ValueOptional;
|
||||
}
|
||||
|
||||
StringRef getValueName() const override { return StringRef(); }
|
||||
StringRef getValueName() const override { return StringRef("offset"); }
|
||||
|
||||
void printOptionDiff(const Option &O, OffsetOption V, OptVal Default,
|
||||
size_t GlobalWidth) const {
|
||||
printOptionName(O, GlobalWidth);
|
||||
outs() << "[=offset]";
|
||||
}
|
||||
};
|
||||
|
||||
// An out-of-line virtual method to provide a 'home' for this class.
|
||||
void anchor() override {};
|
||||
template <> class parser<BoolOption> final : public basic_parser<BoolOption> {
|
||||
public:
|
||||
parser(Option &O) : basic_parser(O) {}
|
||||
|
||||
/// Return true on error.
|
||||
bool parse(Option &O, StringRef ArgName, StringRef Arg, BoolOption &Val) {
|
||||
if (Arg != "")
|
||||
return O.error("this is a flag and does not take a value.");
|
||||
Val.Val = 0;
|
||||
Val.HasValue = false;
|
||||
Val.IsRequested = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
enum ValueExpected getValueExpectedFlagDefault() const {
|
||||
return ValueOptional;
|
||||
}
|
||||
|
||||
StringRef getValueName() const override { return StringRef(); }
|
||||
|
||||
void printOptionDiff(const Option &O, OffsetOption V, OptVal Default,
|
||||
size_t GlobalWidth) const {
|
||||
printOptionName(O, GlobalWidth);
|
||||
}
|
||||
};
|
||||
} // namespace cl
|
||||
} // namespace llvm
|
||||
@ -112,10 +136,10 @@ static alias DumpAllAlias("a", desc("Alias for -all"), aliasopt(DumpAll));
|
||||
static unsigned DumpType = DIDT_Null;
|
||||
static std::array<llvm::Optional<uint64_t>, (unsigned)DIDT_ID_Count>
|
||||
DumpOffsets;
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME) \
|
||||
static opt<OffsetOption> Dump##ENUM_NAME( \
|
||||
CMDLINE_NAME, desc("Dump the " ELF_NAME " section"), \
|
||||
cat(SectionCategory));
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME, OPTION) \
|
||||
static opt<OPTION> Dump##ENUM_NAME(CMDLINE_NAME, \
|
||||
desc("Dump the " ELF_NAME " section"), \
|
||||
cat(SectionCategory));
|
||||
#include "llvm/BinaryFormat/Dwarf.def"
|
||||
#undef HANDLE_DWARF_SECTION
|
||||
|
||||
@ -240,7 +264,7 @@ static void error(StringRef Prefix, std::error_code EC) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static DIDumpOptions getDumpOpts(DWARFContext& C) {
|
||||
static DIDumpOptions getDumpOpts(DWARFContext &C) {
|
||||
DIDumpOptions DumpOpts;
|
||||
DumpOpts.DumpType = DumpType;
|
||||
DumpOpts.ChildRecurseDepth = ChildRecurseDepth;
|
||||
@ -609,7 +633,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
// Defaults to dumping all sections, unless brief mode is specified in which
|
||||
// case only the .debug_info section in dumped.
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME) \
|
||||
#define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME, OPTION) \
|
||||
if (Dump##ENUM_NAME.IsRequested) { \
|
||||
DumpType |= DIDT_##ENUM_NAME; \
|
||||
if (Dump##ENUM_NAME.HasValue) { \
|
||||
|
Loading…
Reference in New Issue
Block a user