| # This test checks relocations for control-flow instructions |
| |
| # REQUIRES: system-linux |
| |
| # RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown \ |
| # RUN: %s -o %t.o |
| # RUN: %clang %cflags -no-pie %t.o -o %t.exe -Wl,-q |
| # RUN: llvm-bolt %t.exe -o %t.bolt --use-old-text=0 --lite=0 --trap-old-code |
| # RUN: %t.bolt |
| |
| .macro panic |
| .panic\@: |
| mov x0, #0 |
| br x0 |
| .endm |
| |
| .text |
| .align 4 |
| .global test_call_foo |
| .type test_call_foo, %function |
| test_call_foo: |
| mov x0, x30 |
| add x0, x0, #8 |
| br x0 |
| panic |
| .size test_call_foo, .-test_call_foo |
| |
| .global main |
| .type main, %function |
| main: |
| stp x30, x29, [sp, #-16]! |
| b test_branch |
| panic |
| test_branch: |
| b test_cond_branch |
| panic |
| .size main, .-main |
| |
| .global test_cond_branch |
| .type test_cond_branch, %function |
| test_cond_branch: |
| mov x0, #0 |
| cmp x0, #0 |
| b.eq test_branch_reg |
| panic |
| .size test_cond_branch, .-test_cond_branch |
| |
| .global test_branch_reg |
| .type test_branch_reg, %function |
| test_branch_reg: |
| nop |
| adr x0, test_branch_zero |
| br x0 |
| panic |
| .size test_branch_reg, .-test_branch_reg |
| |
| .global test_branch_zero |
| .type test_branch_zero, %function |
| test_branch_zero: |
| mov x0, #0 |
| cbz x0, test_branch_non_zero |
| panic |
| .size test_branch_zero, .-test_branch_zero |
| |
| .global test_branch_non_zero |
| .type test_branch_non_zero, %function |
| test_branch_non_zero: |
| mov x0, #1 |
| cbnz x0, test_bit_branch_zero |
| panic |
| .size test_branch_non_zero, .-test_branch_non_zero |
| |
| .global test_bit_branch_zero |
| .type test_bit_branch_zero, %function |
| test_bit_branch_zero: |
| mov x0, #0 |
| tbz x0, 0, test_bit_branch_non_zero |
| panic |
| .size test_bit_branch_zero, .-test_bit_branch_zero |
| |
| .global test_bit_branch_non_zero |
| .type test_bit_branch_non_zero, %function |
| test_bit_branch_non_zero: |
| mov x0, #1 |
| tbnz x0, 0, test_call |
| panic |
| .size test_bit_branch_non_zero, .-test_bit_branch_non_zero |
| |
| .global test_call |
| .type test_call, %function |
| test_call: |
| bl test_call_foo |
| panic |
| b test_call_reg |
| panic |
| .size test_call, .-test_call |
| |
| .global test_call_reg |
| .type test_call_reg, %function |
| test_call_reg: |
| nop |
| adr x0, test_call_foo |
| blr x0 |
| panic |
| b finalize |
| panic |
| .size test_call_reg, .-test_call_reg |
| |
| .global finalize |
| .type finalize, %function |
| finalize: |
| ldp x30, x29, [sp], #16 |
| mov x0, #0 |
| ret |
| panic |
| .size finalize, .-finalize |