Skip to content

[OpenMP][AArch64] Fix branch protection in microtasks #102317

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 13, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions openmp/runtime/src/z_Linux_asm.S
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,27 @@

#include "kmp_config.h"

#if KMP_OS_LINUX
// BTI and PAC gnu property note
#define NT_GNU_PROPERTY_TYPE_0 5
#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000
#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI 1
#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC 2

# define GNU_PROPERTY(type, value) \
.pushsection .note.gnu.property, "a"; \
.p2align 3; \
.word 4; \
.word 16; \
.word NT_GNU_PROPERTY_TYPE_0; \
.asciz "GNU"; \
.word type; \
.word 4; \
.word value; \
.word 0; \
.popsection
#endif

#if KMP_ARCH_X86 || KMP_ARCH_X86_64

# if KMP_MIC
Expand Down Expand Up @@ -176,6 +197,25 @@ KMP_PREFIX_UNDERSCORE(\proc):
.endm
# endif // KMP_OS_DARWIN

# if defined(__ARM_FEATURE_BTI_DEFAULT)
# define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI
# else
# define BTI_FLAG 0
# endif
# if __ARM_FEATURE_PAC_DEFAULT & 3
# define PAC_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_PAC
# else
# define PAC_FLAG 0
# endif

# if (BTI_FLAG | PAC_FLAG) != 0
# define BTI_C hint #34
# define GNU_PROPERTY_BTI_PAC \
GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, BTI_FLAG | PAC_FLAG)
# else
# define BTI_C
# define GNU_PROPERTY_BTI_PAC
# endif
#endif // (KMP_OS_LINUX || KMP_OS_DARWIN || KMP_OS_WINDOWS) && (KMP_ARCH_AARCH64 || KMP_ARCH_AARCH64_32 || KMP_ARCH_ARM)

.macro COMMON name, size, align_power
Expand Down Expand Up @@ -1296,6 +1336,7 @@ __tid = 8
// mark_begin;
.text
PROC __kmp_invoke_microtask
BTI_C

stp x29, x30, [sp, #-16]!
# if OMPT_SUPPORT
Expand Down Expand Up @@ -2452,3 +2493,7 @@ KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr):
.section .note.GNU-stack,"",@progbits
# endif
#endif

#if KMP_OS_LINUX && (KMP_ARCH_AARCH64 || KMP_ARCH_AARCH64_32)
GNU_PROPERTY_BTI_PAC
#endif
Loading