[Lldb-commits] [lldb] r351435 - Recommit "Add a verbose mode to "image dump line-table" and use it to write a .debug_line test"
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Thu Jan 17 05:11:04 PST 2019
Author: labath
Date: Thu Jan 17 05:11:04 2019
New Revision: 351435
URL: http://llvm.org/viewvc/llvm-project?rev=351435&view=rev
Log:
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.
Added:
lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s
Modified:
lldb/trunk/source/Commands/CommandObjectTarget.cpp
Added: lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s?rev=351435&view=auto
==============================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s (added)
+++ lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s Thu Jan 17 05:11:04 2019
@@ -0,0 +1,75 @@
+# REQUIRES: lld
+
+# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
+# RUN: ld.lld %t.o -o %t
+# RUN: %lldb %t -o "image dump line-table -v a.c" -o exit | FileCheck %s
+
+
+ .text
+ .globl _start
+_start:
+# CHECK: Line table for /tmp/a.c
+ .file 1 "/tmp/b.c"
+ .loc 1 0 0
+ nop
+# CHECK-NEXT: 0x0000000000201000: /tmp/b.c, is_start_of_statement = TRUE{{$}}
+ .loc 1 1 0
+ nop
+# CHECK-NEXT: 0x0000000000201001: /tmp/b.c:1, is_start_of_statement = TRUE{{$}}
+ .loc 1 1 1
+ nop
+# CHECK-NEXT: 0x0000000000201002: /tmp/b.c:1:1, is_start_of_statement = TRUE{{$}}
+ .loc 1 2 0 is_stmt 0
+ nop
+# CHECK-NEXT: 0x0000000000201003: /tmp/b.c:2{{$}}
+ .loc 1 2 0 is_stmt 0 basic_block
+ nop
+# CHECK-NEXT: 0x0000000000201004: /tmp/b.c:2, is_start_of_basic_block = TRUE{{$}}
+ .loc 1 2 0 is_stmt 0 prologue_end
+ nop
+# CHECK-NEXT: 0x0000000000201005: /tmp/b.c:2, is_prologue_end = TRUE{{$}}
+ .loc 1 2 0 is_stmt 0 epilogue_begin
+ nop
+# CHECK-NEXT: 0x0000000000201006: /tmp/b.c:2, is_epilogue_begin = TRUE{{$}}
+ .file 2 "/tmp/c.c"
+ .loc 2 1 0 is_stmt 0
+ nop
+# CHECK-NEXT: 0x0000000000201007: /tmp/c.c:1{{$}}
+
+# CHECK-NEXT: 0x0000000000201008: /tmp/c.c:1, is_terminal_entry = TRUE{{$}}
+
+ .section .debug_str,"MS", at progbits,1
+.Linfo_string1:
+ .asciz "a.c"
+.Linfo_string2:
+ .asciz "/tmp"
+ .section .debug_abbrev,"", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 0 # DW_CHILDREN_no
+ .byte 19 # DW_AT_language
+ .byte 5 # DW_FORM_data2
+ .byte 3 # DW_AT_name
+ .byte 14 # DW_FORM_strp
+ .byte 16 # DW_AT_stmt_list
+ .byte 23 # DW_FORM_sec_offset
+ .byte 27 # DW_AT_comp_dir
+ .byte 14 # DW_FORM_strp
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"", at progbits
+.Lcu_begin0:
+ .long .Lcu_end0-.Lcu_start0 # Length of Unit
+.Lcu_start0:
+ .short 4 # DWARF version number
+ .long .debug_abbrev # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x1f DW_TAG_compile_unit
+ .short 12 # DW_AT_language
+ .long .Linfo_string1 # DW_AT_name
+ .long .Lline_table_start0 # DW_AT_stmt_list
+ .long .Linfo_string2 # DW_AT_comp_dir
+.Lcu_end0:
+ .section .debug_line,"", at progbits
+.Lline_table_start0:
Modified: lldb/trunk/source/Commands/CommandObjectTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectTarget.cpp?rev=351435&r1=351434&r2=351435&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectTarget.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectTarget.cpp Thu Jan 17 05:11:04 2019
@@ -1348,7 +1348,7 @@ static void DumpModuleUUID(Stream &strm,
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
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
More information about the lldb-commits
mailing list