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