================
@@ -199,6 +199,25 @@ typedef __UINTPTR_TYPE__ ptrauth_generic_signature_t;
ptrauth_auth_and_resign(__value, __old_key, __old_data,
\
ptrauth_key_function_pointer, 0)
+/* Cast a value to the given type without changing any signature.
+
+ The type must be a pointer sized type compatible with the __ptrauth
+ qualifier.
+ The value must be an expression with a non-address diversified pointer
+ authentication schema, and will be converted to an rvalue prior to the cast.
+ The result has type given by the first argument.
+
+ The result has an identical bit-pattern to the input pointer. */
+#define ptrauth_nop_cast(__type, __value)
\
+ ({
\
+ union {
\
+ typeof(*(__value)) *__fptr;
\
+ typeof(__type) __opaque;
\
+ } __storage;
\
+ __storage.__fptr = (__value);
\
+ __storage.__opaque;
\
----------------
ojhunt wrote:
using memcpy isn't an option as this may be used in environments where they're
not available, hence the awkward union
https://github.com/llvm/llvm-project/pull/161027
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits