Home | History | Annotate | Line # | Download | only in arch
aarch64-mte.h revision 1.1
      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