brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 2d8085c Raw
115 lines · plain
1; RUN: llc -mtriple=aarch64-unknown-linux-gnu -mattr=+pauth -relocation-model=pic \2; RUN:   -verify-machineinstrs < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-unknown-linux-gnu -mattr=+pauth -relocation-model=pic \4; RUN:   -filetype=obj < %s | llvm-readelf -r -s - | FileCheck --check-prefix=CHECK-OBJ %s5; RUN: not llc -mtriple=aarch64-unknown-linux-gnu -mattr=+pauth -relocation-model=pic \6; RUN:   -global-isel=1 < %s 2>&1 | FileCheck --check-prefix=CHECK-ERR %s7 8@general_dynamic_var = external thread_local global i329 10define i32 @test_generaldynamic() {11; CHECK-LABEL: test_generaldynamic:12 13  %val = load i32, ptr @general_dynamic_var14  ret i32 %val15 16; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:general_dynamic_var17; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:general_dynamic_var]18; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:general_dynamic_var19; CHECK-NEXT: blraa x16, x020; CHECK-NEXT: mrs x[[TPIDR:[0-9]+]], TPIDR_EL021; CHECK-NEXT: ldr w0, [x[[TPIDR]], x0]22 23; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE2124; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO1225; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO1226; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL27 28; CHECK-ERR: LLVM ERROR: cannot select: %1:gpr64sp(p0) = G_GLOBAL_VALUE @general_dynamic_var (in function: test_generaldynamic)29}30 31define ptr @test_generaldynamic_addr() {32; CHECK-LABEL: test_generaldynamic_addr:33 34  ret ptr @general_dynamic_var35 36; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:general_dynamic_var37; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:general_dynamic_var]38; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:general_dynamic_var39; CHECK-NEXT: blraa x16, x040; CHECK-NEXT: mrs [[TP:x[0-9]+]], TPIDR_EL041; CHECK-NEXT: add x0, [[TP]], x042 43; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE2144; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO1245; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO1246; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL47}48 49;; Note: with signed TLSDESC, general dynamic model is always used,50;; even when local dynamic is requested.51 52@local_dynamic_var = external thread_local(localdynamic) global i3253 54define i32 @test_localdynamic() {55; CHECK-LABEL: test_localdynamic:56 57  %val = load i32, ptr @local_dynamic_var58  ret i32 %val59 60; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:local_dynamic_var61; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var]62; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var63; CHECK-NEXT: blraa x16, x064; CHECK-NEXT: mrs x[[TPIDR:[0-9]+]], TPIDR_EL065; CHECK-NEXT: ldr w0, [x[[TPIDR]], x0]66 67; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE2168; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO1269; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO1270; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL71}72 73define ptr @test_localdynamic_addr() {74; CHECK-LABEL: test_localdynamic_addr:75 76  ret ptr @local_dynamic_var77 78; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:local_dynamic_var79; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var]80; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var81; CHECK-NEXT: blraa x16, x082; CHECK-NEXT: mrs x[[TPIDR:[0-9]+]], TPIDR_EL083; CHECK-NEXT: add x0, x[[TPIDR]], x084 85; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE2186; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO1287; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO1288; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL89}90 91@extern_weak_var = extern_weak thread_local global i3292 93define i32 @test_extern_weak() {94; CHECK-LABEL: test_extern_weak:95 96  %val = load i32, ptr @extern_weak_var97  ret i32 %val98 99; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:extern_weak_var100; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:extern_weak_var]101; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:extern_weak_var102; CHECK-NEXT: blraa x16, x0103; CHECK-NEXT: mrs x[[TPIDR:[0-9]+]], TPIDR_EL0104; CHECK-NEXT: ldr w0, [x[[TPIDR]], x0]105 106; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE21107; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO12108; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO12109; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL110; CHECK-OBJ: 0000000000000000     0 TLS     WEAK   DEFAULT   UND extern_weak_var111}112 113!llvm.module.flags = !{!0}114!0 = !{i32 8, !"ptrauth-elf-got", i32 1}115