Remove tui_clear_source_content
[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 gdbsupport/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 gdbsupport/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 gdbsupport/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
459 void
460 regcache::raw_update (int regnum)
461 {
462   assert_regnum (regnum);
463
464   /* Make certain that the register cache is up-to-date with respect
465      to the current thread.  This switching shouldn't be necessary
466      only there is still only one target side register cache.  Sigh!
467      On the bright side, at least there is a regcache object.  */
468
469   if (get_register_status (regnum) == REG_UNKNOWN)
470     {
471       target_fetch_registers (this, regnum);
472
473       /* A number of targets can't access the whole set of raw
474          registers (because the debug API provides no means to get at
475          them).  */
476       if (m_register_status[regnum] == REG_UNKNOWN)
477         m_register_status[regnum] = REG_UNAVAILABLE;
478     }
479 }
480
481 enum register_status
482 readable_regcache::raw_read (int regnum, gdb_byte *buf)
483 {
484   gdb_assert (buf != NULL);
485   raw_update (regnum);
486
487   if (m_register_status[regnum] != REG_VALID)
488     memset (buf, 0, m_descr->sizeof_register[regnum]);
489   else
490     memcpy (buf, register_buffer (regnum),
491             m_descr->sizeof_register[regnum]);
492
493   return m_register_status[regnum];
494 }
495
496 enum register_status
497 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
498 {
499   gdb_assert (regcache != NULL);
500   return regcache->raw_read (regnum, val);
501 }
502
503 template<typename T, typename>
504 enum register_status
505 readable_regcache::raw_read (int regnum, T *val)
506 {
507   gdb_byte *buf;
508   enum register_status status;
509
510   assert_regnum (regnum);
511   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
512   status = raw_read (regnum, buf);
513   if (status == REG_VALID)
514     *val = extract_integer<T> (buf,
515                                m_descr->sizeof_register[regnum],
516                                gdbarch_byte_order (m_descr->gdbarch));
517   else
518     *val = 0;
519   return status;
520 }
521
522 enum register_status
523 regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
524                             ULONGEST *val)
525 {
526   gdb_assert (regcache != NULL);
527   return regcache->raw_read (regnum, val);
528 }
529
530 void
531 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
532 {
533   gdb_assert (regcache != NULL);
534   regcache->raw_write (regnum, val);
535 }
536
537 template<typename T, typename>
538 void
539 regcache::raw_write (int regnum, T val)
540 {
541   gdb_byte *buf;
542
543   assert_regnum (regnum);
544   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
545   store_integer (buf, m_descr->sizeof_register[regnum],
546                  gdbarch_byte_order (m_descr->gdbarch), val);
547   raw_write (regnum, buf);
548 }
549
550 void
551 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
552                              ULONGEST val)
553 {
554   gdb_assert (regcache != NULL);
555   regcache->raw_write (regnum, val);
556 }
557
558 LONGEST
559 regcache_raw_get_signed (struct regcache *regcache, int regnum)
560 {
561   LONGEST value;
562   enum register_status status;
563
564   status = regcache_raw_read_signed (regcache, regnum, &value);
565   if (status == REG_UNAVAILABLE)
566     throw_error (NOT_AVAILABLE_ERROR,
567                  _("Register %d is not available"), regnum);
568   return value;
569 }
570
571 enum register_status
572 readable_regcache::cooked_read (int regnum, gdb_byte *buf)
573 {
574   gdb_assert (regnum >= 0);
575   gdb_assert (regnum < m_descr->nr_cooked_registers);
576   if (regnum < num_raw_registers ())
577     return raw_read (regnum, buf);
578   else if (m_has_pseudo
579            && m_register_status[regnum] != REG_UNKNOWN)
580     {
581       if (m_register_status[regnum] == REG_VALID)
582         memcpy (buf, register_buffer (regnum),
583                 m_descr->sizeof_register[regnum]);
584       else
585         memset (buf, 0, m_descr->sizeof_register[regnum]);
586
587       return m_register_status[regnum];
588     }
589   else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
590     {
591       struct value *mark, *computed;
592       enum register_status result = REG_VALID;
593
594       mark = value_mark ();
595
596       computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch,
597                                                      this, regnum);
598       if (value_entirely_available (computed))
599         memcpy (buf, value_contents_raw (computed),
600                 m_descr->sizeof_register[regnum]);
601       else
602         {
603           memset (buf, 0, m_descr->sizeof_register[regnum]);
604           result = REG_UNAVAILABLE;
605         }
606
607       value_free_to_mark (mark);
608
609       return result;
610     }
611   else
612     return gdbarch_pseudo_register_read (m_descr->gdbarch, this,
613                                          regnum, buf);
614 }
615
616 struct value *
617 readable_regcache::cooked_read_value (int regnum)
618 {
619   gdb_assert (regnum >= 0);
620   gdb_assert (regnum < m_descr->nr_cooked_registers);
621
622   if (regnum < num_raw_registers ()
623       || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
624       || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
625     {
626       struct value *result;
627
628       result = allocate_value (register_type (m_descr->gdbarch, regnum));
629       VALUE_LVAL (result) = lval_register;
630       VALUE_REGNUM (result) = regnum;
631
632       /* It is more efficient in general to do this delegation in this
633          direction than in the other one, even though the value-based
634          API is preferred.  */
635       if (cooked_read (regnum,
636                        value_contents_raw (result)) == REG_UNAVAILABLE)
637         mark_value_bytes_unavailable (result, 0,
638                                       TYPE_LENGTH (value_type (result)));
639
640       return result;
641     }
642   else
643     return gdbarch_pseudo_register_read_value (m_descr->gdbarch,
644                                                this, regnum);
645 }
646
647 enum register_status
648 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
649                              LONGEST *val)
650 {
651   gdb_assert (regcache != NULL);
652   return regcache->cooked_read (regnum, val);
653 }
654
655 template<typename T, typename>
656 enum register_status
657 readable_regcache::cooked_read (int regnum, T *val)
658 {
659   enum register_status status;
660   gdb_byte *buf;
661
662   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
663   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
664   status = cooked_read (regnum, buf);
665   if (status == REG_VALID)
666     *val = extract_integer<T> (buf, m_descr->sizeof_register[regnum],
667                                gdbarch_byte_order (m_descr->gdbarch));
668   else
669     *val = 0;
670   return status;
671 }
672
673 enum register_status
674 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
675                                ULONGEST *val)
676 {
677   gdb_assert (regcache != NULL);
678   return regcache->cooked_read (regnum, val);
679 }
680
681 void
682 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
683                               LONGEST val)
684 {
685   gdb_assert (regcache != NULL);
686   regcache->cooked_write (regnum, val);
687 }
688
689 template<typename T, typename>
690 void
691 regcache::cooked_write (int regnum, T val)
692 {
693   gdb_byte *buf;
694
695   gdb_assert (regnum >=0 && regnum < m_descr->nr_cooked_registers);
696   buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
697   store_integer (buf, m_descr->sizeof_register[regnum],
698                  gdbarch_byte_order (m_descr->gdbarch), val);
699   cooked_write (regnum, buf);
700 }
701
702 void
703 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
704                                 ULONGEST val)
705 {
706   gdb_assert (regcache != NULL);
707   regcache->cooked_write (regnum, val);
708 }
709
710 void
711 regcache::raw_write (int regnum, const gdb_byte *buf)
712 {
713
714   gdb_assert (buf != NULL);
715   assert_regnum (regnum);
716
717   /* On the sparc, writing %g0 is a no-op, so we don't even want to
718      change the registers array if something writes to this register.  */
719   if (gdbarch_cannot_store_register (arch (), regnum))
720     return;
721
722   /* If we have a valid copy of the register, and new value == old
723      value, then don't bother doing the actual store.  */
724   if (get_register_status (regnum) == REG_VALID
725       && (memcmp (register_buffer (regnum), buf,
726                   m_descr->sizeof_register[regnum]) == 0))
727     return;
728
729   target_prepare_to_store (this);
730   raw_supply (regnum, buf);
731
732   /* Invalidate the register after it is written, in case of a
733      failure.  */
734   auto invalidator
735     = make_scope_exit ([&] { this->invalidate (regnum); });
736
737   target_store_registers (this, regnum);
738
739   /* The target did not throw an error so we can discard invalidating
740      the register.  */
741   invalidator.release ();
742 }
743
744 void
745 regcache::cooked_write (int regnum, const gdb_byte *buf)
746 {
747   gdb_assert (regnum >= 0);
748   gdb_assert (regnum < m_descr->nr_cooked_registers);
749   if (regnum < num_raw_registers ())
750     raw_write (regnum, buf);
751   else
752     gdbarch_pseudo_register_write (m_descr->gdbarch, this,
753                                    regnum, buf);
754 }
755
756 /* See regcache.h.  */
757
758 enum register_status
759 readable_regcache::read_part (int regnum, int offset, int len,
760                               gdb_byte *out, bool is_raw)
761 {
762   int reg_size = register_size (arch (), regnum);
763
764   gdb_assert (out != NULL);
765   gdb_assert (offset >= 0 && offset <= reg_size);
766   gdb_assert (len >= 0 && offset + len <= reg_size);
767
768   if (offset == 0 && len == 0)
769     {
770       /* Nothing to do.  */
771       return REG_VALID;
772     }
773
774   if (offset == 0 && len == reg_size)
775     {
776       /* Read the full register.  */
777       return (is_raw) ? raw_read (regnum, out) : cooked_read (regnum, out);
778     }
779
780   enum register_status status;
781   gdb_byte *reg = (gdb_byte *) alloca (reg_size);
782
783   /* Read full register to buffer.  */
784   status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
785   if (status != REG_VALID)
786     return status;
787
788   /* Copy out.  */
789   memcpy (out, reg + offset, len);
790   return REG_VALID;
791 }
792
793 /* See regcache.h.  */
794
795 void
796 reg_buffer::raw_collect_part (int regnum, int offset, int len,
797                               gdb_byte *out) const
798 {
799   int reg_size = register_size (arch (), regnum);
800
801   gdb_assert (out != nullptr);
802   gdb_assert (offset >= 0 && offset <= reg_size);
803   gdb_assert (len >= 0 && offset + len <= reg_size);
804
805   if (offset == 0 && len == 0)
806     {
807       /* Nothing to do.  */
808       return;
809     }
810
811   if (offset == 0 && len == reg_size)
812     {
813       /* Collect the full register.  */
814       return raw_collect (regnum, out);
815     }
816
817   /* Read to buffer, then write out.  */
818   gdb_byte *reg = (gdb_byte *) alloca (reg_size);
819   raw_collect (regnum, reg);
820   memcpy (out, reg + offset, len);
821 }
822
823 /* See regcache.h.  */
824
825 enum register_status
826 regcache::write_part (int regnum, int offset, int len,
827                       const gdb_byte *in, bool is_raw)
828 {
829   int reg_size = register_size (arch (), regnum);
830
831   gdb_assert (in != NULL);
832   gdb_assert (offset >= 0 && offset <= reg_size);
833   gdb_assert (len >= 0 && offset + len <= reg_size);
834
835   if (offset == 0 && len == 0)
836     {
837       /* Nothing to do.  */
838       return REG_VALID;
839     }
840
841   if (offset == 0 && len == reg_size)
842     {
843       /* Write the full register.  */
844       (is_raw) ? raw_write (regnum, in) : cooked_write (regnum, in);
845       return REG_VALID;
846     }
847
848   enum register_status status;
849   gdb_byte *reg = (gdb_byte *) alloca (reg_size);
850
851   /* Read existing register to buffer.  */
852   status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
853   if (status != REG_VALID)
854     return status;
855
856   /* Update buffer, then write back to regcache.  */
857   memcpy (reg + offset, in, len);
858   is_raw ? raw_write (regnum, reg) : cooked_write (regnum, reg);
859   return REG_VALID;
860 }
861
862 /* See regcache.h.  */
863
864 void
865 reg_buffer::raw_supply_part (int regnum, int offset, int len,
866                              const gdb_byte *in)
867 {
868   int reg_size = register_size (arch (), regnum);
869
870   gdb_assert (in != nullptr);
871   gdb_assert (offset >= 0 && offset <= reg_size);
872   gdb_assert (len >= 0 && offset + len <= reg_size);
873
874   if (offset == 0 && len == 0)
875     {
876       /* Nothing to do.  */
877       return;
878     }
879
880   if (offset == 0 && len == reg_size)
881     {
882       /* Supply the full register.  */
883       return raw_supply (regnum, in);
884     }
885
886   gdb_byte *reg = (gdb_byte *) alloca (reg_size);
887
888   /* Read existing value to buffer.  */
889   raw_collect (regnum, reg);
890
891   /* Write to buffer, then write out.  */
892   memcpy (reg + offset, in, len);
893   raw_supply (regnum, reg);
894 }
895
896 enum register_status
897 readable_regcache::raw_read_part (int regnum, int offset, int len,
898                                   gdb_byte *buf)
899 {
900   assert_regnum (regnum);
901   return read_part (regnum, offset, len, buf, true);
902 }
903
904 /* See regcache.h.  */
905
906 void
907 regcache::raw_write_part (int regnum, int offset, int len,
908                           const gdb_byte *buf)
909 {
910   assert_regnum (regnum);
911   write_part (regnum, offset, len, buf, true);
912 }
913
914 /* See regcache.h.  */
915
916 enum register_status
917 readable_regcache::cooked_read_part (int regnum, int offset, int len,
918                                      gdb_byte *buf)
919 {
920   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
921   return read_part (regnum, offset, len, buf, false);
922 }
923
924 /* See regcache.h.  */
925
926 void
927 regcache::cooked_write_part (int regnum, int offset, int len,
928                              const gdb_byte *buf)
929 {
930   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
931   write_part (regnum, offset, len, buf, false);
932 }
933
934 /* See gdbsupport/common-regcache.h.  */
935
936 void
937 reg_buffer::raw_supply (int regnum, const void *buf)
938 {
939   void *regbuf;
940   size_t size;
941
942   assert_regnum (regnum);
943
944   regbuf = register_buffer (regnum);
945   size = m_descr->sizeof_register[regnum];
946
947   if (buf)
948     {
949       memcpy (regbuf, buf, size);
950       m_register_status[regnum] = REG_VALID;
951     }
952   else
953     {
954       /* This memset not strictly necessary, but better than garbage
955          in case the register value manages to escape somewhere (due
956          to a bug, no less).  */
957       memset (regbuf, 0, size);
958       m_register_status[regnum] = REG_UNAVAILABLE;
959     }
960 }
961
962 /* See regcache.h.  */
963
964 void
965 reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr,
966                                 int addr_len, bool is_signed)
967 {
968   enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
969   gdb_byte *regbuf;
970   size_t regsize;
971
972   assert_regnum (regnum);
973
974   regbuf = register_buffer (regnum);
975   regsize = m_descr->sizeof_register[regnum];
976
977   copy_integer_to_size (regbuf, regsize, addr, addr_len, is_signed,
978                         byte_order);
979   m_register_status[regnum] = REG_VALID;
980 }
981
982 /* See regcache.h.  */
983
984 void
985 reg_buffer::raw_supply_zeroed (int regnum)
986 {
987   void *regbuf;
988   size_t size;
989
990   assert_regnum (regnum);
991
992   regbuf = register_buffer (regnum);
993   size = m_descr->sizeof_register[regnum];
994
995   memset (regbuf, 0, size);
996   m_register_status[regnum] = REG_VALID;
997 }
998
999 /* See gdbsupport/common-regcache.h.  */
1000
1001 void
1002 reg_buffer::raw_collect (int regnum, void *buf) const
1003 {
1004   const void *regbuf;
1005   size_t size;
1006
1007   gdb_assert (buf != NULL);
1008   assert_regnum (regnum);
1009
1010   regbuf = register_buffer (regnum);
1011   size = m_descr->sizeof_register[regnum];
1012   memcpy (buf, regbuf, size);
1013 }
1014
1015 /* See regcache.h.  */
1016
1017 void
1018 reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
1019                                  bool is_signed) const
1020 {
1021   enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1022   const gdb_byte *regbuf;
1023   size_t regsize;
1024
1025   assert_regnum (regnum);
1026
1027   regbuf = register_buffer (regnum);
1028   regsize = m_descr->sizeof_register[regnum];
1029
1030   copy_integer_to_size (addr, addr_len, regbuf, regsize, is_signed,
1031                         byte_order);
1032 }
1033
1034 /* See regcache.h.  */
1035
1036 void
1037 regcache::transfer_regset_register (struct regcache *out_regcache, int regnum,
1038                                     const gdb_byte *in_buf, gdb_byte *out_buf,
1039                                     int slot_size, int offs) const
1040 {
1041   struct gdbarch *gdbarch = arch ();
1042   int reg_size = std::min (register_size (gdbarch, regnum), slot_size);
1043
1044   /* Use part versions and reg_size to prevent possible buffer overflows when
1045      accessing the regcache.  */
1046
1047   if (out_buf != nullptr)
1048     {
1049       raw_collect_part (regnum, 0, reg_size, out_buf + offs);
1050
1051       /* Ensure any additional space is cleared.  */
1052       if (slot_size > reg_size)
1053         memset (out_buf + offs + reg_size, 0, slot_size - reg_size);
1054     }
1055   else if (in_buf != nullptr)
1056     out_regcache->raw_supply_part (regnum, 0, reg_size, in_buf + offs);
1057   else
1058     {
1059       /* Invalidate the register.  */
1060       out_regcache->raw_supply (regnum, nullptr);
1061     }
1062 }
1063
1064 /* See regcache.h.  */
1065
1066 void
1067 regcache::transfer_regset (const struct regset *regset,
1068                            struct regcache *out_regcache,
1069                            int regnum, const gdb_byte *in_buf,
1070                            gdb_byte *out_buf, size_t size) const
1071 {
1072   const struct regcache_map_entry *map;
1073   int offs = 0, count;
1074
1075   for (map = (const struct regcache_map_entry *) regset->regmap;
1076        (count = map->count) != 0;
1077        map++)
1078     {
1079       int regno = map->regno;
1080       int slot_size = map->size;
1081
1082       if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1083         slot_size = m_descr->sizeof_register[regno];
1084
1085       if (regno == REGCACHE_MAP_SKIP
1086           || (regnum != -1
1087               && (regnum < regno || regnum >= regno + count)))
1088           offs += count * slot_size;
1089
1090       else if (regnum == -1)
1091         for (; count--; regno++, offs += slot_size)
1092           {
1093             if (offs + slot_size > size)
1094               break;
1095
1096             transfer_regset_register (out_regcache, regno, in_buf, out_buf,
1097                                       slot_size, offs);
1098           }
1099       else
1100         {
1101           /* Transfer a single register and return.  */
1102           offs += (regnum - regno) * slot_size;
1103           if (offs + slot_size > size)
1104             return;
1105
1106           transfer_regset_register (out_regcache, regnum, in_buf, out_buf,
1107                                     slot_size, offs);
1108           return;
1109         }
1110     }
1111 }
1112
1113 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1114    in REGSET.  If REGNUM is -1, do this for all registers in REGSET.
1115    If BUF is NULL, set the register(s) to "unavailable" status. */
1116
1117 void
1118 regcache_supply_regset (const struct regset *regset,
1119                         struct regcache *regcache,
1120                         int regnum, const void *buf, size_t size)
1121 {
1122   regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size);
1123 }
1124
1125 void
1126 regcache::supply_regset (const struct regset *regset,
1127                          int regnum, const void *buf, size_t size)
1128 {
1129   transfer_regset (regset, this, regnum, (const gdb_byte *) buf, nullptr, size);
1130 }
1131
1132 /* Collect register REGNUM from REGCACHE to BUF, using the register
1133    map in REGSET.  If REGNUM is -1, do this for all registers in
1134    REGSET.  */
1135
1136 void
1137 regcache_collect_regset (const struct regset *regset,
1138                          const struct regcache *regcache,
1139                          int regnum, void *buf, size_t size)
1140 {
1141   regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size);
1142 }
1143
1144 void
1145 regcache::collect_regset (const struct regset *regset,
1146                          int regnum, void *buf, size_t size) const
1147 {
1148   transfer_regset (regset, nullptr, regnum, nullptr, (gdb_byte *) buf, size);
1149 }
1150
1151 /* See gdbsupport/common-regcache.h.  */
1152
1153 bool
1154 reg_buffer::raw_compare (int regnum, const void *buf, int offset) const
1155 {
1156   gdb_assert (buf != NULL);
1157   assert_regnum (regnum);
1158
1159   const char *regbuf = (const char *) register_buffer (regnum);
1160   size_t size = m_descr->sizeof_register[regnum];
1161   gdb_assert (size >= offset);
1162
1163   return (memcmp (buf, regbuf + offset, size - offset) == 0);
1164 }
1165
1166 /* Special handling for register PC.  */
1167
1168 CORE_ADDR
1169 regcache_read_pc (struct regcache *regcache)
1170 {
1171   struct gdbarch *gdbarch = regcache->arch ();
1172
1173   CORE_ADDR pc_val;
1174
1175   if (gdbarch_read_pc_p (gdbarch))
1176     pc_val = gdbarch_read_pc (gdbarch, regcache);
1177   /* Else use per-frame method on get_current_frame.  */
1178   else if (gdbarch_pc_regnum (gdbarch) >= 0)
1179     {
1180       ULONGEST raw_val;
1181
1182       if (regcache_cooked_read_unsigned (regcache,
1183                                          gdbarch_pc_regnum (gdbarch),
1184                                          &raw_val) == REG_UNAVAILABLE)
1185         throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
1186
1187       pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
1188     }
1189   else
1190     internal_error (__FILE__, __LINE__,
1191                     _("regcache_read_pc: Unable to find PC"));
1192   return pc_val;
1193 }
1194
1195 void
1196 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
1197 {
1198   struct gdbarch *gdbarch = regcache->arch ();
1199
1200   if (gdbarch_write_pc_p (gdbarch))
1201     gdbarch_write_pc (gdbarch, regcache, pc);
1202   else if (gdbarch_pc_regnum (gdbarch) >= 0)
1203     regcache_cooked_write_unsigned (regcache,
1204                                     gdbarch_pc_regnum (gdbarch), pc);
1205   else
1206     internal_error (__FILE__, __LINE__,
1207                     _("regcache_write_pc: Unable to update PC"));
1208
1209   /* Writing the PC (for instance, from "load") invalidates the
1210      current frame.  */
1211   reinit_frame_cache ();
1212 }
1213
1214 int
1215 reg_buffer::num_raw_registers () const
1216 {
1217   return gdbarch_num_regs (arch ());
1218 }
1219
1220 void
1221 regcache::debug_print_register (const char *func,  int regno)
1222 {
1223   struct gdbarch *gdbarch = arch ();
1224
1225   fprintf_unfiltered (gdb_stdlog, "%s ", func);
1226   if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
1227       && gdbarch_register_name (gdbarch, regno) != NULL
1228       && gdbarch_register_name (gdbarch, regno)[0] != '\0')
1229     fprintf_unfiltered (gdb_stdlog, "(%s)",
1230                         gdbarch_register_name (gdbarch, regno));
1231   else
1232     fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1233   if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1234     {
1235       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1236       int size = register_size (gdbarch, regno);
1237       gdb_byte *buf = register_buffer (regno);
1238
1239       fprintf_unfiltered (gdb_stdlog, " = ");
1240       for (int i = 0; i < size; i++)
1241         {
1242           fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1243         }
1244       if (size <= sizeof (LONGEST))
1245         {
1246           ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
1247
1248           fprintf_unfiltered (gdb_stdlog, " %s %s",
1249                               core_addr_to_string_nz (val), plongest (val));
1250         }
1251     }
1252   fprintf_unfiltered (gdb_stdlog, "\n");
1253 }
1254
1255 static void
1256 reg_flush_command (const char *command, int from_tty)
1257 {
1258   /* Force-flush the register cache.  */
1259   registers_changed ();
1260   if (from_tty)
1261     printf_filtered (_("Register cache flushed.\n"));
1262 }
1263
1264 void
1265 register_dump::dump (ui_file *file)
1266 {
1267   auto descr = regcache_descr (m_gdbarch);
1268   int regnum;
1269   int footnote_nr = 0;
1270   int footnote_register_offset = 0;
1271   int footnote_register_type_name_null = 0;
1272   long register_offset = 0;
1273
1274   gdb_assert (descr->nr_cooked_registers
1275               == gdbarch_num_cooked_regs (m_gdbarch));
1276
1277   for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++)
1278     {
1279       /* Name.  */
1280       if (regnum < 0)
1281         fprintf_unfiltered (file, " %-10s", "Name");
1282       else
1283         {
1284           const char *p = gdbarch_register_name (m_gdbarch, regnum);
1285
1286           if (p == NULL)
1287             p = "";
1288           else if (p[0] == '\0')
1289             p = "''";
1290           fprintf_unfiltered (file, " %-10s", p);
1291         }
1292
1293       /* Number.  */
1294       if (regnum < 0)
1295         fprintf_unfiltered (file, " %4s", "Nr");
1296       else
1297         fprintf_unfiltered (file, " %4d", regnum);
1298
1299       /* Relative number.  */
1300       if (regnum < 0)
1301         fprintf_unfiltered (file, " %4s", "Rel");
1302       else if (regnum < gdbarch_num_regs (m_gdbarch))
1303         fprintf_unfiltered (file, " %4d", regnum);
1304       else
1305         fprintf_unfiltered (file, " %4d",
1306                             (regnum - gdbarch_num_regs (m_gdbarch)));
1307
1308       /* Offset.  */
1309       if (regnum < 0)
1310         fprintf_unfiltered (file, " %6s  ", "Offset");
1311       else
1312         {
1313           fprintf_unfiltered (file, " %6ld",
1314                               descr->register_offset[regnum]);
1315           if (register_offset != descr->register_offset[regnum]
1316               || (regnum > 0
1317                   && (descr->register_offset[regnum]
1318                       != (descr->register_offset[regnum - 1]
1319                           + descr->sizeof_register[regnum - 1])))
1320               )
1321             {
1322               if (!footnote_register_offset)
1323                 footnote_register_offset = ++footnote_nr;
1324               fprintf_unfiltered (file, "*%d", footnote_register_offset);
1325             }
1326           else
1327             fprintf_unfiltered (file, "  ");
1328           register_offset = (descr->register_offset[regnum]
1329                              + descr->sizeof_register[regnum]);
1330         }
1331
1332       /* Size.  */
1333       if (regnum < 0)
1334         fprintf_unfiltered (file, " %5s ", "Size");
1335       else
1336         fprintf_unfiltered (file, " %5ld", descr->sizeof_register[regnum]);
1337
1338       /* Type.  */
1339       {
1340         const char *t;
1341         std::string name_holder;
1342
1343         if (regnum < 0)
1344           t = "Type";
1345         else
1346           {
1347             static const char blt[] = "builtin_type";
1348
1349             t = TYPE_NAME (register_type (m_gdbarch, regnum));
1350             if (t == NULL)
1351               {
1352                 if (!footnote_register_type_name_null)
1353                   footnote_register_type_name_null = ++footnote_nr;
1354                 name_holder = string_printf ("*%d",
1355                                              footnote_register_type_name_null);
1356                 t = name_holder.c_str ();
1357               }
1358             /* Chop a leading builtin_type.  */
1359             if (startswith (t, blt))
1360               t += strlen (blt);
1361           }
1362         fprintf_unfiltered (file, " %-15s", t);
1363       }
1364
1365       /* Leading space always present.  */
1366       fprintf_unfiltered (file, " ");
1367
1368       dump_reg (file, regnum);
1369
1370       fprintf_unfiltered (file, "\n");
1371     }
1372
1373   if (footnote_register_offset)
1374     fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1375                         footnote_register_offset);
1376   if (footnote_register_type_name_null)
1377     fprintf_unfiltered (file,
1378                         "*%d: Register type's name NULL.\n",
1379                         footnote_register_type_name_null);
1380 }
1381
1382 #if GDB_SELF_TEST
1383 #include "gdbsupport/selftest.h"
1384 #include "selftest-arch.h"
1385 #include "target-float.h"
1386
1387 namespace selftests {
1388
1389 class regcache_access : public regcache
1390 {
1391 public:
1392
1393   /* Return the number of elements in current_regcache.  */
1394
1395   static size_t
1396   current_regcache_size ()
1397   {
1398     return std::distance (regcache::current_regcache.begin (),
1399                           regcache::current_regcache.end ());
1400   }
1401 };
1402
1403 static void
1404 current_regcache_test (void)
1405 {
1406   /* It is empty at the start.  */
1407   SELF_CHECK (regcache_access::current_regcache_size () == 0);
1408
1409   ptid_t ptid1 (1), ptid2 (2), ptid3 (3);
1410
1411   /* Get regcache from ptid1, a new regcache is added to
1412      current_regcache.  */
1413   regcache *regcache = get_thread_arch_aspace_regcache (ptid1,
1414                                                         target_gdbarch (),
1415                                                         NULL);
1416
1417   SELF_CHECK (regcache != NULL);
1418   SELF_CHECK (regcache->ptid () == ptid1);
1419   SELF_CHECK (regcache_access::current_regcache_size () == 1);
1420
1421   /* Get regcache from ptid2, a new regcache is added to
1422      current_regcache.  */
1423   regcache = get_thread_arch_aspace_regcache (ptid2,
1424                                               target_gdbarch (),
1425                                               NULL);
1426   SELF_CHECK (regcache != NULL);
1427   SELF_CHECK (regcache->ptid () == ptid2);
1428   SELF_CHECK (regcache_access::current_regcache_size () == 2);
1429
1430   /* Get regcache from ptid3, a new regcache is added to
1431      current_regcache.  */
1432   regcache = get_thread_arch_aspace_regcache (ptid3,
1433                                               target_gdbarch (),
1434                                               NULL);
1435   SELF_CHECK (regcache != NULL);
1436   SELF_CHECK (regcache->ptid () == ptid3);
1437   SELF_CHECK (regcache_access::current_regcache_size () == 3);
1438
1439   /* Get regcache from ptid2 again, nothing is added to
1440      current_regcache.  */
1441   regcache = get_thread_arch_aspace_regcache (ptid2,
1442                                               target_gdbarch (),
1443                                               NULL);
1444   SELF_CHECK (regcache != NULL);
1445   SELF_CHECK (regcache->ptid () == ptid2);
1446   SELF_CHECK (regcache_access::current_regcache_size () == 3);
1447
1448   /* Mark ptid2 is changed, so regcache of ptid2 should be removed from
1449      current_regcache.  */
1450   registers_changed_ptid (ptid2);
1451   SELF_CHECK (regcache_access::current_regcache_size () == 2);
1452 }
1453
1454 class target_ops_no_register : public test_target_ops
1455 {
1456 public:
1457   target_ops_no_register ()
1458     : test_target_ops {}
1459   {}
1460
1461   void reset ()
1462   {
1463     fetch_registers_called = 0;
1464     store_registers_called = 0;
1465     xfer_partial_called = 0;
1466   }
1467
1468   void fetch_registers (regcache *regs, int regno) override;
1469   void store_registers (regcache *regs, int regno) override;
1470
1471   enum target_xfer_status xfer_partial (enum target_object object,
1472                                         const char *annex, gdb_byte *readbuf,
1473                                         const gdb_byte *writebuf,
1474                                         ULONGEST offset, ULONGEST len,
1475                                         ULONGEST *xfered_len) override;
1476
1477   unsigned int fetch_registers_called = 0;
1478   unsigned int store_registers_called = 0;
1479   unsigned int xfer_partial_called = 0;
1480 };
1481
1482 void
1483 target_ops_no_register::fetch_registers (regcache *regs, int regno)
1484 {
1485   /* Mark register available.  */
1486   regs->raw_supply_zeroed (regno);
1487   this->fetch_registers_called++;
1488 }
1489
1490 void
1491 target_ops_no_register::store_registers (regcache *regs, int regno)
1492 {
1493   this->store_registers_called++;
1494 }
1495
1496 enum target_xfer_status
1497 target_ops_no_register::xfer_partial (enum target_object object,
1498                                       const char *annex, gdb_byte *readbuf,
1499                                       const gdb_byte *writebuf,
1500                                       ULONGEST offset, ULONGEST len,
1501                                       ULONGEST *xfered_len)
1502 {
1503   this->xfer_partial_called++;
1504
1505   *xfered_len = len;
1506   return TARGET_XFER_OK;
1507 }
1508
1509 class readwrite_regcache : public regcache
1510 {
1511 public:
1512   readwrite_regcache (struct gdbarch *gdbarch)
1513     : regcache (gdbarch, nullptr)
1514   {}
1515 };
1516
1517 /* Test regcache::cooked_read gets registers from raw registers and
1518    memory instead of target to_{fetch,store}_registers.  */
1519
1520 static void
1521 cooked_read_test (struct gdbarch *gdbarch)
1522 {
1523   /* Error out if debugging something, because we're going to push the
1524      test target, which would pop any existing target.  */
1525   if (current_top_target ()->stratum () >= process_stratum)
1526     error (_("target already pushed"));
1527
1528   /* Create a mock environment.  An inferior with a thread, with a
1529      process_stratum target pushed.  */
1530
1531   target_ops_no_register mock_target;
1532   ptid_t mock_ptid (1, 1);
1533   inferior mock_inferior (mock_ptid.pid ());
1534   address_space mock_aspace {};
1535   mock_inferior.gdbarch = gdbarch;
1536   mock_inferior.aspace = &mock_aspace;
1537   thread_info mock_thread (&mock_inferior, mock_ptid);
1538
1539   /* Add the mock inferior to the inferior list so that look ups by
1540      target+ptid can find it.  */
1541   scoped_restore restore_inferior_list
1542     = make_scoped_restore (&inferior_list);
1543   inferior_list = &mock_inferior;
1544
1545   /* Switch to the mock inferior.  */
1546   scoped_restore_current_inferior restore_current_inferior;
1547   set_current_inferior (&mock_inferior);
1548
1549   /* Push the process_stratum target so we can mock accessing
1550      registers.  */
1551   push_target (&mock_target);
1552
1553   /* Pop it again on exit (return/exception).  */
1554   struct on_exit
1555   {
1556     ~on_exit ()
1557     {
1558       pop_all_targets_at_and_above (process_stratum);
1559     }
1560   } pop_targets;
1561
1562   /* Switch to the mock thread.  */
1563   scoped_restore restore_inferior_ptid
1564     = make_scoped_restore (&inferior_ptid, mock_ptid);
1565
1566   /* Test that read one raw register from regcache_no_target will go
1567      to the target layer.  */
1568
1569   /* Find a raw register which size isn't zero.  */
1570   int nonzero_regnum;
1571   for (nonzero_regnum = 0;
1572        nonzero_regnum < gdbarch_num_regs (gdbarch);
1573        nonzero_regnum++)
1574     {
1575       if (register_size (gdbarch, nonzero_regnum) != 0)
1576         break;
1577     }
1578
1579   readwrite_regcache readwrite (gdbarch);
1580   gdb::def_vector<gdb_byte> buf (register_size (gdbarch, nonzero_regnum));
1581
1582   readwrite.raw_read (nonzero_regnum, buf.data ());
1583
1584   /* raw_read calls target_fetch_registers.  */
1585   SELF_CHECK (mock_target.fetch_registers_called > 0);
1586   mock_target.reset ();
1587
1588   /* Mark all raw registers valid, so the following raw registers
1589      accesses won't go to target.  */
1590   for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++)
1591     readwrite.raw_update (i);
1592
1593   mock_target.reset ();
1594   /* Then, read all raw and pseudo registers, and don't expect calling
1595      to_{fetch,store}_registers.  */
1596   for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1597     {
1598       if (register_size (gdbarch, regnum) == 0)
1599         continue;
1600
1601       gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum));
1602
1603       SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum,
1604                                                       inner_buf.data ()));
1605
1606       SELF_CHECK (mock_target.fetch_registers_called == 0);
1607       SELF_CHECK (mock_target.store_registers_called == 0);
1608
1609       /* Some SPU pseudo registers are got via TARGET_OBJECT_SPU.  */
1610       if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
1611         SELF_CHECK (mock_target.xfer_partial_called == 0);
1612
1613       mock_target.reset ();
1614     }
1615
1616   readonly_detached_regcache readonly (readwrite);
1617
1618   /* GDB may go to target layer to fetch all registers and memory for
1619      readonly regcache.  */
1620   mock_target.reset ();
1621
1622   for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1623     {
1624       if (register_size (gdbarch, regnum) == 0)
1625         continue;
1626
1627       gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum));
1628       enum register_status status = readonly.cooked_read (regnum,
1629                                                           inner_buf.data ());
1630
1631       if (regnum < gdbarch_num_regs (gdbarch))
1632         {
1633           auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1634
1635           if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300
1636               || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh
1637               || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850
1638               || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep
1639               || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850
1640               || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300
1641               || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score
1642               || bfd_arch == bfd_arch_riscv || bfd_arch == bfd_arch_csky)
1643             {
1644               /* Raw registers.  If raw registers are not in save_reggroup,
1645                  their status are unknown.  */
1646               if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1647                 SELF_CHECK (status == REG_VALID);
1648               else
1649                 SELF_CHECK (status == REG_UNKNOWN);
1650             }
1651           else
1652             SELF_CHECK (status == REG_VALID);
1653         }
1654       else
1655         {
1656           if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1657             SELF_CHECK (status == REG_VALID);
1658           else
1659             {
1660               /* If pseudo registers are not in save_reggroup, some of
1661                  them can be computed from saved raw registers, but some
1662                  of them are unknown.  */
1663               auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1664
1665               if (bfd_arch == bfd_arch_frv
1666                   || bfd_arch == bfd_arch_m32c
1667                   || bfd_arch == bfd_arch_mep
1668                   || bfd_arch == bfd_arch_sh)
1669                 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN);
1670               else if (bfd_arch == bfd_arch_mips
1671                        || bfd_arch == bfd_arch_h8300)
1672                 SELF_CHECK (status == REG_UNKNOWN);
1673               else
1674                 SELF_CHECK (status == REG_VALID);
1675             }
1676         }
1677
1678       SELF_CHECK (mock_target.fetch_registers_called == 0);
1679       SELF_CHECK (mock_target.store_registers_called == 0);
1680       SELF_CHECK (mock_target.xfer_partial_called == 0);
1681
1682       mock_target.reset ();
1683     }
1684 }
1685
1686 /* Test regcache::cooked_write by writing some expected contents to
1687    registers, and checking that contents read from registers and the
1688    expected contents are the same.  */
1689
1690 static void
1691 cooked_write_test (struct gdbarch *gdbarch)
1692 {
1693   /* Error out if debugging something, because we're going to push the
1694      test target, which would pop any existing target.  */
1695   if (current_top_target ()->stratum () >= process_stratum)
1696     error (_("target already pushed"));
1697
1698   /* Create a mock environment.  A process_stratum target pushed.  */
1699
1700   target_ops_no_register mock_target;
1701
1702   /* Push the process_stratum target so we can mock accessing
1703      registers.  */
1704   push_target (&mock_target);
1705
1706   /* Pop it again on exit (return/exception).  */
1707   struct on_exit
1708   {
1709     ~on_exit ()
1710     {
1711       pop_all_targets_at_and_above (process_stratum);
1712     }
1713   } pop_targets;
1714
1715   readwrite_regcache readwrite (gdbarch);
1716
1717   const int num_regs = gdbarch_num_cooked_regs (gdbarch);
1718
1719   for (auto regnum = 0; regnum < num_regs; regnum++)
1720     {
1721       if (register_size (gdbarch, regnum) == 0
1722           || gdbarch_cannot_store_register (gdbarch, regnum))
1723         continue;
1724
1725       auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1726
1727       if ((bfd_arch == bfd_arch_sparc
1728            /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
1729               SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test.  */
1730            && gdbarch_ptr_bit (gdbarch) == 64
1731            && (regnum >= gdbarch_num_regs (gdbarch)
1732                && regnum <= gdbarch_num_regs (gdbarch) + 4))
1733           || (bfd_arch == bfd_arch_spu
1734               /* SPU pseudo registers except SPU_SP_REGNUM are got by
1735                  TARGET_OBJECT_SPU.  */
1736               && regnum >= gdbarch_num_regs (gdbarch) && regnum != 130))
1737         continue;
1738
1739       std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0);
1740       std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0);
1741       const auto type = register_type (gdbarch, regnum);
1742
1743       if (TYPE_CODE (type) == TYPE_CODE_FLT
1744           || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1745         {
1746           /* Generate valid float format.  */
1747           target_float_from_string (expected.data (), type, "1.25");
1748         }
1749       else if (TYPE_CODE (type) == TYPE_CODE_INT
1750                || TYPE_CODE (type) == TYPE_CODE_ARRAY
1751                || TYPE_CODE (type) == TYPE_CODE_PTR
1752                || TYPE_CODE (type) == TYPE_CODE_UNION
1753                || TYPE_CODE (type) == TYPE_CODE_STRUCT)
1754         {
1755           if (bfd_arch == bfd_arch_ia64
1756               || (regnum >= gdbarch_num_regs (gdbarch)
1757                   && (bfd_arch == bfd_arch_xtensa
1758                       || bfd_arch == bfd_arch_bfin
1759                       || bfd_arch == bfd_arch_m32c
1760                       /* m68hc11 pseudo registers are in memory.  */
1761                       || bfd_arch == bfd_arch_m68hc11
1762                       || bfd_arch == bfd_arch_m68hc12
1763                       || bfd_arch == bfd_arch_s390))
1764               || (bfd_arch == bfd_arch_frv
1765                   /* FRV pseudo registers except iacc0.  */
1766                   && regnum > gdbarch_num_regs (gdbarch)))
1767             {
1768               /* Skip setting the expected values for some architecture
1769                  registers.  */
1770             }
1771           else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
1772             {
1773               /* RL78_PC_REGNUM */
1774               for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
1775                 expected[j] = j;
1776             }
1777           else
1778             {
1779               for (auto j = 0; j < register_size (gdbarch, regnum); j++)
1780                 expected[j] = j;
1781             }
1782         }
1783       else if (TYPE_CODE (type) == TYPE_CODE_FLAGS)
1784         {
1785           /* No idea how to test flags.  */
1786           continue;
1787         }
1788       else
1789         {
1790           /* If we don't know how to create the expected value for the
1791              this type, make it fail.  */
1792           SELF_CHECK (0);
1793         }
1794
1795       readwrite.cooked_write (regnum, expected.data ());
1796
1797       SELF_CHECK (readwrite.cooked_read (regnum, buf.data ()) == REG_VALID);
1798       SELF_CHECK (expected == buf);
1799     }
1800 }
1801
1802 } // namespace selftests
1803 #endif /* GDB_SELF_TEST */
1804
1805 void
1806 _initialize_regcache (void)
1807 {
1808   regcache_descr_handle
1809     = gdbarch_data_register_post_init (init_regcache_descr);
1810
1811   gdb::observers::target_changed.attach (regcache_observer_target_changed);
1812   gdb::observers::thread_ptid_changed.attach
1813     (regcache::regcache_thread_ptid_changed);
1814
1815   add_com ("flushregs", class_maintenance, reg_flush_command,
1816            _("Force gdb to flush its register cache (maintainer command)."));
1817
1818 #if GDB_SELF_TEST
1819   selftests::register_test ("current_regcache", selftests::current_regcache_test);
1820
1821   selftests::register_test_foreach_arch ("regcache::cooked_read_test",
1822                                          selftests::cooked_read_test);
1823   selftests::register_test_foreach_arch ("regcache::cooked_write_test",
1824                                          selftests::cooked_write_test);
1825 #endif
1826 }