diff options
author | Pavel Labath <pavel@labath.sk> | 2019-01-17 13:11:04 +0000 |
---|---|---|
committer | Pavel Labath <pavel@labath.sk> | 2019-01-17 13:11:04 +0000 |
commit | bdbc14dc0113634e1ac8cfde4a4d7cc6b14a3f64 (patch) | |
tree | 38029c4f312ac648773347be55ee312580ae8711 /lldb/source/Commands/CommandObjectTarget.cpp | |
parent | 61a8d3fb3314fb9993a429ef0c50a7cfcd3f5ebf (diff) | |
download | bcm5719-llvm-bdbc14dc0113634e1ac8cfde4a4d7cc6b14a3f64.tar.gz bcm5719-llvm-bdbc14dc0113634e1ac8cfde4a4d7cc6b14a3f64.zip |
Recommit "Add a verbose mode to "image dump line-table" and use it to write a .debug_line test"
This reapplies r350802, which was reverted because of issues with
parsing posix-style paths on windows hosts (and vice-versa). These have
since been fixed in r351328, and lldb should now recognise the path
style used in a dwarf compile unit correctly.
llvm-svn: 351435
Diffstat (limited to 'lldb/source/Commands/CommandObjectTarget.cpp')
-rw-r--r-- | lldb/source/Commands/CommandObjectTarget.cpp | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp index ee55b22c5ea..db1bd112aff 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"; } @@ -2406,6 +2406,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(); @@ -2438,8 +2440,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) @@ -2459,6 +2462,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 |