xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/x86/dwarf5-debug_line.s (revision 8a64d80a959bf2844df33f9112e456f33de7b468)
1*8a64d80aSDavid Spickett# Test handling of DWARF5 line tables. In particular, test that we handle files
2*8a64d80aSDavid Spickett# which are present in the line table more than once.
3*8a64d80aSDavid Spickett
4*8a64d80aSDavid Spickett# RUN: llvm-mc -filetype=obj -o %t -triple x86_64-pc-linux %s
5*8a64d80aSDavid Spickett# RUN: %lldb %t -o "source info -f file0.c" -o "source info -f file1.c" \
6*8a64d80aSDavid Spickett# RUN:   -o "breakpoint set -f file0.c -l 42" \
7*8a64d80aSDavid Spickett# RUN:   -o "breakpoint set -f file0.c -l 47" \
8*8a64d80aSDavid Spickett# RUN:   -o exit | FileCheck %s
9*8a64d80aSDavid Spickett
10*8a64d80aSDavid Spickett# CHECK-LABEL: source info -f file0.c
11*8a64d80aSDavid Spickett# CHECK: [0x0000000000000000-0x0000000000000001): /file0.c:42
12*8a64d80aSDavid Spickett# CHECK-LABEL: source info -f file1.c
13*8a64d80aSDavid Spickett# CHECK: [0x0000000000000001-0x0000000000000002): /file1.c:47
14*8a64d80aSDavid Spickett# CHECK-LABEL: breakpoint set -f file0.c -l 42
15*8a64d80aSDavid Spickett# CHECK: Breakpoint 1: {{.*}}`foo,
16*8a64d80aSDavid Spickett# CHECK-LABEL: breakpoint set -f file0.c -l 47
17*8a64d80aSDavid Spickett# CHECK: Breakpoint 2: {{.*}}`foo + 2,
18*8a64d80aSDavid Spickett
19*8a64d80aSDavid Spickett        .text
20*8a64d80aSDavid Spickett        .globl  foo
21*8a64d80aSDavid Spickettfoo:
22*8a64d80aSDavid Spickett        nop
23*8a64d80aSDavid Spickett        nop
24*8a64d80aSDavid Spickett        nop
25*8a64d80aSDavid Spickett.Lfoo_end:
26*8a64d80aSDavid Spickett
27*8a64d80aSDavid Spickett        .section        .debug_abbrev,"",@progbits
28*8a64d80aSDavid Spickett        .byte   1                       # Abbreviation Code
29*8a64d80aSDavid Spickett        .byte   17                      # DW_TAG_compile_unit
30*8a64d80aSDavid Spickett        .byte   0                       # DW_CHILDREN_no
31*8a64d80aSDavid Spickett        .byte   37                      # DW_AT_producer
32*8a64d80aSDavid Spickett        .byte   8                       # DW_FORM_string
33*8a64d80aSDavid Spickett        .byte   19                      # DW_AT_language
34*8a64d80aSDavid Spickett        .byte   5                       # DW_FORM_data2
35*8a64d80aSDavid Spickett        .byte   3                       # DW_AT_name
36*8a64d80aSDavid Spickett        .byte   8                       # DW_FORM_string
37*8a64d80aSDavid Spickett        .byte   16                      # DW_AT_stmt_list
38*8a64d80aSDavid Spickett        .byte   23                      # DW_FORM_sec_offset
39*8a64d80aSDavid Spickett        .byte   27                      # DW_AT_comp_dir
40*8a64d80aSDavid Spickett        .byte   8                       # DW_FORM_string
41*8a64d80aSDavid Spickett        .byte   17                      # DW_AT_low_pc
42*8a64d80aSDavid Spickett        .byte   1                       # DW_FORM_addr
43*8a64d80aSDavid Spickett        .byte   18                      # DW_AT_high_pc
44*8a64d80aSDavid Spickett        .byte   6                       # DW_FORM_data4
45*8a64d80aSDavid Spickett        .byte   0                       # EOM(1)
46*8a64d80aSDavid Spickett        .byte   0                       # EOM(2)
47*8a64d80aSDavid Spickett        .byte   0                       # EOM(3)
48*8a64d80aSDavid Spickett
49*8a64d80aSDavid Spickett        .section        .debug_info,"",@progbits
50*8a64d80aSDavid Spickett.Lcu_begin0:
51*8a64d80aSDavid Spickett        .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
52*8a64d80aSDavid Spickett.Ldebug_info_start0:
53*8a64d80aSDavid Spickett        .short  5                       # DWARF version number
54*8a64d80aSDavid Spickett        .byte   1                       # DWARF Unit Type
55*8a64d80aSDavid Spickett        .byte   8                       # Address Size (in bytes)
56*8a64d80aSDavid Spickett        .long   .debug_abbrev           # Offset Into Abbrev. Section
57*8a64d80aSDavid Spickett        .byte   1                       # Abbrev [1] 0xc:0x23 DW_TAG_compile_unit
58*8a64d80aSDavid Spickett        .asciz  "Hand-written DWARF"    # DW_AT_producer
59*8a64d80aSDavid Spickett        .short  12                      # DW_AT_language
60*8a64d80aSDavid Spickett        .asciz  "file0.c"               # DW_AT_name
61*8a64d80aSDavid Spickett        .long   .Lline_table_begin      # DW_AT_stmt_list
62*8a64d80aSDavid Spickett        .asciz  "/"                     # DW_AT_comp_dir
63*8a64d80aSDavid Spickett        .quad   foo                     # DW_AT_low_pc
64*8a64d80aSDavid Spickett        .long   .Lfoo_end-foo           # DW_AT_high_pc
65*8a64d80aSDavid Spickett.Ldebug_info_end0:
66*8a64d80aSDavid Spickett
67*8a64d80aSDavid Spickett        .section        .debug_line,"",@progbits
68*8a64d80aSDavid Spickett.Lline_table_begin:
69*8a64d80aSDavid Spickett        .long .Lline_end-.Lline_start
70*8a64d80aSDavid Spickett.Lline_start:
71*8a64d80aSDavid Spickett        .short  5                       # DWARF version number
72*8a64d80aSDavid Spickett        .byte   8                       # Address Size (in bytes)
73*8a64d80aSDavid Spickett        .byte   0                       # Segment Selector Size
74*8a64d80aSDavid Spickett        .long   .Lheader_end-.Lheader_start
75*8a64d80aSDavid Spickett.Lheader_start:
76*8a64d80aSDavid Spickett        .byte   1                       # Minimum Instruction Length
77*8a64d80aSDavid Spickett        .byte   1                       # Maximum Operations per Instruction
78*8a64d80aSDavid Spickett        .byte   1                       # Default is_stmt
79*8a64d80aSDavid Spickett        .byte   0                       # Line Base
80*8a64d80aSDavid Spickett        .byte   0                       # Line Range
81*8a64d80aSDavid Spickett        .byte   5                       # Opcode Base
82*8a64d80aSDavid Spickett        .byte   0, 1, 1, 1              # Standard Opcode Lengths
83*8a64d80aSDavid Spickett
84*8a64d80aSDavid Spickett        # Directory table format
85*8a64d80aSDavid Spickett        .byte   1                       # One element per directory entry
86*8a64d80aSDavid Spickett        .byte   1                       # DW_LNCT_path
87*8a64d80aSDavid Spickett        .byte   0x08                    # DW_FORM_string
88*8a64d80aSDavid Spickett
89*8a64d80aSDavid Spickett        # Directory table entries
90*8a64d80aSDavid Spickett        .byte   1                       # 1 directory
91*8a64d80aSDavid Spickett        .asciz  "/"
92*8a64d80aSDavid Spickett
93*8a64d80aSDavid Spickett        # File table format
94*8a64d80aSDavid Spickett        .byte   2                       # 2 elements per file entry
95*8a64d80aSDavid Spickett        .byte   1                       # DW_LNCT_path
96*8a64d80aSDavid Spickett        .byte   0x08                    # DW_FORM_string
97*8a64d80aSDavid Spickett        .byte   2                       # DW_LNCT_directory_index
98*8a64d80aSDavid Spickett        .byte   0x0b                    # DW_FORM_data1
99*8a64d80aSDavid Spickett
100*8a64d80aSDavid Spickett        # File table entries
101*8a64d80aSDavid Spickett        .byte   3                       # 3 files
102*8a64d80aSDavid Spickett        .asciz  "file0.c"
103*8a64d80aSDavid Spickett        .byte   0
104*8a64d80aSDavid Spickett        .asciz  "file1.c"
105*8a64d80aSDavid Spickett        .byte   0
106*8a64d80aSDavid Spickett        .asciz  "file0.c"
107*8a64d80aSDavid Spickett        .byte   0
108*8a64d80aSDavid Spickett.Lheader_end:
109*8a64d80aSDavid Spickett
110*8a64d80aSDavid Spickett        .byte   4, 0                    # DW_LNS_set_file 0
111*8a64d80aSDavid Spickett        .byte   0, 9, 2                 # DW_LNE_set_address
112*8a64d80aSDavid Spickett        .quad   foo
113*8a64d80aSDavid Spickett        .byte   3, 41                   # DW_LNS_advance_line 41
114*8a64d80aSDavid Spickett        .byte   1                       # DW_LNS_copy
115*8a64d80aSDavid Spickett
116*8a64d80aSDavid Spickett        .byte   4, 1                    # DW_LNS_set_file 1
117*8a64d80aSDavid Spickett        .byte   2, 1                    # DW_LNS_advance_pc 1
118*8a64d80aSDavid Spickett        .byte   3, 5                    # DW_LNS_advance_line 5
119*8a64d80aSDavid Spickett        .byte   1                       # DW_LNS_copy
120*8a64d80aSDavid Spickett
121*8a64d80aSDavid Spickett        .byte   4, 2                    # DW_LNS_set_file 2
122*8a64d80aSDavid Spickett        .byte   2, 1                    # DW_LNS_advance_pc 1
123*8a64d80aSDavid Spickett        .byte   1                       # DW_LNS_copy
124*8a64d80aSDavid Spickett
125*8a64d80aSDavid Spickett        .byte   2, 1                    # DW_LNS_advance_pc 1
126*8a64d80aSDavid Spickett        .byte   0, 1, 1                 # DW_LNE_end_sequence
127*8a64d80aSDavid Spickett.Lline_end:
128