mirror of
https://sourceware.org/git/glibc.git
synced 2024-09-19 16:10:01 +00:00
aarch64: Move and update the definition of MTE_ENABLED
The hwcap value is now in linux 5.10 and in glibc bits/hwcap.h, so use that definition. Move the definition to init-arch.h so all ifunc selectors can use it and expose an "mte" shorthand for mte enabled runtime. For now we allow user code to enable tag checks and use PROT_MTE mappings without libc involvment, this is not guaranteed ABI, but can be useful for testing and debugging with MTE.
This commit is contained in:
parent
31f6488722
commit
c3c4a25e65
@ -17,9 +17,18 @@
|
|||||||
<https://www.gnu.org/licenses/>. */
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#include <ldsodefs.h>
|
#include <ldsodefs.h>
|
||||||
|
#include <sys/auxv.h>
|
||||||
|
|
||||||
|
/* Make glibc MTE-safe on a system that supports MTE in case user code
|
||||||
|
enables tag checks independently of the mte_status of glibc. There
|
||||||
|
is currently no ABI contract for enabling tag checks in user code,
|
||||||
|
but this can be useful for debugging with MTE. */
|
||||||
|
#define MTE_ENABLED() (GLRO(dl_hwcap2) & HWCAP2_MTE)
|
||||||
|
|
||||||
#define INIT_ARCH() \
|
#define INIT_ARCH() \
|
||||||
uint64_t __attribute__((unused)) midr = \
|
uint64_t __attribute__((unused)) midr = \
|
||||||
GLRO(dl_aarch64_cpu_features).midr_el1; \
|
GLRO(dl_aarch64_cpu_features).midr_el1; \
|
||||||
unsigned __attribute__((unused)) zva_size = \
|
unsigned __attribute__((unused)) zva_size = \
|
||||||
GLRO(dl_aarch64_cpu_features).zva_size;
|
GLRO(dl_aarch64_cpu_features).zva_size; \
|
||||||
|
bool __attribute__((unused)) mte = \
|
||||||
|
MTE_ENABLED ();
|
||||||
|
@ -26,21 +26,12 @@
|
|||||||
# include <string.h>
|
# include <string.h>
|
||||||
# include <init-arch.h>
|
# include <init-arch.h>
|
||||||
|
|
||||||
/* This should check HWCAP2_MTE when it is available: current
|
|
||||||
linux kernel does not expose it, but its value is reserved.
|
|
||||||
This is needed to make glibc MTE-safe on future systems in
|
|
||||||
case user code enables MTE. The ABI contract for enabling
|
|
||||||
MTE is not yet specified, but it can be useful for at least
|
|
||||||
debugging which does not need a contract. */
|
|
||||||
#define FUTURE_HWCAP2_MTE (1 << 18)
|
|
||||||
#define MTE_ENABLED() (GLRO(dl_hwcap2) & FUTURE_HWCAP2_MTE)
|
|
||||||
|
|
||||||
extern __typeof (__redirect_strlen) __strlen;
|
extern __typeof (__redirect_strlen) __strlen;
|
||||||
|
|
||||||
extern __typeof (__redirect_strlen) __strlen_mte attribute_hidden;
|
extern __typeof (__redirect_strlen) __strlen_mte attribute_hidden;
|
||||||
extern __typeof (__redirect_strlen) __strlen_asimd attribute_hidden;
|
extern __typeof (__redirect_strlen) __strlen_asimd attribute_hidden;
|
||||||
|
|
||||||
libc_ifunc (__strlen, (MTE_ENABLED () ? __strlen_mte : __strlen_asimd));
|
libc_ifunc (__strlen, (mte ? __strlen_mte : __strlen_asimd));
|
||||||
|
|
||||||
# undef strlen
|
# undef strlen
|
||||||
strong_alias (__strlen, strlen);
|
strong_alias (__strlen, strlen);
|
||||||
|
Loading…
Reference in New Issue
Block a user