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