1 1.1 christos /* Common AArch64 definitions for MTE 2 1.1 christos 3 1.1 christos Copyright (C) 2021-2024 Free Software Foundation, Inc. 4 1.1 christos 5 1.1 christos This file is part of GDB. 6 1.1 christos 7 1.1 christos This program is free software; you can redistribute it and/or modify 8 1.1 christos it under the terms of the GNU General Public License as published by 9 1.1 christos the Free Software Foundation; either version 3 of the License, or 10 1.1 christos (at your option) any later version. 11 1.1 christos 12 1.1 christos This program is distributed in the hope that it will be useful, 13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 1.1 christos GNU General Public License for more details. 16 1.1 christos 17 1.1 christos You should have received a copy of the GNU General Public License 18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 1.1 christos 20 1.1 christos #ifndef GDB_ARCH_AARCH64_MTE_H 21 1.1 christos #define GDB_ARCH_AARCH64_MTE_H 22 1.1 christos 23 1.1 christos 24 1.1 christos /* We have one tag per 16 bytes of memory. */ 25 1.1 christos #define AARCH64_MTE_GRANULE_SIZE 16 26 1.1 christos #define AARCH64_MTE_TAG_BIT_SIZE 4 27 1.1 christos #define AARCH64_MTE_LOGICAL_TAG_START_BIT 56 28 1.1 christos #define AARCH64_MTE_LOGICAL_MAX_VALUE 0xf 29 1.1 christos 30 1.1 christos /* Return the number of tag granules in the memory range 31 1.1 christos [ADDR, ADDR + LEN) given GRANULE_SIZE. */ 32 1.1 christos extern size_t aarch64_mte_get_tag_granules (CORE_ADDR addr, size_t len, 33 1.1 christos size_t granule_size); 34 1.1 christos 35 1.1 christos /* Return the 4-bit tag made from VALUE. */ 36 1.1 christos extern CORE_ADDR aarch64_mte_make_ltag_bits (CORE_ADDR value); 37 1.1 christos 38 1.1 christos /* Return the 4-bit tag that can be OR-ed to an address. */ 39 1.1 christos extern CORE_ADDR aarch64_mte_make_ltag (CORE_ADDR value); 40 1.1 christos 41 1.1 christos /* Helper to set the logical TAG for a 64-bit ADDRESS. 42 1.1 christos 43 1.1 christos It is always possible to set the logical tag. */ 44 1.1 christos extern CORE_ADDR aarch64_mte_set_ltag (CORE_ADDR address, CORE_ADDR tag); 45 1.1 christos 46 1.1 christos /* Helper to get the logical tag from a 64-bit ADDRESS. 47 1.1 christos 48 1.1 christos It is always possible to get the logical tag. */ 49 1.1 christos extern CORE_ADDR aarch64_mte_get_ltag (CORE_ADDR address); 50 1.1 christos 51 1.1 christos #endif /* GDB_ARCH_AARCH64_MTE_H */ 52