• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o %t.o
2# RUN: llvm-cfi-verify %t.o 2>&1 --summarize | FileCheck %s
3
4# This is the same file as protected-lineinfo.s, however contains a hand-
5# assembled function (fake_function) that has no line table information
6# associated with it. Because there is no LT info, the indirect call made in the
7# function should not be reported at all by llvm-cfi-verify.
8
9# We can test that this indirect call is ignored from the final statistics
10# reporting of the cfi-verify program. It should only find a single indirect CF
11# instruction at `tiny.cc:11` (see protected-lineinfo.s for the source).
12
13# CHECK-NOT: Begin Instruction
14
15# CHECK: Expected Protected: 1 (100.00%)
16# CHECK: Unexpected Protected: 0 (0.00%)
17# CHECK: Expected Unprotected: 0 (0.00%)
18# CHECK: Unexpected Unprotected (BAD): 0 (0.00%)
19
20  .text
21  .file "ld-temp.o"
22  .p2align  4, 0x90
23  .type fake_function,@function
24fake_function:
25  nop
26  nop
27  nop
28  nop
29  callq *%rax
30  nop
31  nop
32  nop
33  nop
34  .type _Z1av.cfi,@function
35_Z1av.cfi:
36.Lfunc_begin0:
37  .file 1 "tiny.cc"
38  .loc  1 3 0
39  .cfi_startproc
40  pushq %rbp
41  .cfi_def_cfa_offset 16
42  .cfi_offset %rbp, -16
43  movq  %rsp, %rbp
44  .cfi_def_cfa_register %rbp
45.Ltmp0:
46  .loc  1 3 11 prologue_end
47  popq  %rbp
48  retq
49.Ltmp1:
50.Lfunc_end0:
51  .size _Z1av.cfi, .Lfunc_end0-_Z1av.cfi
52  .cfi_endproc
53
54  .p2align  4, 0x90
55  .type _Z1bv.cfi,@function
56_Z1bv.cfi:
57.Lfunc_begin1:
58  .loc  1 4 0
59  .cfi_startproc
60  pushq %rbp
61  .cfi_def_cfa_offset 16
62  .cfi_offset %rbp, -16
63  movq  %rsp, %rbp
64  .cfi_def_cfa_register %rbp
65.Ltmp2:
66  .loc  1 4 11 prologue_end
67  popq  %rbp
68  retq
69.Ltmp3:
70.Lfunc_end1:
71  .size _Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi
72  .cfi_endproc
73
74  .hidden main
75  .globl  main
76  .p2align  4, 0x90
77  .type main,@function
78main:
79.Lfunc_begin2:
80  .loc  1 6 0
81  .cfi_startproc
82  pushq %rbp
83  .cfi_def_cfa_offset 16
84  .cfi_offset %rbp, -16
85  movq  %rsp, %rbp
86  .cfi_def_cfa_register %rbp
87  subq  $32, %rsp
88  movb  $32, -1(%rbp)
89  movl  $0, -12(%rbp)
90  movl  %edi, -8(%rbp)
91  movq  %rsi, -32(%rbp)
92.Ltmp4:
93  .loc  1 8 12 prologue_end
94  cmpl  $1, -8(%rbp)
95  .loc  1 8 7 is_stmt 0
96  jne .LBB2_2
97  .loc  1 0 7
98  leaq  _Z1av(%rip), %rax
99  .loc  1 9 9 is_stmt 1
100  movq  %rax, -24(%rbp)
101  .loc  1 9 5 is_stmt 0
102  jmp .LBB2_3
103.LBB2_2:
104  .loc  1 0 5
105  leaq  _Z1bv(%rip), %rax
106  .loc  1 11 9 is_stmt 1
107  movq  %rax, -24(%rbp)
108.LBB2_3:
109  .loc  1 0 9 is_stmt 0
110  leaq  .L.cfi.jumptable(%rip), %rcx
111  .loc  1 13 3 is_stmt 1
112  movq  -24(%rbp), %rax
113  movq  %rax, %rdx
114  subq  %rcx, %rdx
115  movq  %rdx, %rcx
116  shrq  $3, %rcx
117  shlq  $61, %rdx
118  orq %rcx, %rdx
119  cmpq  $1, %rdx
120  jbe .LBB2_5
121  ud2
122.LBB2_5:
123  callq *%rax
124  .loc  1 14 11
125  movb  $-1, -1(%rbp)
126  .loc  1 15 1
127  movl  -12(%rbp), %eax
128  addq  $32, %rsp
129  popq  %rbp
130  retq
131.Ltmp5:
132.Lfunc_end2:
133  .size main, .Lfunc_end2-main
134  .cfi_endproc
135
136  .p2align  3, 0x90
137  .type .L.cfi.jumptable,@function
138.L.cfi.jumptable:
139.Lfunc_begin3:
140  .cfi_startproc
141  #APP
142  jmp _Z1av.cfi@PLT
143  int3
144  int3
145  int3
146  jmp _Z1bv.cfi@PLT
147  int3
148  int3
149  int3
150
151  #NO_APP
152.Lfunc_end3:
153  .size .L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable
154  .cfi_endproc
155
156  .section  .debug_str,"MS",@progbits,1
157.Linfo_string0:
158  .asciz  "clang version 6.0.0 (trunk 316774)"
159.Linfo_string1:
160  .asciz  "tiny.cc"
161.Linfo_string2:
162  .asciz  "/tmp/a/b"
163  .section  .debug_abbrev,"",@progbits
164  .byte 1
165  .byte 17
166  .byte 0
167  .byte 37
168  .byte 14
169  .byte 19
170  .byte 5
171  .byte 3
172  .byte 14
173  .byte 16
174  .byte 23
175  .byte 27
176  .byte 14
177  .byte 17
178  .byte 1
179  .byte 18
180  .byte 6
181  .byte 0
182  .byte 0
183  .byte 0
184  .section  .debug_info,"",@progbits
185.Lcu_begin0:
186  .long 38
187  .short  4
188  .long .debug_abbrev
189  .byte 8
190  .byte 1
191  .long .Linfo_string0
192  .short  4
193  .long .Linfo_string1
194  .long .Lline_table_start0
195  .long .Linfo_string2
196  .quad .Lfunc_begin0
197  .long .Lfunc_end2-.Lfunc_begin0
198  .section  .debug_ranges,"",@progbits
199  .section  .debug_macinfo,"",@progbits
200.Lcu_macro_begin0:
201  .byte 0
202
203  .type _Z1av,@function
204_Z1av = .L.cfi.jumptable
205  .type _Z1bv,@function
206_Z1bv = .L.cfi.jumptable+8
207  .ident  "clang version 6.0.0 (trunk 316774)"
208  .section  ".note.GNU-stack","",@progbits
209  .section  .debug_line,"",@progbits
210.Lline_table_start0:
211
212