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