[PATCH 1/2] aarch64: Move and update the definition of MTE_ENABLED

Adhemerval Zanella adhemerval.zanella@linaro.org
Mon Jan 25 13:08:06 GMT 2021



On 25/01/2021 08:03, Szabolcs Nagy via Libc-alpha wrote:
> 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.
> ---
>  sysdeps/aarch64/multiarch/init-arch.h | 11 ++++++++++-
>  sysdeps/aarch64/multiarch/strlen.c    | 11 +----------
>  2 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/sysdeps/aarch64/multiarch/init-arch.h b/sysdeps/aarch64/multiarch/init-arch.h
> index bf8264b561..fce260d168 100644
> --- a/sysdeps/aarch64/multiarch/init-arch.h
> +++ b/sysdeps/aarch64/multiarch/init-arch.h
> @@ -17,9 +17,18 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #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()							      \
>    uint64_t __attribute__((unused)) midr =				      \
>      GLRO(dl_aarch64_cpu_features).midr_el1;				      \
>    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 ();

Why not use mte_state and thus also enable MTE selection for the case
of tunables force enable it for USE_MTAG support?

> diff --git a/sysdeps/aarch64/multiarch/strlen.c b/sysdeps/aarch64/multiarch/strlen.c
> index f3c018aab4..8f38de69b5 100644
> --- a/sysdeps/aarch64/multiarch/strlen.c
> +++ b/sysdeps/aarch64/multiarch/strlen.c
> @@ -26,21 +26,12 @@
>  # include <string.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_mte 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
>  strong_alias (__strlen, strlen);
> 


More information about the Libc-alpha mailing list