summaryrefslogtreecommitdiffstats
path: root/lldb/test/Shell/SymbolFile/DWARF/dwarf5-debug_line.s
blob: d15f31039bbd60e34ad44087429fe88ed2d0d19b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# Test handling of DWARF5 line tables. In particular, test that we handle files
# which are present in the line table more than once.

# REQUIRES: x86

# RUN: llvm-mc -filetype=obj -o %t -triple x86_64-pc-linux %s
# RUN: %lldb %t -o "source info -f file0.c" -o "source info -f file1.c" \
# RUN:   -o "breakpoint set -f file0.c -l 42" \
# RUN:   -o "breakpoint set -f file0.c -l 47" \
# RUN:   -o exit | FileCheck %s

# CHECK-LABEL: source info -f file0.c
# CHECK: [0x0000000000000000-0x0000000000000001): /file0.c:42
# CHECK-LABEL: source info -f file1.c
# CHECK: [0x0000000000000001-0x0000000000000002): /file1.c:47
# CHECK-LABEL: breakpoint set -f file0.c -l 42
# CHECK: Breakpoint 1: {{.*}}`foo,
# CHECK-LABEL: breakpoint set -f file0.c -l 47
# CHECK: Breakpoint 2: {{.*}}`foo + 2,

        .text
        .globl  foo
foo:
        nop
        nop
        nop
.Lfoo_end:

        .section        .debug_abbrev,"",@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   27                      # DW_AT_comp_dir
        .byte   8                       # DW_FORM_string
        .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,"",@progbits
.Lcu_begin0:
        .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
.Ldebug_info_start0:
        .short  5                       # DWARF version number
        .byte   1                       # DWARF Unit Type
        .byte   8                       # Address Size (in bytes)
        .long   .debug_abbrev           # Offset Into Abbrev. Section
        .byte   1                       # Abbrev [1] 0xc:0x23 DW_TAG_compile_unit
        .asciz  "Hand-written DWARF"    # DW_AT_producer
        .short  12                      # DW_AT_language
        .asciz  "file0.c"               # DW_AT_name
        .long   .Lline_table_begin      # DW_AT_stmt_list
        .asciz  "/"                     # DW_AT_comp_dir
        .quad   foo                     # DW_AT_low_pc
        .long   .Lfoo_end-foo           # DW_AT_high_pc
.Ldebug_info_end0:

        .section        .debug_line,"",@progbits
.Lline_table_begin:
        .long .Lline_end-.Lline_start
.Lline_start:
        .short  5                       # DWARF version number
        .byte   8                       # Address Size (in bytes)
        .byte   0                       # Segment Selector Size
        .long   .Lheader_end-.Lheader_start
.Lheader_start:
        .byte   1                       # Minimum Instruction Length
        .byte   1                       # Maximum Operations per Instruction
        .byte   1                       # Default is_stmt
        .byte   0                       # Line Base
        .byte   0                       # Line Range
        .byte   5                       # Opcode Base
        .byte   0, 1, 1, 1              # Standard Opcode Lengths

        # Directory table format
        .byte   1                       # One element per directory entry
        .byte   1                       # DW_LNCT_path
        .byte   0x08                    # DW_FORM_string

        # Directory table entries
        .byte   1                       # 1 directory
        .asciz  "/"

        # File table format
        .byte   2                       # 2 elements per file entry
        .byte   1                       # DW_LNCT_path
        .byte   0x08                    # DW_FORM_string
        .byte   2                       # DW_LNCT_directory_index
        .byte   0x0b                    # DW_FORM_data1

        # File table entries
        .byte   3                       # 3 files
        .asciz  "file0.c"
        .byte   0
        .asciz  "file1.c"
        .byte   0
        .asciz  "file0.c"
        .byte   0
.Lheader_end:

        .byte   4, 0                    # DW_LNS_set_file 0
        .byte   0, 9, 2                 # DW_LNE_set_address
        .quad   foo
        .byte   3, 41                   # DW_LNS_advance_line 41
        .byte   1                       # DW_LNS_copy

        .byte   4, 1                    # DW_LNS_set_file 1
        .byte   2, 1                    # DW_LNS_advance_pc 1
        .byte   3, 5                    # DW_LNS_advance_line 5
        .byte   1                       # DW_LNS_copy

        .byte   4, 2                    # DW_LNS_set_file 2
        .byte   2, 1                    # DW_LNS_advance_pc 1
        .byte   1                       # DW_LNS_copy

        .byte   2, 1                    # DW_LNS_advance_pc 1
        .byte   0, 1, 1                 # DW_LNE_end_sequence
.Lline_end:
OpenPOWER on IntegriCloud