184 lines
3.3 KiB
ArmAsm
184 lines
3.3 KiB
ArmAsm
# 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:
|