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