# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o %t.o # RUN: llvm-cfi-verify %t.o 2>&1 --summarize | FileCheck %s # This is the same file as protected-lineinfo.s, however contains a hand- # assembled function (fake_function) that has no line table information # associated with it. Because there is no LT info, the indirect call made in the # function should not be reported at all by llvm-cfi-verify. # We can test that this indirect call is ignored from the final statistics # reporting of the cfi-verify program. It should only find a single indirect CF # instruction at `tiny.cc:11` (see protected-lineinfo.s for the source). # CHECK-NOT: Begin Instruction # CHECK: Expected Protected: 1 (100.00%) # CHECK: Unexpected Protected: 0 (0.00%) # CHECK: Expected Unprotected: 0 (0.00%) # CHECK: Unexpected Unprotected (BAD): 0 (0.00%) .text .file "ld-temp.o" .p2align 4, 0x90 .type fake_function,@function fake_function: nop nop nop nop callq *%rax nop nop nop nop .type _Z1av.cfi,@function _Z1av.cfi: .Lfunc_begin0: .file 1 "tiny.cc" .loc 1 3 0 .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp0: .loc 1 3 11 prologue_end popq %rbp retq .Ltmp1: .Lfunc_end0: .size _Z1av.cfi, .Lfunc_end0-_Z1av.cfi .cfi_endproc .p2align 4, 0x90 .type _Z1bv.cfi,@function _Z1bv.cfi: .Lfunc_begin1: .loc 1 4 0 .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp2: .loc 1 4 11 prologue_end popq %rbp retq .Ltmp3: .Lfunc_end1: .size _Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi .cfi_endproc .hidden main .globl main .p2align 4, 0x90 .type main,@function main: .Lfunc_begin2: .loc 1 6 0 .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp subq $32, %rsp movb $32, -1(%rbp) movl $0, -12(%rbp) movl %edi, -8(%rbp) movq %rsi, -32(%rbp) .Ltmp4: .loc 1 8 12 prologue_end cmpl $1, -8(%rbp) .loc 1 8 7 is_stmt 0 jne .LBB2_2 .loc 1 0 7 leaq _Z1av(%rip), %rax .loc 1 9 9 is_stmt 1 movq %rax, -24(%rbp) .loc 1 9 5 is_stmt 0 jmp .LBB2_3 .LBB2_2: .loc 1 0 5 leaq _Z1bv(%rip), %rax .loc 1 11 9 is_stmt 1 movq %rax, -24(%rbp) .LBB2_3: .loc 1 0 9 is_stmt 0 leaq .L.cfi.jumptable(%rip), %rcx .loc 1 13 3 is_stmt 1 movq -24(%rbp), %rax movq %rax, %rdx subq %rcx, %rdx movq %rdx, %rcx shrq $3, %rcx shlq $61, %rdx orq %rcx, %rdx cmpq $1, %rdx jbe .LBB2_5 ud2 .LBB2_5: callq *%rax .loc 1 14 11 movb $-1, -1(%rbp) .loc 1 15 1 movl -12(%rbp), %eax addq $32, %rsp popq %rbp retq .Ltmp5: .Lfunc_end2: .size main, .Lfunc_end2-main .cfi_endproc .p2align 3, 0x90 .type .L.cfi.jumptable,@function .L.cfi.jumptable: .Lfunc_begin3: .cfi_startproc #APP jmp _Z1av.cfi@PLT int3 int3 int3 jmp _Z1bv.cfi@PLT int3 int3 int3 #NO_APP .Lfunc_end3: .size .L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable .cfi_endproc .section .debug_str,"MS",@progbits,1 .Linfo_string0: .asciz "clang version 6.0.0 (trunk 316774)" .Linfo_string1: .asciz "tiny.cc" .Linfo_string2: .asciz "/tmp/a/b" .section .debug_abbrev,"",@progbits .byte 1 .byte 17 .byte 0 .byte 37 .byte 14 .byte 19 .byte 5 .byte 3 .byte 14 .byte 16 .byte 23 .byte 27 .byte 14 .byte 17 .byte 1 .byte 18 .byte 6 .byte 0 .byte 0 .byte 0 .section .debug_info,"",@progbits .Lcu_begin0: .long 38 .short 4 .long .debug_abbrev .byte 8 .byte 1 .long .Linfo_string0 .short 4 .long .Linfo_string1 .long .Lline_table_start0 .long .Linfo_string2 .quad .Lfunc_begin0 .long .Lfunc_end2-.Lfunc_begin0 .section .debug_ranges,"",@progbits .section .debug_macinfo,"",@progbits .Lcu_macro_begin0: .byte 0 .type _Z1av,@function _Z1av = .L.cfi.jumptable .type _Z1bv,@function _Z1bv = .L.cfi.jumptable+8 .ident "clang version 6.0.0 (trunk 316774)" .section ".note.GNU-stack","",@progbits .section .debug_line,"",@progbits .Lline_table_start0: