From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- .../x86-control-flow-protection-intrinsics.html | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 devdocs/gcc~13/x86-control-flow-protection-intrinsics.html (limited to 'devdocs/gcc~13/x86-control-flow-protection-intrinsics.html') diff --git a/devdocs/gcc~13/x86-control-flow-protection-intrinsics.html b/devdocs/gcc~13/x86-control-flow-protection-intrinsics.html new file mode 100644 index 00000000..51992c58 --- /dev/null +++ b/devdocs/gcc~13/x86-control-flow-protection-intrinsics.html @@ -0,0 +1,31 @@ +

6.60.37 x86 Control-Flow Protection Intrinsics

+CET Function: ret_type _get_ssp (void) +

Get the current value of shadow stack pointer if shadow stack support from Intel CET is enabled in the hardware or 0 otherwise. The ret_type is unsigned long long for 64-bit targets and unsigned int for 32-bit targets.

+
+CET Function: void _inc_ssp (unsigned int) +

Increment the current shadow stack pointer by the size specified by the function argument. The argument is masked to a byte value for security reasons, so to increment by more than 255 bytes you must call the function multiple times.

+

The shadow stack unwind code looks like:

#include <immintrin.h>
+
+/* Unwind the shadow stack for EH.  */
+#define _Unwind_Frames_Extra(x)       \
+  do                                  \
+    {                                \
+      _Unwind_Word ssp = _get_ssp (); \
+      if (ssp != 0)                   \
+        {                            \
+          _Unwind_Word tmp = (x);     \
+          while (tmp > 255)           \
+            {                        \
+              _inc_ssp (tmp);         \
+              tmp -= 255;             \
+            }                        \
+          _inc_ssp (tmp);             \
+        }                            \
+    }                                \
+    while (0)
+

This code runs unconditionally on all 64-bit processors. For 32-bit processors the code runs on those that support multi-byte NOP instructions.

+

+ © Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
+ https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/x86-control-flow-protection-intrinsics.html +

+
-- cgit v1.2.3