Remove regcache_get_ptid
[external/binutils.git] / gdb / regcache.c
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 #include "defs.h"
21 #include "inferior.h"
22 #include "target.h"
23 #include "gdbarch.h"
24 #include "gdbcmd.h"
25 #include "regcache.h"
26 #include "reggroups.h"
27 #include "observable.h"
28 #include "regset.h"
29 #include <forward_list>
30
31 /*
32  * DATA STRUCTURE
33  *
34  * Here is the actual register cache.
35  */
36
37 /* Per-architecture object describing the layout of a register cache.
38    Computed once when the architecture is created.  */
39
40 struct gdbarch_data *regcache_descr_handle;
41
42 struct regcache_descr
43 {
44   /* The architecture this descriptor belongs to.  */
45   struct gdbarch *gdbarch;
46
47   /* The raw register cache.  Each raw (or hard) register is supplied
48      by the target interface.  The raw cache should not contain
49      redundant information - if the PC is constructed from two
50      registers then those registers and not the PC lives in the raw
51      cache.  */
52   long sizeof_raw_registers;
53
54   /* The cooked register space.  Each cooked register in the range
55      [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
56      register.  The remaining [NR_RAW_REGISTERS
57      .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
58      both raw registers and memory by the architecture methods
59      gdbarch_pseudo_register_read and gdbarch_pseudo_register_write.  */
60   int nr_cooked_registers;
61   long sizeof_cooked_registers;
62
63   /* Offset and size (in 8 bit bytes), of each register in the
64      register cache.  All registers (including those in the range
65      [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an
66      offset.  */
67   long *register_offset;
68   long *sizeof_register;
69
70   /* Cached table containing the type of each register.  */
71   struct type **register_type;
72 };
73
74 static void *
75 init_regcache_descr (struct gdbarch *gdbarch)
76 {
77   int i;
78   struct regcache_descr *descr;
79   gdb_assert (gdbarch != NULL);
80
81   /* Create an initial, zero filled, table.  */
82   descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr);
83   descr->gdbarch = gdbarch;
84
85   /* Total size of the register space.  The raw registers are mapped
86      directly onto the raw register cache while the pseudo's are
87      either mapped onto raw-registers or memory.  */
88   descr->nr_cooked_registers = gdbarch_num_regs (gdbarch)
89                                + gdbarch_num_pseudo_regs (gdbarch);
90
91   /* Fill in a table of register types.  */
92   descr->register_type
93     = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
94                               struct type *);
95   for (i = 0; i < descr->nr_cooked_registers; i++)
96     descr->register_type[i] = gdbarch_register_type (gdbarch, i);
97
98   /* Construct a strictly RAW register cache.  Don't allow pseudo's
99      into the register cache.  */
100
101   /* Lay out the register cache.
102
103      NOTE: cagney/2002-05-22: Only register_type() is used when
104      constructing the register cache.  It is assumed that the
105      register's raw size, virtual size and type length are all the
106      same.  */
107
108   {
109     long offset = 0;
110
111     descr->sizeof_register
112       = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
113     descr->register_offset
114       = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
115     for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
116       {
117         descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
118         descr->register_offset[i] = offset;
119         offset += descr->sizeof_register[i];
120       }
121     /* Set the real size of the raw register cache buffer.  */
122     descr->sizeof_raw_registers = offset;
123
124     for (; i < descr->nr_cooked_registers; i++)
125       {
126         descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
127         descr->register_offset[i] = offset;
128         offset += descr->sizeof_register[i];
129       }
130     /* Set the real size of the readonly register cache buffer.  */
131     descr->sizeof_cooked_registers = offset;
132   }
133
134   return descr;
135 }
136
137 static struct regcache_descr *
138 regcache_descr (struct gdbarch *gdbarch)
139 {
140   return (struct regcache_descr *) gdbarch_data (gdbarch,
141                                                  regcache_descr_handle);
142 }
143
144 /* Utility functions returning useful register attributes stored in
145    the regcache descr.  */
146
147 struct type *
148 register_type (struct gdbarch *gdbarch, int regnum)
149 {
150   struct regcache_descr *descr = regcache_descr (gdbarch);
151
152   gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
153   return descr->register_type[regnum];
154 }
155
156 /* Utility functions returning useful register attributes stored in
157    the regcache descr.  */
158
159 int
160 register_size (struct gdbarch *gdbarch, int regnum)
161 {
162   struct regcache_descr *descr = regcache_descr (gdbarch);
163   int size;
164
165   gdb_assert (regnum >= 0
166               && regnum < (gdbarch_num_regs (gdbarch)
167                            + gdbarch_num_pseudo_regs (gdbarch)));
168   size = descr->sizeof_register[regnum];
169   return size;
170 }
171
172 /* See common/common-regcache.h.  */
173
174 int
175 regcache_register_size (const struct regcache *regcache, int n)
176 {
177   return register_size (regcache->arch (), n);
178 }
179
180 reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
181   : m_has_pseudo (has_pseudo)
182 {
183   gdb_assert (gdbarch != NULL);
184   m_descr = regcache_descr (gdbarch);
185
186   if (has_pseudo)
187     {
188       m_registers = XCNEWVEC (gdb_byte, m_descr->sizeof_cooked_registers);
189       m_register_status = XCNEWVEC (signed char,
190                                     m_descr->nr_cooked_registers);
191     }
192   else
193     {
194       m_registers = XCNEWVEC (gdb_byte, m_descr->sizeof_raw_registers);
195       m_register_status = XCNEWVEC (signed char, gdbarch_num_regs (gdbarch));
196     }
197 }
198
199 regcache::regcache (gdbarch *gdbarch, const address_space *aspace_)
200 /* The register buffers.  A read/write register cache can only hold
201    [0 .. gdbarch_num_regs).  */
202   : detached_regcache (gdbarch, false), m_aspace (aspace_)
203 {
204   m_ptid = minus_one_ptid;
205 }
206
207 static enum register_status
208 do_cooked_read (void *src, int regnum, gdb_byte *buf)
209 {
210   struct regcache *regcache = (struct regcache *) src;
211
212   return regcache_cooked_read (regcache, regnum, buf);
213 }
214
215 readonly_detached_regcache::readonly_detached_regcache (const regcache &src)
216   : readonly_detached_regcache (src.arch (), do_cooked_read, (void *) &src)
217 {
218 }
219
220 gdbarch *
221 reg_buffer::arch () const
222 {
223   return m_descr->gdbarch;
224 }
225
226 /* Cleanup class for invalidating a register.  */
227
228 class regcache_invalidator
229 {
230 public:
231
232   regcache_invalidator (struct regcache *regcache, int regnum)
233     : m_regcache (regcache),
234       m_regnum (regnum)
235   {
236   }
237
238   ~regcache_invalidator ()
239   {
240     if (m_regcache != nullptr)
241       regcache_invalidate (m_regcache, m_regnum);
242   }
243
244   DISABLE_COPY_AND_ASSIGN (regcache_invalidator);
245
246   void release ()
247   {
248     m_regcache = nullptr;
249   }
250
251 private:
252
253   struct regcache *m_regcache;
254   int m_regnum;
255 };
256
257 /* Return  a pointer to register REGNUM's buffer cache.  */
258
259 gdb_byte *
260 reg_buffer::register_buffer (int regnum) const
261 {
262   return m_registers + m_descr->register_offset[regnum];
263 }
264
265 void
266 reg_buffer::save (regcache_cooked_read_ftype *cooked_read,
267                   void *src)
268 {
269   struct gdbarch *gdbarch = m_descr->gdbarch;
270   int regnum;
271
272   /* It should have pseudo registers.  */
273   gdb_assert (m_has_pseudo);
274   /* Clear the dest.  */
275   memset (m_registers, 0, m_descr->sizeof_cooked_registers);
276   memset (m_register_status, 0, m_descr->nr_cooked_registers);
277   /* Copy over any registers (identified by their membership in the
278      save_reggroup) and mark them as valid.  The full [0 .. gdbarch_num_regs +
279      gdbarch_num_pseudo_regs) range is checked since some architectures need
280      to save/restore `cooked' registers that live in memory.  */
281   for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
282     {
283       if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
284         {
285           gdb_byte *dst_buf = register_buffer (regnum);
286           enum register_status status = cooked_read (src, regnum, dst_buf);
287
288           gdb_assert (status != REG_UNKNOWN);
289
290           if (status != REG_VALID)
291             memset (dst_buf, 0, register_size (gdbarch, regnum));
292
293           m_register_status[regnum] = status;
294         }
295     }
296 }
297
298 void
299 regcache::restore (readonly_detached_regcache *src)
300 {
301   struct gdbarch *gdbarch = m_descr->gdbarch;
302   int regnum;
303
304   gdb_assert (src != NULL);
305   gdb_assert (src->m_has_pseudo);
306
307   gdb_assert (gdbarch == src->arch ());
308
309   /* Copy over any registers, being careful to only restore those that
310      were both saved and need to be restored.  The full [0 .. gdbarch_num_regs
311      + gdbarch_num_pseudo_regs) range is checked since some architectures need
312      to save/restore `cooked' registers that live in memory.  */
313   for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
314     {
315       if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
316         {
317           if (src->m_register_status[regnum] == REG_VALID)
318             cooked_write (regnum, src->register_buffer (regnum));
319         }
320     }
321 }
322
323 enum register_status
324 regcache_register_status (const struct regcache *regcache, int regnum)
325 {
326   gdb_assert (regcache != NULL);
327   return regcache->get_register_status (regnum);
328 }
329
330 enum register_status
331 reg_buffer::get_register_status (int regnum) const
332 {
333   assert_regnum (regnum);
334
335   return (enum register_status) m_register_status[regnum];
336 }
337
338 void
339 regcache_invalidate (struct regcache *regcache, int regnum)
340 {
341   gdb_assert (regcache != NULL);
342   regcache->invalidate (regnum);
343 }
344
345 void
346 detached_regcache::invalidate (int regnum)
347 {
348   assert_regnum (regnum);
349   m_register_status[regnum] = REG_UNKNOWN;
350 }
351
352 void
353 reg_buffer::assert_regnum (int regnum) const
354 {
355   gdb_assert (regnum >= 0);
356   if (m_has_pseudo)
357     gdb_assert (regnum < m_descr->nr_cooked_registers);
358   else
359     gdb_assert (regnum < gdbarch_num_regs (arch ()));
360 }
361
362 /* Global structure containing the current regcache.  */
363
364 /* NOTE: this is a write-through cache.  There is no "dirty" bit for
365    recording if the register values have been changed (eg. by the
366    user).  Therefore all registers must be written back to the
367    target when appropriate.  */
368 std::forward_list<regcache *> regcache::current_regcache;
369
370 struct regcache *
371 get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch,
372                                  struct address_space *aspace)
373 {
374   for (const auto &regcache : regcache::current_regcache)
375     if (ptid_equal (regcache->ptid (), ptid) && regcache->arch () == gdbarch)
376       return regcache;
377
378   regcache *new_regcache = new regcache (gdbarch, aspace);
379
380   regcache::current_regcache.push_front (new_regcache);
381   new_regcache->set_ptid (ptid);
382
383   return new_regcache;
384 }
385
386 struct regcache *
387 get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch)
388 {
389   address_space *aspace = target_thread_address_space (ptid);
390
391   return get_thread_arch_aspace_regcache  (ptid, gdbarch, aspace);
392 }
393
394 static ptid_t current_thread_ptid;
395 static struct gdbarch *current_thread_arch;
396
397 struct regcache *
398 get_thread_regcache (ptid_t ptid)
399 {
400   if (!current_thread_arch || !ptid_equal (current_thread_ptid, ptid))
401     {
402       current_thread_ptid = ptid;
403       current_thread_arch = target_thread_architecture (ptid);
404     }
405
406   return get_thread_arch_regcache (ptid, current_thread_arch);
407 }
408
409 struct regcache *
410 get_current_regcache (void)
411 {
412   return get_thread_regcache (inferior_ptid);
413 }
414
415 /* See common/common-regcache.h.  */
416
417 struct regcache *
418 get_thread_regcache_for_ptid (ptid_t ptid)
419 {
420   return get_thread_regcache (ptid);
421 }
422
423 /* Observer for the target_changed event.  */
424
425 static void
426 regcache_observer_target_changed (struct target_ops *target)
427 {
428   registers_changed ();
429 }
430
431 /* Update global variables old ptids to hold NEW_PTID if they were
432    holding OLD_PTID.  */
433 void
434 regcache::regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
435 {
436   for (auto &regcache : regcache::current_regcache)
437     {
438       if (ptid_equal (regcache->ptid (), old_ptid))
439         regcache->set_ptid (new_ptid);
440     }
441 }
442
443 /* Low level examining and depositing of registers.
444
445    The caller is responsible for making sure that the inferior is
446    stopped before calling the fetching routines, or it will get
447    garbage.  (a change from GDB version 3, in which the caller got the
448    value from the last stop).  */
449
450 /* REGISTERS_CHANGED ()
451
452    Indicate that registers may have changed, so invalidate the cache.  */
453
454 void
455 registers_changed_ptid (ptid_t ptid)
456 {
457   for (auto oit = regcache::current_regcache.before_begin (),
458          it = std::next (oit);
459        it != regcache::current_regcache.end ();
460        )
461     {
462       if (ptid_match ((*it)->ptid (), ptid))
463         {
464           delete *it;
465           it = regcache::current_regcache.erase_after (oit);
466         }
467       else
468         oit = it++;
469     }
470
471   if (ptid_match (current_thread_ptid, ptid))
472     {
473       current_thread_ptid = null_ptid;
474       current_thread_arch = NULL;
475     }
476
477   if (ptid_match (inferior_ptid, ptid))
478     {
479       /* We just deleted the regcache of the current thread.  Need to
480          forget about any frames we have cached, too.  */
481       reinit_frame_cache ();
482     }
483 }
484
485 void
486 registers_changed (void)
487 {
488   registers_changed_ptid (minus_one_ptid);
489
490   /* Force cleanup of any alloca areas if using C alloca instead of
491      a builtin alloca.  This particular call is used to clean up
492      areas allocated by low level target code which may build up
493      during lengthy interactions between gdb and the target before
494      gdb gives control to the user (ie watchpoints).  */
495   alloca (0);
496 }
497
498 void
499 regcache_raw_update (struct regcache *regcache, int regnum)
500 {
501   gdb_assert (regcache != NULL);
502
503   regcache->raw_update (regnum);
504 }
505
506 void
507 regcache::raw_update (int regnum)
508 {
509   assert_regnum (regnum);
510
511   /* Make certain that the register cache is up-to-date with respect
512      to the current thread.  This switching shouldn't be necessary
513      only there is still only one target side register cache.  Sigh!
514      On the bright side, at least there is a regcache object.  */
515
516   if (get_register_status (regnum) == REG_UNKNOWN)
517     {
518       target_fetch_registers (this, regnum);
519
520       /* A number of targets can't access the whole set of raw
521          registers (because the debug API provides no means to get at
522          them).  */
523       if (m_register_status[regnum] == REG_UNKNOWN)
524         m_register_status[regnum] = REG_UNAVAILABLE;
525     }
526 }
527
528 enum register_status
529 regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)
530 {
531   return regcache->raw_read (regnum, buf);
532 }
533
534 enum register_status
535 readable_regcache::raw_read (int regnum, gdb_byte *buf)
536 {
537   gdb_assert (buf != NULL);
538   raw_update (regnum);
539
540   if (m_register_status[regnum] != REG_VALID)
541     memset (buf, 0, m_descr->sizeof_register[regnum]);
542   else
543     memcpy (buf, register_buffer (regnum),
544             m_descr->sizeof_register[regnum]);
545
546   return (enum register_status) m_register_status[regnum];
547 }
548
549 enum register_status
550 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
551 {
552   gdb_assert (regcache != NULL);
553   return regcache->raw_read (regnum, val);
554 }
555
556 template<typename T, typename>
557 enum register_status
558 readable_regcache::raw_read (int regnum, T *val)
559 {
560   gdb_byte *buf;
561   enum register_status status;
562
563   assert_regnum (regnum);
564   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
565   status = raw_read (regnum, buf);
566   if (status == REG_VALID)
567     *val = extract_integer<T> (buf,
568                                m_descr->sizeof_register[regnum],
569                                gdbarch_byte_order (m_descr->gdbarch));
570   else
571     *val = 0;
572   return status;
573 }
574
575 enum register_status
576 regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
577                             ULONGEST *val)
578 {
579   gdb_assert (regcache != NULL);
580   return regcache->raw_read (regnum, val);
581 }
582
583 void
584 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
585 {
586   gdb_assert (regcache != NULL);
587   regcache->raw_write (regnum, val);
588 }
589
590 template<typename T, typename>
591 void
592 regcache::raw_write (int regnum, T val)
593 {
594   gdb_byte *buf;
595
596   assert_regnum (regnum);
597   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
598   store_integer (buf, m_descr->sizeof_register[regnum],
599                  gdbarch_byte_order (m_descr->gdbarch), val);
600   raw_write (regnum, buf);
601 }
602
603 void
604 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
605                              ULONGEST val)
606 {
607   gdb_assert (regcache != NULL);
608   regcache->raw_write (regnum, val);
609 }
610
611 LONGEST
612 regcache_raw_get_signed (struct regcache *regcache, int regnum)
613 {
614   LONGEST value;
615   enum register_status status;
616
617   status = regcache_raw_read_signed (regcache, regnum, &value);
618   if (status == REG_UNAVAILABLE)
619     throw_error (NOT_AVAILABLE_ERROR,
620                  _("Register %d is not available"), regnum);
621   return value;
622 }
623
624 enum register_status
625 regcache_cooked_read (struct regcache *regcache, int regnum, gdb_byte *buf)
626 {
627   return regcache->cooked_read (regnum, buf);
628 }
629
630 enum register_status
631 readable_regcache::cooked_read (int regnum, gdb_byte *buf)
632 {
633   gdb_assert (regnum >= 0);
634   gdb_assert (regnum < m_descr->nr_cooked_registers);
635   if (regnum < num_raw_registers ())
636     return raw_read (regnum, buf);
637   else if (m_has_pseudo
638            && m_register_status[regnum] != REG_UNKNOWN)
639     {
640       if (m_register_status[regnum] == REG_VALID)
641         memcpy (buf, register_buffer (regnum),
642                 m_descr->sizeof_register[regnum]);
643       else
644         memset (buf, 0, m_descr->sizeof_register[regnum]);
645
646       return (enum register_status) m_register_status[regnum];
647     }
648   else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
649     {
650       struct value *mark, *computed;
651       enum register_status result = REG_VALID;
652
653       mark = value_mark ();
654
655       computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch,
656                                                      this, regnum);
657       if (value_entirely_available (computed))
658         memcpy (buf, value_contents_raw (computed),
659                 m_descr->sizeof_register[regnum]);
660       else
661         {
662           memset (buf, 0, m_descr->sizeof_register[regnum]);
663           result = REG_UNAVAILABLE;
664         }
665
666       value_free_to_mark (mark);
667
668       return result;
669     }
670   else
671     return gdbarch_pseudo_register_read (m_descr->gdbarch, this,
672                                          regnum, buf);
673 }
674
675 struct value *
676 regcache_cooked_read_value (struct regcache *regcache, int regnum)
677 {
678   return regcache->cooked_read_value (regnum);
679 }
680
681 struct value *
682 readable_regcache::cooked_read_value (int regnum)
683 {
684   gdb_assert (regnum >= 0);
685   gdb_assert (regnum < m_descr->nr_cooked_registers);
686
687   if (regnum < num_raw_registers ()
688       || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
689       || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
690     {
691       struct value *result;
692
693       result = allocate_value (register_type (m_descr->gdbarch, regnum));
694       VALUE_LVAL (result) = lval_register;
695       VALUE_REGNUM (result) = regnum;
696
697       /* It is more efficient in general to do this delegation in this
698          direction than in the other one, even though the value-based
699          API is preferred.  */
700       if (cooked_read (regnum,
701                        value_contents_raw (result)) == REG_UNAVAILABLE)
702         mark_value_bytes_unavailable (result, 0,
703                                       TYPE_LENGTH (value_type (result)));
704
705       return result;
706     }
707   else
708     return gdbarch_pseudo_register_read_value (m_descr->gdbarch,
709                                                this, regnum);
710 }
711
712 enum register_status
713 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
714                              LONGEST *val)
715 {
716   gdb_assert (regcache != NULL);
717   return regcache->cooked_read (regnum, val);
718 }
719
720 template<typename T, typename>
721 enum register_status
722 readable_regcache::cooked_read (int regnum, T *val)
723 {
724   enum register_status status;
725   gdb_byte *buf;
726
727   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
728   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
729   status = cooked_read (regnum, buf);
730   if (status == REG_VALID)
731     *val = extract_integer<T> (buf, m_descr->sizeof_register[regnum],
732                                gdbarch_byte_order (m_descr->gdbarch));
733   else
734     *val = 0;
735   return status;
736 }
737
738 enum register_status
739 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
740                                ULONGEST *val)
741 {
742   gdb_assert (regcache != NULL);
743   return regcache->cooked_read (regnum, val);
744 }
745
746 void
747 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
748                               LONGEST val)
749 {
750   gdb_assert (regcache != NULL);
751   regcache->cooked_write (regnum, val);
752 }
753
754 template<typename T, typename>
755 void
756 regcache::cooked_write (int regnum, T val)
757 {
758   gdb_byte *buf;
759
760   gdb_assert (regnum >=0 && regnum < m_descr->nr_cooked_registers);
761   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
762   store_integer (buf, m_descr->sizeof_register[regnum],
763                  gdbarch_byte_order (m_descr->gdbarch), val);
764   cooked_write (regnum, buf);
765 }
766
767 void
768 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
769                                 ULONGEST val)
770 {
771   gdb_assert (regcache != NULL);
772   regcache->cooked_write (regnum, val);
773 }
774
775 void
776 regcache_raw_write (struct regcache *regcache, int regnum,
777                     const gdb_byte *buf)
778 {
779   gdb_assert (regcache != NULL && buf != NULL);
780   regcache->raw_write (regnum, buf);
781 }
782
783 void
784 regcache::raw_write (int regnum, const gdb_byte *buf)
785 {
786
787   gdb_assert (buf != NULL);
788   assert_regnum (regnum);
789
790   /* On the sparc, writing %g0 is a no-op, so we don't even want to
791      change the registers array if something writes to this register.  */
792   if (gdbarch_cannot_store_register (arch (), regnum))
793     return;
794
795   /* If we have a valid copy of the register, and new value == old
796      value, then don't bother doing the actual store.  */
797   if (get_register_status (regnum) == REG_VALID
798       && (memcmp (register_buffer (regnum), buf,
799                   m_descr->sizeof_register[regnum]) == 0))
800     return;
801
802   target_prepare_to_store (this);
803   raw_supply (regnum, buf);
804
805   /* Invalidate the register after it is written, in case of a
806      failure.  */
807   regcache_invalidator invalidator (this, regnum);
808
809   target_store_registers (this, regnum);
810
811   /* The target did not throw an error so we can discard invalidating
812      the register.  */
813   invalidator.release ();
814 }
815
816 void
817 regcache_cooked_write (struct regcache *regcache, int regnum,
818                        const gdb_byte *buf)
819 {
820   regcache->cooked_write (regnum, buf);
821 }
822
823 void
824 regcache::cooked_write (int regnum, const gdb_byte *buf)
825 {
826   gdb_assert (regnum >= 0);
827   gdb_assert (regnum < m_descr->nr_cooked_registers);
828   if (regnum < num_raw_registers ())
829     raw_write (regnum, buf);
830   else
831     gdbarch_pseudo_register_write (m_descr->gdbarch, this,
832                                    regnum, buf);
833 }
834
835 /* Perform a partial register transfer using a read, modify, write
836    operation.  */
837
838 enum register_status
839 readable_regcache::read_part (int regnum, int offset, int len, void *in,
840                               bool is_raw)
841 {
842   struct gdbarch *gdbarch = arch ();
843   gdb_byte *reg = (gdb_byte *) alloca (register_size (gdbarch, regnum));
844
845   gdb_assert (in != NULL);
846   gdb_assert (offset >= 0 && offset <= m_descr->sizeof_register[regnum]);
847   gdb_assert (len >= 0 && offset + len <= m_descr->sizeof_register[regnum]);
848   /* Something to do?  */
849   if (offset + len == 0)
850     return REG_VALID;
851   /* Read (when needed) ...  */
852   enum register_status status;
853
854   if (is_raw)
855     status = raw_read (regnum, reg);
856   else
857     status = cooked_read (regnum, reg);
858   if (status != REG_VALID)
859     return status;
860
861   /* ... modify ...  */
862   memcpy (in, reg + offset, len);
863
864   return REG_VALID;
865 }
866
867 enum register_status
868 regcache::write_part (int regnum, int offset, int len,
869                      const void *out, bool is_raw)
870 {
871   struct gdbarch *gdbarch = arch ();
872   gdb_byte *reg = (gdb_byte *) alloca (register_size (gdbarch, regnum));
873
874   gdb_assert (out != NULL);
875   gdb_assert (offset >= 0 && offset <= m_descr->sizeof_register[regnum]);
876   gdb_assert (len >= 0 && offset + len <= m_descr->sizeof_register[regnum]);
877   /* Something to do?  */
878   if (offset + len == 0)
879     return REG_VALID;
880   /* Read (when needed) ...  */
881   if (offset > 0
882       || offset + len < m_descr->sizeof_register[regnum])
883     {
884       enum register_status status;
885
886       if (is_raw)
887         status = raw_read (regnum, reg);
888       else
889         status = cooked_read (regnum, reg);
890       if (status != REG_VALID)
891         return status;
892     }
893
894   memcpy (reg + offset, out, len);
895   /* ... write (when needed).  */
896   if (is_raw)
897     raw_write (regnum, reg);
898   else
899     cooked_write (regnum, reg);
900
901   return REG_VALID;
902 }
903
904 enum register_status
905 regcache_raw_read_part (struct regcache *regcache, int regnum,
906                         int offset, int len, gdb_byte *buf)
907 {
908   return regcache->raw_read_part (regnum, offset, len, buf);
909 }
910
911 enum register_status
912 readable_regcache::raw_read_part (int regnum, int offset, int len, gdb_byte *buf)
913 {
914   assert_regnum (regnum);
915   return read_part (regnum, offset, len, buf, true);
916 }
917
918 void
919 regcache_raw_write_part (struct regcache *regcache, int regnum,
920                          int offset, int len, const gdb_byte *buf)
921 {
922   regcache->raw_write_part (regnum, offset, len, buf);
923 }
924
925 void
926 regcache::raw_write_part (int regnum, int offset, int len,
927                           const gdb_byte *buf)
928 {
929   assert_regnum (regnum);
930   write_part (regnum, offset, len, buf, true);
931 }
932
933 enum register_status
934 regcache_cooked_read_part (struct regcache *regcache, int regnum,
935                            int offset, int len, gdb_byte *buf)
936 {
937   return regcache->cooked_read_part (regnum, offset, len, buf);
938 }
939
940
941 enum register_status
942 readable_regcache::cooked_read_part (int regnum, int offset, int len,
943                                      gdb_byte *buf)
944 {
945   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
946   return read_part (regnum, offset, len, buf, false);
947 }
948
949 void
950 regcache_cooked_write_part (struct regcache *regcache, int regnum,
951                             int offset, int len, const gdb_byte *buf)
952 {
953   regcache->cooked_write_part (regnum, offset, len, buf);
954 }
955
956 void
957 regcache::cooked_write_part (int regnum, int offset, int len,
958                              const gdb_byte *buf)
959 {
960   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
961   write_part (regnum, offset, len, buf, false);
962 }
963
964 /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE.  */
965
966 void
967 regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
968 {
969   gdb_assert (regcache != NULL);
970   regcache->raw_supply (regnum, buf);
971 }
972
973 void
974 detached_regcache::raw_supply (int regnum, const void *buf)
975 {
976   void *regbuf;
977   size_t size;
978
979   assert_regnum (regnum);
980
981   regbuf = register_buffer (regnum);
982   size = m_descr->sizeof_register[regnum];
983
984   if (buf)
985     {
986       memcpy (regbuf, buf, size);
987       m_register_status[regnum] = REG_VALID;
988     }
989   else
990     {
991       /* This memset not strictly necessary, but better than garbage
992          in case the register value manages to escape somewhere (due
993          to a bug, no less).  */
994       memset (regbuf, 0, size);
995       m_register_status[regnum] = REG_UNAVAILABLE;
996     }
997 }
998
999 /* Supply register REGNUM to REGCACHE.  Value to supply is an integer stored at
1000    address ADDR, in target endian, with length ADDR_LEN and sign IS_SIGNED.  If
1001    the register size is greater than ADDR_LEN, then the integer will be sign or
1002    zero extended.  If the register size is smaller than the integer, then the
1003    most significant bytes of the integer will be truncated.  */
1004
1005 void
1006 detached_regcache::raw_supply_integer (int regnum, const gdb_byte *addr,
1007                                    int addr_len, bool is_signed)
1008 {
1009   enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1010   gdb_byte *regbuf;
1011   size_t regsize;
1012
1013   assert_regnum (regnum);
1014
1015   regbuf = register_buffer (regnum);
1016   regsize = m_descr->sizeof_register[regnum];
1017
1018   copy_integer_to_size (regbuf, regsize, addr, addr_len, is_signed,
1019                         byte_order);
1020   m_register_status[regnum] = REG_VALID;
1021 }
1022
1023 /* Supply register REGNUM with zeroed value to REGCACHE.  This is not the same
1024    as calling raw_supply with NULL (which will set the state to
1025    unavailable).  */
1026
1027 void
1028 detached_regcache::raw_supply_zeroed (int regnum)
1029 {
1030   void *regbuf;
1031   size_t size;
1032
1033   assert_regnum (regnum);
1034
1035   regbuf = register_buffer (regnum);
1036   size = m_descr->sizeof_register[regnum];
1037
1038   memset (regbuf, 0, size);
1039   m_register_status[regnum] = REG_VALID;
1040 }
1041
1042 /* Collect register REGNUM from REGCACHE and store its contents in BUF.  */
1043
1044 void
1045 regcache_raw_collect (const struct regcache *regcache, int regnum, void *buf)
1046 {
1047   gdb_assert (regcache != NULL && buf != NULL);
1048   regcache->raw_collect (regnum, buf);
1049 }
1050
1051 void
1052 regcache::raw_collect (int regnum, void *buf) const
1053 {
1054   const void *regbuf;
1055   size_t size;
1056
1057   gdb_assert (buf != NULL);
1058   assert_regnum (regnum);
1059
1060   regbuf = register_buffer (regnum);
1061   size = m_descr->sizeof_register[regnum];
1062   memcpy (buf, regbuf, size);
1063 }
1064
1065 /* Transfer a single or all registers belonging to a certain register
1066    set to or from a buffer.  This is the main worker function for
1067    regcache_supply_regset and regcache_collect_regset.  */
1068
1069 /* Collect register REGNUM from REGCACHE.  Store collected value as an integer
1070    at address ADDR, in target endian, with length ADDR_LEN and sign IS_SIGNED.
1071    If ADDR_LEN is greater than the register size, then the integer will be sign
1072    or zero extended.  If ADDR_LEN is smaller than the register size, then the
1073    most significant bytes of the integer will be truncated.  */
1074
1075 void
1076 regcache::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
1077                                bool is_signed) const
1078 {
1079   enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1080   const gdb_byte *regbuf;
1081   size_t regsize;
1082
1083   assert_regnum (regnum);
1084
1085   regbuf = register_buffer (regnum);
1086   regsize = m_descr->sizeof_register[regnum];
1087
1088   copy_integer_to_size (addr, addr_len, regbuf, regsize, is_signed,
1089                         byte_order);
1090 }
1091
1092 void
1093 regcache::transfer_regset (const struct regset *regset,
1094                            struct regcache *out_regcache,
1095                            int regnum, const void *in_buf,
1096                            void *out_buf, size_t size) const
1097 {
1098   const struct regcache_map_entry *map;
1099   int offs = 0, count;
1100
1101   for (map = (const struct regcache_map_entry *) regset->regmap;
1102        (count = map->count) != 0;
1103        map++)
1104     {
1105       int regno = map->regno;
1106       int slot_size = map->size;
1107
1108       if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1109         slot_size = m_descr->sizeof_register[regno];
1110
1111       if (regno == REGCACHE_MAP_SKIP
1112           || (regnum != -1
1113               && (regnum < regno || regnum >= regno + count)))
1114           offs += count * slot_size;
1115
1116       else if (regnum == -1)
1117         for (; count--; regno++, offs += slot_size)
1118           {
1119             if (offs + slot_size > size)
1120               break;
1121
1122             if (out_buf)
1123               raw_collect (regno, (gdb_byte *) out_buf + offs);
1124             else
1125               out_regcache->raw_supply (regno, in_buf
1126                                         ? (const gdb_byte *) in_buf + offs
1127                                         : NULL);
1128           }
1129       else
1130         {
1131           /* Transfer a single register and return.  */
1132           offs += (regnum - regno) * slot_size;
1133           if (offs + slot_size > size)
1134             return;
1135
1136           if (out_buf)
1137             raw_collect (regnum, (gdb_byte *) out_buf + offs);
1138           else
1139             out_regcache->raw_supply (regnum, in_buf
1140                                       ? (const gdb_byte *) in_buf + offs
1141                                       : NULL);
1142           return;
1143         }
1144     }
1145 }
1146
1147 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1148    in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
1149    If BUF is NULL, set the register(s) to "unavailable" status. */
1150
1151 void
1152 regcache_supply_regset (const struct regset *regset,
1153                         struct regcache *regcache,
1154                         int regnum, const void *buf, size_t size)
1155 {
1156   regcache->supply_regset (regset, regnum, buf, size);
1157 }
1158
1159 void
1160 regcache::supply_regset (const struct regset *regset,
1161                          int regnum, const void *buf, size_t size)
1162 {
1163   transfer_regset (regset, this, regnum, buf, NULL, size);
1164 }
1165
1166 /* Collect register REGNUM from REGCACHE to BUF, using the register
1167    map in REGSET.  If REGNUM is -1, do this for all registers in
1168    REGSET.  */
1169
1170 void
1171 regcache_collect_regset (const struct regset *regset,
1172                          const struct regcache *regcache,
1173                          int regnum, void *buf, size_t size)
1174 {
1175   regcache->collect_regset (regset, regnum, buf, size);
1176 }
1177
1178 void
1179 regcache::collect_regset (const struct regset *regset,
1180                          int regnum, void *buf, size_t size) const
1181 {
1182   transfer_regset (regset, NULL, regnum, NULL, buf, size);
1183 }
1184
1185
1186 /* Special handling for register PC.  */
1187
1188 CORE_ADDR
1189 regcache_read_pc (struct regcache *regcache)
1190 {
1191   struct gdbarch *gdbarch = regcache->arch ();
1192
1193   CORE_ADDR pc_val;
1194
1195   if (gdbarch_read_pc_p (gdbarch))
1196     pc_val = gdbarch_read_pc (gdbarch, regcache);
1197   /* Else use per-frame method on get_current_frame.  */
1198   else if (gdbarch_pc_regnum (gdbarch) >= 0)
1199     {
1200       ULONGEST raw_val;
1201
1202       if (regcache_cooked_read_unsigned (regcache,
1203                                          gdbarch_pc_regnum (gdbarch),
1204                                          &raw_val) == REG_UNAVAILABLE)
1205         throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
1206
1207       pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
1208     }
1209   else
1210     internal_error (__FILE__, __LINE__,
1211                     _("regcache_read_pc: Unable to find PC"));
1212   return pc_val;
1213 }
1214
1215 void
1216 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
1217 {
1218   struct gdbarch *gdbarch = regcache->arch ();
1219
1220   if (gdbarch_write_pc_p (gdbarch))
1221     gdbarch_write_pc (gdbarch, regcache, pc);
1222   else if (gdbarch_pc_regnum (gdbarch) >= 0)
1223     regcache_cooked_write_unsigned (regcache,
1224                                     gdbarch_pc_regnum (gdbarch), pc);
1225   else
1226     internal_error (__FILE__, __LINE__,
1227                     _("regcache_write_pc: Unable to update PC"));
1228
1229   /* Writing the PC (for instance, from "load") invalidates the
1230      current frame.  */
1231   reinit_frame_cache ();
1232 }
1233
1234 int
1235 reg_buffer::num_raw_registers () const
1236 {
1237   return gdbarch_num_regs (arch ());
1238 }
1239
1240 void
1241 regcache::debug_print_register (const char *func,  int regno)
1242 {
1243   struct gdbarch *gdbarch = arch ();
1244
1245   fprintf_unfiltered (gdb_stdlog, "%s ", func);
1246   if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
1247       && gdbarch_register_name (gdbarch, regno) != NULL
1248       && gdbarch_register_name (gdbarch, regno)[0] != '\0')
1249     fprintf_unfiltered (gdb_stdlog, "(%s)",
1250                         gdbarch_register_name (gdbarch, regno));
1251   else
1252     fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1253   if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1254     {
1255       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1256       int size = register_size (gdbarch, regno);
1257       gdb_byte *buf = register_buffer (regno);
1258
1259       fprintf_unfiltered (gdb_stdlog, " = ");
1260       for (int i = 0; i < size; i++)
1261         {
1262           fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1263         }
1264       if (size <= sizeof (LONGEST))
1265         {
1266           ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
1267
1268           fprintf_unfiltered (gdb_stdlog, " %s %s",
1269                               core_addr_to_string_nz (val), plongest (val));
1270         }
1271     }
1272   fprintf_unfiltered (gdb_stdlog, "\n");
1273 }
1274
1275 static void
1276 reg_flush_command (const char *command, int from_tty)
1277 {
1278   /* Force-flush the register cache.  */
1279   registers_changed ();
1280   if (from_tty)
1281     printf_filtered (_("Register cache flushed.\n"));
1282 }
1283
1284 void
1285 register_dump::dump (ui_file *file)
1286 {
1287   auto descr = regcache_descr (m_gdbarch);
1288   int regnum;
1289   int footnote_nr = 0;
1290   int footnote_register_offset = 0;
1291   int footnote_register_type_name_null = 0;
1292   long register_offset = 0;
1293
1294   gdb_assert (descr->nr_cooked_registers
1295               == (gdbarch_num_regs (m_gdbarch)
1296                   + gdbarch_num_pseudo_regs (m_gdbarch)));
1297
1298   for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++)
1299     {
1300       /* Name.  */
1301       if (regnum < 0)
1302         fprintf_unfiltered (file, " %-10s", "Name");
1303       else
1304         {
1305           const char *p = gdbarch_register_name (m_gdbarch, regnum);
1306
1307           if (p == NULL)
1308             p = "";
1309           else if (p[0] == '\0')
1310             p = "''";
1311           fprintf_unfiltered (file, " %-10s", p);
1312         }
1313
1314       /* Number.  */
1315       if (regnum < 0)
1316         fprintf_unfiltered (file, " %4s", "Nr");
1317       else
1318         fprintf_unfiltered (file, " %4d", regnum);
1319
1320       /* Relative number.  */
1321       if (regnum < 0)
1322         fprintf_unfiltered (file, " %4s", "Rel");
1323       else if (regnum < gdbarch_num_regs (m_gdbarch))
1324         fprintf_unfiltered (file, " %4d", regnum);
1325       else
1326         fprintf_unfiltered (file, " %4d",
1327                             (regnum - gdbarch_num_regs (m_gdbarch)));
1328
1329       /* Offset.  */
1330       if (regnum < 0)
1331         fprintf_unfiltered (file, " %6s  ", "Offset");
1332       else
1333         {
1334           fprintf_unfiltered (file, " %6ld",
1335                               descr->register_offset[regnum]);
1336           if (register_offset != descr->register_offset[regnum]
1337               || (regnum > 0
1338                   && (descr->register_offset[regnum]
1339                       != (descr->register_offset[regnum - 1]
1340                           + descr->sizeof_register[regnum - 1])))
1341               )
1342             {
1343               if (!footnote_register_offset)
1344                 footnote_register_offset = ++footnote_nr;
1345               fprintf_unfiltered (file, "*%d", footnote_register_offset);
1346             }
1347           else
1348             fprintf_unfiltered (file, "  ");
1349           register_offset = (descr->register_offset[regnum]
1350                              + descr->sizeof_register[regnum]);
1351         }
1352
1353       /* Size.  */
1354       if (regnum < 0)
1355         fprintf_unfiltered (file, " %5s ", "Size");
1356       else
1357         fprintf_unfiltered (file, " %5ld", descr->sizeof_register[regnum]);
1358
1359       /* Type.  */
1360       {
1361         const char *t;
1362         std::string name_holder;
1363
1364         if (regnum < 0)
1365           t = "Type";
1366         else
1367           {
1368             static const char blt[] = "builtin_type";
1369
1370             t = TYPE_NAME (register_type (m_gdbarch, regnum));
1371             if (t == NULL)
1372               {
1373                 if (!footnote_register_type_name_null)
1374                   footnote_register_type_name_null = ++footnote_nr;
1375                 name_holder = string_printf ("*%d",
1376                                              footnote_register_type_name_null);
1377                 t = name_holder.c_str ();
1378               }
1379             /* Chop a leading builtin_type.  */
1380             if (startswith (t, blt))
1381               t += strlen (blt);
1382           }
1383         fprintf_unfiltered (file, " %-15s", t);
1384       }
1385
1386       /* Leading space always present.  */
1387       fprintf_unfiltered (file, " ");
1388
1389       dump_reg (file, regnum);
1390
1391       fprintf_unfiltered (file, "\n");
1392     }
1393
1394   if (footnote_register_offset)
1395     fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1396                         footnote_register_offset);
1397   if (footnote_register_type_name_null)
1398     fprintf_unfiltered (file,
1399                         "*%d: Register type's name NULL.\n",
1400                         footnote_register_type_name_null);
1401 }
1402
1403 #if GDB_SELF_TEST
1404 #include "selftest.h"
1405 #include "selftest-arch.h"
1406 #include "gdbthread.h"
1407 #include "target-float.h"
1408
1409 namespace selftests {
1410
1411 class regcache_access : public regcache
1412 {
1413 public:
1414
1415   /* Return the number of elements in current_regcache.  */
1416
1417   static size_t
1418   current_regcache_size ()
1419   {
1420     return std::distance (regcache::current_regcache.begin (),
1421                           regcache::current_regcache.end ());
1422   }
1423 };
1424
1425 static void
1426 current_regcache_test (void)
1427 {
1428   /* It is empty at the start.  */
1429   SELF_CHECK (regcache_access::current_regcache_size () == 0);
1430
1431   ptid_t ptid1 (1), ptid2 (2), ptid3 (3);
1432
1433   /* Get regcache from ptid1, a new regcache is added to
1434      current_regcache.  */
1435   regcache *regcache = get_thread_arch_aspace_regcache (ptid1,
1436                                                         target_gdbarch (),
1437                                                         NULL);
1438
1439   SELF_CHECK (regcache != NULL);
1440   SELF_CHECK (regcache->ptid () == ptid1);
1441   SELF_CHECK (regcache_access::current_regcache_size () == 1);
1442
1443   /* Get regcache from ptid2, a new regcache is added to
1444      current_regcache.  */
1445   regcache = get_thread_arch_aspace_regcache (ptid2,
1446                                               target_gdbarch (),
1447                                               NULL);
1448   SELF_CHECK (regcache != NULL);
1449   SELF_CHECK (regcache->ptid () == ptid2);
1450   SELF_CHECK (regcache_access::current_regcache_size () == 2);
1451
1452   /* Get regcache from ptid3, a new regcache is added to
1453      current_regcache.  */
1454   regcache = get_thread_arch_aspace_regcache (ptid3,
1455                                               target_gdbarch (),
1456                                               NULL);
1457   SELF_CHECK (regcache != NULL);
1458   SELF_CHECK (regcache->ptid () == ptid3);
1459   SELF_CHECK (regcache_access::current_regcache_size () == 3);
1460
1461   /* Get regcache from ptid2 again, nothing is added to
1462      current_regcache.  */
1463   regcache = get_thread_arch_aspace_regcache (ptid2,
1464                                               target_gdbarch (),
1465                                               NULL);
1466   SELF_CHECK (regcache != NULL);
1467   SELF_CHECK (regcache->ptid () == ptid2);
1468   SELF_CHECK (regcache_access::current_regcache_size () == 3);
1469
1470   /* Mark ptid2 is changed, so regcache of ptid2 should be removed from
1471      current_regcache.  */
1472   registers_changed_ptid (ptid2);
1473   SELF_CHECK (regcache_access::current_regcache_size () == 2);
1474 }
1475
1476 class target_ops_no_register : public test_target_ops
1477 {
1478 public:
1479   target_ops_no_register ()
1480     : test_target_ops {}
1481   {}
1482
1483   void reset ()
1484   {
1485     fetch_registers_called = 0;
1486     store_registers_called = 0;
1487     xfer_partial_called = 0;
1488   }
1489
1490   void fetch_registers (regcache *regs, int regno) override;
1491   void store_registers (regcache *regs, int regno) override;
1492
1493   enum target_xfer_status xfer_partial (enum target_object object,
1494                                         const char *annex, gdb_byte *readbuf,
1495                                         const gdb_byte *writebuf,
1496                                         ULONGEST offset, ULONGEST len,
1497                                         ULONGEST *xfered_len) override;
1498
1499   unsigned int fetch_registers_called = 0;
1500   unsigned int store_registers_called = 0;
1501   unsigned int xfer_partial_called = 0;
1502 };
1503
1504 void
1505 target_ops_no_register::fetch_registers (regcache *regs, int regno)
1506 {
1507   /* Mark register available.  */
1508   regs->raw_supply_zeroed (regno);
1509   this->fetch_registers_called++;
1510 }
1511
1512 void
1513 target_ops_no_register::store_registers (regcache *regs, int regno)
1514 {
1515   this->store_registers_called++;
1516 }
1517
1518 enum target_xfer_status
1519 target_ops_no_register::xfer_partial (enum target_object object,
1520                                       const char *annex, gdb_byte *readbuf,
1521                                       const gdb_byte *writebuf,
1522                                       ULONGEST offset, ULONGEST len,
1523                                       ULONGEST *xfered_len)
1524 {
1525   this->xfer_partial_called++;
1526
1527   *xfered_len = len;
1528   return TARGET_XFER_OK;
1529 }
1530
1531 class readwrite_regcache : public regcache
1532 {
1533 public:
1534   readwrite_regcache (struct gdbarch *gdbarch)
1535     : regcache (gdbarch, nullptr)
1536   {}
1537 };
1538
1539 /* Test regcache::cooked_read gets registers from raw registers and
1540    memory instead of target to_{fetch,store}_registers.  */
1541
1542 static void
1543 cooked_read_test (struct gdbarch *gdbarch)
1544 {
1545   /* Error out if debugging something, because we're going to push the
1546      test target, which would pop any existing target.  */
1547   if (target_stack->to_stratum >= process_stratum)
1548     error (_("target already pushed"));
1549
1550   /* Create a mock environment.  An inferior with a thread, with a
1551      process_stratum target pushed.  */
1552
1553   target_ops_no_register mock_target;
1554   ptid_t mock_ptid (1, 1);
1555   inferior mock_inferior (mock_ptid.pid ());
1556   address_space mock_aspace {};
1557   mock_inferior.gdbarch = gdbarch;
1558   mock_inferior.aspace = &mock_aspace;
1559   thread_info mock_thread (&mock_inferior, mock_ptid);
1560
1561   scoped_restore restore_thread_list
1562     = make_scoped_restore (&thread_list, &mock_thread);
1563
1564   /* Add the mock inferior to the inferior list so that look ups by
1565      target+ptid can find it.  */
1566   scoped_restore restore_inferior_list
1567     = make_scoped_restore (&inferior_list);
1568   inferior_list = &mock_inferior;
1569
1570   /* Switch to the mock inferior.  */
1571   scoped_restore_current_inferior restore_current_inferior;
1572   set_current_inferior (&mock_inferior);
1573
1574   /* Push the process_stratum target so we can mock accessing
1575      registers.  */
1576   push_target (&mock_target);
1577
1578   /* Pop it again on exit (return/exception).  */
1579   struct on_exit
1580   {
1581     ~on_exit ()
1582     {
1583       pop_all_targets_at_and_above (process_stratum);
1584     }
1585   } pop_targets;
1586
1587   /* Switch to the mock thread.  */
1588   scoped_restore restore_inferior_ptid
1589     = make_scoped_restore (&inferior_ptid, mock_ptid);
1590
1591   /* Test that read one raw register from regcache_no_target will go
1592      to the target layer.  */
1593   int regnum;
1594
1595   /* Find a raw register which size isn't zero.  */
1596   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1597     {
1598       if (register_size (gdbarch, regnum) != 0)
1599         break;
1600     }
1601
1602   readwrite_regcache readwrite (gdbarch);
1603   gdb::def_vector<gdb_byte> buf (register_size (gdbarch, regnum));
1604
1605   readwrite.raw_read (regnum, buf.data ());
1606
1607   /* raw_read calls target_fetch_registers.  */
1608   SELF_CHECK (mock_target.fetch_registers_called > 0);
1609   mock_target.reset ();
1610
1611   /* Mark all raw registers valid, so the following raw registers
1612      accesses won't go to target.  */
1613   for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++)
1614     readwrite.raw_update (i);
1615
1616   mock_target.reset ();
1617   /* Then, read all raw and pseudo registers, and don't expect calling
1618      to_{fetch,store}_registers.  */
1619   for (int regnum = 0;
1620        regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1621        regnum++)
1622     {
1623       if (register_size (gdbarch, regnum) == 0)
1624         continue;
1625
1626       gdb::def_vector<gdb_byte> buf (register_size (gdbarch, regnum));
1627
1628       SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum, buf.data ()));
1629
1630       SELF_CHECK (mock_target.fetch_registers_called == 0);
1631       SELF_CHECK (mock_target.store_registers_called == 0);
1632
1633       /* Some SPU pseudo registers are got via TARGET_OBJECT_SPU.  */
1634       if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
1635         SELF_CHECK (mock_target.xfer_partial_called == 0);
1636
1637       mock_target.reset ();
1638     }
1639
1640   readonly_detached_regcache readonly (readwrite);
1641
1642   /* GDB may go to target layer to fetch all registers and memory for
1643      readonly regcache.  */
1644   mock_target.reset ();
1645
1646   for (int regnum = 0;
1647        regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1648        regnum++)
1649     {
1650       if (register_size (gdbarch, regnum) == 0)
1651         continue;
1652
1653       gdb::def_vector<gdb_byte> buf (register_size (gdbarch, regnum));
1654       enum register_status status = readonly.cooked_read (regnum,
1655                                                           buf.data ());
1656
1657       if (regnum < gdbarch_num_regs (gdbarch))
1658         {
1659           auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1660
1661           if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300
1662               || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh
1663               || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850
1664               || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep
1665               || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850
1666               || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300
1667               || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score
1668               || bfd_arch == bfd_arch_riscv)
1669             {
1670               /* Raw registers.  If raw registers are not in save_reggroup,
1671                  their status are unknown.  */
1672               if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1673                 SELF_CHECK (status == REG_VALID);
1674               else
1675                 SELF_CHECK (status == REG_UNKNOWN);
1676             }
1677           else
1678             SELF_CHECK (status == REG_VALID);
1679         }
1680       else
1681         {
1682           if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1683             SELF_CHECK (status == REG_VALID);
1684           else
1685             {
1686               /* If pseudo registers are not in save_reggroup, some of
1687                  them can be computed from saved raw registers, but some
1688                  of them are unknown.  */
1689               auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1690
1691               if (bfd_arch == bfd_arch_frv
1692                   || bfd_arch == bfd_arch_m32c
1693                   || bfd_arch == bfd_arch_mep
1694                   || bfd_arch == bfd_arch_sh)
1695                 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN);
1696               else if (bfd_arch == bfd_arch_mips
1697                        || bfd_arch == bfd_arch_h8300)
1698                 SELF_CHECK (status == REG_UNKNOWN);
1699               else
1700                 SELF_CHECK (status == REG_VALID);
1701             }
1702         }
1703
1704       SELF_CHECK (mock_target.fetch_registers_called == 0);
1705       SELF_CHECK (mock_target.store_registers_called == 0);
1706       SELF_CHECK (mock_target.xfer_partial_called == 0);
1707
1708       mock_target.reset ();
1709     }
1710 }
1711
1712 /* Test regcache::cooked_write by writing some expected contents to
1713    registers, and checking that contents read from registers and the
1714    expected contents are the same.  */
1715
1716 static void
1717 cooked_write_test (struct gdbarch *gdbarch)
1718 {
1719   /* Error out if debugging something, because we're going to push the
1720      test target, which would pop any existing target.  */
1721   if (target_stack->to_stratum >= process_stratum)
1722     error (_("target already pushed"));
1723
1724   /* Create a mock environment.  A process_stratum target pushed.  */
1725
1726   target_ops_no_register mock_target;
1727
1728   /* Push the process_stratum target so we can mock accessing
1729      registers.  */
1730   push_target (&mock_target);
1731
1732   /* Pop it again on exit (return/exception).  */
1733   struct on_exit
1734   {
1735     ~on_exit ()
1736     {
1737       pop_all_targets_at_and_above (process_stratum);
1738     }
1739   } pop_targets;
1740
1741   readwrite_regcache readwrite (gdbarch);
1742
1743   const int num_regs = (gdbarch_num_regs (gdbarch)
1744                         + gdbarch_num_pseudo_regs (gdbarch));
1745
1746   for (auto regnum = 0; regnum < num_regs; regnum++)
1747     {
1748       if (register_size (gdbarch, regnum) == 0
1749           || gdbarch_cannot_store_register (gdbarch, regnum))
1750         continue;
1751
1752       auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1753
1754       if ((bfd_arch == bfd_arch_sparc
1755            /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
1756               SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test.  */
1757            && gdbarch_ptr_bit (gdbarch) == 64
1758            && (regnum >= gdbarch_num_regs (gdbarch)
1759                && regnum <= gdbarch_num_regs (gdbarch) + 4))
1760           || (bfd_arch == bfd_arch_spu
1761               /* SPU pseudo registers except SPU_SP_REGNUM are got by
1762                  TARGET_OBJECT_SPU.  */
1763               && regnum >= gdbarch_num_regs (gdbarch) && regnum != 130))
1764         continue;
1765
1766       std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0);
1767       std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0);
1768       const auto type = register_type (gdbarch, regnum);
1769
1770       if (TYPE_CODE (type) == TYPE_CODE_FLT
1771           || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1772         {
1773           /* Generate valid float format.  */
1774           target_float_from_string (expected.data (), type, "1.25");
1775         }
1776       else if (TYPE_CODE (type) == TYPE_CODE_INT
1777                || TYPE_CODE (type) == TYPE_CODE_ARRAY
1778                || TYPE_CODE (type) == TYPE_CODE_PTR
1779                || TYPE_CODE (type) == TYPE_CODE_UNION
1780                || TYPE_CODE (type) == TYPE_CODE_STRUCT)
1781         {
1782           if (bfd_arch == bfd_arch_ia64
1783               || (regnum >= gdbarch_num_regs (gdbarch)
1784                   && (bfd_arch == bfd_arch_xtensa
1785                       || bfd_arch == bfd_arch_bfin
1786                       || bfd_arch == bfd_arch_m32c
1787                       /* m68hc11 pseudo registers are in memory.  */
1788                       || bfd_arch == bfd_arch_m68hc11
1789                       || bfd_arch == bfd_arch_m68hc12
1790                       || bfd_arch == bfd_arch_s390))
1791               || (bfd_arch == bfd_arch_frv
1792                   /* FRV pseudo registers except iacc0.  */
1793                   && regnum > gdbarch_num_regs (gdbarch)))
1794             {
1795               /* Skip setting the expected values for some architecture
1796                  registers.  */
1797             }
1798           else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
1799             {
1800               /* RL78_PC_REGNUM */
1801               for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
1802                 expected[j] = j;
1803             }
1804           else
1805             {
1806               for (auto j = 0; j < register_size (gdbarch, regnum); j++)
1807                 expected[j] = j;
1808             }
1809         }
1810       else if (TYPE_CODE (type) == TYPE_CODE_FLAGS)
1811         {
1812           /* No idea how to test flags.  */
1813           continue;
1814         }
1815       else
1816         {
1817           /* If we don't know how to create the expected value for the
1818              this type, make it fail.  */
1819           SELF_CHECK (0);
1820         }
1821
1822       readwrite.cooked_write (regnum, expected.data ());
1823
1824       SELF_CHECK (readwrite.cooked_read (regnum, buf.data ()) == REG_VALID);
1825       SELF_CHECK (expected == buf);
1826     }
1827 }
1828
1829 } // namespace selftests
1830 #endif /* GDB_SELF_TEST */
1831
1832 void
1833 _initialize_regcache (void)
1834 {
1835   regcache_descr_handle
1836     = gdbarch_data_register_post_init (init_regcache_descr);
1837
1838   gdb::observers::target_changed.attach (regcache_observer_target_changed);
1839   gdb::observers::thread_ptid_changed.attach
1840     (regcache::regcache_thread_ptid_changed);
1841
1842   add_com ("flushregs", class_maintenance, reg_flush_command,
1843            _("Force gdb to flush its register cache (maintainer command)"));
1844
1845 #if GDB_SELF_TEST
1846   selftests::register_test ("current_regcache", selftests::current_regcache_test);
1847
1848   selftests::register_test_foreach_arch ("regcache::cooked_read_test",
1849                                          selftests::cooked_read_test);
1850   selftests::register_test_foreach_arch ("regcache::cooked_write_test",
1851                                          selftests::cooked_write_test);
1852 #endif
1853 }