[Instrumentation] Fix a warning
[llvm-project.git] / llvm / test / tools / llvm-symbolizer / skip-line-zero.s
blobe9fbea558e0eb8ce6d82f8820d68969d86bc88e1
1 ## Test the "--skip-line-zero" option.
2 ##
3 ## This test uses handcrafted assembly to produce the following line table:
4 ## Address Line Column File ISA Discriminator OpIndex Flags
5 ## ------------------ ------ ------ ------ --- ------------- ------- -------------
6 ## 0x0000000000001710 1 0 1 0 0 0
7 ## 0x0000000000001714 0 0 1 0 0 0
8 ## 0x0000000000001719 1 2 1 0 0 0
9 ## 0x000000000000171b 1 2 1 0 0 0 end_sequence
10 ## 0x00000000000016c0 0 0 1 0 0 0
11 ## 0x00000000000016cf 2 0 1 0 0 0
12 ## 0x00000000000016d4 0 0 1 0 0 0
13 ## 0x00000000000016d9 0 0 1 0 0 0
14 ## 0x00000000000016df 0 0 1 0 0 0 end_sequence
16 # REQUIRES: x86-registered-target
18 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
20 ## Check that without '--skip-line-zero', line zero is displayed for a line-table entry which has no source correspondence.
21 # RUN: llvm-symbolizer --obj=%t.o -f=none 0x16d4 | FileCheck --strict-whitespace --match-full-lines --check-prefix=DISABLE %s
23 # DISABLE:main.c:0:0
25 ## Check that the '--skip-line-zero' does not cross sequence boundaries.
26 ## If it fails to find in the current sequence then line zero is returned for the queried address.
27 # RUN: llvm-symbolizer --obj=%t.o -f=none --skip-line-zero 0x16c0 | FileCheck --strict-whitespace --match-full-lines --check-prefix=FAIL-ACROSS-SEQ %s
29 # FAIL-ACROSS-SEQ:main.c:0:0
31 ## Check that with '--skip-line-zero', the last non-zero line in the current sequence is displayed.
32 # RUN: llvm-symbolizer --obj=%t.o -f=none --skip-line-zero 0x1717 | FileCheck --strict-whitespace --match-full-lines --check-prefix=WITHIN-SEQ %s
34 # WITHIN-SEQ:main.c:1:0 (approximate)
36 ## Check that with '--skip-line-zero', multiple line zero rows are skipped within the current sequence.
37 # RUN: llvm-symbolizer --obj=%t.o -f=none --skip-line-zero 0x16d9 | FileCheck --strict-whitespace --match-full-lines --check-prefix=MULTIPLE-ROWS %s
39 # MULTIPLE-ROWS:main.c:2:0 (approximate)
41 ## Check that '--skip-line-zero' only affects the line zero addresses when more than one address is specified.
42 # RUN: llvm-symbolizer --obj=%t.o -f=none --skip-line-zero 0x16d4 0x1719 | FileCheck --strict-whitespace --match-full-lines --check-prefixes=ENABLE,NO-APPROX %s
44 # ENABLE:main.c:2:0 (approximate)
45 # NO-APPROX:main.c:1:2
47 ## Check to ensure that '--skip-line-zero' with '--verbose' enabled displays approximate flag in verbose ouptut.
48 # RUN: llvm-symbolizer --obj=%t.o -f=none --skip-line-zero --verbose 0x1717 | FileCheck --strict-whitespace --match-full-lines --check-prefix=VERBOSE %s
50 # VERBOSE: Filename: main.c
51 # VERBOSE-NEXT: Line: 1
52 # VERBOSE-NEXT: Column: 0
53 # VERBOSE-NEXT: Approximate: true
55 ## Check to ensure that '--skip-line-zero' with '--output-style=JSON' displays approximate flag in JSON output.
56 # RUN: llvm-symbolizer --obj=%t.o -f=none --skip-line-zero --output-style=JSON 0x1717 | FileCheck --strict-whitespace --match-full-lines --check-prefix=JSON %s
58 # JSON:[{"Address":"0x1717","ModuleName":"{{.*}}{{[/|\]+}}skip-line-zero.s{{.*}}","Symbol":[{"Approximate":true,"Column":0,"Discriminator":0,"FileName":"main.c","FunctionName":"","Line":1,"StartAddress":"","StartFileName":"","StartLine":0}]}]
60 ## main.c
61 ## __attribute__((section("def"))) int foo() { return 1234; }
62 ## int main(void) { return foo()+5678; }
64 ## Generated using
65 ## clang -S -gdwarf-4 --target=x86_64-pc-linux -fdebug-prefix-map=/tmp="" main.c -o main.s
67 ## Sections belonging to code segment(.text) are removed. Sections related to debug information(other than .debug_line) are modified. Section .debug_line is handwritten. Section .debug_str is deleted.
69 .section .debug_abbrev,"",@progbits
70 .byte 1 # Abbreviation Code
71 .byte 17 # DW_TAG_compile_unit
72 .byte 0 # DW_CHILDREN_no
73 .byte 16 # DW_AT_stmt_list
74 .byte 23 # DW_FORM_sec_offset
75 .byte 17 # DW_AT_low_pc
76 .byte 1 # DW_FORM_addr
77 .byte 85 # DW_AT_ranges
78 .byte 23 # DW_FORM_sec_offset
79 .byte 0 # EOM(1)
80 .byte 0 # EOM(2)
81 .byte 0 # EOM(3)
82 .section .debug_info,"",@progbits
83 .Lcu_begin0:
84 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
85 .Ldebug_info_start0:
86 .short 4 # DWARF version number
87 .long .debug_abbrev # Offset Into Abbrev. Section
88 .byte 8 # Address Size (in bytes)
89 .byte 1 # Abbrev [1] 0xb:0x55 DW_TAG_compile_unit
90 .long .Lline_table_start0 # DW_AT_stmt_list
91 .quad 0 # DW_AT_low_pc
92 .long .Ldebug_ranges0 # DW_AT_ranges
93 .byte 0 # End Of Children Mark
94 .Ldebug_info_end0:
95 .section .debug_ranges,"",@progbits
96 .Ldebug_ranges0:
97 .quad 0x1710 #.Lfunc_begin0
98 .quad 0x171b #.Lfunc_end0
99 .quad 0x16c0 #.Lfunc_begin1
100 .quad 0x16df #.Lfunc_end1
101 .quad 0
102 .quad 0
103 .section .debug_line,"",@progbits
104 .Lline_table_start0:
105 .long .Lunit_end - .Lunit_start # unit length
106 .Lunit_start:
107 .short 4 # version
108 .long .Lprologue_end - .Lprologue_start # header length
109 .Lprologue_start:
110 .byte 1 # minimum_instruction_length
111 .byte 1 # maximum_operations_per_instruction
112 .byte 0 # default_is_stmt
113 .byte -5 # line_base
114 .byte 14 # line_range
115 .byte 13 # opcode_base
116 .byte 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # arguments in standard opcodes
117 .byte 0 # end of include directories
118 .asciz "main.c" # filename
119 .byte 0 # directory index
120 .byte 0 # modification time
121 .byte 0 # length of file (unavailable)
122 .byte 0 # end of filenames
123 .Lprologue_end:
124 .byte 0x00, 9, 2 # DW_LNE_set_address
125 .quad 0x1710 # Address Value
126 .byte 0x01 # DW_LNS_copy
127 .byte 0x49 # (address += 4, line += -1, op-index += 0)
128 .byte 0x05, 2 # DW_LNS_set_column (2)
129 .byte 0x59 # (address += 5, line += 1, op-index += 0)
130 .byte 0x02 # DW_LNS_advance_pc
131 .uleb128 0x02 # (addr += 2, op-index += 0)
132 .byte 0x00, 1, 1 # DW_LNE_end_sequence
133 .byte 0x00, 9, 2 # DW_LNE_set_address
134 .quad 0x16c0 # Address Value
135 .byte 0x11 # (address += 0, line += -1, op-index += 0)
136 .byte 0xe6 # (address += 15, line += 2, op-index += 0)
137 .byte 0x56 # (address += 5, line += -2, op-index += 0)
138 .byte 0x58 # (address += 5, line += 0, op-index += 0)
139 .byte 0x02 # DW_LNS_advance_pc
140 .uleb128 0x06 # (addr += 6, op-index += 0)
141 .byte 0x00, 1, 1 # DW_LNE_end_sequence
142 .Lunit_end: