From: Claudiu Zissulescu <claudiu.zissulescu-iancule...@oracle.com> Hi,
Please find series of patches for adding memtag-stack sanitizer using AArch64 MTE instructions. Most of the patches are ACKed, however, I have included them for reference. The remaining ones to be reviews are: * target-insns.def: (compose_tag) New pattern. * aarch64: Add support for memetag-stack sanitizer using MTE insns The first patch introduces a new target pattern (compose_tag) which is used exclusively for memtag sanitizer. This pattern replaces the previously introduced hook TARGET_MEMTAG_COMPOSE_OFFSET_TAG. The second patch reverts the usage of the memory barrier to unspec volatile patterns. The post/pre increment/decrement patterns are implemented using a code iterator, avoiding in this way the problem of having patterns with multiple memory updates into instruction patterns. It also fixes the other found issues in the previous patch series. For the ACKed patches, there are slight changes which I would like to list them: * aarch64: Add memtag-stack tests - New comments added to the tests. - More matching patterns added too. - A new execution test that uses memtag-stack sanitizer and pthreads. - Moved the check_effective_target_memtag_exec predicate to target-supports.exp * asan: add new memtag sanitizer - Fix formating. - Comment on -fsanitize-recover flag manipulation: The modification is there to avoid calling memtag-stack sanitizer when -fsanitize-recove=all is used. - Update fsanitize=memtag-stack documentation to underline the probabilistic nature of this sanitizer. * asan: memtag-stack add support for MTE instructions - Fix formating, and text. - Use compose_tag instruction pattern for memtag-stack sanitizer. Thank you for all your help, Claudiu Claudiu Zissulescu (4): target-insns.def: (tag_memory) New pattern. target-insns.def: (compose_tag) New pattern. asan: memtag-stack add support for MTE instructions aarch64: Add support for memetag-stack sanitizer using MTE insns Indu Bhagat (2): asan: add new memtag sanitizer aarch64: Add memtag-stack tests gcc/asan.cc | 231 +++++++++--- gcc/asan.h | 10 +- gcc/builtins.def | 1 + gcc/cfgexpand.cc | 29 +- gcc/config/aarch64/aarch64-builtins.cc | 7 +- gcc/config/aarch64/aarch64-linux.h | 4 +- gcc/config/aarch64/aarch64-protos.h | 3 + gcc/config/aarch64/aarch64.cc | 333 +++++++++++++++++- gcc/config/aarch64/aarch64.md | 127 +++++-- gcc/config/aarch64/constraints.md | 21 ++ gcc/config/aarch64/iterators.md | 20 ++ gcc/config/aarch64/predicates.md | 13 +- gcc/doc/invoke.texi | 20 +- gcc/doc/md.texi | 10 + gcc/doc/tm.texi | 6 +- gcc/flag-types.h | 4 + gcc/gcc.cc | 2 + gcc/gimplify.cc | 5 +- gcc/internal-fn.cc | 68 +++- gcc/internal-fn.def | 1 + gcc/opts.cc | 22 +- gcc/params.opt | 8 + gcc/sanopt.cc | 2 +- gcc/target-insns.def | 2 + gcc/target.def | 10 +- .../gcc.target/aarch64/acle/memtag_1.c | 4 +- .../gcc.target/aarch64/memtag/alloca-1.c | 14 + .../gcc.target/aarch64/memtag/alloca-3.c | 27 ++ .../gcc.target/aarch64/memtag/arguments-1.c | 3 + .../gcc.target/aarch64/memtag/arguments-2.c | 3 + .../gcc.target/aarch64/memtag/arguments-3.c | 3 + .../gcc.target/aarch64/memtag/arguments-4.c | 16 + .../gcc.target/aarch64/memtag/arguments.c | 3 + .../gcc.target/aarch64/memtag/basic-1.c | 14 + .../gcc.target/aarch64/memtag/basic-3.c | 28 ++ .../gcc.target/aarch64/memtag/basic-struct.c | 22 ++ .../aarch64/memtag/cfi-mte-memtag-frame-1.c | 11 + .../gcc.target/aarch64/memtag/large-array.c | 23 ++ .../aarch64/memtag/local-no-escape.c | 22 ++ .../gcc.target/aarch64/memtag/memtag.exp | 32 ++ .../gcc.target/aarch64/memtag/mte-sig.h | 15 + .../aarch64/memtag/no-sanitize-attribute.c | 18 + .../gcc.target/aarch64/memtag/texec-1.c | 27 ++ .../gcc.target/aarch64/memtag/texec-2.c | 22 ++ .../gcc.target/aarch64/memtag/texec-3.c | 37 ++ .../gcc.target/aarch64/memtag/value-init.c | 14 + .../aarch64/memtag/vararray-gimple.c | 16 + .../gcc.target/aarch64/memtag/vararray.c | 14 + .../gcc.target/aarch64/memtag/vla-1.c | 39 ++ .../gcc.target/aarch64/memtag/vla-2.c | 48 +++ .../gcc.target/aarch64/memtag/zero-init.c | 14 + gcc/testsuite/lib/target-supports.exp | 44 +++ 52 files changed, 1369 insertions(+), 123 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/alloca-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/alloca-3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/arguments-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/arguments-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/arguments-3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/arguments-4.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/arguments.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/basic-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/basic-3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/basic-struct.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/cfi-mte-memtag-frame-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/large-array.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/local-no-escape.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/memtag.exp create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/mte-sig.h create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/no-sanitize-attribute.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/texec-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/texec-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/texec-3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/value-init.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/vararray-gimple.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/vararray.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/vla-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/vla-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/memtag/zero-init.c -- 2.51.0