llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-x86

Author: Daniil Kovalev (kovdan01)

<details>
<summary>Changes</summary>

Since #<!-- -->100830 has landed, we no longer need to rely on builtins

---
Full diff: https://github.com/llvm/llvm-project/pull/188109.diff


2 Files Affected:

- (modified) clang/lib/Headers/ptrauth.h (+8) 
- (modified) compiler-rt/lib/builtins/crtbegin.c (+6-22) 


``````````diff
diff --git a/clang/lib/Headers/ptrauth.h b/clang/lib/Headers/ptrauth.h
index af94168c35fb7..cde1b3c4ebbe2 100644
--- a/clang/lib/Headers/ptrauth.h
+++ b/clang/lib/Headers/ptrauth.h
@@ -349,6 +349,14 @@ typedef __UINTPTR_TYPE__ ptrauth_generic_signature_t;
   __ptrauth(ptrauth_key_objc_class_ro_pointer, 1,                              
\
             __ptrauth_objc_class_ro_discriminator)
 
+#if __has_feature(ptrauth_init_fini_address_discrimination)
+#define __ptrauth_init_fini_pointer                                            
\
+  __ptrauth(ptrauth_key_init_fini_pointer, 1, 
__ptrauth_init_fini_discriminator)
+#else
+#define __ptrauth_init_fini_pointer                                            
\
+  __ptrauth(ptrauth_key_init_fini_pointer, 0, 
__ptrauth_init_fini_discriminator)
+#endif
+
 #else
 
 #define ptrauth_strip(__value, __key)                                          
\
diff --git a/compiler-rt/lib/builtins/crtbegin.c 
b/compiler-rt/lib/builtins/crtbegin.c
index 8b5f98fdd04ed..74becdbe5dd0e 100644
--- a/compiler-rt/lib/builtins/crtbegin.c
+++ b/compiler-rt/lib/builtins/crtbegin.c
@@ -55,17 +55,9 @@ static void __attribute__((used)) __do_init(void) {
 
 #ifdef CRT_HAS_INITFINI_ARRAY
 # if __has_feature(ptrauth_init_fini)
-// TODO: use __ptrauth-qualified pointers when they are supported on clang side
-#  if __has_feature(ptrauth_init_fini_address_discrimination)
-__attribute__((section(".init_array"), used)) static void *__init =
-    ptrauth_sign_constant(&__do_init, ptrauth_key_init_fini_pointer,
-                          ptrauth_blend_discriminator(
-                              &__init, __ptrauth_init_fini_discriminator));
-#  else
-__attribute__((section(".init_array"), used)) static void *__init =
-    ptrauth_sign_constant(&__do_init, ptrauth_key_init_fini_pointer,
-                          __ptrauth_init_fini_discriminator);
-#  endif
+__attribute__((section(".init_array"),
+               used)) static void *__ptrauth_init_fini_pointer __init =
+    __do_init;
 # elif __has_feature(ptrauth_calls)
 #  ifdef __aarch64__
 // If ptrauth_init_fini feature is not present, compiler emits raw unsigned
@@ -137,17 +129,9 @@ static void __attribute__((used)) __do_fini(void) {
 
 #ifdef CRT_HAS_INITFINI_ARRAY
 # if __has_feature(ptrauth_init_fini)
-// TODO: use __ptrauth-qualified pointers when they are supported on clang side
-#  if __has_feature(ptrauth_init_fini_address_discrimination)
-__attribute__((section(".fini_array"), used)) static void *__fini =
-    ptrauth_sign_constant(&__do_fini, ptrauth_key_init_fini_pointer,
-                          ptrauth_blend_discriminator(
-                              &__fini, __ptrauth_init_fini_discriminator));
-#  else
-__attribute__((section(".fini_array"), used)) static void *__fini =
-    ptrauth_sign_constant(&__do_fini, ptrauth_key_init_fini_pointer,
-                          __ptrauth_init_fini_discriminator);
-#  endif
+__attribute__((section(".fini_array"),
+               used)) static void *__ptrauth_init_fini_pointer __fini =
+    __do_fini;
 # elif __has_feature(ptrauth_calls)
 #  ifdef __aarch64__
 // If ptrauth_init_fini feature is not present, compiler emits raw unsigned

``````````

</details>


https://github.com/llvm/llvm-project/pull/188109
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to