[v2,1/6] config: Allow memory tagging to be enabled when configuring glibc
Commit Message
This patch adds the configuration machinery to allow memory tagging to be
enabled from the command line via the configure option --enable-memory-tagging.
The current default is off, though in time we may change that once the API
is more stable.
---
INSTALL | 14 ++++++++++++++
config.h.in | 3 +++
config.make.in | 2 ++
configure | 17 +++++++++++++++++
configure.ac | 10 ++++++++++
manual/install.texi | 13 +++++++++++++
6 files changed, 59 insertions(+)
@@ -142,6 +142,20 @@ if 'CFLAGS' is specified it must enable optimization. For example:
non-CET processors. '--enable-cet' has been tested for i686,
x86_64 and x32 on CET processors.
+'--enable-memory-tagging'
+ Enable memory tagging support on architectures that support it.
+ When the GNU C Library is built with this option then the resulting
+ library will be able to control the use of tagged memory when
+ hardware support is present by use of the tunable
+ 'glibc.memtag.enable'. This includes the generation of tagged
+ memory when using the 'malloc' APIs.
+
+ At present only AArch64 platforms with MTE provide this
+ functionality, although the library will still operate (without
+ memory tagging) on older versions of the architecture.
+
+ The default is to disable support for memory tagging.
+
'--disable-profile'
Don't build libraries with profiling information. You may want to
use this option if you don't plan to do profiling.
@@ -148,6 +148,9 @@
/* Define if __stack_chk_guard canary should be randomized at program startup. */
#undef ENABLE_STACKGUARD_RANDOMIZE
+/* Define if memory tagging support should be enabled. */
+#undef _LIBC_MTAG
+
/* Package description. */
#undef PKGVERSION
@@ -84,6 +84,8 @@ mach-interface-list = @mach_interface_list@
experimental-malloc = @experimental_malloc@
+memory-tagging = @memory_tagging@
+
nss-crypt = @libc_cv_nss_crypt@
static-nss-crypt = @libc_cv_static_nss_crypt@
@@ -678,6 +678,7 @@ link_obsolete_rpc
libc_cv_static_nss_crypt
libc_cv_nss_crypt
build_crypt
+memory_tagging
experimental_malloc
enable_werror
all_warnings
@@ -783,6 +784,7 @@ enable_all_warnings
enable_werror
enable_multi_arch
enable_experimental_malloc
+enable_memory_tagging
enable_crypt
enable_nss_crypt
enable_obsolete_rpc
@@ -1454,6 +1456,8 @@ Optional Features:
architectures
--disable-experimental-malloc
disable experimental malloc features
+ --enable-memory-tagging enable memory tagging if supported by the
+ architecture [default=no]
--disable-crypt do not build nor install the passphrase hashing
library, libcrypt
--enable-nss-crypt enable libcrypt to use nss
@@ -3527,6 +3531,19 @@ fi
+# Check whether --enable-memory-tagging was given.
+if test "${enable_memory_tagging+set}" = set; then :
+ enableval=$enable_memory_tagging; memory_tagging=$enableval
+else
+ memory_tagging=no
+fi
+
+if test "$memory_tagging" = yes; then
+ $as_echo "#define _LIBC_MTAG 1" >>confdefs.h
+
+fi
+
+
# Check whether --enable-crypt was given.
if test "${enable_crypt+set}" = set; then :
enableval=$enable_crypt; build_crypt=$enableval
@@ -311,6 +311,16 @@ AC_ARG_ENABLE([experimental-malloc],
[experimental_malloc=yes])
AC_SUBST(experimental_malloc)
+AC_ARG_ENABLE([memory-tagging],
+ AC_HELP_STRING([--enable-memory-tagging],
+ [enable memory tagging if supported by the architecture @<:@default=no@:>@]),
+ [memory_tagging=$enableval],
+ [memory_tagging=no])
+if test "$memory_tagging" = yes; then
+ AC_DEFINE(_LIBC_MTAG)
+fi
+AC_SUBST(memory_tagging)
+
AC_ARG_ENABLE([crypt],
AC_HELP_STRING([--disable-crypt],
[do not build nor install the passphrase hashing library, libcrypt]),
@@ -171,6 +171,19 @@ NOTE: @option{--enable-cet} has been tested for i686, x86_64 and x32
on non-CET processors. @option{--enable-cet} has been tested for
i686, x86_64 and x32 on CET processors.
+@item --enable-memory-tagging
+Enable memory tagging support on architectures that support it. When
+@theglibc{} is built with this option then the resulting library will
+be able to control the use of tagged memory when hardware support is
+present by use of the tunable @samp{glibc.memtag.enable}. This includes
+the generation of tagged memory when using the @code{malloc} APIs.
+
+At present only AArch64 platforms with MTE provide this functionality,
+although the library will still operate (without memory tagging) on
+older versions of the architecture.
+
+The default is to disable support for memory tagging.
+
@item --disable-profile
Don't build libraries with profiling information. You may want to use
this option if you don't plan to do profiling.