[Lldb-commits] [PATCH] D112931: Fix mixed disassembly showing source lines for "line 0"
Ted Woodward via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Nov 2 09:22:45 PDT 2021
ted 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;
----------------
labath wrote:
> 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:
>
My issues with the above:
- I want to test a c source file, not an assembly file.
- This assumes the user's toolchain supports x86-64, which many downstream toolchains do not. I'd rather the test be core-agnostic, which is why I didn't check any actual disassembly.
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