| # RUN: llvm-mc %s -filetype obj -triple aarch64-- -o %t.o |
| # RUN: llvm-cfi-verify %t.o | FileCheck %s |
| |
| # CHECK-LABEL: {{^Instruction: .* \(PROTECTED\)}} |
| # CHECK-NEXT: tiny.cc:9 |
| |
| # 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%) |
| |
| # Source (tiny.cc): |
| # int a() { return 42; } |
| # int b() { return 137; } |
| # int main(int argc, char** argv) { |
| # int(*ptr)(); |
| # if (argc == 1) |
| # ptr = &a; |
| # else |
| # ptr = &b; |
| # return ptr(); |
| # } |
| .text |
| .file "ld-temp.o" |
| .p2align 2 |
| .type _Z1av.cfi,@function |
| _Z1av.cfi: |
| .Lfunc_begin0: |
| .file 1 "/tmp/tiny.cc" |
| .loc 1 1 0 |
| .cfi_startproc |
| .loc 1 1 11 prologue_end |
| mov w0, #42 |
| ret |
| .Ltmp0: |
| .Lfunc_end0: |
| .size _Z1av.cfi, .Lfunc_end0-_Z1av.cfi |
| .cfi_endproc |
| |
| .p2align 2 |
| .type _Z1bv.cfi,@function |
| _Z1bv.cfi: |
| .Lfunc_begin1: |
| .loc 1 2 0 |
| .cfi_startproc |
| .loc 1 2 11 prologue_end |
| mov w0, #137 |
| ret |
| .Ltmp1: |
| .Lfunc_end1: |
| .size _Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi |
| .cfi_endproc |
| |
| .p2align 2 |
| .type main,@function |
| main: |
| .Lfunc_begin2: |
| .loc 1 3 0 |
| .cfi_startproc |
| sub sp, sp, #48 |
| stp x29, x30, [sp, #32] |
| add x29, sp, #32 |
| .cfi_def_cfa w29, 16 |
| .cfi_offset w30, -8 |
| .cfi_offset w29, -16 |
| stur wzr, [x29, #-4] |
| stur w0, [x29, #-8] |
| str x1, [sp, #16] |
| .Ltmp2: |
| .loc 1 5 7 prologue_end |
| ldur w8, [x29, #-8] |
| cmp w8, #1 |
| b.ne .LBB2_2 |
| .loc 1 0 7 is_stmt 0 |
| adrp x8, _Z1av |
| add x8, x8, :lo12:_Z1av |
| .loc 1 6 9 is_stmt 1 |
| str x8, [sp, #8] |
| .loc 1 6 5 is_stmt 0 |
| b .LBB2_3 |
| .LBB2_2: |
| .loc 1 0 5 |
| adrp x8, _Z1bv |
| add x8, x8, :lo12:_Z1bv |
| .loc 1 8 9 is_stmt 1 |
| str x8, [sp, #8] |
| .LBB2_3: |
| .loc 1 0 9 is_stmt 0 |
| adrp x8, .L.cfi.jumptable |
| add x9, x8, :lo12:.L.cfi.jumptable |
| .loc 1 9 10 is_stmt 1 |
| ldr x8, [sp, #8] |
| sub x9, x8, x9 |
| lsr x10, x9, #2 |
| orr x9, x10, x9, lsl #62 |
| cmp x9, #1 |
| b.ls .LBB2_5 |
| brk #0x1 |
| .LBB2_5: |
| blr x8 |
| .loc 1 9 3 is_stmt 0 |
| ldp x29, x30, [sp, #32] |
| add sp, sp, #48 |
| ret |
| .Ltmp3: |
| .Lfunc_end2: |
| .size main, .Lfunc_end2-main |
| .cfi_endproc |
| |
| .p2align 2 |
| .type .L.cfi.jumptable,@function |
| .L.cfi.jumptable: |
| .Lfunc_begin3: |
| .cfi_startproc |
| //APP |
| b _Z1av.cfi |
| b _Z1bv.cfi |
| |
| //NO_APP |
| .Lfunc_end3: |
| .size .L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable |
| .cfi_endproc |
| |
| .type .L__unnamed_1,@object |
| .section .rodata,"a",@progbits |
| .p2align 2 |
| .L__unnamed_1: |
| .size .L__unnamed_1, 0 |
| |
| .section .debug_str,"MS",@progbits,1 |
| .Linfo_string0: |
| .asciz "clang version 7.0.0 (trunk 335774) (llvm/trunk 335775)" |
| .Linfo_string1: |
| .asciz "tiny.cc" |
| .Linfo_string2: |
| .asciz "" |
| .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: |
| .word 38 |
| .hword 4 |
| .word .debug_abbrev |
| .byte 8 |
| .byte 1 |
| .word .Linfo_string0 |
| .hword 4 |
| .word .Linfo_string1 |
| .word .Lline_table_start0 |
| .word .Linfo_string2 |
| .xword .Lfunc_begin0 |
| .word .Lfunc_end2-.Lfunc_begin0 |
| .section .debug_ranges,"",@progbits |
| .section .debug_macinfo,"",@progbits |
| .byte 0 |
| |
| .type _Z1av,@function |
| .set _Z1av, .L.cfi.jumptable |
| .type _Z1bv,@function |
| .set _Z1bv, .L.cfi.jumptable+4 |
| .ident "clang version 7.0.0 (trunk 335774) (llvm/trunk 335775)" |
| .section ".note.GNU-stack","",@progbits |
| .section .debug_line,"",@progbits |
| .Lline_table_start0: |