@@ -12,6 +12,17 @@ define i64 @test_ptrauth_nop(ptr %p) {
1212 ret i64 %authed
1313}
1414
15+ define i64 @test_ptrauth_nop_long_bundle_ops (ptr %p ) {
16+ ; CHECK-LABEL: @test_ptrauth_nop_long_bundle_ops(
17+ ; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
18+ ; CHECK-NEXT: ret i64 [[TMP0]]
19+ ;
20+ %tmp0 = ptrtoint ptr %p to i64
21+ %signed = call i64 @llvm.ptrauth.sign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 , i64 42 , i64 %tmp0 ) ]
22+ %authed = call i64 @llvm.ptrauth.auth (i64 %signed ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 , i64 42 , i64 %tmp0 ) ]
23+ ret i64 %authed
24+ }
25+
1526declare void @foo ()
1627declare void @bar ()
1728
@@ -58,15 +69,28 @@ define i64 @test_ptrauth_nop_mismatch_keys(ptr %p) {
5869 ret i64 %authed
5970}
6071
72+ define i64 @test_ptrauth_nop_long_bundle_ops_mismatch (ptr %p ) {
73+ ; CHECK-LABEL: @test_ptrauth_nop_long_bundle_ops_mismatch(
74+ ; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
75+ ; CHECK-NEXT: [[SIGNED:%.*]] = call i64 @llvm.ptrauth.sign(i64 [[TMP0]]) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 [[TMP0]]) ]
76+ ; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[SIGNED]]) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 123) ]
77+ ; CHECK-NEXT: ret i64 [[AUTHED]]
78+ ;
79+ %tmp0 = ptrtoint ptr %p to i64
80+ %signed = call i64 @llvm.ptrauth.sign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 , i64 42 , i64 %tmp0 ) ]
81+ %authed = call i64 @llvm.ptrauth.auth (i64 %signed ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 , i64 42 , i64 123 ) ]
82+ ret i64 %authed
83+ }
84+
6185define i64 @test_ptrauth_sign_resign (ptr %p ) {
6286; CHECK-LABEL: @test_ptrauth_sign_resign(
6387; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
6488; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.sign(i64 [[TMP0]]) [ "ptrauth"(i64 0, i64 42, i64 0) ]
6589; CHECK-NEXT: ret i64 [[AUTHED]]
6690;
6791 %tmp0 = ptrtoint ptr %p to i64
68- %signed = call i64 @llvm.ptrauth.sign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ) ]
69- %authed = call i64 @llvm.ptrauth.resign (i64 %signed ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 42 , i64 0 ) ]
92+ %signed = call i64 @llvm.ptrauth.sign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 , i64 42 , i64 %tmp0 ) ]
93+ %authed = call i64 @llvm.ptrauth.resign (i64 %signed ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 , i64 42 , i64 %tmp0 ), "ptrauth" (i64 0 , i64 42 , i64 0 ) ]
7094 ret i64 %authed
7195}
7296
@@ -77,8 +101,8 @@ define i64 @test_ptrauth_resign_resign(ptr %p) {
77101; CHECK-NEXT: ret i64 [[AUTHED]]
78102;
79103 %tmp0 = ptrtoint ptr %p to i64
80- %signed = call i64 @llvm.ptrauth.resign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 42 , i64 0 ) ]
81- %authed = call i64 @llvm.ptrauth.resign (i64 %signed ) [ "ptrauth" (i64 0 , i64 42 , i64 0 ), "ptrauth" (i64 1 , i64 3141 , i64 0 ) ]
104+ %signed = call i64 @llvm.ptrauth.resign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 42 , i64 0 , i64 42 , i64 %tmp0 ) ]
105+ %authed = call i64 @llvm.ptrauth.resign (i64 %signed ) [ "ptrauth" (i64 0 , i64 42 , i64 0 , i64 42 , i64 %tmp0 ), "ptrauth" (i64 1 , i64 3141 , i64 0 ) ]
82106 ret i64 %authed
83107}
84108
@@ -89,21 +113,21 @@ define i64 @test_ptrauth_resign_auth(ptr %p) {
89113; CHECK-NEXT: ret i64 [[AUTHED]]
90114;
91115 %tmp0 = ptrtoint ptr %p to i64
92- %signed = call i64 @llvm.ptrauth.resign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 42 , i64 0 ) ]
93- %authed = call i64 @llvm.ptrauth.auth (i64 %signed ) [ "ptrauth" (i64 0 , i64 42 , i64 0 ) ]
116+ %signed = call i64 @llvm.ptrauth.resign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 42 , i64 0 , i64 42 , i64 %tmp0 ) ]
117+ %authed = call i64 @llvm.ptrauth.auth (i64 %signed ) [ "ptrauth" (i64 0 , i64 42 , i64 0 , i64 42 , i64 %tmp0 ) ]
94118 ret i64 %authed
95119}
96120
97121define i64 @test_ptrauth_resign_auth_mismatch (ptr %p ) {
98122; CHECK-LABEL: @test_ptrauth_resign_auth_mismatch(
99123; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
100- ; CHECK-NEXT: [[SIGNED:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[TMP0]]) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 10, i64 0) ]
101- ; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[SIGNED]]) [ "ptrauth"(i64 0, i64 42, i64 0) ]
124+ ; CHECK-NEXT: [[SIGNED:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[TMP0]]) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 10, i64 0, i64 42, i64 [[TMP0]] ) ]
125+ ; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[SIGNED]]) [ "ptrauth"(i64 0, i64 42, i64 0, i64 123, i64 [[TMP0]] ) ]
102126; CHECK-NEXT: ret i64 [[AUTHED]]
103127;
104128 %tmp0 = ptrtoint ptr %p to i64
105- %signed = call i64 @llvm.ptrauth.resign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 10 , i64 0 ) ]
106- %authed = call i64 @llvm.ptrauth.auth (i64 %signed ) [ "ptrauth" (i64 0 , i64 42 , i64 0 ) ]
129+ %signed = call i64 @llvm.ptrauth.resign (i64 %tmp0 ) [ "ptrauth" (i64 1 , i64 1234 , i64 0 ), "ptrauth" (i64 0 , i64 10 , i64 0 , i64 42 , i64 %tmp0 ) ]
130+ %authed = call i64 @llvm.ptrauth.auth (i64 %signed ) [ "ptrauth" (i64 0 , i64 42 , i64 0 , i64 123 , i64 %tmp0 ) ]
107131 ret i64 %authed
108132}
109133
0 commit comments