Skip to content

Commit cacf7ed

Browse files
authored
stable/21.x: Fix pointer auth mismerges (swiftlang#11362)
1 parent 50c5a1c commit cacf7ed

File tree

8 files changed

+21
-23
lines changed

8 files changed

+21
-23
lines changed

clang/include/clang/Basic/Features.def

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,6 @@ FEATURE(memory_sanitizer,
149149
FEATURE(type_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Type))
150150
FEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread))
151151
FEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow))
152-
FEATURE(ptrauth_intrinsics, LangOpts.PointerAuthIntrinsics)
153-
FEATURE(ptrauth_qualifier, LangOpts.PointerAuthIntrinsics)
154-
FEATURE(ptrauth_calls, LangOpts.PointerAuthCalls)
155-
FEATURE(ptrauth_returns, LangOpts.PointerAuthReturns)
156152
FEATURE(ptrauth_indirect_gotos, LangOpts.PointerAuthIndirectGotos)
157153
FEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo))
158154
FEATURE(ptrauth_intrinsics, LangOpts.PointerAuthIntrinsics &&

clang/test/CodeGenCXX/ptrauth-explicit-vtable-pointer-control.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics \
2-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,NODISC %s
2+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,NODISC %s
33

44
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics \
55
// RUN: -fptrauth-vtable-pointer-type-discrimination \
6-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,TYPE %s
6+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,TYPE %s
77

88
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics \
99
// RUN: -fptrauth-vtable-pointer-address-discrimination \
10-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,ADDR %s
10+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,ADDR %s
1111

1212
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics \
1313
// RUN: -fptrauth-vtable-pointer-type-discrimination \
1414
// RUN: -fptrauth-vtable-pointer-address-discrimination \
15-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,BOTH %s
15+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,BOTH %s
1616

1717
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics \
18-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,NODISC %s
18+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,NODISC %s
1919

2020
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics \
2121
// RUN: -fptrauth-vtable-pointer-type-discrimination \
22-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,TYPE %s
22+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,TYPE %s
2323

2424
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics \
2525
// RUN: -fptrauth-vtable-pointer-address-discrimination \
26-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,ADDR %s
26+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,ADDR %s
2727

2828
// RUN: %clang_cc1 %s -x c++ -std=c++20 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics \
2929
// RUN: -fptrauth-vtable-pointer-type-discrimination \
3030
// RUN: -fptrauth-vtable-pointer-address-discrimination \
31-
// RUN: -emit-llvm -o - | FileCheck --check-prefixes=CHECK,BOTH %s
31+
// RUN: -mllvm -ptrauth-emit-wrapper-globals=0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,BOTH %s
3232

3333
#include <ptrauth.h>
3434

clang/test/CodeGenObjC/ptrauth-attr-exception.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -triple arm64e -fptrauth-calls -fptrauth-vtable-pointer-address-discrimination -fptrauth-vtable-pointer-type-discrimination -emit-llvm -fexceptions -fobjc-exceptions -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple arm64e -fptrauth-calls -fptrauth-vtable-pointer-address-discrimination -fptrauth-vtable-pointer-type-discrimination -emit-llvm -fexceptions -fobjc-exceptions -o - -mllvm -ptrauth-emit-wrapper-globals=0 %s | FileCheck %s
22

33
__attribute__((objc_root_class))
44
@interface Root {
@@ -14,4 +14,3 @@ @implementation A
1414
@end
1515

1616
// CHECK: @"OBJC_EHTYPE_$_A" = global %struct._objc_typeinfo { ptr ptrauth (ptr getelementptr inbounds (ptr, ptr @objc_ehtype_vtable, i32 2), i32 2), ptr @OBJC_CLASS_NAME_, ptr @"OBJC_CLASS_$_A" }
17-
//. @"OBJC_EHTYPE_$_A" = global %struct._objc_typeinfo { ptr getelementptr inbounds (ptr, ptr @objc_ehtype_vtable, i32 2), ptr @OBJC_CLASS_NAME_, ptr @"OBJC_CLASS_$_A" }

clang/test/CodeGenObjC/ptrauth-block-descriptor-pointer.m

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ void a() {
1212
void (^blk)(void) = ^{};
1313
}
1414

15-
// CHECK: [[BLOCK_DESCRIPTOR_NAME:@"__block_descriptor_.*"]] = linkonce_odr hidden unnamed_addr constant { i64, i64, ptr, ptr } { i64 0, i64 32, ptr @.str, ptr null }
16-
// CHECK: @__block_literal_global = internal constant { ptr, i32, i32, ptr, ptr } { ptr @_NSConcreteGlobalBlock, i32 1342177280, i32 0, ptr ptrauth (ptr @__a_block_invoke, i32 0, i64 0, ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 3)), ptr ptrauth (ptr [[BLOCK_DESCRIPTOR_NAME]], i32 2, i64 49339, ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 4)) }
15+
// CHECK: @__a_block_invoke.ptrauth = private constant { ptr, i32, i64, i64 } { ptr @__a_block_invoke, i32 0, i64 ptrtoint (ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 3) to i64), i64 0 }
16+
// CHECK: @"[[BLOCK_DESCRIPTOR_NAME:__block_descriptor_.*]]" = linkonce_odr hidden unnamed_addr constant { i64, i64, ptr, ptr } { i64 0, i64 32, ptr @.str, ptr null }
17+
// CHECK: @"[[BLOCK_DESCRIPTOR_NAME]].ptrauth" = private constant { ptr, i32, i64, i64 } { ptr @"[[BLOCK_DESCRIPTOR_NAME]]", i32 2, i64 ptrtoint (ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 4) to i64), i64 49339 }
18+
// CHECK: @__block_literal_global = internal constant { ptr, i32, i32, ptr, ptr } { ptr @_NSConcreteGlobalBlock, i32 1342177280, i32 0, ptr @__a_block_invoke.ptrauth, ptr @"[[BLOCK_DESCRIPTOR_NAME]].ptrauth" }
1719

20+
// NODESCRIPTORAUTH: @__a_block_invoke.ptrauth = private constant { ptr, i32, i64, i64 } { ptr @__a_block_invoke, i32 0, i64 ptrtoint (ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 3) to i64), i64 0 }, section "llvm.ptrauth"
1821
// NODESCRIPTORAUTH: [[BLOCK_DESCRIPTOR_NAME:@"__block_descriptor_.*"]] = linkonce_odr hidden unnamed_addr constant { i64, i64, ptr, ptr } { i64 0, i64 32, ptr @.str, ptr null }
19-
// NODESCRIPTORAUTH: @__block_literal_global = internal constant { ptr, i32, i32, ptr, ptr } { ptr @_NSConcreteGlobalBlock, i32 1342177280, i32 0, ptr ptrauth (ptr @__a_block_invoke, i32 0, i64 0, ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 3)), ptr [[BLOCK_DESCRIPTOR_NAME]] }
20-
22+
// NODESCRIPTORAUTH: @__block_literal_global = internal constant { ptr, i32, i32, ptr, ptr } { ptr @_NSConcreteGlobalBlock, i32 1342177280, i32 0, ptr @__a_block_invoke.ptrauth, ptr [[BLOCK_DESCRIPTOR_NAME]] }
2123

2224
void b(int p) {
2325
// CHECK-LABEL: define void @b

clang/test/CodeGenObjC/ptrauth-block-isa.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// RUN: %clang_cc1 -fptrauth-calls -fptrauth-objc-isa -fobjc-arc -fblocks -triple arm64e -emit-llvm %s -o - | FileCheck %s
22

33
void (^globalblock)(void) = ^{};
4-
// CHECK: [[BLOCK_DESCRIPTOR_NAME:@"__block_descriptor_.*"]] = linkonce_odr hidden unnamed_addr constant { i64, i64, ptr, ptr } { i64 0, i64 32, ptr @.str, ptr null }, comdat, align 8
5-
// CHECK: @__block_literal_global = internal constant { ptr, i32, i32, ptr, ptr } { ptr ptrauth (ptr @_NSConcreteGlobalBlock, i32 2, i64 27361, ptr @__block_literal_global), i32 1342177280, i32 0, ptr ptrauth (ptr @globalblock_block_invoke, i32 0, i64 0, ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr @__block_literal_global, i32 0, i32 3)), ptr [[BLOCK_DESCRIPTOR_NAME]] }
4+
// CHECK: @_NSConcreteGlobalBlock.ptrauth = private constant { ptr, i32, i64, i64 } { ptr @_NSConcreteGlobalBlock, i32 2, i64 ptrtoint (ptr [[GLOBAL_BLOCK_1:@.*]] to i64), i64 27361 }, section "llvm.ptrauth", align 8
5+
// CHECK: [[INVOCATION_1:@.*]] = private constant { ptr, i32, i64, i64 } { ptr {{@.*}}, i32 0, i64 ptrtoint (ptr getelementptr inbounds ({ ptr, i32, i32, ptr, ptr }, ptr [[GLOBAL_BLOCK_1]], i32 0, i32 3) to i64), i64 0 }, section "llvm.ptrauth"
6+
// CHECK: [[GLOBAL_BLOCK_1]] = internal constant { ptr, i32, i32, ptr, ptr } { ptr @_NSConcreteGlobalBlock.ptrauth, i32 1342177280, i32 0, ptr [[INVOCATION_1]],
67

78
@interface A
89
- (int) count;

clang/test/CodeGenObjC/ptrauth-class-ro.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-calls -Wno-objc-root-class -fptrauth-objc-class-ro -fobjc-arc -emit-llvm -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-calls -Wno-objc-root-class -fptrauth-objc-class-ro -fobjc-arc -emit-llvm -o - %s -mllvm -ptrauth-emit-wrapper-globals=0 | FileCheck %s
22

33
// CHECK: @"OBJC_CLASS_$_C" = global %struct._class_t { ptr @"OBJC_METACLASS_$_C", ptr null, ptr @_objc_empty_cache, ptr null, ptr ptrauth (ptr @"_OBJC_CLASS_RO_$_C", i32 2, i64 25080, ptr getelementptr inbounds (%struct._class_t, ptr @"OBJC_CLASS_$_C", i32 0, i32 4)) }, section "__DATA, __objc_data", align 8
44
// CHECK: @"OBJC_METACLASS_$_C" = global %struct._class_t { ptr @"OBJC_METACLASS_$_C", ptr @"OBJC_CLASS_$_C", ptr @_objc_empty_cache, ptr null, ptr ptrauth (ptr @"_OBJC_METACLASS_RO_$_C", i32 2, i64 25080, ptr getelementptr inbounds (%struct._class_t, ptr @"OBJC_METACLASS_$_C", i32 0, i32 4)) }, section "__DATA, __objc_data", align 8

clang/test/CodeGenObjC/ptrauth-objc-isa-super.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -I %S/Inputs -fptrauth-calls -fptrauth-objc-isa -triple arm64-apple-ios -emit-llvm -no-enable-noundef-analysis -fblocks -fobjc-arc -fobjc-runtime-has-weak -O2 -disable-llvm-passes -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -I %S/Inputs -fptrauth-calls -fptrauth-objc-isa -triple arm64-apple-ios -emit-llvm -no-enable-noundef-analysis -fblocks -fobjc-arc -fobjc-runtime-has-weak -O2 -disable-llvm-passes -o - -mllvm -ptrauth-emit-wrapper-globals=0 %s | FileCheck %s
22

33
#include "literal-support.h"
44

clang/test/CodeGenObjC/ptrauth-objc-method-list-pointer.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -Wno-objc-root-class -fptrauth-calls -triple arm64e -fptrauth-objc-class-ro %s -emit-llvm -o - | FileCheck %s
1+
// RUN: %clang_cc1 -Wno-objc-root-class -fptrauth-calls -triple arm64e -fptrauth-objc-class-ro %s -emit-llvm -mllvm -ptrauth-emit-wrapper-globals=0 -o - | FileCheck %s
22
@interface X
33
@end
44

0 commit comments

Comments
 (0)