diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2021-01-29 17:07:28 +0000 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2021-03-26 11:03:06 +0000 |
commit | c076a0bc698c537f72c33bad2925f4e3da59d23c (patch) | |
tree | 188e36bfaa2c51ca50df2f1ef882a8fd57a61780 /sysdeps/aarch64/__mtag_tag_zero_region.S | |
parent | 42bac88a211a7fac9dd1bfe7d1e45e59ac50c24f (diff) | |
download | glibc-c076a0bc698c537f72c33bad2925f4e3da59d23c.tar.gz glibc-c076a0bc698c537f72c33bad2925f4e3da59d23c.tar.xz glibc-c076a0bc698c537f72c33bad2925f4e3da59d23c.zip |
malloc: Only support zeroing and not arbitrary memset with mtag
The memset api is suboptimal and does not provide much benefit. Memory tagging only needs a zeroing memset (and only for memory that's sized and aligned to multiples of the tag granule), so change the internal api and the target hooks accordingly. This is to simplify the implementation of the target hook. Reviewed-by: DJ Delorie <dj@redhat.com>
Diffstat (limited to 'sysdeps/aarch64/__mtag_tag_zero_region.S')
-rw-r--r-- | sysdeps/aarch64/__mtag_tag_zero_region.S | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/sysdeps/aarch64/__mtag_tag_zero_region.S b/sysdeps/aarch64/__mtag_tag_zero_region.S new file mode 100644 index 0000000000..74d398bba5 --- /dev/null +++ b/sysdeps/aarch64/__mtag_tag_zero_region.S @@ -0,0 +1,49 @@ +/* Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> + +#ifdef USE_MTAG + + .arch armv8.5-a + .arch_extension memtag + +/* NB, only supported on variants with 64-bit pointers. */ + +/* FIXME: This is a minimal implementation. We could do much better than + this for large values of COUNT. */ + +#define dstin x0 +#define count x1 +#define dst x2 + +ENTRY(__libc_mtag_tag_zero_region) + + mov dst, dstin +L(loop): + stzg dst, [dst], #16 + subs count, count, 16 + bne L(loop) +#if 0 + /* This is not currently needed, since for now we are only called + to tag memory that is taggable. */ + ldg dstin, [dstin] // Recover the tag created (might be untagged). +#endif + ret +END (__libc_mtag_tag_zero_region) +#endif /* USE_MTAG */ |