|
17 | 17 |
|
18 | 18 | #include "kmp_config.h"
|
19 | 19 |
|
| 20 | +#if KMP_OS_LINUX |
| 21 | +// BTI and PAC gnu property note |
| 22 | +#define NT_GNU_PROPERTY_TYPE_0 5 |
| 23 | +#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 |
| 24 | +#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI 1 |
| 25 | +#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC 2 |
| 26 | + |
| 27 | +# define GNU_PROPERTY(type, value) \ |
| 28 | + .pushsection .note.gnu.property, "a"; \ |
| 29 | + .p2align 3; \ |
| 30 | + .word 4; \ |
| 31 | + .word 16; \ |
| 32 | + .word NT_GNU_PROPERTY_TYPE_0; \ |
| 33 | + .asciz "GNU"; \ |
| 34 | + .word type; \ |
| 35 | + .word 4; \ |
| 36 | + .word value; \ |
| 37 | + .word 0; \ |
| 38 | + .popsection |
| 39 | +#endif |
| 40 | + |
20 | 41 | #if KMP_ARCH_X86 || KMP_ARCH_X86_64
|
21 | 42 |
|
22 | 43 | # if KMP_MIC
|
@@ -176,6 +197,25 @@ KMP_PREFIX_UNDERSCORE(\proc):
|
176 | 197 | .endm
|
177 | 198 | # endif // KMP_OS_DARWIN
|
178 | 199 |
|
| 200 | +# if defined(__ARM_FEATURE_BTI_DEFAULT) |
| 201 | +# define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI |
| 202 | +# else |
| 203 | +# define BTI_FLAG 0 |
| 204 | +# endif |
| 205 | +# if __ARM_FEATURE_PAC_DEFAULT & 3 |
| 206 | +# define PAC_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_PAC |
| 207 | +# else |
| 208 | +# define PAC_FLAG 0 |
| 209 | +# endif |
| 210 | + |
| 211 | +# if (BTI_FLAG | PAC_FLAG) != 0 |
| 212 | +# define BTI_C hint #34 |
| 213 | +# define GNU_PROPERTY_BTI_PAC \ |
| 214 | + GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, BTI_FLAG | PAC_FLAG) |
| 215 | +# else |
| 216 | +# define BTI_C |
| 217 | +# define GNU_PROPERTY_BTI_PAC |
| 218 | +# endif |
179 | 219 | #endif // (KMP_OS_LINUX || KMP_OS_DARWIN || KMP_OS_WINDOWS) && (KMP_ARCH_AARCH64 || KMP_ARCH_AARCH64_32 || KMP_ARCH_ARM)
|
180 | 220 |
|
181 | 221 | .macro COMMON name, size, align_power
|
@@ -1296,6 +1336,7 @@ __tid = 8
|
1296 | 1336 | // mark_begin;
|
1297 | 1337 | .text
|
1298 | 1338 | PROC __kmp_invoke_microtask
|
| 1339 | + BTI_C |
1299 | 1340 |
|
1300 | 1341 | stp x29, x30, [sp, #-16]!
|
1301 | 1342 | # if OMPT_SUPPORT
|
@@ -2472,3 +2513,7 @@ __kmp_unnamed_critical_addr:
|
2472 | 2513 | .4byte .gomp_critical_user_
|
2473 | 2514 | .size __kmp_unnamed_critical_addr, 4
|
2474 | 2515 | #endif
|
| 2516 | + |
| 2517 | +#if KMP_OS_LINUX && (KMP_ARCH_AARCH64 || KMP_ARCH_AARCH64_32) |
| 2518 | +GNU_PROPERTY_BTI_PAC |
| 2519 | +#endif |
0 commit comments