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