[Lldb-commits] [PATCH] D112931: Fix mixed disassembly showing source lines for "line 0"
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Nov 2 08:57:55 PDT 2021
labath added inline comments.
================
Comment at: lldb/test/Shell/Commands/command-disassemble-mixed.c:11-18
+int main(int argc, char **argv)
+{
+ int i;
+
+ for (i=0; i < 10; ++i) ;
+
+ return 0;
----------------
ted wrote:
> labath wrote:
> > ted wrote:
> > > clayborg wrote:
> > > > are we guaranteed to get some debug info with line zero in it with this example?
> > > I tried this with x86 Linux clang 12.0 and our internal Hexagon clang; both gave me a line zero.
> > >
> > > I ran this test on Ubuntu 18 using x86 Linux clang 12.0 and the test failed without the change and passed with it.
> > Nonetheless, it would be better to test this via a .s file with some explicit .line directives. That way you could check for the actual command output instead of the absence of some string.
> >
> > (Negative tests like this are very brittle, as they can be rendered ineffective by a change in the capitalization of the error message.)
> The test is specifically "the first line of the source file is not displayed when we do dis -m". The only way I can think of testing this is a negative test. If anyone can think of a better way, I'm happy to do that.
> Fortunately, the message we're testing against is contained in the test, so it avoids the brittleness of changes to text in the tool.
I missed the fact that this is a string coming from the test. That makes it better indeed, though I'd still recommend a .s file, as that also removes the dependence on the compiler producing a particular debug_line sequence.
Regarding the negative test, that's easy to avoid with a .s file, as you can assert exact command output. Something like this ought to do it (the test input should be alright, the assertions are made up).
```
# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o %t
# RUN: lldb %t -o "disassemble -m -n main" | FileCheck %s
# CHECK: disassemble -m -n main
# CHECK-NEXT: first line of disassembly
# CHECK-NEXT: second line of disassembly
# CHECK-NEXT: etc.
.text
.globl main
.type main, at function
main:
.file 1 "" "mytest.s"
.loc 1 10
nop
.loc 1 0
nop
.loc 1 20
nop
.Lfunc_end0:
.size main, .Lfunc_end0-main
# -- End function
.section .debug_abbrev,"", at progbits
.byte 1 # Abbreviation Code
.byte 17 # DW_TAG_compile_unit
.byte 0 # DW_CHILDREN_no
.byte 37 # DW_AT_producer
.byte 8 # DW_FORM_string
.byte 19 # DW_AT_language
.byte 5 # DW_FORM_data2
.byte 3 # DW_AT_name
.byte 8 # DW_FORM_string
.byte 16 # DW_AT_stmt_list
.byte 23 # DW_FORM_sec_offset
.byte 17 # DW_AT_low_pc
.byte 1 # DW_FORM_addr
.byte 18 # DW_AT_high_pc
.byte 6 # DW_FORM_data4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.section .debug_info,"", at progbits
.Lcu_begin0:
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
.Ldebug_info_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
.asciz "Hand-written DWARF" # DW_AT_producer
.short 12 # DW_AT_language
.asciz "mytest.s" # DW_AT_name
.long .Lline_table_start0 # DW_AT_stmt_list
.quad main # DW_AT_low_pc
.long .Lfunc_end0-main # DW_AT_high_pc
.Ldebug_info_end0:
.section .debug_line,"", at progbits
.Lline_table_start0:
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112931/new/
https://reviews.llvm.org/D112931
More information about the lldb-commits
mailing list