Fix examples of the use of the linker script TYPE keyword
[binutils-gdb.git] / gdb / regcache.c
blobf2c403b88d0c58352d0e11d3e2c2c92ce2b0c40d
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
3 Copyright (C) 1986-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
20 #include "extract-store-integer.h"
21 #include "inferior.h"
22 #include "gdbthread.h"
23 #include "target.h"
24 #include "test-target.h"
25 #include "scoped-mock-context.h"
26 #include "gdbarch.h"
27 #include "regcache.h"
28 #include "reggroups.h"
29 #include "observable.h"
30 #include "regset.h"
31 #include <unordered_map>
32 #include "cli/cli-cmds.h"
35 * DATA STRUCTURE
37 * Here is the actual register cache.
40 /* Per-architecture object describing the layout of a register cache.
41 Computed once when the architecture is created. */
43 struct regcache_descr
45 /* The architecture this descriptor belongs to. */
46 struct gdbarch *gdbarch = nullptr;
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 = 0;
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 = 0;
62 long sizeof_cooked_registers = 0;
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 = nullptr;
69 long *sizeof_register = nullptr;
71 /* Cached table containing the type of each register. */
72 struct type **register_type = nullptr;
75 static const registry<gdbarch>::key<struct regcache_descr>
76 regcache_descr_handle;
78 static struct regcache_descr *
79 init_regcache_descr (struct gdbarch *gdbarch)
81 int i;
82 struct regcache_descr *descr;
83 gdb_assert (gdbarch != NULL);
85 /* Create an initial, zero filled, table. */
86 descr = new struct regcache_descr;
87 descr->gdbarch = gdbarch;
89 /* Total size of the register space. The raw registers are mapped
90 directly onto the raw register cache while the pseudo's are
91 either mapped onto raw-registers or memory. */
92 descr->nr_cooked_registers = gdbarch_num_cooked_regs (gdbarch);
94 /* Fill in a table of register types. */
95 descr->register_type
96 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
97 struct type *);
98 for (i = 0; i < descr->nr_cooked_registers; i++)
99 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
101 /* Construct a strictly RAW register cache. Don't allow pseudo's
102 into the register cache. */
104 /* Lay out the register cache.
106 NOTE: cagney/2002-05-22: Only register_type () is used when
107 constructing the register cache. It is assumed that the
108 register's raw size, virtual size and type length are all the
109 same. */
112 long offset = 0;
114 descr->sizeof_register
115 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
116 descr->register_offset
117 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
118 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
120 descr->sizeof_register[i] = descr->register_type[i]->length ();
121 descr->register_offset[i] = offset;
122 offset += descr->sizeof_register[i];
124 /* Set the real size of the raw register cache buffer. */
125 descr->sizeof_raw_registers = offset;
127 for (; i < descr->nr_cooked_registers; i++)
129 descr->sizeof_register[i] = descr->register_type[i]->length ();
130 descr->register_offset[i] = offset;
131 offset += descr->sizeof_register[i];
133 /* Set the real size of the readonly register cache buffer. */
134 descr->sizeof_cooked_registers = offset;
137 return descr;
140 static struct regcache_descr *
141 regcache_descr (struct gdbarch *gdbarch)
143 struct regcache_descr *result = regcache_descr_handle.get (gdbarch);
144 if (result == nullptr)
146 result = init_regcache_descr (gdbarch);
147 regcache_descr_handle.set (gdbarch, result);
150 return result;
153 /* Utility functions returning useful register attributes stored in
154 the regcache descr. */
156 struct type *
157 register_type (struct gdbarch *gdbarch, int regnum)
159 struct regcache_descr *descr = regcache_descr (gdbarch);
161 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
162 return descr->register_type[regnum];
165 /* Utility functions returning useful register attributes stored in
166 the regcache descr. */
169 register_size (struct gdbarch *gdbarch, int regnum)
171 struct regcache_descr *descr = regcache_descr (gdbarch);
172 int size;
174 gdb_assert (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch));
175 size = descr->sizeof_register[regnum];
176 return size;
179 /* See gdbsupport/common-regcache.h. */
182 regcache_register_size (const reg_buffer_common *regcache, int n)
184 return register_size
185 (gdb::checked_static_cast<const struct regcache *> (regcache)->arch (), n);
188 reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
189 : m_has_pseudo (has_pseudo)
191 gdb_assert (gdbarch != NULL);
192 m_descr = regcache_descr (gdbarch);
194 /* We don't zero-initialize the M_REGISTERS array, as the bytes it contains
195 aren't meaningful as long as the corresponding register status is not
196 REG_VALID. */
197 if (has_pseudo)
199 m_registers.reset (new gdb_byte[m_descr->sizeof_cooked_registers]);
200 m_register_status.reset
201 (new register_status[m_descr->nr_cooked_registers] ());
203 else
205 m_registers.reset (new gdb_byte[m_descr->sizeof_raw_registers]);
206 m_register_status.reset
207 (new register_status[gdbarch_num_regs (gdbarch)] ());
211 regcache::regcache (inferior *inf_for_target_calls, gdbarch *gdbarch)
212 /* The register buffers. A read/write register cache can only hold
213 [0 .. gdbarch_num_regs). */
214 : detached_regcache (gdbarch, false),
215 m_inf_for_target_calls (inf_for_target_calls)
217 m_ptid = minus_one_ptid;
220 readonly_detached_regcache::readonly_detached_regcache (regcache &src)
221 : readonly_detached_regcache (src.arch (),
222 [&src] (int regnum,
223 gdb::array_view<gdb_byte> buf)
224 { return src.cooked_read (regnum, buf); })
228 gdbarch *
229 reg_buffer::arch () const
231 return m_descr->gdbarch;
234 /* Helper for reg_buffer::register_buffer. */
236 template<typename ElemType>
237 gdb::array_view<ElemType>
238 reg_buffer::register_buffer (int regnum) const
240 assert_regnum (regnum);
241 ElemType *start = &m_registers[m_descr->register_offset[regnum]];
242 int size = m_descr->sizeof_register[regnum];
243 return gdb::array_view<ElemType> (start, size);
246 /* See regcache.h. */
248 gdb::array_view<const gdb_byte>
249 reg_buffer::register_buffer (int regnum) const
251 return register_buffer<const gdb_byte> (regnum);
254 /* See regcache.h. */
256 gdb::array_view<gdb_byte>
257 reg_buffer::register_buffer (int regnum)
259 return register_buffer<gdb_byte> (regnum);
262 void
263 reg_buffer::save (register_read_ftype cooked_read)
265 struct gdbarch *gdbarch = m_descr->gdbarch;
267 /* It should have pseudo registers. */
268 gdb_assert (m_has_pseudo);
269 /* Clear the dest. */
270 memset (m_registers.get (), 0, m_descr->sizeof_cooked_registers);
271 memset (m_register_status.get (), REG_UNKNOWN, m_descr->nr_cooked_registers);
272 /* Copy over any registers (identified by their membership in the
273 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
274 gdbarch_num_pseudo_regs) range is checked since some architectures need
275 to save/restore `cooked' registers that live in memory. */
276 for (int regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
278 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
280 gdb::array_view<gdb_byte> dst_buf = register_buffer (regnum);
281 register_status status = cooked_read (regnum, dst_buf);
283 gdb_assert (status != REG_UNKNOWN);
285 if (status != REG_VALID)
286 memset (dst_buf.data (), 0, dst_buf.size ());
288 m_register_status[regnum] = status;
293 void
294 regcache::restore (readonly_detached_regcache *src)
296 struct gdbarch *gdbarch = m_descr->gdbarch;
297 int regnum;
299 gdb_assert (src != NULL);
300 gdb_assert (src->m_has_pseudo);
302 gdb_assert (gdbarch == src->arch ());
304 /* Copy over any registers, being careful to only restore those that
305 were both saved and need to be restored. The full [0 .. gdbarch_num_regs
306 + gdbarch_num_pseudo_regs) range is checked since some architectures need
307 to save/restore `cooked' registers that live in memory. */
308 for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
310 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
312 if (src->m_register_status[regnum] == REG_VALID)
313 cooked_write (regnum, src->register_buffer (regnum));
318 /* See gdbsupport/common-regcache.h. */
320 enum register_status
321 reg_buffer::get_register_status (int regnum) const
323 assert_regnum (regnum);
325 return m_register_status[regnum];
328 void
329 reg_buffer::invalidate (int regnum)
331 assert_regnum (regnum);
332 m_register_status[regnum] = REG_UNKNOWN;
335 void
336 reg_buffer::assert_regnum (int regnum) const
338 gdb_assert (regnum >= 0);
339 if (m_has_pseudo)
340 gdb_assert (regnum < m_descr->nr_cooked_registers);
341 else
342 gdb_assert (regnum < gdbarch_num_regs (arch ()));
345 /* Type to map a ptid to a list of regcaches (one thread may have multiple
346 regcaches, associated to different gdbarches). */
348 using ptid_regcache_map
349 = std::unordered_multimap<ptid_t, regcache_up>;
351 /* Type holding regcaches for a given pid. */
353 using pid_ptid_regcache_map = std::unordered_map<int, ptid_regcache_map>;
355 /* Type holding regcaches for a given target. */
357 using target_pid_ptid_regcache_map
358 = std::unordered_map<process_stratum_target *, pid_ptid_regcache_map>;
360 /* Global structure containing the existing regcaches. */
362 /* NOTE: this is a write-through cache. There is no "dirty" bit for
363 recording if the register values have been changed (eg. by the
364 user). Therefore all registers must be written back to the
365 target when appropriate. */
366 static target_pid_ptid_regcache_map regcaches;
368 regcache *
369 get_thread_arch_regcache (inferior *inf_for_target_calls, ptid_t ptid,
370 gdbarch *arch)
372 gdb_assert (inf_for_target_calls != nullptr);
374 process_stratum_target *proc_target = inf_for_target_calls->process_target ();
375 gdb_assert (proc_target != nullptr);
377 /* Find the map for this target. */
378 pid_ptid_regcache_map &pid_ptid_regc_map = regcaches[proc_target];
380 /* Find the map for this pid. */
381 ptid_regcache_map &ptid_regc_map = pid_ptid_regc_map[ptid.pid ()];
383 /* Check first if a regcache for this arch already exists. */
384 auto range = ptid_regc_map.equal_range (ptid);
385 for (auto it = range.first; it != range.second; ++it)
387 if (it->second->arch () == arch)
388 return it->second.get ();
391 /* It does not exist, create it. */
392 regcache *new_regcache = new regcache (inf_for_target_calls, arch);
393 new_regcache->set_ptid (ptid);
394 /* Work around a problem with g++ 4.8 (PR96537): Call the regcache_up
395 constructor explicitly instead of implicitly. */
396 ptid_regc_map.insert (std::make_pair (ptid, regcache_up (new_regcache)));
398 return new_regcache;
401 static process_stratum_target *current_thread_target;
402 static ptid_t current_thread_ptid;
403 static struct gdbarch *current_thread_arch;
405 struct regcache *
406 get_thread_regcache (process_stratum_target *target, ptid_t ptid)
408 inferior *inf = find_inferior_ptid (target, ptid);
410 if (!current_thread_arch
411 || target != current_thread_target
412 || current_thread_ptid != ptid)
414 gdb_assert (ptid != null_ptid);
416 current_thread_ptid = ptid;
417 current_thread_target = target;
419 scoped_restore_current_inferior restore_current_inferior;
420 set_current_inferior (inf);
421 current_thread_arch = target_thread_architecture (ptid);
424 return get_thread_arch_regcache (inf, ptid, current_thread_arch);
427 /* See regcache.h. */
429 struct regcache *
430 get_thread_regcache (thread_info *thread)
432 gdb_assert (thread->state != THREAD_EXITED);
434 return get_thread_regcache (thread->inf->process_target (),
435 thread->ptid);
438 /* See gdbsupport/common-regcache.h. */
440 reg_buffer_common *
441 get_thread_regcache_for_ptid (ptid_t ptid)
443 /* This function doesn't take a process_stratum_target parameter
444 because it's a gdbsupport/ routine implemented by both gdb and
445 gdbserver. It always refers to a ptid of the current target. */
446 process_stratum_target *proc_target = current_inferior ()->process_target ();
447 return get_thread_regcache (proc_target, ptid);
450 /* Observer for the target_changed event. */
452 static void
453 regcache_observer_target_changed (struct target_ops *target)
455 registers_changed ();
458 /* Update regcaches related to OLD_PTID to now use NEW_PTID. */
459 static void
460 regcache_thread_ptid_changed (process_stratum_target *target,
461 ptid_t old_ptid, ptid_t new_ptid)
463 /* Look up map for target. */
464 auto pid_ptid_regc_map_it = regcaches.find (target);
465 if (pid_ptid_regc_map_it == regcaches.end ())
466 return;
468 /* Look up map for pid. */
469 pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second;
470 auto ptid_regc_map_it = pid_ptid_regc_map.find (old_ptid.pid ());
471 if (ptid_regc_map_it == pid_ptid_regc_map.end ())
472 return;
474 /* Update all regcaches belonging to old_ptid. */
475 ptid_regcache_map &ptid_regc_map = ptid_regc_map_it->second;
476 auto range = ptid_regc_map.equal_range (old_ptid);
477 for (auto it = range.first; it != range.second;)
479 regcache_up rc = std::move (it->second);
480 rc->set_ptid (new_ptid);
482 /* Remove old before inserting new, to avoid rehashing,
483 which would invalidate iterators. */
484 it = ptid_regc_map.erase (it);
485 ptid_regc_map.insert (std::make_pair (new_ptid, std::move (rc)));
489 /* Low level examining and depositing of registers.
491 The caller is responsible for making sure that the inferior is
492 stopped before calling the fetching routines, or it will get
493 garbage. (a change from GDB version 3, in which the caller got the
494 value from the last stop). */
496 /* REGISTERS_CHANGED ()
498 Indicate that registers may have changed, so invalidate the cache. */
500 void
501 registers_changed_ptid (process_stratum_target *target, ptid_t ptid)
503 if (target == nullptr)
505 /* Since there can be ptid clashes between targets, it's not valid to
506 pass a ptid without saying to which target it belongs. */
507 gdb_assert (ptid == minus_one_ptid);
509 /* Delete all the regcaches of all targets. */
510 regcaches.clear ();
512 else if (ptid.is_pid ())
514 /* Non-NULL target and pid ptid, delete all regcaches belonging
515 to this (TARGET, PID). */
517 /* Look up map for target. */
518 auto pid_ptid_regc_map_it = regcaches.find (target);
519 if (pid_ptid_regc_map_it != regcaches.end ())
521 pid_ptid_regcache_map &pid_ptid_regc_map
522 = pid_ptid_regc_map_it->second;
524 pid_ptid_regc_map.erase (ptid.pid ());
527 else if (ptid != minus_one_ptid)
529 /* Non-NULL target and non-minus_one_ptid, delete all regcaches belonging
530 to this (TARGET, PTID). */
532 /* Look up map for target. */
533 auto pid_ptid_regc_map_it = regcaches.find (target);
534 if (pid_ptid_regc_map_it != regcaches.end ())
536 pid_ptid_regcache_map &pid_ptid_regc_map
537 = pid_ptid_regc_map_it->second;
539 /* Look up map for pid. */
540 auto ptid_regc_map_it
541 = pid_ptid_regc_map.find (ptid.pid ());
542 if (ptid_regc_map_it != pid_ptid_regc_map.end ())
544 ptid_regcache_map &ptid_regc_map
545 = ptid_regc_map_it->second;
547 ptid_regc_map.erase (ptid);
551 else
553 /* Non-NULL target and minus_one_ptid, delete all regcaches
554 associated to this target. */
555 regcaches.erase (target);
558 if ((target == nullptr || current_thread_target == target)
559 && current_thread_ptid.matches (ptid))
561 current_thread_target = NULL;
562 current_thread_ptid = null_ptid;
563 current_thread_arch = NULL;
566 if ((target == nullptr || current_inferior ()->process_target () == target)
567 && inferior_ptid.matches (ptid))
569 /* We just deleted the regcache of the current thread. Need to
570 forget about any frames we have cached, too. */
571 reinit_frame_cache ();
575 /* See regcache.h. */
577 void
578 registers_changed_thread (thread_info *thread)
580 registers_changed_ptid (thread->inf->process_target (), thread->ptid);
583 void
584 registers_changed (void)
586 registers_changed_ptid (nullptr, minus_one_ptid);
589 void
590 regcache::raw_update (int regnum)
592 assert_regnum (regnum);
594 /* Make certain that the register cache is up-to-date with respect
595 to the current thread. This switching shouldn't be necessary
596 only there is still only one target side register cache. Sigh!
597 On the bright side, at least there is a regcache object. */
599 if (get_register_status (regnum) == REG_UNKNOWN)
601 std::optional<scoped_restore_current_thread> maybe_restore_thread
602 = maybe_switch_inferior (m_inf_for_target_calls);
604 target_fetch_registers (this, regnum);
606 /* A number of targets can't access the whole set of raw
607 registers (because the debug API provides no means to get at
608 them). */
609 if (m_register_status[regnum] == REG_UNKNOWN)
610 m_register_status[regnum] = REG_UNAVAILABLE;
614 register_status
615 readable_regcache::raw_read (int regnum, gdb::array_view<gdb_byte> dst)
617 assert_regnum (regnum);
618 gdb_assert (dst.size () == m_descr->sizeof_register[regnum]);
620 raw_update (regnum);
622 if (m_register_status[regnum] != REG_VALID)
623 memset (dst.data (), 0, dst.size ());
624 else
625 copy (register_buffer (regnum), dst);
627 return m_register_status[regnum];
630 register_status
631 readable_regcache::raw_read (int regnum, gdb_byte *dst)
633 assert_regnum (regnum);
634 int size = m_descr->sizeof_register[regnum];
635 return raw_read (regnum, gdb::make_array_view (dst, size));
638 enum register_status
639 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
641 gdb_assert (regcache != NULL);
642 return regcache->raw_read (regnum, val);
645 template<typename T, typename>
646 enum register_status
647 readable_regcache::raw_read (int regnum, T *val)
649 assert_regnum (regnum);
650 size_t size = m_descr->sizeof_register[regnum];
651 gdb_byte *buf = (gdb_byte *) alloca (size);
652 auto view = gdb::make_array_view (buf, size);
653 register_status status = raw_read (regnum, view);
655 if (status == REG_VALID)
656 *val = extract_integer<T> (view, gdbarch_byte_order (m_descr->gdbarch));
657 else
658 *val = 0;
660 return status;
663 enum register_status
664 regcache_raw_read_unsigned (reg_buffer_common *regcache, int regnum,
665 ULONGEST *val)
667 gdb_assert (regcache != NULL);
668 return gdb::checked_static_cast<struct regcache *> (regcache)->raw_read
669 (regnum, val);
672 void
673 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
675 gdb_assert (regcache != NULL);
676 regcache->raw_write (regnum, val);
679 template<typename T, typename>
680 void
681 regcache::raw_write (int regnum, T val)
683 assert_regnum (regnum);
685 int size = m_descr->sizeof_register[regnum];
686 gdb_byte *buf = (gdb_byte *) alloca (size);
687 auto view = gdb::make_array_view (buf, size);
688 store_integer (view, gdbarch_byte_order (m_descr->gdbarch), val);
689 raw_write (regnum, view);
692 void
693 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
694 ULONGEST val)
696 gdb_assert (regcache != NULL);
697 regcache->raw_write (regnum, val);
700 LONGEST
701 regcache_raw_get_signed (struct regcache *regcache, int regnum)
703 LONGEST value;
704 enum register_status status;
706 status = regcache_raw_read_signed (regcache, regnum, &value);
707 if (status == REG_UNAVAILABLE)
708 throw_error (NOT_AVAILABLE_ERROR,
709 _("Register %d is not available"), regnum);
710 return value;
713 /* See regcache.h. */
715 register_status
716 readable_regcache::cooked_read (int regnum, gdb::array_view<gdb_byte> dst)
718 gdb_assert (regnum >= 0);
719 gdb_assert (regnum < m_descr->nr_cooked_registers);
721 if (regnum < num_raw_registers ())
722 return raw_read (regnum, dst);
724 gdb_assert (dst.size () == m_descr->sizeof_register[regnum]);
726 if (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
728 if (m_register_status[regnum] == REG_VALID)
729 copy (register_buffer (regnum), dst);
730 else
731 memset (dst.data (), 0, dst.size ());
733 return m_register_status[regnum];
735 else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
737 register_status result = REG_VALID;
738 scoped_value_mark mark;
739 value *computed = gdbarch_pseudo_register_read_value
740 (m_descr->gdbarch, get_next_frame_sentinel_okay (get_current_frame ()),
741 regnum);
743 if (computed->entirely_available ())
744 copy (computed->contents_raw (), dst);
745 else
747 memset (dst.data (), 0, dst.size ());
748 result = REG_UNAVAILABLE;
751 return result;
753 else
754 return gdbarch_pseudo_register_read (m_descr->gdbarch, this, regnum,
755 dst.data ());
758 /* See regcache.h. */
760 register_status
761 readable_regcache::cooked_read (int regnum, gdb_byte *dst)
763 gdb_assert (regnum >= 0);
764 gdb_assert (regnum < m_descr->nr_cooked_registers);
766 int size = m_descr->sizeof_register[regnum];
767 return cooked_read (regnum, gdb::make_array_view (dst, size));
770 struct value *
771 readable_regcache::cooked_read_value (int regnum)
773 gdb_assert (regnum >= 0);
774 gdb_assert (regnum < m_descr->nr_cooked_registers);
776 if (regnum < num_raw_registers ()
777 || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
778 || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
780 value *result = value::allocate_register
781 (get_next_frame_sentinel_okay (get_current_frame ()), regnum);
783 /* It is more efficient in general to do this delegation in this
784 direction than in the other one, even though the value-based
785 API is preferred. */
786 if (cooked_read (regnum, result->contents_raw ()) == REG_UNAVAILABLE)
787 result->mark_bytes_unavailable (0,
788 result->type ()->length ());
790 return result;
792 else
793 return gdbarch_pseudo_register_read_value
794 (m_descr->gdbarch, get_next_frame_sentinel_okay (get_current_frame ()),
795 regnum);
798 enum register_status
799 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
800 LONGEST *val)
802 gdb_assert (regcache != NULL);
803 return regcache->cooked_read (regnum, val);
806 template<typename T, typename>
807 enum register_status
808 readable_regcache::cooked_read (int regnum, T *val)
810 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
811 size_t size = m_descr->sizeof_register[regnum];
812 gdb_byte *buf = (gdb_byte *) alloca (size);
813 auto view = gdb::make_array_view (buf, size);
814 register_status status = cooked_read (regnum, view);
815 if (status == REG_VALID)
816 *val = extract_integer<T> (view, gdbarch_byte_order (m_descr->gdbarch));
817 else
818 *val = 0;
819 return status;
822 enum register_status
823 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
824 ULONGEST *val)
826 gdb_assert (regcache != NULL);
827 return regcache->cooked_read (regnum, val);
830 void
831 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
832 LONGEST val)
834 gdb_assert (regcache != NULL);
835 regcache->cooked_write (regnum, val);
838 template<typename T, typename>
839 void
840 regcache::cooked_write (int regnum, T val)
842 gdb_assert (regnum >= 0);
843 gdb_assert (regnum < m_descr->nr_cooked_registers);
845 int size = m_descr->sizeof_register[regnum];
846 gdb_byte *buf = (gdb_byte *) alloca (size);
847 auto view = gdb::make_array_view (buf, size);
848 store_integer (view, gdbarch_byte_order (m_descr->gdbarch), val);
849 cooked_write (regnum, view);
852 void
853 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
854 ULONGEST val)
856 gdb_assert (regcache != NULL);
857 regcache->cooked_write (regnum, val);
860 void
861 regcache::raw_write (int regnum, gdb::array_view<const gdb_byte> src)
863 assert_regnum (regnum);
864 gdb_assert (src.size () == m_descr->sizeof_register[regnum]);
866 /* On the sparc, writing %g0 is a no-op, so we don't even want to
867 change the registers array if something writes to this register. */
868 if (gdbarch_cannot_store_register (arch (), regnum))
869 return;
871 /* If we have a valid copy of the register, and new value == old
872 value, then don't bother doing the actual store. */
873 if (get_register_status (regnum) == REG_VALID
874 && (memcmp (register_buffer (regnum).data (), src.data (), src.size ())
875 == 0))
876 return;
878 std::optional<scoped_restore_current_thread> maybe_restore_thread
879 = maybe_switch_inferior (m_inf_for_target_calls);
881 target_prepare_to_store (this);
882 raw_supply (regnum, src);
884 /* Invalidate the register after it is written, in case of a
885 failure. */
886 auto invalidator
887 = make_scope_exit ([&] { this->invalidate (regnum); });
889 target_store_registers (this, regnum);
891 /* The target did not throw an error so we can discard invalidating
892 the register. */
893 invalidator.release ();
896 void
897 regcache::raw_write (int regnum, const gdb_byte *src)
899 assert_regnum (regnum);
901 int size = m_descr->sizeof_register[regnum];
902 raw_write (regnum, gdb::make_array_view (src, size));
905 /* See regcache.h. */
907 void
908 regcache::cooked_write (int regnum, gdb::array_view<const gdb_byte> src)
910 gdb_assert (regnum >= 0);
911 gdb_assert (regnum < m_descr->nr_cooked_registers);
913 if (regnum < num_raw_registers ())
914 raw_write (regnum, src);
915 else if (gdbarch_pseudo_register_write_p (m_descr->gdbarch))
916 gdbarch_pseudo_register_write
917 (m_descr->gdbarch, get_next_frame_sentinel_okay (get_current_frame ()),
918 regnum, src);
919 else
920 gdbarch_deprecated_pseudo_register_write (m_descr->gdbarch, this, regnum,
921 src.data ());
924 /* See regcache.h. */
926 void
927 regcache::cooked_write (int regnum, const gdb_byte *src)
929 gdb_assert (regnum >= 0);
930 gdb_assert (regnum < m_descr->nr_cooked_registers);
932 int size = m_descr->sizeof_register[regnum];
933 return cooked_write (regnum, gdb::make_array_view (src, size));
936 /* See regcache.h. */
938 register_status
939 readable_regcache::read_part (int regnum, int offset,
940 gdb::array_view<gdb_byte> dst, bool is_raw)
942 int reg_size = register_size (arch (), regnum);
944 gdb_assert (offset >= 0);
945 gdb_assert (offset + dst.size () <= reg_size);
947 if (dst.size () == 0)
949 /* Nothing to do. */
950 return REG_VALID;
953 if (dst.size () == reg_size)
955 /* Read the full register. */
956 if (is_raw)
957 return raw_read (regnum, dst);
958 else
959 return cooked_read (regnum, dst);
962 /* Read full register to buffer. */
963 register_status status;
964 gdb_byte *reg_buf = (gdb_byte *) alloca (reg_size);
965 auto reg = gdb::make_array_view (reg_buf, reg_size);
967 if (is_raw)
968 status = raw_read (regnum, reg);
969 else
970 status = cooked_read (regnum, reg);
972 if (status != REG_VALID)
973 return status;
975 /* Copy out. */
976 copy (reg.slice (offset, dst.size ()), dst);
977 return REG_VALID;
980 /* See regcache.h. */
982 void
983 reg_buffer::raw_collect_part (int regnum, int offset,
984 gdb::array_view<gdb_byte> dst) const
986 int reg_size = register_size (arch (), regnum);
988 gdb_assert (offset >= 0);
989 gdb_assert (offset + dst.size () <= reg_size);
991 if (dst.size () == 0)
993 /* Nothing to do. */
994 return;
997 if (dst.size () == reg_size)
999 /* Collect the full register. */
1000 return raw_collect (regnum, dst);
1003 /* Read to buffer, then write out. */
1004 gdb_byte *reg_buf = (gdb_byte *) alloca (reg_size);
1005 auto reg = gdb::make_array_view (reg_buf, reg_size);
1006 raw_collect (regnum, reg);
1007 copy (reg.slice (offset, dst.size ()), dst);
1010 /* See regcache.h. */
1012 register_status
1013 regcache::write_part (int regnum, int offset,
1014 gdb::array_view<const gdb_byte> src, bool is_raw)
1016 int reg_size = register_size (arch (), regnum);
1018 gdb_assert (offset >= 0);
1019 gdb_assert (offset + src.size () <= reg_size);
1021 if (src.size () == 0)
1023 /* Nothing to do. */
1024 return REG_VALID;
1027 if (src.size () == reg_size)
1029 /* Write the full register. */
1030 if (is_raw)
1031 raw_write (regnum, src);
1032 else
1033 cooked_write (regnum, src);
1035 return REG_VALID;
1038 /* Read existing register to buffer. */
1039 register_status status;
1040 gdb_byte *reg_buf = (gdb_byte *) alloca (reg_size);
1041 auto reg = gdb::make_array_view (reg_buf, reg_size);
1043 if (is_raw)
1044 status = raw_read (regnum, reg);
1045 else
1046 status = cooked_read (regnum, reg);
1048 if (status != REG_VALID)
1049 return status;
1051 /* Update buffer, then write back to regcache. */
1052 copy (src, reg.slice (offset, src.size ()));
1054 if (is_raw)
1055 raw_write (regnum, reg);
1056 else
1057 cooked_write (regnum, reg);
1059 return REG_VALID;
1062 /* See regcache.h. */
1064 void
1065 reg_buffer::raw_supply_part (int regnum, int offset,
1066 gdb::array_view<const gdb_byte> src)
1068 int reg_size = register_size (arch (), regnum);
1070 gdb_assert (offset >= 0);
1071 gdb_assert (offset + src.size () <= reg_size);
1073 if (src.size () == 0)
1075 /* Nothing to do. */
1076 return;
1079 if (src.size () == reg_size)
1081 /* Supply the full register. */
1082 return raw_supply (regnum, src);
1085 /* Read existing value to buffer. */
1086 gdb_byte *reg_buf = (gdb_byte *) alloca (reg_size);
1087 auto reg = gdb::make_array_view (reg_buf, reg_size);
1088 raw_collect (regnum, reg);
1090 /* Write to buffer, then write out. */
1091 copy (src, reg.slice (offset, src.size ()));
1092 raw_supply (regnum, reg);
1095 register_status
1096 readable_regcache::raw_read_part (int regnum, int offset,
1097 gdb::array_view<gdb_byte> dst)
1099 assert_regnum (regnum);
1100 return read_part (regnum, offset, dst, true);
1103 /* See regcache.h. */
1105 void
1106 regcache::raw_write_part (int regnum, int offset,
1107 gdb::array_view<const gdb_byte> src)
1109 assert_regnum (regnum);
1110 write_part (regnum, offset, src, true);
1113 /* See regcache.h. */
1115 register_status
1116 readable_regcache::cooked_read_part (int regnum, int offset,
1117 gdb::array_view<gdb_byte> dst)
1119 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
1120 return read_part (regnum, offset, dst, false);
1123 /* See regcache.h. */
1125 void
1126 regcache::cooked_write_part (int regnum, int offset,
1127 gdb::array_view<const gdb_byte> src)
1129 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
1130 write_part (regnum, offset, src, false);
1133 /* See gdbsupport/common-regcache.h. */
1135 void
1136 reg_buffer::raw_supply (int regnum, gdb::array_view<const gdb_byte> src)
1138 gdb::array_view<gdb_byte> dst = register_buffer (regnum);
1140 if (src.data () != nullptr)
1142 copy (src, dst);
1143 m_register_status[regnum] = REG_VALID;
1145 else
1147 /* This memset not strictly necessary, but better than garbage
1148 in case the register value manages to escape somewhere (due
1149 to a bug, no less). */
1150 memset (dst.data (), 0, dst.size ());
1151 m_register_status[regnum] = REG_UNAVAILABLE;
1155 /* See regcache.h. */
1157 void
1158 reg_buffer::raw_supply (int regnum, const void *src)
1160 assert_regnum (regnum);
1162 int size = m_descr->sizeof_register[regnum];
1163 raw_supply (regnum, gdb::make_array_view ((const gdb_byte *) src, size));
1166 /* See regcache.h. */
1168 void
1169 reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr, int addr_len,
1170 bool is_signed)
1172 gdb::array_view<gdb_byte> dst = register_buffer (regnum);
1173 bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1175 copy_integer_to_size (dst.data (), dst.size (), addr, addr_len, is_signed,
1176 byte_order);
1177 m_register_status[regnum] = REG_VALID;
1180 /* See regcache.h. */
1182 void
1183 reg_buffer::raw_supply_zeroed (int regnum)
1185 gdb::array_view<gdb_byte> dst = register_buffer (regnum);
1186 memset (dst.data (), 0, dst.size ());
1187 m_register_status[regnum] = REG_VALID;
1190 /* See gdbsupport/common-regcache.h. */
1192 void
1193 reg_buffer::raw_supply_part_zeroed (int regnum, int offset, size_t size)
1195 gdb::array_view<gdb_byte> dst = register_buffer (regnum).slice (offset, size);
1196 memset (dst.data (), 0, dst.size ());
1197 m_register_status[regnum] = REG_VALID;
1200 /* See gdbsupport/common-regcache.h. */
1202 void
1203 reg_buffer::raw_collect (int regnum, gdb::array_view<gdb_byte> dst) const
1205 gdb::array_view<const gdb_byte> src = register_buffer (regnum);
1206 copy (src, dst);
1209 /* See regcache.h. */
1211 void
1212 reg_buffer::raw_collect (int regnum, void *dst) const
1214 assert_regnum (regnum);
1216 int size = m_descr->sizeof_register[regnum];
1217 return raw_collect (regnum, gdb::make_array_view ((gdb_byte *) dst, size));
1220 /* See regcache.h. */
1222 void
1223 reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
1224 bool is_signed) const
1226 gdb::array_view<const gdb_byte> dst = register_buffer (regnum);
1227 bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1228 copy_integer_to_size (addr, addr_len, dst.data (), dst.size (), is_signed,
1229 byte_order);
1232 /* See regcache.h. */
1234 void
1235 regcache::transfer_regset_register (struct regcache *out_regcache, int regnum,
1236 const gdb_byte *in_buf, gdb_byte *out_buf,
1237 int slot_size, int offs) const
1239 struct gdbarch *gdbarch = arch ();
1240 int reg_size = std::min (register_size (gdbarch, regnum), slot_size);
1242 /* Use part versions and reg_size to prevent possible buffer overflows when
1243 accessing the regcache. */
1245 if (out_buf != nullptr)
1247 raw_collect_part (regnum, 0,
1248 gdb::make_array_view (out_buf + offs, reg_size));
1250 /* Ensure any additional space is cleared. */
1251 if (slot_size > reg_size)
1252 memset (out_buf + offs + reg_size, 0, slot_size - reg_size);
1254 else if (in_buf != nullptr)
1256 /* Zero-extend the register value if the slot is smaller than the register. */
1257 if (slot_size < register_size (gdbarch, regnum))
1258 out_regcache->raw_supply_zeroed (regnum);
1259 out_regcache->raw_supply_part (regnum, 0,
1260 gdb::make_array_view (in_buf + offs,
1261 reg_size));
1263 else
1265 /* Invalidate the register. */
1266 out_regcache->raw_supply (regnum, {});
1270 /* See regcache.h. */
1272 void
1273 regcache::transfer_regset (const struct regset *regset, int regbase,
1274 struct regcache *out_regcache,
1275 int regnum, const gdb_byte *in_buf,
1276 gdb_byte *out_buf, size_t size) const
1278 const struct regcache_map_entry *map;
1279 int offs = 0, count;
1281 for (map = (const struct regcache_map_entry *) regset->regmap;
1282 (count = map->count) != 0;
1283 map++)
1285 int regno = map->regno;
1286 int slot_size = map->size;
1288 if (regno != REGCACHE_MAP_SKIP)
1289 regno += regbase;
1291 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1292 slot_size = m_descr->sizeof_register[regno];
1294 if (regno == REGCACHE_MAP_SKIP
1295 || (regnum != -1
1296 && (regnum < regno || regnum >= regno + count)))
1297 offs += count * slot_size;
1299 else if (regnum == -1)
1300 for (; count--; regno++, offs += slot_size)
1302 if (offs + slot_size > size)
1303 return;
1305 transfer_regset_register (out_regcache, regno, in_buf, out_buf,
1306 slot_size, offs);
1308 else
1310 /* Transfer a single register and return. */
1311 offs += (regnum - regno) * slot_size;
1312 if (offs + slot_size > size)
1313 return;
1315 transfer_regset_register (out_regcache, regnum, in_buf, out_buf,
1316 slot_size, offs);
1317 return;
1322 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1323 in REGSET. If REGNUM is -1, do this for all registers in REGSET.
1324 If BUF is NULL, set the register(s) to "unavailable" status. */
1326 void
1327 regcache_supply_regset (const struct regset *regset,
1328 struct regcache *regcache,
1329 int regnum, const void *buf, size_t size)
1331 regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size);
1334 /* See regcache.h. */
1336 void
1337 regcache::supply_regset (const struct regset *regset, int regbase,
1338 int regnum, const void *buf, size_t size)
1340 transfer_regset (regset, regbase, this, regnum, (const gdb_byte *) buf,
1341 nullptr, size);
1344 /* Collect register REGNUM from REGCACHE to BUF, using the register
1345 map in REGSET. If REGNUM is -1, do this for all registers in
1346 REGSET. */
1348 void
1349 regcache_collect_regset (const struct regset *regset,
1350 const struct regcache *regcache,
1351 int regnum, void *buf, size_t size)
1353 regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size);
1356 /* See regcache.h */
1358 void
1359 regcache::collect_regset (const struct regset *regset, int regbase,
1360 int regnum, void *buf, size_t size) const
1362 transfer_regset (regset, regbase, nullptr, regnum, nullptr, (gdb_byte *) buf,
1363 size);
1366 bool
1367 regcache_map_supplies (const struct regcache_map_entry *map, int regnum,
1368 struct gdbarch *gdbarch, size_t size)
1370 int offs = 0, count;
1372 for (; (count = map->count) != 0; map++)
1374 int regno = map->regno;
1375 int slot_size = map->size;
1377 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1378 slot_size = register_size (gdbarch, regno);
1380 if (regno != REGCACHE_MAP_SKIP && regnum >= regno
1381 && regnum < regno + count)
1382 return offs + (regnum - regno + 1) * slot_size <= size;
1384 offs += count * slot_size;
1385 if (offs >= size)
1386 return false;
1388 return false;
1391 /* See gdbsupport/common-regcache.h. */
1393 bool
1394 reg_buffer::raw_compare (int regnum, const void *buf, int offset) const
1396 gdb_assert (buf != NULL);
1398 gdb::array_view<const gdb_byte> regbuf = register_buffer (regnum);
1399 gdb_assert (offset <= regbuf.size ());
1400 regbuf = regbuf.slice (offset);
1402 return memcmp (buf, regbuf.data (), regbuf.size ()) == 0;
1405 /* Special handling for register PC. */
1407 CORE_ADDR
1408 regcache_read_pc (reg_buffer_common *reg_buf)
1410 regcache *regcache = gdb::checked_static_cast<struct regcache *> (reg_buf);
1411 struct gdbarch *gdbarch = regcache->arch ();
1413 CORE_ADDR pc_val;
1415 if (gdbarch_read_pc_p (gdbarch))
1416 pc_val = gdbarch_read_pc (gdbarch, regcache);
1417 /* Else use per-frame method on get_current_frame. */
1418 else if (gdbarch_pc_regnum (gdbarch) >= 0)
1420 ULONGEST raw_val;
1422 if (regcache_cooked_read_unsigned (regcache,
1423 gdbarch_pc_regnum (gdbarch),
1424 &raw_val) == REG_UNAVAILABLE)
1425 throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
1427 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
1429 else
1430 internal_error (_("regcache_read_pc: Unable to find PC"));
1431 return pc_val;
1434 /* See gdbsupport/common-regcache.h. */
1436 CORE_ADDR
1437 regcache_read_pc_protected (reg_buffer_common *regcache)
1439 CORE_ADDR pc;
1442 pc = regcache_read_pc (regcache);
1444 catch (const gdb_exception_error &ex)
1446 pc = 0;
1449 return pc;
1452 void
1453 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
1455 struct gdbarch *gdbarch = regcache->arch ();
1457 if (gdbarch_write_pc_p (gdbarch))
1458 gdbarch_write_pc (gdbarch, regcache, pc);
1459 else if (gdbarch_pc_regnum (gdbarch) >= 0)
1460 regcache_cooked_write_unsigned (regcache,
1461 gdbarch_pc_regnum (gdbarch), pc);
1462 else
1463 internal_error (_("regcache_write_pc: Unable to update PC"));
1465 /* Writing the PC (for instance, from "load") invalidates the
1466 current frame. */
1467 reinit_frame_cache ();
1471 reg_buffer::num_raw_registers () const
1473 return gdbarch_num_regs (arch ());
1476 std::string
1477 regcache::register_debug_string (int regno)
1479 struct gdbarch *gdbarch = arch ();
1480 std::string s;
1482 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
1483 && gdbarch_register_name (gdbarch, regno)[0] != '\0')
1484 string_appendf (s, "register %s:", gdbarch_register_name (gdbarch, regno));
1485 else
1486 string_appendf (s, "register %d:", regno);
1488 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1490 gdb::array_view<gdb_byte> buf = register_buffer (regno);
1492 string_appendf (s, " = ");
1494 for (gdb_byte byte : buf)
1495 string_appendf (s, "%02x", byte);
1497 if (buf.size () <= sizeof (LONGEST))
1499 ULONGEST val
1500 = extract_unsigned_integer (buf, gdbarch_byte_order (gdbarch));
1502 string_appendf (s, " %s %s",
1503 core_addr_to_string_nz (val), plongest (val));
1507 return s;
1510 /* Implement 'maint flush register-cache' command. */
1512 static void
1513 reg_flush_command (const char *command, int from_tty)
1515 /* Force-flush the register cache. */
1516 registers_changed ();
1517 if (from_tty)
1518 gdb_printf (_("Register cache flushed.\n"));
1521 void
1522 register_dump::dump (ui_out *out, const char *name)
1524 auto descr = regcache_descr (m_gdbarch);
1525 int regnum;
1526 int footnote_nr = 0;
1527 int footnote_register_offset = 0;
1528 int footnote_register_type_name_null = 0;
1529 long register_offset = 0;
1531 gdb_assert (descr->nr_cooked_registers
1532 == gdbarch_num_cooked_regs (m_gdbarch));
1534 ui_out_emit_table table (out, 6 + num_additional_headers (), -1, name);
1535 out->table_header (10, ui_left, "name", "Name");
1536 out->table_header (4, ui_left, "num", "Nr");
1537 out->table_header (4, ui_left, "relnum", "Rel");
1538 out->table_header (8, ui_left, "offset", "Offset");
1539 out->table_header (5, ui_left, "size", "Size");
1540 out->table_header (15, ui_left, "type", "Type");
1541 additional_headers (out);
1542 out->table_body ();
1544 for (regnum = 0; regnum < descr->nr_cooked_registers; regnum++)
1546 ui_out_emit_tuple tuple_emitter (out, nullptr);
1548 /* Name. */
1549 const char *p = gdbarch_register_name (m_gdbarch, regnum);
1550 if (p[0] == '\0')
1551 p = "''";
1552 out->field_string ("name", p);
1554 /* Number. */
1555 out->field_signed ("num", regnum);
1557 /* Relative number. */
1558 if (regnum < gdbarch_num_regs (m_gdbarch))
1559 out->field_signed ("relnum", regnum);
1560 else
1561 out->field_signed ("relnum", (regnum - gdbarch_num_regs (m_gdbarch)));
1563 /* Offset. */
1564 if (register_offset != descr->register_offset[regnum]
1565 || (regnum > 0
1566 && (descr->register_offset[regnum]
1567 != (descr->register_offset[regnum - 1]
1568 + descr->sizeof_register[regnum - 1]))))
1570 if (!footnote_register_offset)
1571 footnote_register_offset = ++footnote_nr;
1572 std::string val = string_printf ("%ld*%d",
1573 descr->register_offset[regnum],
1574 footnote_register_offset);
1575 out->field_string ("offset", val);
1577 else
1578 out->field_signed ("offset", descr->register_offset[regnum]);
1579 register_offset = (descr->register_offset[regnum]
1580 + descr->sizeof_register[regnum]);
1582 /* Size. */
1583 out->field_signed ("size", descr->sizeof_register[regnum]);
1585 /* Type. */
1587 const char *t;
1588 std::string name_holder;
1590 static const char blt[] = "builtin_type";
1592 t = register_type (m_gdbarch, regnum)->name ();
1593 if (t == NULL)
1595 if (!footnote_register_type_name_null)
1596 footnote_register_type_name_null = ++footnote_nr;
1597 name_holder = string_printf ("*%d",
1598 footnote_register_type_name_null);
1599 t = name_holder.c_str ();
1601 /* Chop a leading builtin_type. */
1602 if (startswith (t, blt))
1603 t += strlen (blt);
1605 out->field_string ("type", t);
1608 dump_reg (out, regnum);
1610 out->text ("\n");
1613 if (footnote_register_offset)
1614 out->message ("*%d: Inconsistent register offsets.\n",
1615 footnote_register_offset);
1616 if (footnote_register_type_name_null)
1617 out->message ("*%d: Register type's name NULL.\n",
1618 footnote_register_type_name_null);
1621 #if GDB_SELF_TEST
1622 #include "gdbsupport/selftest.h"
1623 #include "selftest-arch.h"
1624 #include "target-float.h"
1626 namespace selftests {
1628 static size_t
1629 regcaches_size ()
1631 size_t size = 0;
1633 for (auto pid_ptid_regc_map_it = regcaches.cbegin ();
1634 pid_ptid_regc_map_it != regcaches.cend ();
1635 ++pid_ptid_regc_map_it)
1637 const pid_ptid_regcache_map &pid_ptid_regc_map
1638 = pid_ptid_regc_map_it->second;
1640 for (auto ptid_regc_map_it = pid_ptid_regc_map.cbegin ();
1641 ptid_regc_map_it != pid_ptid_regc_map.cend ();
1642 ++ptid_regc_map_it)
1644 const ptid_regcache_map &ptid_regc_map
1645 = ptid_regc_map_it->second;
1647 size += ptid_regc_map.size ();
1651 return size;
1654 /* Return the count of regcaches for (TARGET, PTID) in REGCACHES. */
1656 static int
1657 regcache_count (process_stratum_target *target, ptid_t ptid)
1659 /* Look up map for target. */
1660 auto pid_ptid_regc_map_it = regcaches.find (target);
1661 if (pid_ptid_regc_map_it != regcaches.end ())
1663 pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second;
1665 /* Look map for pid. */
1666 auto ptid_regc_map_it = pid_ptid_regc_map.find (ptid.pid ());
1667 if (ptid_regc_map_it != pid_ptid_regc_map.end ())
1669 ptid_regcache_map &ptid_regc_map = ptid_regc_map_it->second;
1670 auto range = ptid_regc_map.equal_range (ptid);
1672 return std::distance (range.first, range.second);
1676 return 0;
1679 /* Wrapper around get_thread_arch_regcache that does some self checks. */
1681 static void
1682 get_thread_arch_regcache_and_check (inferior *inf_for_target_calls,
1683 ptid_t ptid)
1685 /* We currently only test with a single gdbarch. Any gdbarch will do, so use
1686 the current inferior's gdbarch. Also use the current inferior's address
1687 space. */
1688 gdbarch *arch = inf_for_target_calls->arch ();
1689 regcache *regcache
1690 = get_thread_arch_regcache (inf_for_target_calls, ptid, arch);
1692 SELF_CHECK (regcache != NULL);
1693 SELF_CHECK (regcache->ptid () == ptid);
1694 SELF_CHECK (regcache->arch () == arch);
1697 /* The data that the regcaches selftests must hold onto for the duration of the
1698 test. */
1700 struct regcache_test_data
1702 regcache_test_data ()
1703 /* The specific arch doesn't matter. */
1704 : test_ctx_1 (current_inferior ()->arch ()),
1705 test_ctx_2 (current_inferior ()->arch ())
1707 /* Ensure the regcaches container is empty at the start. */
1708 registers_changed ();
1711 ~regcache_test_data ()
1713 /* Make sure to leave the global regcaches container empty. */
1714 registers_changed ();
1717 scoped_mock_context<test_target_ops> test_ctx_1;
1718 scoped_mock_context<test_target_ops> test_ctx_2;
1721 using regcache_test_data_up = std::unique_ptr<regcache_test_data>;
1723 /* Set up a few regcaches from two different targets, for use in
1724 regcache-management tests.
1726 Return a pointer, because the `regcache_test_data` type is not moveable. */
1728 static regcache_test_data_up
1729 populate_regcaches_for_test ()
1731 regcache_test_data_up data (new regcache_test_data);
1732 size_t expected_regcache_size = 0;
1734 SELF_CHECK (regcaches_size () == 0);
1736 /* Populate the regcache container with a few regcaches for the two test
1737 targets. */
1738 for (int pid : { 1, 2 })
1740 for (long lwp : { 1, 2, 3 })
1742 get_thread_arch_regcache_and_check
1743 (&data->test_ctx_1.mock_inferior, ptid_t (pid, lwp));
1744 expected_regcache_size++;
1745 SELF_CHECK (regcaches_size () == expected_regcache_size);
1747 get_thread_arch_regcache_and_check
1748 (&data->test_ctx_2.mock_inferior, ptid_t (pid, lwp));
1749 expected_regcache_size++;
1750 SELF_CHECK (regcaches_size () == expected_regcache_size);
1754 return data;
1757 static void
1758 get_thread_arch_regcache_test ()
1760 /* populate_regcaches_for_test already tests most of the
1761 get_thread_arch_regcache functionality. */
1762 regcache_test_data_up data = populate_regcaches_for_test ();
1763 size_t regcaches_size_before = regcaches_size ();
1765 /* Test that getting an existing regcache doesn't create a new one. */
1766 get_thread_arch_regcache_and_check (&data->test_ctx_1.mock_inferior,
1767 ptid_t (2, 2));
1768 SELF_CHECK (regcaches_size () == regcaches_size_before);
1771 /* Test marking all regcaches of all targets as changed. */
1773 static void
1774 registers_changed_ptid_all_test ()
1776 regcache_test_data_up data = populate_regcaches_for_test ();
1778 registers_changed_ptid (nullptr, minus_one_ptid);
1779 SELF_CHECK (regcaches_size () == 0);
1782 /* Test marking regcaches of a specific target as changed. */
1784 static void
1785 registers_changed_ptid_target_test ()
1787 regcache_test_data_up data = populate_regcaches_for_test ();
1789 registers_changed_ptid (&data->test_ctx_1.mock_target, minus_one_ptid);
1790 SELF_CHECK (regcaches_size () == 6);
1792 /* Check that we deleted the regcache for the right target. */
1793 SELF_CHECK (regcache_count (&data->test_ctx_1.mock_target,
1794 ptid_t (2, 2)) == 0);
1795 SELF_CHECK (regcache_count (&data->test_ctx_2.mock_target,
1796 ptid_t (2, 2)) == 1);
1799 /* Test marking regcaches of a specific (target, pid) as changed. */
1801 static void
1802 registers_changed_ptid_target_pid_test ()
1804 regcache_test_data_up data = populate_regcaches_for_test ();
1806 registers_changed_ptid (&data->test_ctx_1.mock_target, ptid_t (2));
1807 SELF_CHECK (regcaches_size () == 9);
1809 /* Regcaches from target1 should not exist, while regcaches from target2
1810 should exist. */
1811 SELF_CHECK (regcache_count (&data->test_ctx_1.mock_target,
1812 ptid_t (2, 2)) == 0);
1813 SELF_CHECK (regcache_count (&data->test_ctx_2.mock_target,
1814 ptid_t (2, 2)) == 1);
1817 /* Test marking regcaches of a specific (target, ptid) as changed. */
1819 static void
1820 registers_changed_ptid_target_ptid_test ()
1822 regcache_test_data_up data = populate_regcaches_for_test ();
1824 registers_changed_ptid (&data->test_ctx_1.mock_target, ptid_t (2, 2));
1825 SELF_CHECK (regcaches_size () == 11);
1827 /* Check that we deleted the regcache for the right target. */
1828 SELF_CHECK (regcache_count (&data->test_ctx_1.mock_target,
1829 ptid_t (2, 2)) == 0);
1830 SELF_CHECK (regcache_count (&data->test_ctx_2.mock_target,
1831 ptid_t (2, 2)) == 1);
1834 /* Test using reg_buffer::raw_compare with offset equal to the register size
1835 (thus comparing 0 bytes). */
1837 static void
1838 reg_buffer_raw_compare_zero_len_test ()
1840 regcache_test_data_up data = populate_regcaches_for_test ();
1841 inferior &inf = data->test_ctx_1.mock_inferior;
1842 const regcache *regcache
1843 = get_thread_arch_regcache (&inf, ptid_t (1, 1), inf.arch ());
1845 /* The buffer address is irrelevant since we end up comparing 0 bytes, we just
1846 need to pass something. */
1847 gdb_byte buf;
1848 SELF_CHECK (regcache->raw_compare (0, &buf, register_size (inf.arch (), 0)));
1851 class target_ops_no_register : public test_target_ops
1853 public:
1854 target_ops_no_register ()
1855 : test_target_ops {}
1858 void reset ()
1860 fetch_registers_called = 0;
1861 store_registers_called = 0;
1862 xfer_partial_called = 0;
1865 void fetch_registers (regcache *regs, int regno) override;
1866 void store_registers (regcache *regs, int regno) override;
1868 enum target_xfer_status xfer_partial (enum target_object object,
1869 const char *annex, gdb_byte *readbuf,
1870 const gdb_byte *writebuf,
1871 ULONGEST offset, ULONGEST len,
1872 ULONGEST *xfered_len) override;
1874 unsigned int fetch_registers_called = 0;
1875 unsigned int store_registers_called = 0;
1876 unsigned int xfer_partial_called = 0;
1879 void
1880 target_ops_no_register::fetch_registers (regcache *regs, int regno)
1882 /* Mark register available. */
1883 regs->raw_supply_zeroed (regno);
1884 this->fetch_registers_called++;
1887 void
1888 target_ops_no_register::store_registers (regcache *regs, int regno)
1890 this->store_registers_called++;
1893 enum target_xfer_status
1894 target_ops_no_register::xfer_partial (enum target_object object,
1895 const char *annex, gdb_byte *readbuf,
1896 const gdb_byte *writebuf,
1897 ULONGEST offset, ULONGEST len,
1898 ULONGEST *xfered_len)
1900 this->xfer_partial_called++;
1902 *xfered_len = len;
1903 return TARGET_XFER_OK;
1906 class readwrite_regcache : public regcache
1908 public:
1909 readwrite_regcache (inferior *inf_for_target_calls,
1910 struct gdbarch *gdbarch)
1911 : regcache (inf_for_target_calls, gdbarch)
1915 /* Return true if regcache::cooked_{read,write}_test should be skipped for
1916 GDBARCH. */
1918 static bool
1919 selftest_skiparch (struct gdbarch *gdbarch)
1921 const char *name = gdbarch_bfd_arch_info (gdbarch)->printable_name;
1923 /* Avoid warning:
1924 Running selftest regcache::cooked_{read,write}_test::m68hc11.
1925 warning: No frame soft register found in the symbol table.
1926 Stack backtrace will not work.
1927 We could instead capture the output and then filter out the warning, but
1928 that seems more trouble than it's worth. */
1929 return (strcmp (name, "m68hc11") == 0
1930 || strcmp (name, "m68hc12") == 0
1931 || strcmp (name, "m68hc12:HCS12") == 0);
1934 /* Test regcache::cooked_read gets registers from raw registers and
1935 memory instead of target to_{fetch,store}_registers. */
1937 static void
1938 cooked_read_test (struct gdbarch *gdbarch)
1940 if (selftest_skiparch (gdbarch))
1941 return;
1943 scoped_mock_context<target_ops_no_register> mockctx (gdbarch);
1945 /* Test that read one raw register from regcache_no_target will go
1946 to the target layer. */
1948 /* Find a raw register which size isn't zero. */
1949 int nonzero_regnum;
1950 for (nonzero_regnum = 0;
1951 nonzero_regnum < gdbarch_num_regs (gdbarch);
1952 nonzero_regnum++)
1954 if (register_size (gdbarch, nonzero_regnum) != 0)
1955 break;
1958 /* Install this regcache in the regcaches global structure, so that. */
1959 pid_ptid_regcache_map &x = regcaches[&mockctx.mock_target];
1960 ptid_regcache_map &y = x[mockctx.mock_ptid.pid ()];
1961 regcache &readwrite
1962 = *y.emplace (std::make_pair (mockctx.mock_ptid,
1963 std::make_unique<readwrite_regcache> (
1964 &mockctx.mock_inferior, gdbarch)))
1965 ->second;
1967 readwrite.set_ptid (mockctx.mock_ptid);
1969 gdb::byte_vector buf (register_size (gdbarch, nonzero_regnum));
1970 readwrite.raw_read (nonzero_regnum, buf);
1972 /* raw_read calls target_fetch_registers. */
1973 SELF_CHECK (mockctx.mock_target.fetch_registers_called > 0);
1974 mockctx.mock_target.reset ();
1976 /* Mark all raw registers valid, so the following raw registers
1977 accesses won't go to target. */
1978 for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++)
1979 readwrite.raw_update (i);
1981 mockctx.mock_target.reset ();
1982 /* Then, read all raw and pseudo registers, and don't expect calling
1983 to_{fetch,store}_registers. */
1984 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1986 if (register_size (gdbarch, regnum) == 0)
1987 continue;
1989 gdb::byte_vector inner_buf (register_size (gdbarch, regnum));
1991 SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum, inner_buf));
1992 SELF_CHECK (mockctx.mock_target.fetch_registers_called == 0);
1993 SELF_CHECK (mockctx.mock_target.store_registers_called == 0);
1994 SELF_CHECK (mockctx.mock_target.xfer_partial_called == 0);
1996 mockctx.mock_target.reset ();
1999 readonly_detached_regcache readonly (readwrite);
2001 /* GDB may go to target layer to fetch all registers and memory for
2002 readonly regcache. */
2003 mockctx.mock_target.reset ();
2005 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
2007 if (register_size (gdbarch, regnum) == 0)
2008 continue;
2010 gdb::byte_vector inner_buf (register_size (gdbarch, regnum));
2011 register_status status = readonly.cooked_read (regnum, inner_buf);
2013 if (regnum < gdbarch_num_regs (gdbarch))
2015 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
2017 if (bfd_arch == bfd_arch_amdgcn
2018 || bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300
2019 || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh
2020 || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850
2021 || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep
2022 || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850
2023 || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300
2024 || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score
2025 || bfd_arch == bfd_arch_riscv || bfd_arch == bfd_arch_csky)
2027 /* Raw registers. If raw registers are not in save_reggroup,
2028 their status are unknown. */
2029 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
2030 SELF_CHECK (status == REG_VALID);
2031 else
2032 SELF_CHECK (status == REG_UNKNOWN);
2034 else
2035 SELF_CHECK (status == REG_VALID);
2037 else
2039 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
2040 SELF_CHECK (status == REG_VALID);
2041 else
2043 /* If pseudo registers are not in save_reggroup, some of
2044 them can be computed from saved raw registers, but some
2045 of them are unknown. */
2046 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
2048 if (bfd_arch == bfd_arch_frv
2049 || bfd_arch == bfd_arch_m32c
2050 || bfd_arch == bfd_arch_mep
2051 || bfd_arch == bfd_arch_sh)
2052 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN);
2053 else if (bfd_arch == bfd_arch_mips
2054 || bfd_arch == bfd_arch_h8300)
2055 SELF_CHECK (status == REG_UNKNOWN);
2056 else
2057 SELF_CHECK (status == REG_VALID);
2061 SELF_CHECK (mockctx.mock_target.fetch_registers_called == 0);
2062 SELF_CHECK (mockctx.mock_target.store_registers_called == 0);
2063 SELF_CHECK (mockctx.mock_target.xfer_partial_called == 0);
2065 mockctx.mock_target.reset ();
2068 regcaches.erase (&mockctx.mock_target);
2071 /* Test regcache::cooked_write by writing some expected contents to
2072 registers, and checking that contents read from registers and the
2073 expected contents are the same. */
2075 static void
2076 cooked_write_test (struct gdbarch *gdbarch)
2078 if (selftest_skiparch (gdbarch))
2079 return;
2081 /* Create a mock environment. A process_stratum target pushed. */
2082 scoped_mock_context<target_ops_no_register> ctx (gdbarch);
2085 /* Install this regcache in the regcaches global structure, so that. */
2086 pid_ptid_regcache_map &x = regcaches[&ctx.mock_target];
2087 ptid_regcache_map &y = x[ctx.mock_ptid.pid ()];
2088 regcache &readwrite
2089 = *y.emplace (std::make_pair (ctx.mock_ptid,
2090 std::make_unique<readwrite_regcache> (
2091 &ctx.mock_inferior, gdbarch)))
2092 ->second;
2094 readwrite.set_ptid (ctx.mock_ptid);
2095 const int num_regs = gdbarch_num_cooked_regs (gdbarch);
2097 for (auto regnum = 0; regnum < num_regs; regnum++)
2099 if (register_size (gdbarch, regnum) == 0
2100 || gdbarch_cannot_store_register (gdbarch, regnum))
2101 continue;
2103 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
2105 if (bfd_arch == bfd_arch_sparc
2106 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
2107 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */
2108 && gdbarch_ptr_bit (gdbarch) == 64
2109 && (regnum >= gdbarch_num_regs (gdbarch)
2110 && regnum <= gdbarch_num_regs (gdbarch) + 4))
2111 continue;
2113 gdb::byte_vector expected (register_size (gdbarch, regnum), 0);
2114 gdb::byte_vector buf (register_size (gdbarch, regnum), 0);
2115 const auto type = register_type (gdbarch, regnum);
2117 if (type->code () == TYPE_CODE_FLT
2118 || type->code () == TYPE_CODE_DECFLOAT)
2120 /* Generate valid float format. */
2121 target_float_from_string (expected.data (), type, "1.25");
2123 else if (type->code () == TYPE_CODE_INT
2124 || type->code () == TYPE_CODE_ARRAY
2125 || type->code () == TYPE_CODE_PTR
2126 || type->code () == TYPE_CODE_UNION
2127 || type->code () == TYPE_CODE_STRUCT)
2129 if (bfd_arch == bfd_arch_ia64
2130 || (regnum >= gdbarch_num_regs (gdbarch)
2131 && (bfd_arch == bfd_arch_xtensa
2132 || bfd_arch == bfd_arch_bfin
2133 || bfd_arch == bfd_arch_m32c
2134 /* m68hc11 pseudo registers are in memory. */
2135 || bfd_arch == bfd_arch_m68hc11
2136 || bfd_arch == bfd_arch_m68hc12
2137 || bfd_arch == bfd_arch_s390))
2138 || (bfd_arch == bfd_arch_frv
2139 /* FRV pseudo registers except iacc0. */
2140 && regnum > gdbarch_num_regs (gdbarch)))
2142 /* Skip setting the expected values for some architecture
2143 registers. */
2145 else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
2147 /* RL78_PC_REGNUM */
2148 for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
2149 expected[j] = j;
2151 else
2153 for (auto j = 0; j < register_size (gdbarch, regnum); j++)
2154 expected[j] = j;
2157 else if (type->code () == TYPE_CODE_FLAGS)
2159 /* No idea how to test flags. */
2160 continue;
2162 else
2164 /* If we don't know how to create the expected value for the
2165 this type, make it fail. */
2166 SELF_CHECK (0);
2169 readwrite.cooked_write (regnum, expected);
2171 SELF_CHECK (readwrite.cooked_read (regnum, buf) == REG_VALID);
2172 SELF_CHECK (expected == buf);
2175 regcaches.erase (&ctx.mock_target);
2178 /* Verify that when two threads with the same ptid exist (from two different
2179 targets) and one of them changes ptid, we only update the appropriate
2180 regcaches. */
2182 static void
2183 regcache_thread_ptid_changed ()
2185 /* This test relies on the global regcache list to initially be empty. */
2186 registers_changed ();
2188 /* Any arch will do. */
2189 gdbarch *arch = current_inferior ()->arch ();
2191 /* Prepare two targets with one thread each, with the same ptid. */
2192 scoped_mock_context<test_target_ops> target1 (arch);
2193 scoped_mock_context<test_target_ops> target2 (arch);
2195 ptid_t old_ptid (111, 222);
2196 ptid_t new_ptid (111, 333);
2198 target1.mock_inferior.pid = old_ptid.pid ();
2199 target1.mock_thread.ptid = old_ptid;
2200 target1.mock_inferior.ptid_thread_map.clear ();
2201 target1.mock_inferior.ptid_thread_map[old_ptid] = &target1.mock_thread;
2203 target2.mock_inferior.pid = old_ptid.pid ();
2204 target2.mock_thread.ptid = old_ptid;
2205 target2.mock_inferior.ptid_thread_map.clear ();
2206 target2.mock_inferior.ptid_thread_map[old_ptid] = &target2.mock_thread;
2208 gdb_assert (regcaches.empty ());
2210 /* Populate the regcaches container. */
2211 get_thread_arch_regcache (&target1.mock_inferior, old_ptid, arch);
2212 get_thread_arch_regcache (&target2.mock_inferior, old_ptid, arch);
2214 gdb_assert (regcaches.size () == 2);
2215 gdb_assert (regcache_count (&target1.mock_target, old_ptid) == 1);
2216 gdb_assert (regcache_count (&target1.mock_target, new_ptid) == 0);
2217 gdb_assert (regcache_count (&target2.mock_target, old_ptid) == 1);
2218 gdb_assert (regcache_count (&target2.mock_target, new_ptid) == 0);
2220 thread_change_ptid (&target1.mock_target, old_ptid, new_ptid);
2222 gdb_assert (regcaches.size () == 2);
2223 gdb_assert (regcache_count (&target1.mock_target, old_ptid) == 0);
2224 gdb_assert (regcache_count (&target1.mock_target, new_ptid) == 1);
2225 gdb_assert (regcache_count (&target2.mock_target, old_ptid) == 1);
2226 gdb_assert (regcache_count (&target2.mock_target, new_ptid) == 0);
2228 /* Leave the regcache list empty. */
2229 registers_changed ();
2230 gdb_assert (regcaches.empty ());
2233 } // namespace selftests
2234 #endif /* GDB_SELF_TEST */
2236 void _initialize_regcache ();
2237 void
2238 _initialize_regcache ()
2240 struct cmd_list_element *c;
2242 gdb::observers::target_changed.attach (regcache_observer_target_changed,
2243 "regcache");
2244 gdb::observers::thread_ptid_changed.attach (regcache_thread_ptid_changed,
2245 "regcache");
2247 cmd_list_element *maintenance_flush_register_cache_cmd
2248 = add_cmd ("register-cache", class_maintenance, reg_flush_command,
2249 _("Force gdb to flush its register and frame cache."),
2250 &maintenanceflushlist);
2251 c = add_com_alias ("flushregs", maintenance_flush_register_cache_cmd,
2252 class_maintenance, 0);
2253 deprecate_cmd (c, "maintenance flush register-cache");
2255 #if GDB_SELF_TEST
2256 selftests::register_test ("get_thread_arch_regcache",
2257 selftests::get_thread_arch_regcache_test);
2258 selftests::register_test ("registers_changed_ptid_all",
2259 selftests::registers_changed_ptid_all_test);
2260 selftests::register_test ("registers_changed_ptid_target",
2261 selftests::registers_changed_ptid_target_test);
2262 selftests::register_test ("registers_changed_ptid_target_pid",
2263 selftests::registers_changed_ptid_target_pid_test);
2264 selftests::register_test ("registers_changed_ptid_target_ptid",
2265 selftests::registers_changed_ptid_target_ptid_test);
2266 selftests::register_test ("reg_buffer_raw_compare_zero_len",
2267 selftests::reg_buffer_raw_compare_zero_len_test);
2269 selftests::register_test_foreach_arch ("regcache::cooked_read_test",
2270 selftests::cooked_read_test);
2271 selftests::register_test_foreach_arch ("regcache::cooked_write_test",
2272 selftests::cooked_write_test);
2273 selftests::register_test ("regcache_thread_ptid_changed",
2274 selftests::regcache_thread_ptid_changed);
2275 #endif