[prev in list] [next in list] [prev in thread] [next in thread] 

List:       glibc-cvs
Subject:    [glibc/maskray/lld] aarch64: Move and update the definition of MTE_ENABLED
From:       Fangrui Song via Glibc-cvs <glibc-cvs () sourceware ! org>
Date:       2021-01-29 18:28:14
Message-ID: 20210129182814.EF54C3950402 () sourceware ! org
[Download RAW message or body]

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c3c4a25e651d4d78b1751664a613807b7140ed7e

commit c3c4a25e651d4d78b1751664a613807b7140ed7e
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Fri Jan 22 16:14:05 2021 +0000

    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.

Diff:
---
 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 ();
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);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic