diff --git a/src/libmpg123/aarch64_defs.h b/src/libmpg123/aarch64_defs.h new file mode 100644 index 00000000..f303b105 --- /dev/null +++ b/src/libmpg123/aarch64_defs.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: LGPL-2.1 + * + * aarch64_defs.h: Support macros for the aarch64 architectural features + */ + +#ifndef SRC_LIBMPG123_AARCH64_DEFS_H_ +#define SRC_LIBMPG123_AARCH64_DEFS_H_ + +/* + * Guard this header so arm assembly files can just include it without the need + * to if-def each instance. + */ +#ifdef __aarch64__ + +/* + * References: + * - https://developer.arm.com/documentation/101028/0012/5--Feature-test-macros + * - https://github.com/ARM-software/abi-aa/blob/main/aaelf64/aaelf64.rst + */ + +#if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1 + #define GNU_PROPERTY_AARCH64_BTI 1 /* bit 0 GNU Notes is for BTI support */ +#else + #define GNU_PROPERTY_AARCH64_BTI 0 +#endif + +#if defined(__ARM_FEATURE_PAC_DEFAULT) + #define GNU_PROPERTY_AARCH64_POINTER_AUTH 2 /* bit 1 GNU Notes is for PAC support */ +#else + #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0 +#endif + +/* Add the BTI support to GNU Notes section */ +#if defined(__ASSEMBLER__) && defined(__ELF__) +#if GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 + .pushsection .note.gnu.property, "a"; /* Start a new allocatable section */ + .balign 8; /* align it on a byte boundry */ + .long 4; /* size of "GNU\0" */ + .long 0x10; /* size of descriptor */ + .long 0x5; /* NT_GNU_PROPERTY_TYPE_0 */ + .asciz "GNU"; + .long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ + .long 4; /* Four bytes of data */ + .long (GNU_PROPERTY_AARCH64_BTI|GNU_PROPERTY_AARCH64_POINTER_AUTH); /* BTI or PAC is enabled */ + .long 0; /* padding for 8 byte alignment */ + .popsection; /* end the section */ +#endif /* GNU Notes additions */ +#endif /* if __ASSEMBLER__ and __ELF__ */ + +#endif /* __arch64__ */ + +#endif /* SRC_LIBMPG123_AARCH64_DEFS_H_ */ diff --git a/src/libmpg123/check_neon.S b/src/libmpg123/check_neon.S index 008c491c..87f5f226 100644 --- a/src/libmpg123/check_neon.S +++ b/src/libmpg123/check_neon.S @@ -6,6 +6,7 @@ initially written by Taihei Momma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __aarch64__ diff --git a/src/libmpg123/dct36_neon64.S b/src/libmpg123/dct36_neon64.S index b2c9134a..f225f6d0 100644 --- a/src/libmpg123/dct36_neon64.S +++ b/src/libmpg123/dct36_neon64.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/dct64_neon64_float.S b/src/libmpg123/dct64_neon64_float.S index 0b81a4c7..902300ce 100644 --- a/src/libmpg123/dct64_neon64_float.S +++ b/src/libmpg123/dct64_neon64_float.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/synth_neon64_accurate.S b/src/libmpg123/synth_neon64_accurate.S index dda77f1c..2f8451f1 100644 --- a/src/libmpg123/synth_neon64_accurate.S +++ b/src/libmpg123/synth_neon64_accurate.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/synth_neon64_float.S b/src/libmpg123/synth_neon64_float.S index af1695f3..bdbae263 100644 --- a/src/libmpg123/synth_neon64_float.S +++ b/src/libmpg123/synth_neon64_float.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/synth_neon64_s32.S b/src/libmpg123/synth_neon64_s32.S index f0174152..4deca077 100644 --- a/src/libmpg123/synth_neon64_s32.S +++ b/src/libmpg123/synth_neon64_s32.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/synth_stereo_neon64_accurate.S b/src/libmpg123/synth_stereo_neon64_accurate.S index 6cf05e50..fa6ba380 100644 --- a/src/libmpg123/synth_stereo_neon64_accurate.S +++ b/src/libmpg123/synth_stereo_neon64_accurate.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/synth_stereo_neon64_float.S b/src/libmpg123/synth_stereo_neon64_float.S index 3429596c..6c5eb4f2 100644 --- a/src/libmpg123/synth_stereo_neon64_float.S +++ b/src/libmpg123/synth_stereo_neon64_float.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__ diff --git a/src/libmpg123/synth_stereo_neon64_s32.S b/src/libmpg123/synth_stereo_neon64_s32.S index 2d61664e..85d3a58b 100644 --- a/src/libmpg123/synth_stereo_neon64_s32.S +++ b/src/libmpg123/synth_stereo_neon64_s32.S @@ -6,6 +6,7 @@ initially written by Taihei Monma */ +#include "aarch64_defs.h" #include "mangle.h" #ifndef __APPLE__