================
@@ -43,6 +43,130 @@
   #define LIBUNWIND_AVAIL
 #endif
 
+#if __has_extension(ptrauth_qualifier)
+
+  #if __has_include(<ptrauth.h>)
+    #include <ptrauth.h>
+  #endif
+
+  #if __has_extension(ptrauth_restricted_intptr_qualifier)
+    #define __unwind_ptrauth_restricted_intptr(...) \
+      __ptrauth_restricted_intptr(__VA_ARGS__)
+  #else
+    #define __unwind_ptrauth_restricted_intptr(...) \
+      __ptrauth(__VA_ARGS__)
+  #endif
+
+// ptrauth_string_discriminator("unw_proc_info_t::handler") == 0x7405
+  #define __ptrauth_unwind_personality_fn_disc 0x7405
+
+  #define __ptrauth_unwind_personality_fn \
+    __ptrauth(ptrauth_key_function_pointer, 1, 
__ptrauth_unwind_personality_fn_disc)
+
+  #define __ptrauth_unwind_personality_fn_intptr \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1, 
__ptrauth_unwind_personality_fn_disc)
+
+// ptrauth_string_discriminator("unw_proc_info_t::start_ip") == 0xCA2C
+  #define __ptrauth_unwind_proc_startip \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 
1, 0xCA2C)
+
+// ptrauth_string_discriminator("unw_proc_info_t::end_ip") == 0xE183
+  #define __ptrauth_unwind_proc_endip \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 
1, 0xE183)
+
+// ptrauth_string_discriminator("unw_proc_info_t::lsda") == 0x83DE
+  #define __ptrauth_unwind_proc_lsda \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x83DE)
+
+// ptrauth_string_discriminator("unw_proc_info_t::flags") == 0x79A1
+  #define __ptrauth_unwind_proc_flags \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x79A1)
+
+// ptrauth_string_discriminator("unw_proc_info_t::unwind_info") == 0xC20C
+  #define __ptrauth_unwind_proc_info \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0xC20C)
+
+// ptrauth_string_discriminator("unw_proc_info_t::extra") == 0x03DF
+  #define __ptrauth_unwind_proc_extra \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x03DF)
+
+// ptrauth_string_discriminator("Registers_arm64::link_reg_t") == 0x8301
+  #define __ptrauth_unwind_arm64_link_reg \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_code, 1, 
0x8301)
+
+// ptrauth_string_discriminator("UnwindInfoSections::dso_base") == 0x4FF5
+  #define __ptrauth_unwind_info_section_dso_base \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x4FF5)
+
+// ptrauth_string_discriminator("UnwindInfoSections::dwarf_section") == 0x4974
+  #define __ptrauth_unwind_info_dwarf_section \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x4974)
+
+// ptrauth_string_discriminator("UnwindInfoSections::dwarf_section_length") == 
0x2A9A
+  #define __ptrauth_unwind_info_dwarf_section_length \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x2A9A)
+
+// ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section") 
== 0xA27B
+  #define __ptrauth_unwind_info_compact_unwind_section \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0xA27B)
+
+// 
ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section_length")
 == 0x5D0A
+  #define __ptrauth_unwind_info_compact_unwind_section_length \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 
0x5D0A)
+
+// ptrauth_string_discriminator("CIE_Info::personality") == 0x6A40
+  #define __ptrauth_unwind_cfi_personality_disc 0x6A40
+  #define __ptrauth_unwind_cfi_personality \
+    __unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1, \
+                                       __ptrauth_unwind_cfi_personality_disc)
+
+#else
+
+  #define __ptrauth_unwind_personality_fn
+  #define __ptrauth_unwind_personality_fn_intptr
+  #define __ptrauth_unwind_proc_startip
+  #define __ptrauth_unwind_proc_endip
+  #define __ptrauth_unwind_proc_lsda
+  #define __ptrauth_unwind_proc_flags
+  #define __ptrauth_unwind_proc_info
+  #define __ptrauth_unwind_proc_extra
+  #define __ptrauth_unwind_arm64_link_reg
+  #define __ptrauth_unwind_info_section_dso_base
+  #define __ptrauth_unwind_info_dwarf_section
+  #define __ptrauth_unwind_info_dwarf_section_length
+  #define __ptrauth_unwind_info_compact_unwind_section
+  #define __ptrauth_unwind_info_compact_unwind_section_length
+  #define __ptrauth_unwind_cfi_personality
+
+#endif
+
+// Helper wrappers for pointer auth qualifiers because we use a lot of variants
+// Suffixes:
+//  * RI_*: __ptrauth_restricted_intptr
+//  * PDD : ptrauth_key_process_dependent_data
+//  * PIC : ptrauth_key_process_independent_code
+//  * PDC : ptrauth_key_process_dependent_code
+//  * FN  : ptrauth_key_function_pointer
+#define __LIBUNWIND_PTRAUTH_RI_PDD(__discriminator)                            
\
+  _LIBUNWIND_PTRAUTH_RESTRICTED_INTPTR(ptrauth_key_process_dependent_data,     
\
+                                       /*__address_discriminated=*/1,          
\
+                                       __discriminator)
+#define __LIBUNWIND_PTRAUTH_RI_PIC(__discriminator)                            
\
+  _LIBUNWIND_PTRAUTH_RESTRICTED_INTPTR(ptrauth_key_process_independent_code,   
\
+                                       /*__address_discriminated=*/1,          
\
+                                       __discriminator)
+#define __LIBUNWIND_PTRAUTH_RI_PDC(__discriminator)                            
\
+  _LIBUNWIND_PTRAUTH_RESTRICTED_INTPTR(ptrauth_key_process_dependent_code,     
\
+                                       /*__address_discriminated=*/1,          
\
+                                       __discriminator)
+#define __LIBUNWIND_PTRAUTH_RI_FN(__discriminator)                             
\
+  _LIBUNWIND_PTRAUTH_RESTRICTED_INTPTR(ptrauth_key_function_pointer,           
\
+                                       /*__address_discriminated=*/1,          
\
+                                       __discriminator)
+#define __LIBUNWIND_PTRAUTH_FN(__discriminator)                                
\
+  _LIBUNWIND_PTRAUTH(ptrauth_key_function_pointer,                             
\
+                     /*__address_discriminated=*/1, __discriminator)
+
----------------
atrosinenko wrote:

Not used anymore.

https://github.com/llvm/llvm-project/pull/143230
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to