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