1 1.1 christos /* Memory attributes support, for GDB. 2 1.1 christos 3 1.11 christos Copyright (C) 2001-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.12 christos #ifndef GDB_MEMATTR_H 21 1.12 christos #define GDB_MEMATTR_H 22 1.1 christos 23 1.1 christos enum mem_access_mode 24 1.1 christos { 25 1.1 christos MEM_NONE, /* Memory that is not physically present. */ 26 1.1 christos MEM_RW, /* read/write */ 27 1.1 christos MEM_RO, /* read only */ 28 1.1 christos MEM_WO, /* write only */ 29 1.1 christos 30 1.1 christos /* Read/write, but special steps are required to write to it. */ 31 1.1 christos MEM_FLASH 32 1.1 christos }; 33 1.1 christos 34 1.1 christos enum mem_access_width 35 1.1 christos { 36 1.1 christos MEM_WIDTH_UNSPECIFIED, 37 1.1 christos MEM_WIDTH_8, /* 8 bit accesses */ 38 1.1 christos MEM_WIDTH_16, /* 16 " " */ 39 1.1 christos MEM_WIDTH_32, /* 32 " " */ 40 1.1 christos MEM_WIDTH_64 /* 64 " " */ 41 1.1 christos }; 42 1.1 christos 43 1.1 christos /* The set of all attributes that can be set for a memory region. 44 1.1 christos 45 1.1 christos This structure was created so that memory attributes can be passed 46 1.1 christos to target_ functions without exposing the details of memory region 47 1.1 christos list, which would be necessary if these fields were simply added to 48 1.1 christos the mem_region structure. 49 1.1 christos 50 1.1 christos FIXME: It would be useful if there was a mechanism for targets to 51 1.1 christos add their own attributes. For example, the number of wait states. */ 52 1.1 christos 53 1.1 christos struct mem_attrib 54 1.1 christos { 55 1.8 christos static mem_attrib unknown () 56 1.8 christos { 57 1.8 christos mem_attrib attrib; 58 1.8 christos 59 1.8 christos attrib.mode = MEM_NONE; 60 1.8 christos 61 1.8 christos return attrib; 62 1.8 christos } 63 1.8 christos 64 1.1 christos /* read/write, read-only, or write-only */ 65 1.8 christos enum mem_access_mode mode = MEM_RW; 66 1.1 christos 67 1.8 christos enum mem_access_width width = MEM_WIDTH_UNSPECIFIED; 68 1.1 christos 69 1.1 christos /* enables hardware breakpoints */ 70 1.8 christos int hwbreak = 0; 71 1.1 christos 72 1.1 christos /* enables host-side caching of memory region data */ 73 1.8 christos int cache = 0; 74 1.1 christos 75 1.1 christos /* Enables memory verification. After a write, memory is re-read 76 1.1 christos to verify that the write was successful. */ 77 1.8 christos int verify = 0; 78 1.1 christos 79 1.1 christos /* Block size. Only valid if mode == MEM_FLASH. */ 80 1.8 christos int blocksize = -1; 81 1.1 christos }; 82 1.1 christos 83 1.1 christos struct mem_region 84 1.1 christos { 85 1.8 christos /* Create a mem_region with default attributes. */ 86 1.8 christos 87 1.8 christos mem_region (CORE_ADDR lo_, CORE_ADDR hi_) 88 1.8 christos : lo (lo_), hi (hi_) 89 1.8 christos {} 90 1.8 christos 91 1.8 christos /* Create a mem_region with access mode MODE_, but otherwise default 92 1.8 christos attributes. */ 93 1.8 christos 94 1.8 christos mem_region (CORE_ADDR lo_, CORE_ADDR hi_, mem_access_mode mode_) 95 1.8 christos : lo (lo_), hi (hi_) 96 1.8 christos { 97 1.8 christos attrib.mode = mode_; 98 1.8 christos } 99 1.8 christos 100 1.8 christos /* Create a mem_region with attributes ATTRIB_. */ 101 1.8 christos 102 1.8 christos mem_region (CORE_ADDR lo_, CORE_ADDR hi_, const mem_attrib &attrib_) 103 1.8 christos : lo (lo_), hi (hi_), attrib (attrib_) 104 1.8 christos {} 105 1.8 christos 106 1.8 christos bool operator< (const mem_region &other) const 107 1.8 christos { 108 1.8 christos return this->lo < other.lo; 109 1.8 christos } 110 1.8 christos 111 1.1 christos /* Lowest address in the region. */ 112 1.1 christos CORE_ADDR lo; 113 1.1 christos /* Address past the highest address of the region. 114 1.1 christos If 0, upper bound is "infinity". */ 115 1.1 christos CORE_ADDR hi; 116 1.1 christos 117 1.1 christos /* Item number of this memory region. */ 118 1.8 christos int number = 0; 119 1.1 christos 120 1.8 christos /* Status of this memory region (enabled if true, otherwise 121 1.1 christos disabled). */ 122 1.8 christos bool enabled_p = true; 123 1.1 christos 124 1.1 christos /* Attributes for this region. */ 125 1.8 christos mem_attrib attrib; 126 1.1 christos }; 127 1.1 christos 128 1.8 christos extern struct mem_region *lookup_mem_region (CORE_ADDR); 129 1.1 christos 130 1.1 christos void invalidate_target_mem_regions (void); 131 1.1 christos 132 1.12 christos #endif /* GDB_MEMATTR_H */ 133