summaryrefslogtreecommitdiffstats
path: root/lldb/source/Commands/CommandObjectTarget.cpp
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-01-10 09:16:00 +0000
committerPavel Labath <pavel@labath.sk>2019-01-10 09:16:00 +0000
commit1c69ab286041992eedb0cc2bc2730f24f107175d (patch)
tree0a52634cbc189df0738a3a3069648c1d98f8e25b /lldb/source/Commands/CommandObjectTarget.cpp
parent72082214525a811e3526819a1c22a58aa51e18bf (diff)
downloadbcm5719-llvm-1c69ab286041992eedb0cc2bc2730f24f107175d.tar.gz
bcm5719-llvm-1c69ab286041992eedb0cc2bc2730f24f107175d.zip
Add a verbose mode to "image dump line-table" and use it to write a .debug_line test
Summary: The motivation for this is being able to write tests for the upcoming breakpad line table parser, but this could be useful for testing the low-level workings of any line table format. Or simply for viewing the line table information with more detail (the brief format doesn't include any of the flags for end_of_prologue and similar). I've also removed the load_addresses argument from the DumpCompileUnitLineTable function, as it wasn't being used anywhere. Reviewers: clayborg, zturner Subscribers: JDevlieghere, lldb-commits Differential Revision: https://reviews.llvm.org/D56315 llvm-svn: 350802
Diffstat (limited to 'lldb/source/Commands/CommandObjectTarget.cpp')
-rw-r--r--lldb/source/Commands/CommandObjectTarget.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index 4a4d0d2d609..8842031b6d5 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -1348,7 +1348,7 @@ static void DumpModuleUUID(Stream &strm, Module *module) {
static uint32_t DumpCompileUnitLineTable(CommandInterpreter &interpreter,
Stream &strm, Module *module,
const FileSpec &file_spec,
- bool load_addresses) {
+ lldb::DescriptionLevel desc_level) {
uint32_t num_matches = 0;
if (module) {
SymbolContextList sc_list;
@@ -1367,7 +1367,7 @@ static uint32_t DumpCompileUnitLineTable(CommandInterpreter &interpreter,
if (line_table)
line_table->GetDescription(
&strm, interpreter.GetExecutionContext().GetTargetPtr(),
- lldb::eDescriptionLevelBrief);
+ desc_level);
else
strm << "No line table";
}
@@ -2411,6 +2411,8 @@ public:
~CommandObjectTargetModulesDumpLineTable() override = default;
+ Options *GetOptions() override { return &m_options; }
+
protected:
bool DoExecute(Args &command, CommandReturnObject &result) override {
Target *target = m_exe_ctx.GetTargetPtr();
@@ -2443,8 +2445,9 @@ protected:
if (DumpCompileUnitLineTable(
m_interpreter, result.GetOutputStream(),
target_modules.GetModulePointerAtIndexUnlocked(i),
- file_spec, m_exe_ctx.GetProcessPtr() &&
- m_exe_ctx.GetProcessRef().IsAlive()))
+ file_spec,
+ m_options.m_verbose ? eDescriptionLevelFull
+ : eDescriptionLevelBrief))
num_dumped++;
}
if (num_dumped == 0)
@@ -2464,6 +2467,43 @@ protected:
}
return result.Succeeded();
}
+
+ class CommandOptions : public Options {
+ public:
+ CommandOptions() : Options() { OptionParsingStarting(nullptr); }
+
+ Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
+ ExecutionContext *execution_context) override {
+ assert(option_idx == 0 && "We only have one option.");
+ m_verbose = true;
+
+ return Status();
+ }
+
+ void OptionParsingStarting(ExecutionContext *execution_context) override {
+ m_verbose = false;
+ }
+
+ llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+ static constexpr OptionDefinition g_options[] = {
+ {LLDB_OPT_SET_ALL,
+ false,
+ "verbose",
+ 'v',
+ OptionParser::eNoArgument,
+ nullptr,
+ {},
+ 0,
+ eArgTypeNone,
+ "Enable verbose dump."},
+ };
+ return llvm::makeArrayRef(g_options);
+ }
+
+ bool m_verbose;
+ };
+
+ CommandOptions m_options;
};
#pragma mark CommandObjectTargetModulesDump
OpenPOWER on IntegriCloud