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