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