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