GDB (xrefs)
/tmp/gdb-8.1/gdb/regcache.h
Go to the documentation of this file.
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2 
3  Copyright (C) 1986-2018 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 REGCACHE_H
21 #define REGCACHE_H
22 
23 #include "common-regcache.h"
24 #include <forward_list>
25 
26 struct regcache;
27 struct regset;
28 struct gdbarch;
29 struct address_space;
30 
31 extern struct regcache *get_current_regcache (void);
32 extern struct regcache *get_thread_regcache (ptid_t ptid);
33 extern struct regcache *get_thread_arch_regcache (ptid_t, struct gdbarch *);
35  struct gdbarch *,
36  struct address_space *);
37 
38 /* Return REGCACHE's ptid. */
39 
40 extern ptid_t regcache_get_ptid (const struct regcache *regcache);
41 
43  int regnum);
44 
45 /* Make certain that the register REGNUM in REGCACHE is up-to-date. */
46 
47 void regcache_raw_update (struct regcache *regcache, int regnum);
48 
49 /* Transfer a raw register [0..NUM_REGS) between core-gdb and the
50  regcache. The read variants return the status of the register. */
51 
53  int rawnum, gdb_byte *buf);
54 void regcache_raw_write (struct regcache *regcache, int rawnum,
55  const gdb_byte *buf);
56 extern enum register_status
58  int regnum, LONGEST *val);
59 
60 extern void regcache_raw_write_signed (struct regcache *regcache,
61  int regnum, LONGEST val);
62 extern void regcache_raw_write_unsigned (struct regcache *regcache,
63  int regnum, ULONGEST val);
64 
65 /* Return the register's value in signed or throw if it's not
66  available. */
67 
69  int regnum);
70 
71 /* Set a raw register's value in the regcache's buffer. Unlike
72  regcache_raw_write, this is not write-through. The intention is
73  allowing to change the buffer contents of a read-only regcache
74  allocated with new. */
75 
77  (struct regcache *regcache, int regnum, const gdb_byte *buf);
78 
79 /* Partial transfer of raw registers. These perform read, modify,
80  write style operations. The read variant returns the status of the
81  register. */
82 
83 extern enum register_status
85  int offset, int len, gdb_byte *buf);
87  int offset, int len, const gdb_byte *buf);
88 
89 void regcache_invalidate (struct regcache *regcache, int regnum);
90 
91 /* Transfer of pseudo-registers. The read variants return a register
92  status, as an indication of when a ``cooked'' register was
93  constructed from valid, invalid or unavailable ``raw''
94  registers. */
95 
96 /* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS). */
98  int rawnum, gdb_byte *buf);
99 void regcache_cooked_write (struct regcache *regcache, int rawnum,
100  const gdb_byte *buf);
101 
102 /* Read register REGNUM from REGCACHE and return a new value. This
103  will call mark_value_bytes_unavailable as appropriate. */
104 
106  int regnum);
107 
108 /* Read a register as a signed/unsigned quantity. */
109 extern enum register_status
111  int regnum, LONGEST *val);
112 extern enum register_status
114  int regnum, ULONGEST *val);
115 extern void regcache_cooked_write_signed (struct regcache *regcache,
116  int regnum, LONGEST val);
118  int regnum, ULONGEST val);
119 
120 /* Partial transfer of a cooked register. These perform read, modify,
121  write style operations. */
122 
124  int regnum, int offset,
125  int len, gdb_byte *buf);
127  int offset, int len, const gdb_byte *buf);
128 
129 /* Special routines to read/write the PC. */
130 
131 /* For regcache_read_pc see common/common-regcache.h. */
132 extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
133 
134 /* Transfer a raw register [0..NUM_REGS) between the regcache and the
135  target. These functions are called by the target in response to a
136  target_fetch_registers() or target_store_registers(). */
137 
138 extern void regcache_raw_supply (struct regcache *regcache,
139  int regnum, const void *buf);
140 extern void regcache_raw_collect (const struct regcache *regcache,
141  int regnum, void *buf);
142 
143 /* Mapping between register numbers and offsets in a buffer, for use
144  in the '*regset' functions below. In an array of
145  'regcache_map_entry' each element is interpreted like follows:
146 
147  - If 'regno' is a register number: Map register 'regno' to the
148  current offset (starting with 0) and increase the current offset
149  by 'size' (or the register's size, if 'size' is zero). Repeat
150  this with consecutive register numbers up to 'regno+count-1'.
151 
152  - If 'regno' is REGCACHE_MAP_SKIP: Add 'count*size' to the current
153  offset.
154 
155  - If count=0: End of the map. */
156 
158 {
159  int count;
160  int regno;
161  int size;
162 };
163 
164 /* Special value for the 'regno' field in the struct above. */
165 
166 enum
167  {
169  };
170 
171 /* Transfer a set of registers (as described by REGSET) between
172  REGCACHE and BUF. If REGNUM == -1, transfer all registers
173  belonging to the regset, otherwise just the register numbered
174  REGNUM. The REGSET's 'regmap' field must point to an array of
175  'struct regcache_map_entry'.
176 
177  These functions are suitable for the 'regset_supply' and
178  'regset_collect' fields in a regset structure. */
179 
180 extern void regcache_supply_regset (const struct regset *regset,
181  struct regcache *regcache,
182  int regnum, const void *buf,
183  size_t size);
184 extern void regcache_collect_regset (const struct regset *regset,
185  const struct regcache *regcache,
186  int regnum, void *buf, size_t size);
187 
188 
189 /* The type of a register. This function is slightly more efficient
190  then its gdbarch vector counterpart since it returns a precomputed
191  value stored in a table. */
192 
193 extern struct type *register_type (struct gdbarch *gdbarch, int regnum);
194 
195 
196 /* Return the size of register REGNUM. All registers should have only
197  one size. */
198 
199 extern int register_size (struct gdbarch *gdbarch, int regnum);
200 
201 
202 /* Save/restore a register cache. The set of registers saved /
203  restored into the DST regcache determined by the save_reggroup /
204  restore_reggroup respectively. COOKED_READ returns zero iff the
205  register's value can't be returned. */
206 
207 typedef enum register_status (regcache_cooked_read_ftype) (void *src,
208  int regnum,
209  gdb_byte *buf);
210 
211 extern void regcache_save (struct regcache *dst,
212  regcache_cooked_read_ftype *cooked_read,
213  void *cooked_read_context);
214 
216 {
220 };
221 
222 /* A (register_number, register_value) pair. */
223 
224 typedef struct cached_reg
225 {
226  int num;
228 } cached_reg_t;
229 
230 /* The register cache for storing raw register values. */
231 
232 class regcache
233 {
234 public:
236  : regcache (gdbarch, nullptr, true)
237  {}
238 
239  struct readonly_t {};
240  static constexpr readonly_t readonly {};
241 
242  /* Create a readonly regcache from a non-readonly regcache. */
243  regcache (readonly_t, const regcache &src);
244 
246 
248  {
249  xfree (m_registers);
251  }
252 
253  /* Return regcache's architecture. */
254  gdbarch *arch () const;
255 
256  /* Return REGCACHE's address space. */
257  const address_space *aspace () const
258  {
259  return m_aspace;
260  }
261 
262  void save (regcache_cooked_read_ftype *cooked_read, void *src);
263 
264  enum register_status cooked_read (int regnum, gdb_byte *buf);
265  void cooked_write (int regnum, const gdb_byte *buf);
266 
267  enum register_status raw_read (int regnum, gdb_byte *buf);
268 
269  void raw_write (int regnum, const gdb_byte *buf);
270 
271  template<typename T, typename = RequireLongest<T>>
272  enum register_status raw_read (int regnum, T *val);
273 
274  template<typename T, typename = RequireLongest<T>>
275  void raw_write (int regnum, T val);
276 
277  struct value *cooked_read_value (int regnum);
278 
279  template<typename T, typename = RequireLongest<T>>
280  enum register_status cooked_read (int regnum, T *val);
281 
282  template<typename T, typename = RequireLongest<T>>
283  void cooked_write (int regnum, T val);
284 
285  void raw_update (int regnum);
286 
287  void raw_collect (int regnum, void *buf) const;
288 
289  void raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
290  bool is_signed) const;
291 
292  void raw_supply (int regnum, const void *buf);
293 
294  void raw_supply_integer (int regnum, const gdb_byte *addr, int addr_len,
295  bool is_signed);
296 
297  void raw_supply_zeroed (int regnum);
298 
299  enum register_status get_register_status (int regnum) const;
300 
301  void raw_set_cached_value (int regnum, const gdb_byte *buf);
302 
303  void invalidate (int regnum);
304 
305  enum register_status raw_read_part (int regnum, int offset, int len,
306  gdb_byte *buf);
307 
308  void raw_write_part (int regnum, int offset, int len, const gdb_byte *buf);
309 
310  enum register_status cooked_read_part (int regnum, int offset, int len,
311  gdb_byte *buf);
312 
313  void cooked_write_part (int regnum, int offset, int len,
314  const gdb_byte *buf);
315 
316  void supply_regset (const struct regset *regset,
317  int regnum, const void *buf, size_t size);
318 
319 
320  void collect_regset (const struct regset *regset, int regnum,
321  void *buf, size_t size) const;
322 
323  void dump (ui_file *file, enum regcache_dump_what what_to_dump);
324 
325  ptid_t ptid () const
326  {
327  return m_ptid;
328  }
329 
330  void set_ptid (const ptid_t ptid)
331  {
332  this->m_ptid = ptid;
333  }
334 
335 /* Dump the contents of a register from the register cache to the target
336  debug. */
337  void debug_print_register (const char *func, int regno);
338 
339  static void regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid);
340 protected:
341  regcache (gdbarch *gdbarch, const address_space *aspace_, bool readonly_p_);
342 
343  int num_raw_registers () const;
344 
345  static std::forward_list<regcache *> current_regcache;
346 
347 private:
348  gdb_byte *register_buffer (int regnum) const;
349 
350  void restore (struct regcache *src);
351 
352  enum register_status xfer_part (int regnum, int offset, int len, void *in,
353  const void *out, bool is_raw);
354 
355  void transfer_regset (const struct regset *regset,
356  struct regcache *out_regcache,
357  int regnum, const void *in_buf,
358  void *out_buf, size_t size) const;
359 
360  /* Assert on the range of REGNUM. */
361  void assert_regnum (int regnum) const;
362 
364 
365  /* The address space of this register cache (for registers where it
366  makes sense, like PC or SP). */
367  const address_space * const m_aspace;
368 
369  /* The register buffers. A read-only register cache can hold the
370  full [0 .. gdbarch_num_regs + gdbarch_num_pseudo_regs) while a read/write
371  register cache can only hold [0 .. gdbarch_num_regs). */
373  /* Register cache status. */
374  signed char *m_register_status;
375  /* Is this a read-only cache? A read-only cache is used for saving
376  the target's register state (e.g, across an inferior function
377  call or just before forcing a function return). A read-only
378  cache can only be updated via the methods regcache_dup() and
379  regcache_cpy(). The actual contents are determined by the
380  reggroup_save and reggroup_restore methods. */
381  const bool m_readonly_p;
382  /* If this is a read-write cache, which thread's registers is
383  it connected to? */
385 
386  friend struct regcache *
388  struct address_space *aspace);
389 
390  friend void
392 
393  friend void
394  regcache_cpy (struct regcache *dst, struct regcache *src);
395 };
396 
397 /* Duplicate the contents of a register cache to a read-only register
398  cache. The operation is pass-through. */
399 extern struct regcache *regcache_dup (struct regcache *regcache);
400 
401 /* Writes to DEST will go through to the target. SRC is a read-only
402  register cache. */
403 extern void regcache_cpy (struct regcache *dest, struct regcache *src);
404 
405 extern void registers_changed (void);
406 extern void registers_changed_ptid (ptid_t);
407 
408 #endif /* REGCACHE_H */
enum register_status regcache_raw_read(struct regcache *regcache, int rawnum, gdb_byte *buf)
Definition: regcache.c:565
enum register_status cooked_read(int regnum, gdb_byte *buf)
Definition: regcache.c:667
int num_raw_registers() const
Definition: regcache.c:1275
regcache_dump_what
Definition: regcache.h:215
enum register_status raw_read(int regnum, gdb_byte *buf)
Definition: regcache.c:571
const address_space *const m_aspace
Definition: regcache.h:367
bfd_vma CORE_ADDR
Definition: common-types.h:41
void cooked_write_part(int regnum, int offset, int len, const gdb_byte *buf)
Definition: regcache.c:994
void regcache_raw_collect(const struct regcache *regcache, int regnum, void *buf)
Definition: regcache.c:1085
void xfree(void *)
void regcache_cooked_write(struct regcache *regcache, int rawnum, const gdb_byte *buf)
Definition: regcache.c:873
struct value * cooked_read_value(int regnum)
Definition: regcache.c:720
static void regcache_thread_ptid_changed(ptid_t old_ptid, ptid_t new_ptid)
Definition: regcache.c:470
void(* func)(char *)
void supply_regset(const struct regset *regset, int regnum, const void *buf, size_t size)
Definition: regcache.c:1200
regcache(gdbarch *gdbarch)
Definition: regcache.h:235
struct regcache * get_current_regcache(void)
Definition: regcache.c:446
void regcache_raw_update(struct regcache *regcache, int regnum)
Definition: regcache.c:535
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:806
void raw_write(int regnum, const gdb_byte *buf)
Definition: regcache.c:839
void regcache_collect_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
Definition: regcache.c:1211
enum register_status raw_read_part(int regnum, int offset, int len, gdb_byte *buf)
Definition: regcache.c:950
void regcache_cooked_write_signed(struct regcache *regcache, int regnum, LONGEST val)
Definition: regcache.c:785
void save(regcache_cooked_read_ftype *cooked_read, void *src)
Definition: regcache.c:283
gdb_byte * register_buffer(int regnum) const
Definition: regcache.c:270
register_status
struct cached_reg cached_reg_t
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
Definition: regcache.c:777
void assert_regnum(int regnum) const
Definition: regcache.c:393
struct regcache * get_thread_regcache(ptid_t ptid)
Definition: regcache.c:434
void set_ptid(const ptid_t ptid)
Definition: regcache.h:330
int count
Definition: regcache.h:159
struct value * regcache_cooked_read_value(struct regcache *regcache, int regnum)
Definition: regcache.c:714
void regcache_save(struct regcache *dst, regcache_cooked_read_ftype *cooked_read, void *cooked_read_context)
Definition: regcache.c:276
static constexpr readonly_t readonly
Definition: regcache.h:240
void raw_supply_integer(int regnum, const gdb_byte *addr, int addr_len, bool is_signed)
Definition: regcache.c:1044
void regcache_raw_write_signed(struct regcache *regcache, int regnum, LONGEST val)
Definition: regcache.c:620
enum register_status regcache_cooked_read_signed(struct regcache *regcache, int regnum, LONGEST *val)
Definition: regcache.c:751
struct regcache_descr * m_descr
Definition: regcache.h:363
struct type * register_type(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:152
const bool m_readonly_p
Definition: regcache.h:381
enum register_status xfer_part(int regnum, int offset, int len, void *in, const void *out, bool is_raw)
Definition: regcache.c:900
Definition: regset.h:34
void restore(struct regcache *src)
Definition: regcache.c:318
void regcache_write_pc(struct regcache *regcache, CORE_ADDR pc)
Definition: regcache.c:1256
struct regcache * get_thread_arch_regcache(ptid_t, struct gdbarch *)
Definition: regcache.c:423
void raw_collect(int regnum, void *buf) const
Definition: regcache.c:1092
enum register_status regcache_cooked_read_part(struct regcache *regcache, int regnum, int offset, int len, gdb_byte *buf)
Definition: regcache.c:972
enum register_status regcache_raw_read_signed(struct regcache *regcache, int regnum, LONGEST *val)
Definition: regcache.c:586
void raw_supply(int regnum, const void *buf)
Definition: regcache.c:1011
void raw_write_part(int regnum, int offset, int len, const gdb_byte *buf)
Definition: regcache.c:964
void regcache_cooked_write_part(struct regcache *regcache, int regnum, int offset, int len, const gdb_byte *buf)
Definition: regcache.c:987
Definition: ptid.h:35
void regcache_raw_supply(struct regcache *regcache, int regnum, const void *buf)
Definition: regcache.c:1004
int size
Definition: regcache.h:161
enum register_status regcache_raw_read_part(struct regcache *regcache, int regnum, int offset, int len, gdb_byte *buf)
Definition: regcache.c:943
int register_size(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:164
void regcache_raw_write(struct regcache *regcache, int rawnum, const gdb_byte *buf)
Definition: regcache.c:831
void transfer_regset(const struct regset *regset, struct regcache *out_regcache, int regnum, const void *in_buf, void *out_buf, size_t size) const
Definition: regcache.c:1133
void raw_collect_integer(int regnum, gdb_byte *addr, int addr_len, bool is_signed) const
Definition: regcache.c:1116
Definition: gdbtypes.h:749
void raw_set_cached_value(int regnum, const gdb_byte *buf)
Definition: regcache.c:823
~regcache()
Definition: regcache.h:247
void regcache_raw_set_cached_value(struct regcache *regcache, int regnum, const gdb_byte *buf)
Definition: regcache.c:816
void raw_supply_zeroed(int regnum)
Definition: regcache.c:1067
void regcache_invalidate(struct regcache *regcache, int regnum)
Definition: regcache.c:378
int regnum
Definition: aarch64-tdep.c:77
friend void regcache_cpy(struct regcache *dst, struct regcache *src)
Definition: regcache.c:342
void collect_regset(const struct regset *regset, int regnum, void *buf, size_t size) const
Definition: regcache.c:1219
const address_space * aspace() const
Definition: regcache.h:257
void registers_changed(void)
Definition: regcache.c:522
enum register_status regcache_register_status(const struct regcache *regcache, int regnum)
Definition: regcache.c:359
static std::forward_list< regcache * > current_regcache
Definition: regcache.h:345
Definition: value.c:169
friend void registers_changed_ptid(ptid_t ptid)
Definition: regcache.c:491
void regcache_raw_write_part(struct regcache *regcache, int regnum, int offset, int len, const gdb_byte *buf)
Definition: regcache.c:957
friend struct regcache * get_thread_arch_aspace_regcache(ptid_t ptid, struct gdbarch *gdbarch, struct address_space *aspace)
Definition: regcache.c:407
enum register_status get_register_status(int regnum) const
Definition: regcache.c:366
LONGEST regcache_raw_get_signed(struct regcache *regcache, int regnum)
Definition: regcache.c:648
bfd_byte gdb_byte
Definition: common-types.h:38
void registers_changed_ptid(ptid_t)
Definition: regcache.c:491
void regcache_cpy(struct regcache *dest, struct regcache *src)
Definition: regcache.c:342
struct regcache * get_thread_arch_aspace_regcache(ptid_t, struct gdbarch *, struct address_space *)
Definition: regcache.c:407
void debug_print_register(const char *func, int regno)
Definition: regcache.c:1281
struct regcache * regcache_dup(struct regcache *regcache)
Definition: regcache.c:353
int offset
Definition: agent.c:65
enum register_status cooked_read_part(int regnum, int offset, int len, gdb_byte *buf)
Definition: regcache.c:980
gdb_byte * m_registers
Definition: regcache.h:372
gdbarch * arch() const
Definition: regcache.c:221
void cooked_write(int regnum, const gdb_byte *buf)
Definition: regcache.c:880
enum register_status() regcache_cooked_read_ftype(void *src, int regnum, gdb_byte *buf)
void dump(ui_file *file, enum regcache_dump_what what_to_dump)
Definition: regcache.c:1325
void regcache_raw_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:640
unsigned long long ULONGEST
Definition: common-types.h:53
enum register_status regcache_cooked_read(struct regcache *regcache, int rawnum, gdb_byte *buf)
Definition: regcache.c:661
DISABLE_COPY_AND_ASSIGN(regcache)
int regno
Definition: regcache.h:160
gdb_byte * data
Definition: regcache.h:227
void raw_update(int regnum)
Definition: regcache.c:543
ptid_t m_ptid
Definition: regcache.h:384
ptid_t ptid() const
Definition: regcache.h:325
void regcache_supply_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
Definition: regcache.c:1192
signed char * m_register_status
Definition: regcache.h:374
void invalidate(int regnum)
Definition: regcache.c:385
size_t size
Definition: go32-nat.c:242
long long LONGEST
Definition: common-types.h:52
Definition: regcache.h:157
ptid_t regcache_get_ptid(const struct regcache *regcache)
Definition: regcache.c:229