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