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 all commits
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
53 changes: 53 additions & 0 deletions openmp/runtime/src/z_Linux_asm.S
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,53 @@ KMP_PREFIX_UNDERSCORE(\proc):
.endm
# endif // KMP_OS_DARWIN

# 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 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
# if PAC_FLAG != 0
# define PACBTI_C hint #25
# define PACBTI_RET hint #29
# else
# define PACBTI_C hint #34
# define PACBTI_RET
# endif
# define GNU_PROPERTY_BTI_PAC \
GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, BTI_FLAG | PAC_FLAG)
# else
# define PACBTI_C
# define PACBTI_RET
# 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 +1343,7 @@ __tid = 8
// mark_begin;
.text
PROC __kmp_invoke_microtask
PACBTI_C

stp x29, x30, [sp, #-16]!
# if OMPT_SUPPORT
Expand Down Expand Up @@ -1359,6 +1407,7 @@ KMP_LABEL(kmp_1):
ldp x19, x20, [sp], #16
# endif
ldp x29, x30, [sp], #16
PACBTI_RET
ret

DEBUG_INFO __kmp_invoke_microtask
Expand Down Expand Up @@ -2452,3 +2501,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