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