config: Allow memory tagging to be enabled when configuring glibc

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.
This commit is contained in:
Richard Earnshaw 2020-12-21 15:03:03 +00:00 committed by Richard Earnshaw
parent d552058570
commit 3378408987
6 changed files with 69 additions and 0 deletions

14
INSTALL
View File

@ -142,6 +142,20 @@ if 'CFLAGS' is specified it must enable optimization. For example:
non-CET processors. '--enable-cet' has been tested for i686, non-CET processors. '--enable-cet' has been tested for i686,
x86_64 and x32 on CET processors. x86_64 and x32 on CET processors.
'--enable-memory-tagging'
Enable memory tagging support if the architecture supports 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.mem.tagging'. 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' '--disable-profile'
Don't build libraries with profiling information. You may want to Don't build libraries with profiling information. You may want to
use this option if you don't plan to do profiling. use this option if you don't plan to do profiling.

View File

@ -160,6 +160,9 @@
/* Define if __stack_chk_guard canary should be randomized at program startup. */ /* Define if __stack_chk_guard canary should be randomized at program startup. */
#undef ENABLE_STACKGUARD_RANDOMIZE #undef ENABLE_STACKGUARD_RANDOMIZE
/* Define if memory tagging support should be enabled. */
#undef USE_MTAG
/* Package description. */ /* Package description. */
#undef PKGVERSION #undef PKGVERSION

View File

@ -84,6 +84,8 @@ mach-interface-list = @mach_interface_list@
experimental-malloc = @experimental_malloc@ experimental-malloc = @experimental_malloc@
memory-tagging = @memory_tagging@
nss-crypt = @libc_cv_nss_crypt@ nss-crypt = @libc_cv_nss_crypt@
static-nss-crypt = @libc_cv_static_nss_crypt@ static-nss-crypt = @libc_cv_static_nss_crypt@

22
configure vendored
View File

@ -676,6 +676,7 @@ build_nscd
libc_cv_static_nss_crypt libc_cv_static_nss_crypt
libc_cv_nss_crypt libc_cv_nss_crypt
build_crypt build_crypt
memory_tagging
experimental_malloc experimental_malloc
enable_werror enable_werror
all_warnings all_warnings
@ -781,6 +782,7 @@ enable_all_warnings
enable_werror enable_werror
enable_multi_arch enable_multi_arch
enable_experimental_malloc enable_experimental_malloc
enable_memory_tagging
enable_crypt enable_crypt
enable_nss_crypt enable_nss_crypt
enable_systemtap enable_systemtap
@ -1450,6 +1452,8 @@ Optional Features:
architectures architectures
--disable-experimental-malloc --disable-experimental-malloc
disable experimental malloc features 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 --disable-crypt do not build nor install the passphrase hashing
library, libcrypt library, libcrypt
--enable-nss-crypt enable libcrypt to use nss --enable-nss-crypt enable libcrypt to use nss
@ -3519,6 +3523,24 @@ 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
# Only enable this on architectures that support it.
case $host_cpu in
aarch64)
$as_echo "#define USE_MTAG 1" >>confdefs.h
;;
esac
fi
# Check whether --enable-crypt was given. # Check whether --enable-crypt was given.
if test "${enable_crypt+set}" = set; then : if test "${enable_crypt+set}" = set; then :
enableval=$enable_crypt; build_crypt=$enableval enableval=$enable_crypt; build_crypt=$enableval

View File

@ -311,6 +311,21 @@ AC_ARG_ENABLE([experimental-malloc],
[experimental_malloc=yes]) [experimental_malloc=yes])
AC_SUBST(experimental_malloc) 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
# Only enable this on architectures that support it.
case $host_cpu in
aarch64)
AC_DEFINE(USE_MTAG)
;;
esac
fi
AC_SUBST(memory_tagging)
AC_ARG_ENABLE([crypt], AC_ARG_ENABLE([crypt],
AC_HELP_STRING([--disable-crypt], AC_HELP_STRING([--disable-crypt],
[do not build nor install the passphrase hashing library, libcrypt]), [do not build nor install the passphrase hashing library, libcrypt]),

View File

@ -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 on non-CET processors. @option{--enable-cet} has been tested for
i686, x86_64 and x32 on CET processors. i686, x86_64 and x32 on CET processors.
@item --enable-memory-tagging
Enable memory tagging support if the architecture supports 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.mem.tagging}. 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 @item --disable-profile
Don't build libraries with profiling information. You may want to use Don't build libraries with profiling information. You may want to use
this option if you don't plan to do profiling. this option if you don't plan to do profiling.