# REQUIRES: aarch64 # RUN: rm -rf %t && split-file %s %t # RUN: llvm-mc --triple=aarch64 --filetype=obj -o %t.o %t/a.s # RUN: ld.lld --shared -T %t/largegap.lds -z force-bti %t.o -o %t.elf # RUN: llvm-objdump -d %t.elf | FileCheck %s #--- largegap.lds SECTIONS { .plt : { *(.plt) } .text.near 0x1000 : AT(0x1000) { *(.text.near) } .text.far 0xf0000000 : AT(0xf0000000) { *(.text.far) } } #--- a.s # CHECK: <.plt>: # CHECK-NEXT: bti c ## foo@plt is targeted by a range extension thunk with an indirect branch. ## Add a bti c instruction. # CHECK: : # CHECK-NEXT: bti c ## biz is not targeted by a thunk using an indirect branch, so no need for bti c. # CHECK: : # CHECK-NEXT: adrp x16, {{.*}} # CHECK: : # CHECK-NEXT: bl {{.*}} # CHECK-NEXT: bl {{.*}} # CHECK: : # CHECK-NEXT: bl {{.*}} <__AArch64ADRPThunk_foo> # CHECK: <__AArch64ADRPThunk_foo>: # CHECK-NEXT: adrp x16, 0x0 # CHECK-NEXT: add x16, x16, {{.*}} # CHECK-NEXT: br x16 .global foo .global biz .section .text.near, "ax", %progbits bar: .type bar, %function bl foo bl biz ret .section .text.far, "ax", %progbits func: .type func, %function bl foo ret