Remove regcache_register_status
[external/binutils.git] / gdb / regcache.h
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 *);
34 extern struct regcache *get_thread_arch_aspace_regcache (ptid_t,
35                                                          struct gdbarch *,
36                                                          struct address_space *);
37
38 /* Make certain that the register REGNUM in REGCACHE is up-to-date.  */
39
40 void regcache_raw_update (struct regcache *regcache, int regnum);
41
42 /* Transfer a raw register [0..NUM_REGS) between core-gdb and the
43    regcache.  The read variants return the status of the register.  */
44
45 enum register_status regcache_raw_read (struct regcache *regcache,
46                                         int rawnum, gdb_byte *buf);
47 void regcache_raw_write (struct regcache *regcache, int rawnum,
48                          const gdb_byte *buf);
49 extern enum register_status
50   regcache_raw_read_signed (struct regcache *regcache,
51                             int regnum, LONGEST *val);
52
53 extern void regcache_raw_write_signed (struct regcache *regcache,
54                                        int regnum, LONGEST val);
55 extern void regcache_raw_write_unsigned (struct regcache *regcache,
56                                          int regnum, ULONGEST val);
57
58 /* Return the register's value in signed or throw if it's not
59    available.  */
60
61 extern LONGEST regcache_raw_get_signed (struct regcache *regcache,
62                                         int regnum);
63
64 /* Partial transfer of raw registers.  These perform read, modify,
65    write style operations.  The read variant returns the status of the
66    register.  */
67
68 extern enum register_status
69   regcache_raw_read_part (struct regcache *regcache, int regnum,
70                           int offset, int len, gdb_byte *buf);
71 void regcache_raw_write_part (struct regcache *regcache, int regnum,
72                               int offset, int len, const gdb_byte *buf);
73
74 void regcache_invalidate (struct regcache *regcache, int regnum);
75
76 /* Transfer of pseudo-registers.  The read variants return a register
77    status, as an indication of when a ``cooked'' register was
78    constructed from valid, invalid or unavailable ``raw''
79    registers.  */
80
81 /* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS).  */
82 enum register_status regcache_cooked_read (struct regcache *regcache,
83                                            int rawnum, gdb_byte *buf);
84 void regcache_cooked_write (struct regcache *regcache, int rawnum,
85                             const gdb_byte *buf);
86
87 /* Read register REGNUM from REGCACHE and return a new value.  This
88    will call mark_value_bytes_unavailable as appropriate.  */
89
90 struct value *regcache_cooked_read_value (struct regcache *regcache,
91                                           int regnum);
92
93 /* Read a register as a signed/unsigned quantity.  */
94 extern enum register_status
95   regcache_cooked_read_signed (struct regcache *regcache,
96                                int regnum, LONGEST *val);
97 extern enum register_status
98   regcache_cooked_read_unsigned (struct regcache *regcache,
99                                  int regnum, ULONGEST *val);
100 extern void regcache_cooked_write_signed (struct regcache *regcache,
101                                           int regnum, LONGEST val);
102 extern void regcache_cooked_write_unsigned (struct regcache *regcache,
103                                             int regnum, ULONGEST val);
104
105 /* Partial transfer of a cooked register.  These perform read, modify,
106    write style operations.  */
107
108 enum register_status regcache_cooked_read_part (struct regcache *regcache,
109                                                 int regnum, int offset,
110                                                 int len, gdb_byte *buf);
111 void regcache_cooked_write_part (struct regcache *regcache, int regnum,
112                                  int offset, int len, const gdb_byte *buf);
113
114 /* Special routines to read/write the PC.  */
115
116 /* For regcache_read_pc see common/common-regcache.h.  */
117 extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
118
119 /* Transfer a raw register [0..NUM_REGS) between the regcache and the
120    target.  These functions are called by the target in response to a
121    target_fetch_registers() or target_store_registers().  */
122
123 extern void regcache_raw_supply (struct regcache *regcache,
124                                  int regnum, const void *buf);
125 extern void regcache_raw_collect (const struct regcache *regcache,
126                                   int regnum, void *buf);
127
128 /* Mapping between register numbers and offsets in a buffer, for use
129    in the '*regset' functions below.  In an array of
130    'regcache_map_entry' each element is interpreted like follows:
131
132    - If 'regno' is a register number: Map register 'regno' to the
133      current offset (starting with 0) and increase the current offset
134      by 'size' (or the register's size, if 'size' is zero).  Repeat
135      this with consecutive register numbers up to 'regno+count-1'.
136
137    - If 'regno' is REGCACHE_MAP_SKIP: Add 'count*size' to the current
138      offset.
139
140    - If count=0: End of the map.  */
141
142 struct regcache_map_entry
143 {
144   int count;
145   int regno;
146   int size;
147 };
148
149 /* Special value for the 'regno' field in the struct above.  */
150
151 enum
152   {
153     REGCACHE_MAP_SKIP = -1,
154   };
155
156 /* Transfer a set of registers (as described by REGSET) between
157    REGCACHE and BUF.  If REGNUM == -1, transfer all registers
158    belonging to the regset, otherwise just the register numbered
159    REGNUM.  The REGSET's 'regmap' field must point to an array of
160    'struct regcache_map_entry'.
161
162    These functions are suitable for the 'regset_supply' and
163    'regset_collect' fields in a regset structure.  */
164
165 extern void regcache_supply_regset (const struct regset *regset,
166                                     struct regcache *regcache,
167                                     int regnum, const void *buf,
168                                     size_t size);
169 extern void regcache_collect_regset (const struct regset *regset,
170                                      const struct regcache *regcache,
171                                      int regnum, void *buf, size_t size);
172
173
174 /* The type of a register.  This function is slightly more efficient
175    then its gdbarch vector counterpart since it returns a precomputed
176    value stored in a table.  */
177
178 extern struct type *register_type (struct gdbarch *gdbarch, int regnum);
179
180
181 /* Return the size of register REGNUM.  All registers should have only
182    one size.  */
183    
184 extern int register_size (struct gdbarch *gdbarch, int regnum);
185
186 typedef enum register_status (regcache_cooked_read_ftype) (void *src,
187                                                            int regnum,
188                                                            gdb_byte *buf);
189
190 /* A (register_number, register_value) pair.  */
191
192 typedef struct cached_reg
193 {
194   int num;
195   gdb_byte *data;
196 } cached_reg_t;
197
198 /* Buffer of registers.  */
199
200 class reg_buffer
201 {
202 public:
203   reg_buffer (gdbarch *gdbarch, bool has_pseudo);
204
205   DISABLE_COPY_AND_ASSIGN (reg_buffer);
206
207   /* Return regcache's architecture.  */
208   gdbarch *arch () const;
209
210   /* Get the availability status of the value of register REGNUM in this
211      buffer.  */
212   enum register_status get_register_status (int regnum) const;
213
214   virtual ~reg_buffer ()
215   {
216     xfree (m_registers);
217     xfree (m_register_status);
218   }
219 protected:
220   /* Assert on the range of REGNUM.  */
221   void assert_regnum (int regnum) const;
222
223   int num_raw_registers () const;
224
225   gdb_byte *register_buffer (int regnum) const;
226
227   /* Save a register cache.  The set of registers saved into the
228      regcache determined by the save_reggroup.  COOKED_READ returns
229      zero iff the register's value can't be returned.  */
230   void save (regcache_cooked_read_ftype *cooked_read, void *src);
231
232   struct regcache_descr *m_descr;
233
234   bool m_has_pseudo;
235   /* The register buffers.  */
236   gdb_byte *m_registers;
237   /* Register cache status.  */
238   signed char *m_register_status;
239
240   friend class regcache;
241   friend class detached_regcache;
242 };
243
244 /* An abstract class which only has methods doing read.  */
245
246 class readable_regcache : public reg_buffer
247 {
248 public:
249   readable_regcache (gdbarch *gdbarch, bool has_pseudo)
250     : reg_buffer (gdbarch, has_pseudo)
251   {}
252
253   enum register_status raw_read (int regnum, gdb_byte *buf);
254   template<typename T, typename = RequireLongest<T>>
255   enum register_status raw_read (int regnum, T *val);
256
257   enum register_status raw_read_part (int regnum, int offset, int len,
258                                       gdb_byte *buf);
259
260   virtual void raw_update (int regnum) = 0;
261
262   enum register_status cooked_read (int regnum, gdb_byte *buf);
263   template<typename T, typename = RequireLongest<T>>
264   enum register_status cooked_read (int regnum, T *val);
265
266   enum register_status cooked_read_part (int regnum, int offset, int len,
267                                          gdb_byte *buf);
268
269   struct value *cooked_read_value (int regnum);
270
271 protected:
272   enum register_status read_part (int regnum, int offset, int len, void *in,
273                                   bool is_raw);
274 };
275
276 /* Buffer of registers, can be read and written.  */
277
278 class detached_regcache : public readable_regcache
279 {
280 public:
281   detached_regcache (gdbarch *gdbarch, bool has_pseudo)
282     : readable_regcache (gdbarch, has_pseudo)
283   {}
284
285   void raw_supply (int regnum, const void *buf);
286
287   void raw_supply (int regnum, const reg_buffer &src)
288   {
289     raw_supply (regnum, src.register_buffer (regnum));
290   }
291
292   void raw_update (int regnum) override
293   {}
294
295   void raw_supply_integer (int regnum, const gdb_byte *addr, int addr_len,
296                            bool is_signed);
297
298   void raw_supply_zeroed (int regnum);
299
300   void invalidate (int regnum);
301
302   DISABLE_COPY_AND_ASSIGN (detached_regcache);
303 };
304
305 class readonly_detached_regcache;
306
307 /* The register cache for storing raw register values.  */
308
309 class regcache : public detached_regcache
310 {
311 public:
312   DISABLE_COPY_AND_ASSIGN (regcache);
313
314   /* Return REGCACHE's address space.  */
315   const address_space *aspace () const
316   {
317     return m_aspace;
318   }
319
320   /* Restore 'this' regcache.  The set of registers restored into
321      the regcache determined by the restore_reggroup.
322      Writes to regcache will go through to the target.  SRC is a
323      read-only register cache.  */
324   void restore (readonly_detached_regcache *src);
325
326   void cooked_write (int regnum, const gdb_byte *buf);
327
328   void raw_write (int regnum, const gdb_byte *buf);
329
330   template<typename T, typename = RequireLongest<T>>
331   void raw_write (int regnum, T val);
332
333   template<typename T, typename = RequireLongest<T>>
334   void cooked_write (int regnum, T val);
335
336   void raw_update (int regnum) override;
337
338   void raw_collect (int regnum, void *buf) const;
339
340   void raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
341                             bool is_signed) const;
342
343   void raw_write_part (int regnum, int offset, int len, const gdb_byte *buf);
344
345   void cooked_write_part (int regnum, int offset, int len,
346                           const gdb_byte *buf);
347
348   void supply_regset (const struct regset *regset,
349                       int regnum, const void *buf, size_t size);
350
351
352   void collect_regset (const struct regset *regset, int regnum,
353                        void *buf, size_t size) const;
354
355   /* Return REGCACHE's ptid.  */
356
357   ptid_t ptid () const
358   {
359     gdb_assert (m_ptid != minus_one_ptid);
360
361     return m_ptid;
362   }
363
364   void set_ptid (const ptid_t ptid)
365   {
366     this->m_ptid = ptid;
367   }
368
369 /* Dump the contents of a register from the register cache to the target
370    debug.  */
371   void debug_print_register (const char *func, int regno);
372
373   static void regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid);
374 protected:
375   regcache (gdbarch *gdbarch, const address_space *aspace_);
376   static std::forward_list<regcache *> current_regcache;
377
378 private:
379
380   void transfer_regset (const struct regset *regset,
381                         struct regcache *out_regcache,
382                         int regnum, const void *in_buf,
383                         void *out_buf, size_t size) const;
384
385   enum register_status write_part (int regnum, int offset, int len,
386                                    const void *out, bool is_raw);
387
388
389   /* The address space of this register cache (for registers where it
390      makes sense, like PC or SP).  */
391   const address_space * const m_aspace;
392
393   /* If this is a read-write cache, which thread's registers is
394      it connected to?  */
395   ptid_t m_ptid;
396
397   friend struct regcache *
398   get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch,
399                                    struct address_space *aspace);
400
401   friend void
402   registers_changed_ptid (ptid_t ptid);
403 };
404
405 class readonly_detached_regcache : public readable_regcache
406 {
407 public:
408   readonly_detached_regcache (const regcache &src);
409
410   /* Create a readonly regcache by getting contents from COOKED_READ.  */
411
412   readonly_detached_regcache (gdbarch *gdbarch,
413                               regcache_cooked_read_ftype *cooked_read,
414                               void *src)
415     : readable_regcache (gdbarch, true)
416   {
417     save (cooked_read, src);
418   }
419
420   DISABLE_COPY_AND_ASSIGN (readonly_detached_regcache);
421
422   void raw_update (int regnum) override
423   {}
424 };
425
426 extern void registers_changed (void);
427 extern void registers_changed_ptid (ptid_t);
428
429 /* An abstract base class for register dump.  */
430
431 class register_dump
432 {
433 public:
434   void dump (ui_file *file);
435   virtual ~register_dump () = default;
436
437 protected:
438   register_dump (gdbarch *arch)
439     : m_gdbarch (arch)
440   {}
441
442   /* Dump the register REGNUM contents.  If REGNUM is -1, print the
443      header.  */
444   virtual void dump_reg (ui_file *file, int regnum) = 0;
445
446   gdbarch *m_gdbarch;
447 };
448
449 #endif /* REGCACHE_H */