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