brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 50bf189 Raw
91 lines · c
1// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-intrinsics -emit-llvm %s  -o - | FileCheck %s2// RUN: %clang_cc1 -triple aarch64-elf     -fptrauth-intrinsics -emit-llvm %s  -o - | FileCheck %s3//4// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-intrinsics -emit-llvm %s  -o - -fexperimental-new-constant-interpreter | FileCheck %s5// RUN: %clang_cc1 -triple aarch64-elf     -fptrauth-intrinsics -emit-llvm %s  -o - -fexperimental-new-constant-interpreter | FileCheck %s6 7void (*fnptr)(void);8long int_discriminator;9void *ptr_discriminator;10long signature;11 12// CHECK-LABEL: define {{.*}}void @test_auth()13void test_auth() {14  // CHECK:      [[PTR:%.*]] = load ptr, ptr @fnptr,15  // CHECK-NEXT: [[DISC0:%.*]] = load ptr, ptr @ptr_discriminator,16  // CHECK-NEXT: [[T0:%.*]] = ptrtoint ptr [[PTR]] to i6417  // CHECK-NEXT: [[DISC:%.*]] = ptrtoint ptr [[DISC0]] to i6418  // CHECK-NEXT: [[T1:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[T0]], i32 0, i64 [[DISC]])19  // CHECK-NEXT: [[RESULT:%.*]] = inttoptr  i64 [[T1]] to ptr20  // CHECK-NEXT: store ptr [[RESULT]], ptr @fnptr,21  fnptr = __builtin_ptrauth_auth(fnptr, 0, ptr_discriminator);22}23 24// CHECK-LABEL: define {{.*}}void @test_strip()25void test_strip() {26  // CHECK:      [[PTR:%.*]] = load ptr, ptr @fnptr,27  // CHECK-NEXT: [[T0:%.*]] = ptrtoint ptr [[PTR]] to i6428  // CHECK-NEXT: [[T1:%.*]] = call i64 @llvm.ptrauth.strip(i64 [[T0]], i32 0)29  // CHECK-NEXT: [[RESULT:%.*]] = inttoptr  i64 [[T1]] to ptr30  // CHECK-NEXT: store ptr [[RESULT]], ptr @fnptr,31  fnptr = __builtin_ptrauth_strip(fnptr, 0);32}33 34// CHECK-LABEL: define {{.*}}void @test_sign_unauthenticated()35void test_sign_unauthenticated() {36  // CHECK:      [[PTR:%.*]] = load ptr, ptr @fnptr,37  // CHECK-NEXT: [[DISC0:%.*]] = load ptr, ptr @ptr_discriminator,38  // CHECK-NEXT: [[T0:%.*]] = ptrtoint ptr [[PTR]] to i6439  // CHECK-NEXT: [[DISC:%.*]] = ptrtoint ptr [[DISC0]] to i6440  // CHECK-NEXT: [[T1:%.*]] = call i64 @llvm.ptrauth.sign(i64 [[T0]], i32 0, i64 [[DISC]])41  // CHECK-NEXT: [[RESULT:%.*]] = inttoptr  i64 [[T1]] to ptr42  // CHECK-NEXT: store ptr [[RESULT]], ptr @fnptr,43  fnptr = __builtin_ptrauth_sign_unauthenticated(fnptr, 0, ptr_discriminator);44}45 46// CHECK-LABEL: define {{.*}}void @test_auth_and_resign()47void test_auth_and_resign() {48  // CHECK:      [[PTR:%.*]] = load ptr, ptr @fnptr,49  // CHECK-NEXT: [[DISC0:%.*]] = load ptr, ptr @ptr_discriminator,50  // CHECK-NEXT: [[T0:%.*]] = ptrtoint ptr [[PTR]] to i6451  // CHECK-NEXT: [[DISC:%.*]] = ptrtoint ptr [[DISC0]] to i6452  // CHECK-NEXT: [[T1:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[T0]], i32 0, i64 [[DISC]], i32 3, i64 15)53  // CHECK-NEXT: [[RESULT:%.*]] = inttoptr  i64 [[T1]] to ptr54  // CHECK-NEXT: store ptr [[RESULT]], ptr @fnptr,55  fnptr = __builtin_ptrauth_auth_and_resign(fnptr, 0, ptr_discriminator, 3, 15);56}57 58// CHECK-LABEL: define {{.*}}void @test_blend_discriminator()59void test_blend_discriminator() {60  // CHECK:      [[PTR:%.*]] = load ptr, ptr @fnptr,61  // CHECK-NEXT: [[DISC:%.*]] = load i64, ptr @int_discriminator,62  // CHECK-NEXT: [[T0:%.*]] = ptrtoint ptr [[PTR]] to i6463  // CHECK-NEXT: [[RESULT:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[T0]], i64 [[DISC]])64  // CHECK-NEXT: store i64 [[RESULT]], ptr @int_discriminator,65  int_discriminator = __builtin_ptrauth_blend_discriminator(fnptr, int_discriminator);66}67 68// CHECK-LABEL: define {{.*}}void @test_sign_generic_data()69void test_sign_generic_data() {70  // CHECK:      [[PTR:%.*]] = load ptr, ptr @fnptr,71  // CHECK-NEXT: [[DISC0:%.*]] = load ptr, ptr @ptr_discriminator,72  // CHECK-NEXT: [[T0:%.*]] = ptrtoint ptr [[PTR]] to i6473  // CHECK-NEXT: [[DISC:%.*]] = ptrtoint ptr [[DISC0]] to i6474  // CHECK-NEXT: [[RESULT:%.*]] = call i64 @llvm.ptrauth.sign.generic(i64 [[T0]], i64 [[DISC]])75  // CHECK-NEXT: store i64 [[RESULT]], ptr @signature,76  signature = __builtin_ptrauth_sign_generic_data(fnptr, ptr_discriminator);77}78 79// CHECK-LABEL: define {{.*}}void @test_string_discriminator()80void test_string_discriminator() {81  // CHECK:      [[X:%.*]] = alloca i3282 83  // Check a couple of random discriminators used by Swift.84 85  // CHECK:      store i32 58298, ptr [[X]],86  int x = __builtin_ptrauth_string_discriminator("InitializeWithCopy");87 88  // CHECK:      store i32 9112, ptr [[X]],89  x = __builtin_ptrauth_string_discriminator("DestroyArray");90}91