gdb/17347 - Regression: GDB stopped on run with attached process
[deliverable/binutils-gdb.git] / gdb / regcache.h
CommitLineData
4e052eda 1/* Cache and manage the values of registers for GDB, the GNU debugger.
3fadccb3 2
ecd75fc8 3 Copyright (C) 1986-2014 Free Software Foundation, Inc.
4e052eda
AC
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
4e052eda
AC
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/>. */
4e052eda
AC
19
20#ifndef REGCACHE_H
21#define REGCACHE_H
22
3fadccb3
AC
23struct regcache;
24struct gdbarch;
6c95b8df 25struct address_space;
3fadccb3 26
594f7785
UW
27extern struct regcache *get_current_regcache (void);
28extern struct regcache *get_thread_regcache (ptid_t ptid);
c2250ad1 29extern struct regcache *get_thread_arch_regcache (ptid_t, struct gdbarch *);
e2d96639
YQ
30extern struct regcache *get_thread_arch_aspace_regcache (ptid_t,
31 struct gdbarch *,
32 struct address_space *);
3fadccb3
AC
33
34void regcache_xfree (struct regcache *regcache);
36160dc4 35struct cleanup *make_cleanup_regcache_xfree (struct regcache *regcache);
d37346f0
DJ
36struct regcache *regcache_xmalloc (struct gdbarch *gdbarch,
37 struct address_space *aspace);
3fadccb3 38
41d35cb0
MK
39/* Return REGCACHE's architecture. */
40
41extern struct gdbarch *get_regcache_arch (const struct regcache *regcache);
42
6c95b8df
PA
43/* Return REGCACHE's address space. */
44
3e43a32a 45extern struct address_space *get_regcache_aspace (const struct regcache *);
6c95b8df 46
ee99023e
PA
47enum register_status
48 {
49 /* The register value is not in the cache, and we don't know yet
50 whether it's available in the target (or traceframe). */
51 REG_UNKNOWN = 0,
52
53 /* The register value is valid and cached. */
54 REG_VALID = 1,
55
56 /* The register value is unavailable. E.g., we're inspecting a
57 traceframe, and this register wasn't collected. Note that this
58 is different a different "unavailable" from saying the register
59 does not exist in the target's architecture --- in that case,
60 the target should have given us a target description that does
61 not include the register in the first place. */
62 REG_UNAVAILABLE = -1
63 };
64
65enum register_status regcache_register_status (const struct regcache *regcache,
66 int regnum);
67
61a0eb5b 68/* Transfer a raw register [0..NUM_REGS) between core-gdb and the
05d1431c 69 regcache. The read variants return the status of the register. */
61a0eb5b 70
05d1431c
PA
71enum register_status regcache_raw_read (struct regcache *regcache,
72 int rawnum, gdb_byte *buf);
1aaa5f99 73void regcache_raw_write (struct regcache *regcache, int rawnum,
2d522557 74 const gdb_byte *buf);
05d1431c
PA
75extern enum register_status
76 regcache_raw_read_signed (struct regcache *regcache,
77 int regnum, LONGEST *val);
78extern enum register_status
79 regcache_raw_read_unsigned (struct regcache *regcache,
80 int regnum, ULONGEST *val);
c00dcbe9
MK
81extern void regcache_raw_write_signed (struct regcache *regcache,
82 int regnum, LONGEST val);
83extern void regcache_raw_write_unsigned (struct regcache *regcache,
84 int regnum, ULONGEST val);
06c0b04e 85
05d1431c
PA
86/* Partial transfer of raw registers. These perform read, modify,
87 write style operations. The read variant returns the status of the
88 register. */
06c0b04e 89
05d1431c
PA
90extern enum register_status
91 regcache_raw_read_part (struct regcache *regcache, int regnum,
92 int offset, int len, gdb_byte *buf);
06c0b04e 93void regcache_raw_write_part (struct regcache *regcache, int regnum,
2d522557 94 int offset, int len, const gdb_byte *buf);
06c0b04e 95
9c5ea4d9
UW
96void regcache_invalidate (struct regcache *regcache, int regnum);
97
05d1431c
PA
98/* Transfer of pseudo-registers. The read variants return a register
99 status, as an indication of when a ``cooked'' register was
100 constructed from valid, invalid or unavailable ``raw''
101 registers. */
102
68365089 103/* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS). */
05d1431c
PA
104enum register_status regcache_cooked_read (struct regcache *regcache,
105 int rawnum, gdb_byte *buf);
68365089 106void regcache_cooked_write (struct regcache *regcache, int rawnum,
2d522557 107 const gdb_byte *buf);
68365089 108
3543a589
TT
109/* Read register REGNUM from REGCACHE and return a new value. This
110 will call mark_value_bytes_unavailable as appropriate. */
111
112struct value *regcache_cooked_read_value (struct regcache *regcache,
113 int regnum);
114
a378f419 115/* Read a register as a signed/unsigned quantity. */
05d1431c
PA
116extern enum register_status
117 regcache_cooked_read_signed (struct regcache *regcache,
118 int regnum, LONGEST *val);
119extern enum register_status
120 regcache_cooked_read_unsigned (struct regcache *regcache,
121 int regnum, ULONGEST *val);
a66a9c23
AC
122extern void regcache_cooked_write_signed (struct regcache *regcache,
123 int regnum, LONGEST val);
124extern void regcache_cooked_write_unsigned (struct regcache *regcache,
125 int regnum, ULONGEST val);
a378f419 126
06c0b04e
AC
127/* Partial transfer of a cooked register. These perform read, modify,
128 write style operations. */
129
05d1431c
PA
130enum register_status regcache_cooked_read_part (struct regcache *regcache,
131 int regnum, int offset,
132 int len, gdb_byte *buf);
06c0b04e 133void regcache_cooked_write_part (struct regcache *regcache, int regnum,
2d522557 134 int offset, int len, const gdb_byte *buf);
06c0b04e 135
515630c5
UW
136/* Special routines to read/write the PC. */
137
138extern CORE_ADDR regcache_read_pc (struct regcache *regcache);
139extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
140
193cb69f
AC
141/* Transfer a raw register [0..NUM_REGS) between the regcache and the
142 target. These functions are called by the target in response to a
143 target_fetch_registers() or target_store_registers(). */
144
9a661b68 145extern void regcache_raw_supply (struct regcache *regcache,
6618125d 146 int regnum, const void *buf);
9a661b68 147extern void regcache_raw_collect (const struct regcache *regcache,
6618125d 148 int regnum, void *buf);
193cb69f 149
0b309272
AA
150/* Mapping between register numbers and offsets in a buffer, for use
151 in the '*regset' functions below. In an array of
152 'regcache_map_entry' each element is interpreted like follows:
153
154 - If 'regno' is a register number: Map register 'regno' to the
155 current offset (starting with 0) and increase the current offset
156 by 'size' (or the register's size, if 'size' is zero). Repeat
157 this with consecutive register numbers up to 'regno+count-1'.
158
159 - If 'regno' is REGCACHE_MAP_SKIP: Add 'count*size' to the current
160 offset.
161
162 - If count=0: End of the map. */
163
164struct regcache_map_entry
165{
166 int count;
167 int regno;
168 int size;
169};
170
171/* Special value for the 'regno' field in the struct above. */
172
173enum
174 {
175 REGCACHE_MAP_SKIP = -1,
176 };
177
178/* Transfer a set of registers (as described by REGSET) between
179 REGCACHE and BUF. If REGNUM == -1, transfer all registers
180 belonging to the regset, otherwise just the register numbered
181 REGNUM. The REGSET's 'regmap' field must point to an array of
182 'struct regcache_map_entry'.
183
184 These functions are suitable for the 'regset_supply' and
185 'regset_collect' fields in a regset structure. */
186
187extern void regcache_supply_regset (const struct regset *regset,
188 struct regcache *regcache,
189 int regnum, const void *buf,
190 size_t size);
191extern void regcache_collect_regset (const struct regset *regset,
192 const struct regcache *regcache,
193 int regnum, void *buf, size_t size);
194
193cb69f 195
bb425013
AC
196/* The type of a register. This function is slightly more efficient
197 then its gdbarch vector counterpart since it returns a precomputed
01e1877c 198 value stored in a table. */
bb425013
AC
199
200extern struct type *register_type (struct gdbarch *gdbarch, int regnum);
201
202
08a617da 203/* Return the size of register REGNUM. All registers should have only
01e1877c 204 one size. */
08a617da
AC
205
206extern int register_size (struct gdbarch *gdbarch, int regnum);
207
208
5602984a
AC
209/* Save/restore a register cache. The set of registers saved /
210 restored into the DST regcache determined by the save_reggroup /
211 restore_reggroup respectively. COOKED_READ returns zero iff the
212 register's value can't be returned. */
213
05d1431c
PA
214typedef enum register_status (regcache_cooked_read_ftype) (void *src,
215 int regnum,
216 gdb_byte *buf);
5602984a
AC
217
218extern void regcache_save (struct regcache *dst,
219 regcache_cooked_read_ftype *cooked_read,
2d522557 220 void *cooked_read_context);
2d28509a 221
37e71372
AC
222/* Copy/duplicate the contents of a register cache. By default, the
223 operation is pass-through. Writes to DST and reads from SRC will
224 go through to the target.
225
226 The ``cpy'' functions can not have overlapping SRC and DST buffers.
3fadccb3
AC
227
228 ``no passthrough'' versions do not go through to the target. They
37e71372 229 only transfer values already in the cache. */
3fadccb3 230
3fadccb3 231extern struct regcache *regcache_dup (struct regcache *regcache);
3fadccb3 232extern void regcache_cpy (struct regcache *dest, struct regcache *src);
3e43a32a
MS
233extern void regcache_cpy_no_passthrough (struct regcache *dest,
234 struct regcache *src);
3fadccb3 235
4e052eda 236extern void registers_changed (void);
e66408ed 237extern void registers_changed_ptid (ptid_t);
4e052eda 238
4e052eda 239#endif /* REGCACHE_H */
This page took 1.981975 seconds and 4 git commands to generate.