1 # RUN: llvm-mc %s -filetype obj -triple aarch64-- -o %t.o 2 # RUN: llvm-cfi-verify %t.o | FileCheck %s 3 4 # CHECK-LABEL: {{^Instruction: .* \(PROTECTED\)}} 5 # CHECK-NEXT: tiny.cc:9 6 7 # CHECK: Expected Protected: 1 (100.00%) 8 # CHECK: Unexpected Protected: 0 (0.00%) 9 # CHECK: Expected Unprotected: 0 (0.00%) 10 # CHECK: Unexpected Unprotected (BAD): 0 (0.00%) 11 12 # Source (tiny.cc): 13 # int a() { return 42; } 14 # int b() { return 137; } 15 # int main(int argc, char** argv) { 16 # int(*ptr)(); 17 # if (argc == 1) 18 # ptr = &a; 19 # else 20 # ptr = &b; 21 # return ptr(); 22 # } 23 .text 24 .file "ld-temp.o" 25 .p2align 2 26 .type _Z1av.cfi,@function 27 _Z1av.cfi: 28 .Lfunc_begin0: 29 .file 1 "/tmp/tiny.cc" 30 .loc 1 1 0 31 .cfi_startproc 32 .loc 1 1 11 prologue_end 33 mov w0, #42 34 ret 35 .Ltmp0: 36 .Lfunc_end0: 37 .size _Z1av.cfi, .Lfunc_end0-_Z1av.cfi 38 .cfi_endproc 39 40 .p2align 2 41 .type _Z1bv.cfi,@function 42 _Z1bv.cfi: 43 .Lfunc_begin1: 44 .loc 1 2 0 45 .cfi_startproc 46 .loc 1 2 11 prologue_end 47 mov w0, #137 48 ret 49 .Ltmp1: 50 .Lfunc_end1: 51 .size _Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi 52 .cfi_endproc 53 54 .p2align 2 55 .type main,@function 56 main: 57 .Lfunc_begin2: 58 .loc 1 3 0 59 .cfi_startproc 60 sub sp, sp, #48 61 stp x29, x30, [sp, #32] 62 add x29, sp, #32 63 .cfi_def_cfa w29, 16 64 .cfi_offset w30, -8 65 .cfi_offset w29, -16 66 stur wzr, [x29, #-4] 67 stur w0, [x29, #-8] 68 str x1, [sp, #16] 69 .Ltmp2: 70 .loc 1 5 7 prologue_end 71 ldur w8, [x29, #-8] 72 cmp w8, #1 73 b.ne .LBB2_2 74 .loc 1 0 7 is_stmt 0 75 adrp x8, _Z1av 76 add x8, x8, :lo12:_Z1av 77 .loc 1 6 9 is_stmt 1 78 str x8, [sp, #8] 79 .loc 1 6 5 is_stmt 0 80 b .LBB2_3 81 .LBB2_2: 82 .loc 1 0 5 83 adrp x8, _Z1bv 84 add x8, x8, :lo12:_Z1bv 85 .loc 1 8 9 is_stmt 1 86 str x8, [sp, #8] 87 .LBB2_3: 88 .loc 1 0 9 is_stmt 0 89 adrp x8, .L.cfi.jumptable 90 add x9, x8, :lo12:.L.cfi.jumptable 91 .loc 1 9 10 is_stmt 1 92 ldr x8, [sp, #8] 93 sub x9, x8, x9 94 lsr x10, x9, #2 95 orr x9, x10, x9, lsl #62 96 cmp x9, #1 97 b.ls .LBB2_5 98 brk #0x1 99 .LBB2_5: 100 blr x8 101 .loc 1 9 3 is_stmt 0 102 ldp x29, x30, [sp, #32] 103 add sp, sp, #48 104 ret 105 .Ltmp3: 106 .Lfunc_end2: 107 .size main, .Lfunc_end2-main 108 .cfi_endproc 109 110 .p2align 2 111 .type .L.cfi.jumptable,@function 112 .L.cfi.jumptable: 113 .Lfunc_begin3: 114 .cfi_startproc 115 //APP 116 b _Z1av.cfi 117 b _Z1bv.cfi 118 119 //NO_APP 120 .Lfunc_end3: 121 .size .L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable 122 .cfi_endproc 123 124 .type .L__unnamed_1,@object 125 .section .rodata,"a",@progbits 126 .p2align 2 127 .L__unnamed_1: 128 .size .L__unnamed_1, 0 129 130 .section .debug_str,"MS",@progbits,1 131 .Linfo_string0: 132 .asciz "clang version 7.0.0 (trunk 335774) (llvm/trunk 335775)" 133 .Linfo_string1: 134 .asciz "tiny.cc" 135 .Linfo_string2: 136 .asciz "" 137 .section .debug_abbrev,"",@progbits 138 .byte 1 139 .byte 17 140 .byte 0 141 .byte 37 142 .byte 14 143 .byte 19 144 .byte 5 145 .byte 3 146 .byte 14 147 .byte 16 148 .byte 23 149 .byte 27 150 .byte 14 151 .byte 17 152 .byte 1 153 .byte 18 154 .byte 6 155 .byte 0 156 .byte 0 157 .byte 0 158 .section .debug_info,"",@progbits 159 .Lcu_begin0: 160 .word 38 161 .hword 4 162 .word .debug_abbrev 163 .byte 8 164 .byte 1 165 .word .Linfo_string0 166 .hword 4 167 .word .Linfo_string1 168 .word .Lline_table_start0 169 .word .Linfo_string2 170 .xword .Lfunc_begin0 171 .word .Lfunc_end2-.Lfunc_begin0 172 .section .debug_ranges,"",@progbits 173 .section .debug_macinfo,"",@progbits 174 .byte 0 175 176 .type _Z1av,@function 177 .set _Z1av, .L.cfi.jumptable 178 .type _Z1bv,@function 179 .set _Z1bv, .L.cfi.jumptable+4 180 .ident "clang version 7.0.0 (trunk 335774) (llvm/trunk 335775)" 181 .section ".note.GNU-stack","",@progbits 182 .section .debug_line,"",@progbits 183 .Lline_table_start0: 184