128 lines · plain
1; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=0 -fast-isel=0 -verify-machineinstrs \2; RUN: -relocation-model=pic -mattr=+pauth -mattr=+fpac %s -o - | FileCheck %s --check-prefixes=CHECK,NOTRAP3; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=0 -fast-isel=0 -verify-machineinstrs \4; RUN: -relocation-model=pic -mattr=+pauth %s -o - | FileCheck %s --check-prefixes=CHECK,TRAP5 6; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=0 -fast-isel=1 -verify-machineinstrs \7; RUN: -relocation-model=pic -mattr=+pauth -mattr=+fpac %s -o - | FileCheck %s --check-prefixes=CHECK,NOTRAP8; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=0 -fast-isel=1 -verify-machineinstrs \9; RUN: -relocation-model=pic -mattr=+pauth %s -o - | FileCheck %s --check-prefixes=CHECK,TRAP10 11; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=1 -global-isel-abort=1 -verify-machineinstrs \12; RUN: -relocation-model=pic -mattr=+pauth -mattr=+fpac %s -o - | FileCheck %s --check-prefixes=CHECK,NOTRAP13; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=1 -global-isel-abort=1 -verify-machineinstrs \14; RUN: -relocation-model=pic -mattr=+pauth %s -o - | FileCheck %s --check-prefixes=CHECK,TRAP15 16;; Note: for FastISel, we fall back to SelectionDAG17 18@var = global i32 019 20define i32 @get_globalvar() {21; CHECK-LABEL: get_globalvar:22; CHECK: adrp x17, :got_auth:var23; CHECK-NEXT: add x17, x17, :got_auth_lo12:var24; NOTRAP-NEXT: ldr x8, [x17]25; NOTRAP-NEXT: autda x8, x1726; TRAP-NEXT: ldr x16, [x17]27; TRAP-NEXT: autda x16, x1728; TRAP-NEXT: mov x17, x1629; TRAP-NEXT: xpacd x1730; TRAP-NEXT: cmp x16, x1731; TRAP-NEXT: b.eq .Lauth_success_032; TRAP-NEXT: brk #0xc47233; TRAP-NEXT: .Lauth_success_0:34; TRAP-NEXT: mov x8, x1635; CHECK-NEXT: ldr w0, [x8]36; CHECK-NEXT: ret37 38 %val = load i32, ptr @var39 ret i32 %val40}41 42define ptr @get_globalvaraddr() {43; CHECK-LABEL: get_globalvaraddr:44; CHECK: adrp x17, :got_auth:var45; CHECK-NEXT: add x17, x17, :got_auth_lo12:var46; NOTRAP-NEXT: ldr x0, [x17]47; NOTRAP-NEXT: autda x0, x1748; TRAP-NEXT: ldr x16, [x17]49; TRAP-NEXT: autda x16, x1750; TRAP-NEXT: mov x17, x1651; TRAP-NEXT: xpacd x1752; TRAP-NEXT: cmp x16, x1753; TRAP-NEXT: b.eq .Lauth_success_154; TRAP-NEXT: brk #0xc47255; TRAP-NEXT: .Lauth_success_1:56; TRAP-NEXT: mov x0, x1657; CHECK-NEXT: ret58 59 %val = load i32, ptr @var60 ret ptr @var61}62 63declare i32 @foo()64 65define ptr @resign_globalfunc() {66; CHECK-LABEL: resign_globalfunc:67; CHECK: adrp x17, :got_auth:foo68; CHECK-NEXT: add x17, x17, :got_auth_lo12:foo69; CHECK-NEXT: ldr x16, [x17]70; CHECK-NEXT: autia x16, x1771; TRAP-NEXT: mov x17, x1672; TRAP-NEXT: xpaci x1773; TRAP-NEXT: cmp x16, x1774; TRAP-NEXT: b.eq .Lauth_success_275; TRAP-NEXT: brk #0xc47076; TRAP-NEXT: .Lauth_success_2:77; CHECK-NEXT: mov x17, #4278; CHECK-NEXT: pacia x16, x1779; CHECK-NEXT: mov x0, x1680; CHECK-NEXT: ret81 82 ret ptr ptrauth (ptr @foo, i32 0, i64 42)83}84 85define ptr @resign_globalvar() {86; CHECK-LABEL: resign_globalvar:87; CHECK: adrp x17, :got_auth:var88; CHECK-NEXT: add x17, x17, :got_auth_lo12:var89; CHECK-NEXT: ldr x16, [x17]90; CHECK-NEXT: autda x16, x1791; TRAP-NEXT: mov x17, x1692; TRAP-NEXT: xpacd x1793; TRAP-NEXT: cmp x16, x1794; TRAP-NEXT: b.eq .Lauth_success_395; TRAP-NEXT: brk #0xc47296; TRAP-NEXT: .Lauth_success_3:97; CHECK-NEXT: mov x17, #4398; CHECK-NEXT: pacdb x16, x1799; CHECK-NEXT: mov x0, x16100; CHECK-NEXT: ret101 102 ret ptr ptrauth (ptr @var, i32 3, i64 43)103}104 105define ptr @resign_globalvar_offset() {106; CHECK-LABEL: resign_globalvar_offset:107; CHECK: adrp x17, :got_auth:var108; CHECK-NEXT: add x17, x17, :got_auth_lo12:var109; CHECK-NEXT: ldr x16, [x17]110; CHECK-NEXT: autda x16, x17111; TRAP-NEXT: mov x17, x16112; TRAP-NEXT: xpacd x17113; TRAP-NEXT: cmp x16, x17114; TRAP-NEXT: b.eq .Lauth_success_4115; TRAP-NEXT: brk #0xc472116; TRAP-NEXT: .Lauth_success_4:117; CHECK-NEXT: add x16, x16, #16118; CHECK-NEXT: mov x17, #44119; CHECK-NEXT: pacda x16, x17120; CHECK-NEXT: mov x0, x16121; CHECK-NEXT: ret122 123 ret ptr ptrauth (ptr getelementptr (i8, ptr @var, i64 16), i32 2, i64 44)124}125 126!llvm.module.flags = !{!0}127!0 = !{i32 8, !"ptrauth-elf-got", i32 1}128