/* * Memory tagging, unaligned access crossing pages. * https://gitlab.com/qemu-project/qemu/-/issues/403 * * Copyright (c) 2021 Linaro Ltd * SPDX-License-Identifier: GPL-2.0-or-later */ #include "mte.h" int main(int ac, char **av) { void *p; enable_mte(PR_MTE_TCF_SYNC); p = alloc_mte_mem(2 * 0x1000); /* Tag the pointer. */ p = (void *)((unsigned long)p | (1ul << 56)); /* Store tag in sequential granules. */ asm("stz2g %0, [%0]" : : "r"(p + 0x0ff0)); /* * Perform an unaligned store with tag 1 crossing the pages. * Failure dies with SIGSEGV. */ asm("str %0, [%0]" : : "r"(p + 0x0ffc)); return 0; }