1 /* Cache and manage the values of registers for GDB, the GNU debugger.
3 Copyright (C) 1986-2025 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"
22 #include "gdbthread.h"
24 #include "test-target.h"
25 #include "scoped-mock-context.h"
28 #include "reggroups.h"
29 #include "observable.h"
31 #include "gdbsupport/unordered_map.h"
32 #include <unordered_map>
33 #include "cli/cli-cmds.h"
38 * Here is the actual register cache.
41 /* Per-architecture object describing the layout of a register cache.
42 Computed once when the architecture is created. */
46 /* The architecture this descriptor belongs to. */
47 struct gdbarch
*gdbarch
= nullptr;
49 /* The raw register cache. Each raw (or hard) register is supplied
50 by the target interface. The raw cache should not contain
51 redundant information - if the PC is constructed from two
52 registers then those registers and not the PC lives in the raw
54 long sizeof_raw_registers
= 0;
56 /* The cooked register space. Each cooked register in the range
57 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
58 register. The remaining [NR_RAW_REGISTERS
59 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
60 both raw registers and memory by the architecture methods
61 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */
62 int nr_cooked_registers
= 0;
63 long sizeof_cooked_registers
= 0;
65 /* Offset and size (in 8 bit bytes), of each register in the
66 register cache. All registers (including those in the range
67 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an
69 long *register_offset
= nullptr;
70 long *sizeof_register
= nullptr;
72 /* Cached table containing the type of each register. */
73 struct type
**register_type
= nullptr;
76 static const registry
<gdbarch
>::key
<struct regcache_descr
>
77 regcache_descr_handle
;
79 static struct regcache_descr
*
80 init_regcache_descr (struct gdbarch
*gdbarch
)
83 struct regcache_descr
*descr
;
84 gdb_assert (gdbarch
!= NULL
);
86 /* Create an initial, zero filled, table. */
87 descr
= new struct regcache_descr
;
88 descr
->gdbarch
= gdbarch
;
90 /* Total size of the register space. The raw registers are mapped
91 directly onto the raw register cache while the pseudo's are
92 either mapped onto raw-registers or memory. */
93 descr
->nr_cooked_registers
= gdbarch_num_cooked_regs (gdbarch
);
95 /* Fill in a table of register types. */
97 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
,
99 for (i
= 0; i
< descr
->nr_cooked_registers
; i
++)
100 descr
->register_type
[i
] = gdbarch_register_type (gdbarch
, i
);
102 /* Construct a strictly RAW register cache. Don't allow pseudo's
103 into the register cache. */
105 /* Lay out the register cache.
107 NOTE: cagney/2002-05-22: Only register_type () is used when
108 constructing the register cache. It is assumed that the
109 register's raw size, virtual size and type length are all the
115 descr
->sizeof_register
116 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
, long);
117 descr
->register_offset
118 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
, long);
119 for (i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
121 descr
->sizeof_register
[i
] = descr
->register_type
[i
]->length ();
122 descr
->register_offset
[i
] = offset
;
123 offset
+= descr
->sizeof_register
[i
];
125 /* Set the real size of the raw register cache buffer. */
126 descr
->sizeof_raw_registers
= offset
;
128 for (; i
< descr
->nr_cooked_registers
; i
++)
130 descr
->sizeof_register
[i
] = descr
->register_type
[i
]->length ();
131 descr
->register_offset
[i
] = offset
;
132 offset
+= descr
->sizeof_register
[i
];
134 /* Set the real size of the readonly register cache buffer. */
135 descr
->sizeof_cooked_registers
= offset
;
141 static struct regcache_descr
*
142 regcache_descr (struct gdbarch
*gdbarch
)
144 struct regcache_descr
*result
= regcache_descr_handle
.get (gdbarch
);
145 if (result
== nullptr)
147 result
= init_regcache_descr (gdbarch
);
148 regcache_descr_handle
.set (gdbarch
, result
);
154 /* Utility functions returning useful register attributes stored in
155 the regcache descr. */
158 register_type (struct gdbarch
*gdbarch
, int regnum
)
160 struct regcache_descr
*descr
= regcache_descr (gdbarch
);
162 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_cooked_registers
);
163 return descr
->register_type
[regnum
];
166 /* Utility functions returning useful register attributes stored in
167 the regcache descr. */
170 register_size (struct gdbarch
*gdbarch
, int regnum
)
172 struct regcache_descr
*descr
= regcache_descr (gdbarch
);
175 gdb_assert (regnum
>= 0 && regnum
< gdbarch_num_cooked_regs (gdbarch
));
176 size
= descr
->sizeof_register
[regnum
];
180 /* See gdbsupport/common-regcache.h. */
183 reg_buffer::register_size (int regnum
) const
185 return ::register_size (this->arch (), regnum
);
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
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
] ());
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 (),
223 gdb::array_view
<gdb_byte
> buf
)
224 { return src
.cooked_read (regnum
, buf
); })
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
);
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
;
294 regcache::restore (readonly_detached_regcache
*src
)
296 struct gdbarch
*gdbarch
= m_descr
->gdbarch
;
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. */
321 reg_buffer::get_register_status (int regnum
) const
323 assert_regnum (regnum
);
325 return m_register_status
[regnum
];
329 reg_buffer::invalidate (int regnum
)
331 assert_regnum (regnum
);
332 m_register_status
[regnum
] = REG_UNKNOWN
;
336 reg_buffer::assert_regnum (int regnum
) const
338 gdb_assert (regnum
>= 0);
340 gdb_assert (regnum
< m_descr
->nr_cooked_registers
);
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
= gdb::unordered_map
<int, ptid_regcache_map
>;
355 /* Type holding regcaches for a given target. */
357 using target_pid_ptid_regcache_map
358 = gdb::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
;
369 get_thread_arch_regcache (inferior
*inf_for_target_calls
, ptid_t ptid
,
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
)));
401 static process_stratum_target
*current_thread_target
;
402 static ptid_t current_thread_ptid
;
403 static struct gdbarch
*current_thread_arch
;
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. */
430 get_thread_regcache (thread_info
*thread
)
432 gdb_assert (thread
->state
!= THREAD_EXITED
);
434 return get_thread_regcache (thread
->inf
->process_target (),
438 /* See gdbsupport/common-regcache.h. */
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. */
453 regcache_observer_target_changed (struct target_ops
*target
)
455 registers_changed ();
458 /* Update regcaches related to OLD_PTID to now use NEW_PTID. */
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 ())
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 ())
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. */
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. */
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
);
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. */
578 registers_changed_thread (thread_info
*thread
)
580 registers_changed_ptid (thread
->inf
->process_target (), thread
->ptid
);
584 registers_changed (void)
586 registers_changed_ptid (nullptr, minus_one_ptid
);
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
609 if (m_register_status
[regnum
] == REG_UNKNOWN
)
610 m_register_status
[regnum
] = REG_UNAVAILABLE
;
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
]);
622 if (m_register_status
[regnum
] != REG_VALID
)
623 memset (dst
.data (), 0, dst
.size ());
625 copy (register_buffer (regnum
), dst
);
627 return m_register_status
[regnum
];
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
));
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
>
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
));
664 regcache_raw_read_unsigned (reg_buffer_common
*regcache
, int regnum
,
667 gdb_assert (regcache
!= NULL
);
668 return gdb::checked_static_cast
<struct regcache
*> (regcache
)->raw_read
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
>
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
);
693 regcache_raw_write_unsigned (struct regcache
*regcache
, int regnum
,
696 gdb_assert (regcache
!= NULL
);
697 regcache
->raw_write (regnum
, val
);
701 regcache_raw_get_signed (struct regcache
*regcache
, int regnum
)
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
);
713 /* See regcache.h. */
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
);
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 ()),
743 if (computed
->entirely_available ())
744 copy (computed
->contents_raw (), dst
);
747 memset (dst
.data (), 0, dst
.size ());
748 result
= REG_UNAVAILABLE
;
754 return gdbarch_pseudo_register_read (m_descr
->gdbarch
, this, regnum
,
758 /* See regcache.h. */
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
));
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
786 if (cooked_read (regnum
, result
->contents_raw ()) == REG_UNAVAILABLE
)
787 result
->mark_bytes_unavailable (0,
788 result
->type ()->length ());
793 return gdbarch_pseudo_register_read_value
794 (m_descr
->gdbarch
, get_next_frame_sentinel_okay (get_current_frame ()),
799 regcache_cooked_read_signed (struct regcache
*regcache
, int regnum
,
802 gdb_assert (regcache
!= NULL
);
803 return regcache
->cooked_read (regnum
, val
);
806 template<typename T
, typename
>
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
));
823 regcache_cooked_read_unsigned (struct regcache
*regcache
, int regnum
,
826 gdb_assert (regcache
!= NULL
);
827 return regcache
->cooked_read (regnum
, val
);
831 regcache_cooked_write_signed (struct regcache
*regcache
, int regnum
,
834 gdb_assert (regcache
!= NULL
);
835 regcache
->cooked_write (regnum
, val
);
838 template<typename T
, typename
>
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
);
853 regcache_cooked_write_unsigned (struct regcache
*regcache
, int regnum
,
856 gdb_assert (regcache
!= NULL
);
857 regcache
->cooked_write (regnum
, val
);
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
))
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 ())
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
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
893 invalidator
.release ();
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. */
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 ()),
920 gdbarch_deprecated_pseudo_register_write (m_descr
->gdbarch
, this, regnum
,
924 /* See regcache.h. */
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. */
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 (regnum
);
944 gdb_assert (offset
>= 0);
945 gdb_assert (offset
+ dst
.size () <= reg_size
);
947 if (dst
.size () == 0)
953 if (dst
.size () == reg_size
)
955 /* Read the full register. */
957 return raw_read (regnum
, dst
);
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
);
968 status
= raw_read (regnum
, reg
);
970 status
= cooked_read (regnum
, reg
);
972 if (status
!= REG_VALID
)
976 copy (reg
.slice (offset
, dst
.size ()), dst
);
980 /* See regcache.h. */
983 reg_buffer::raw_collect_part (int regnum
, int offset
,
984 gdb::array_view
<gdb_byte
> dst
) const
986 int reg_size
= register_size (regnum
);
988 gdb_assert (offset
>= 0);
989 gdb_assert (offset
+ dst
.size () <= reg_size
);
991 if (dst
.size () == 0)
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. */
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 (regnum
);
1018 gdb_assert (offset
>= 0);
1019 gdb_assert (offset
+ src
.size () <= reg_size
);
1021 if (src
.size () == 0)
1023 /* Nothing to do. */
1027 if (src
.size () == reg_size
)
1029 /* Write the full register. */
1031 raw_write (regnum
, src
);
1033 cooked_write (regnum
, src
);
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
);
1044 status
= raw_read (regnum
, reg
);
1046 status
= cooked_read (regnum
, reg
);
1048 if (status
!= REG_VALID
)
1051 /* Update buffer, then write back to regcache. */
1052 copy (src
, reg
.slice (offset
, src
.size ()));
1055 raw_write (regnum
, reg
);
1057 cooked_write (regnum
, reg
);
1062 /* See regcache.h. */
1065 reg_buffer::raw_supply_part (int regnum
, int offset
,
1066 gdb::array_view
<const gdb_byte
> src
)
1068 int reg_size
= register_size (regnum
);
1070 gdb_assert (offset
>= 0);
1071 gdb_assert (offset
+ src
.size () <= reg_size
);
1073 if (src
.size () == 0)
1075 /* Nothing to do. */
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
);
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. */
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. */
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. */
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. */
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)
1143 m_register_status
[regnum
] = REG_VALID
;
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. */
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. */
1169 reg_buffer::raw_supply_integer (int regnum
, const gdb_byte
*addr
, int addr_len
,
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
,
1177 m_register_status
[regnum
] = REG_VALID
;
1180 /* See regcache.h. */
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. */
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. */
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
);
1209 /* See regcache.h. */
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. */
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
,
1232 /* See regcache.h. */
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 int reg_size
= std::min (register_size (regnum
), slot_size
);
1241 /* Use part versions and reg_size to prevent possible buffer overflows when
1242 accessing the regcache. */
1244 if (out_buf
!= nullptr)
1246 raw_collect_part (regnum
, 0,
1247 gdb::make_array_view (out_buf
+ offs
, reg_size
));
1249 /* Ensure any additional space is cleared. */
1250 if (slot_size
> reg_size
)
1251 memset (out_buf
+ offs
+ reg_size
, 0, slot_size
- reg_size
);
1253 else if (in_buf
!= nullptr)
1255 /* Zero-extend the register value if the slot is smaller than the register. */
1256 if (slot_size
< register_size (regnum
))
1257 out_regcache
->raw_supply_zeroed (regnum
);
1258 out_regcache
->raw_supply_part (regnum
, 0,
1259 gdb::make_array_view (in_buf
+ offs
,
1264 /* Invalidate the register. */
1265 out_regcache
->raw_supply (regnum
, {});
1269 /* See regcache.h. */
1272 regcache::transfer_regset (const struct regset
*regset
, int regbase
,
1273 struct regcache
*out_regcache
,
1274 int regnum
, const gdb_byte
*in_buf
,
1275 gdb_byte
*out_buf
, size_t size
) const
1277 const struct regcache_map_entry
*map
;
1278 int offs
= 0, count
;
1280 for (map
= (const struct regcache_map_entry
*) regset
->regmap
;
1281 (count
= map
->count
) != 0;
1284 int regno
= map
->regno
;
1285 int slot_size
= map
->size
;
1287 if (regno
!= REGCACHE_MAP_SKIP
)
1290 if (slot_size
== 0 && regno
!= REGCACHE_MAP_SKIP
)
1291 slot_size
= m_descr
->sizeof_register
[regno
];
1293 if (regno
== REGCACHE_MAP_SKIP
1295 && (regnum
< regno
|| regnum
>= regno
+ count
)))
1296 offs
+= count
* slot_size
;
1298 else if (regnum
== -1)
1299 for (; count
--; regno
++, offs
+= slot_size
)
1301 if (offs
+ slot_size
> size
)
1304 transfer_regset_register (out_regcache
, regno
, in_buf
, out_buf
,
1309 /* Transfer a single register and return. */
1310 offs
+= (regnum
- regno
) * slot_size
;
1311 if (offs
+ slot_size
> size
)
1314 transfer_regset_register (out_regcache
, regnum
, in_buf
, out_buf
,
1321 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1322 in REGSET. If REGNUM is -1, do this for all registers in REGSET.
1323 If BUF is NULL, set the register(s) to "unavailable" status. */
1326 regcache_supply_regset (const struct regset
*regset
,
1327 struct regcache
*regcache
,
1328 int regnum
, const void *buf
, size_t size
)
1330 regcache
->supply_regset (regset
, regnum
, (const gdb_byte
*) buf
, size
);
1333 /* See regcache.h. */
1336 regcache::supply_regset (const struct regset
*regset
, int regbase
,
1337 int regnum
, const void *buf
, size_t size
)
1339 transfer_regset (regset
, regbase
, this, regnum
, (const gdb_byte
*) buf
,
1343 /* Collect register REGNUM from REGCACHE to BUF, using the register
1344 map in REGSET. If REGNUM is -1, do this for all registers in
1348 regcache_collect_regset (const struct regset
*regset
,
1349 const struct regcache
*regcache
,
1350 int regnum
, void *buf
, size_t size
)
1352 regcache
->collect_regset (regset
, regnum
, (gdb_byte
*) buf
, size
);
1355 /* See regcache.h */
1358 regcache::collect_regset (const struct regset
*regset
, int regbase
,
1359 int regnum
, void *buf
, size_t size
) const
1361 transfer_regset (regset
, regbase
, nullptr, regnum
, nullptr, (gdb_byte
*) buf
,
1366 regcache_map_supplies (const struct regcache_map_entry
*map
, int regnum
,
1367 struct gdbarch
*gdbarch
, size_t size
)
1369 int offs
= 0, count
;
1371 for (; (count
= map
->count
) != 0; map
++)
1373 int regno
= map
->regno
;
1374 int slot_size
= map
->size
;
1376 if (slot_size
== 0 && regno
!= REGCACHE_MAP_SKIP
)
1377 slot_size
= register_size (gdbarch
, regno
);
1379 if (regno
!= REGCACHE_MAP_SKIP
&& regnum
>= regno
1380 && regnum
< regno
+ count
)
1381 return offs
+ (regnum
- regno
+ 1) * slot_size
<= size
;
1383 offs
+= count
* slot_size
;
1390 /* See gdbsupport/common-regcache.h. */
1393 reg_buffer::raw_compare (int regnum
, const void *buf
, int offset
) const
1395 gdb_assert (buf
!= NULL
);
1397 gdb::array_view
<const gdb_byte
> regbuf
= register_buffer (regnum
);
1398 gdb_assert (offset
<= regbuf
.size ());
1399 regbuf
= regbuf
.slice (offset
);
1401 return memcmp (buf
, regbuf
.data (), regbuf
.size ()) == 0;
1404 /* Special handling for register PC. */
1407 regcache_read_pc (reg_buffer_common
*reg_buf
)
1409 regcache
*regcache
= gdb::checked_static_cast
<struct regcache
*> (reg_buf
);
1410 struct gdbarch
*gdbarch
= regcache
->arch ();
1414 if (gdbarch_read_pc_p (gdbarch
))
1415 pc_val
= gdbarch_read_pc (gdbarch
, regcache
);
1416 /* Else use per-frame method on get_current_frame. */
1417 else if (gdbarch_pc_regnum (gdbarch
) >= 0)
1421 if (regcache_cooked_read_unsigned (regcache
,
1422 gdbarch_pc_regnum (gdbarch
),
1423 &raw_val
) == REG_UNAVAILABLE
)
1424 throw_error (NOT_AVAILABLE_ERROR
, _("PC register is not available"));
1426 pc_val
= gdbarch_addr_bits_remove (gdbarch
, raw_val
);
1429 internal_error (_("regcache_read_pc: Unable to find PC"));
1433 /* See gdbsupport/common-regcache.h. */
1436 regcache_read_pc_protected (reg_buffer_common
*regcache
)
1441 pc
= regcache_read_pc (regcache
);
1443 catch (const gdb_exception_error
&ex
)
1452 regcache_write_pc (struct regcache
*regcache
, CORE_ADDR pc
)
1454 struct gdbarch
*gdbarch
= regcache
->arch ();
1456 if (gdbarch_write_pc_p (gdbarch
))
1457 gdbarch_write_pc (gdbarch
, regcache
, pc
);
1458 else if (gdbarch_pc_regnum (gdbarch
) >= 0)
1459 regcache_cooked_write_unsigned (regcache
,
1460 gdbarch_pc_regnum (gdbarch
), pc
);
1462 internal_error (_("regcache_write_pc: Unable to update PC"));
1464 /* Writing the PC (for instance, from "load") invalidates the
1466 reinit_frame_cache ();
1470 reg_buffer::num_raw_registers () const
1472 return gdbarch_num_regs (arch ());
1476 regcache::register_debug_string (int regno
)
1478 struct gdbarch
*gdbarch
= arch ();
1481 if (regno
>= 0 && regno
< gdbarch_num_regs (gdbarch
)
1482 && gdbarch_register_name (gdbarch
, regno
)[0] != '\0')
1483 string_appendf (s
, "register %s:", gdbarch_register_name (gdbarch
, regno
));
1485 string_appendf (s
, "register %d:", regno
);
1487 if (regno
>= 0 && regno
< gdbarch_num_regs (gdbarch
))
1489 gdb::array_view
<gdb_byte
> buf
= register_buffer (regno
);
1491 string_appendf (s
, " = ");
1493 for (gdb_byte byte
: buf
)
1494 string_appendf (s
, "%02x", byte
);
1496 if (buf
.size () <= sizeof (LONGEST
))
1499 = extract_unsigned_integer (buf
, gdbarch_byte_order (gdbarch
));
1501 string_appendf (s
, " %s %s",
1502 core_addr_to_string_nz (val
), plongest (val
));
1509 /* Implement 'maint flush register-cache' command. */
1512 reg_flush_command (const char *command
, int from_tty
)
1514 /* Force-flush the register cache. */
1515 registers_changed ();
1517 gdb_printf (_("Register cache flushed.\n"));
1521 register_dump::dump (ui_out
*out
, const char *name
)
1523 auto descr
= regcache_descr (m_gdbarch
);
1525 int footnote_nr
= 0;
1526 int footnote_register_offset
= 0;
1527 int footnote_register_type_name_null
= 0;
1528 long register_offset
= 0;
1530 gdb_assert (descr
->nr_cooked_registers
1531 == gdbarch_num_cooked_regs (m_gdbarch
));
1533 ui_out_emit_table
table (out
, 6 + num_additional_headers (), -1, name
);
1534 out
->table_header (10, ui_left
, "name", "Name");
1535 out
->table_header (4, ui_left
, "num", "Nr");
1536 out
->table_header (4, ui_left
, "relnum", "Rel");
1537 out
->table_header (8, ui_left
, "offset", "Offset");
1538 out
->table_header (5, ui_left
, "size", "Size");
1539 out
->table_header (15, ui_left
, "type", "Type");
1540 additional_headers (out
);
1543 for (regnum
= 0; regnum
< descr
->nr_cooked_registers
; regnum
++)
1545 ui_out_emit_tuple
tuple_emitter (out
, nullptr);
1548 const char *p
= gdbarch_register_name (m_gdbarch
, regnum
);
1551 out
->field_string ("name", p
);
1554 out
->field_signed ("num", regnum
);
1556 /* Relative number. */
1557 if (regnum
< gdbarch_num_regs (m_gdbarch
))
1558 out
->field_signed ("relnum", regnum
);
1560 out
->field_signed ("relnum", (regnum
- gdbarch_num_regs (m_gdbarch
)));
1563 if (register_offset
!= descr
->register_offset
[regnum
]
1565 && (descr
->register_offset
[regnum
]
1566 != (descr
->register_offset
[regnum
- 1]
1567 + descr
->sizeof_register
[regnum
- 1]))))
1569 if (!footnote_register_offset
)
1570 footnote_register_offset
= ++footnote_nr
;
1571 std::string val
= string_printf ("%ld*%d",
1572 descr
->register_offset
[regnum
],
1573 footnote_register_offset
);
1574 out
->field_string ("offset", val
);
1577 out
->field_signed ("offset", descr
->register_offset
[regnum
]);
1578 register_offset
= (descr
->register_offset
[regnum
]
1579 + descr
->sizeof_register
[regnum
]);
1582 out
->field_signed ("size", descr
->sizeof_register
[regnum
]);
1587 std::string name_holder
;
1589 static const char blt
[] = "builtin_type";
1591 t
= register_type (m_gdbarch
, regnum
)->name ();
1594 if (!footnote_register_type_name_null
)
1595 footnote_register_type_name_null
= ++footnote_nr
;
1596 name_holder
= string_printf ("*%d",
1597 footnote_register_type_name_null
);
1598 t
= name_holder
.c_str ();
1600 /* Chop a leading builtin_type. */
1601 if (startswith (t
, blt
))
1604 out
->field_string ("type", t
);
1607 dump_reg (out
, regnum
);
1612 if (footnote_register_offset
)
1613 out
->message ("*%d: Inconsistent register offsets.\n",
1614 footnote_register_offset
);
1615 if (footnote_register_type_name_null
)
1616 out
->message ("*%d: Register type's name NULL.\n",
1617 footnote_register_type_name_null
);
1621 #include "gdbsupport/selftest.h"
1622 #include "selftest-arch.h"
1623 #include "target-float.h"
1625 namespace selftests
{
1632 for (auto pid_ptid_regc_map_it
= regcaches
.cbegin ();
1633 pid_ptid_regc_map_it
!= regcaches
.cend ();
1634 ++pid_ptid_regc_map_it
)
1636 const pid_ptid_regcache_map
&pid_ptid_regc_map
1637 = pid_ptid_regc_map_it
->second
;
1639 for (auto ptid_regc_map_it
= pid_ptid_regc_map
.cbegin ();
1640 ptid_regc_map_it
!= pid_ptid_regc_map
.cend ();
1643 const ptid_regcache_map
&ptid_regc_map
1644 = ptid_regc_map_it
->second
;
1646 size
+= ptid_regc_map
.size ();
1653 /* Return the count of regcaches for (TARGET, PTID) in REGCACHES. */
1656 regcache_count (process_stratum_target
*target
, ptid_t ptid
)
1658 /* Look up map for target. */
1659 auto pid_ptid_regc_map_it
= regcaches
.find (target
);
1660 if (pid_ptid_regc_map_it
!= regcaches
.end ())
1662 pid_ptid_regcache_map
&pid_ptid_regc_map
= pid_ptid_regc_map_it
->second
;
1664 /* Look map for pid. */
1665 auto ptid_regc_map_it
= pid_ptid_regc_map
.find (ptid
.pid ());
1666 if (ptid_regc_map_it
!= pid_ptid_regc_map
.end ())
1668 ptid_regcache_map
&ptid_regc_map
= ptid_regc_map_it
->second
;
1669 auto range
= ptid_regc_map
.equal_range (ptid
);
1671 return std::distance (range
.first
, range
.second
);
1678 /* Wrapper around get_thread_arch_regcache that does some self checks. */
1681 get_thread_arch_regcache_and_check (inferior
*inf_for_target_calls
,
1684 /* We currently only test with a single gdbarch. Any gdbarch will do, so use
1685 the current inferior's gdbarch. Also use the current inferior's address
1687 gdbarch
*arch
= inf_for_target_calls
->arch ();
1689 = get_thread_arch_regcache (inf_for_target_calls
, ptid
, arch
);
1691 SELF_CHECK (regcache
!= NULL
);
1692 SELF_CHECK (regcache
->ptid () == ptid
);
1693 SELF_CHECK (regcache
->arch () == arch
);
1696 /* The data that the regcaches selftests must hold onto for the duration of the
1699 struct regcache_test_data
1701 regcache_test_data ()
1702 /* The specific arch doesn't matter. */
1703 : test_ctx_1 (current_inferior ()->arch ()),
1704 test_ctx_2 (current_inferior ()->arch ())
1706 /* Ensure the regcaches container is empty at the start. */
1707 registers_changed ();
1710 ~regcache_test_data ()
1712 /* Make sure to leave the global regcaches container empty. */
1713 registers_changed ();
1716 scoped_mock_context
<test_target_ops
> test_ctx_1
;
1717 scoped_mock_context
<test_target_ops
> test_ctx_2
;
1720 using regcache_test_data_up
= std::unique_ptr
<regcache_test_data
>;
1722 /* Set up a few regcaches from two different targets, for use in
1723 regcache-management tests.
1725 Return a pointer, because the `regcache_test_data` type is not moveable. */
1727 static regcache_test_data_up
1728 populate_regcaches_for_test ()
1730 regcache_test_data_up
data (new regcache_test_data
);
1731 size_t expected_regcache_size
= 0;
1733 SELF_CHECK (regcaches_size () == 0);
1735 /* Populate the regcache container with a few regcaches for the two test
1737 for (int pid
: { 1, 2 })
1739 for (long lwp
: { 1, 2, 3 })
1741 get_thread_arch_regcache_and_check
1742 (&data
->test_ctx_1
.mock_inferior
, ptid_t (pid
, lwp
));
1743 expected_regcache_size
++;
1744 SELF_CHECK (regcaches_size () == expected_regcache_size
);
1746 get_thread_arch_regcache_and_check
1747 (&data
->test_ctx_2
.mock_inferior
, ptid_t (pid
, lwp
));
1748 expected_regcache_size
++;
1749 SELF_CHECK (regcaches_size () == expected_regcache_size
);
1757 get_thread_arch_regcache_test ()
1759 /* populate_regcaches_for_test already tests most of the
1760 get_thread_arch_regcache functionality. */
1761 regcache_test_data_up data
= populate_regcaches_for_test ();
1762 size_t regcaches_size_before
= regcaches_size ();
1764 /* Test that getting an existing regcache doesn't create a new one. */
1765 get_thread_arch_regcache_and_check (&data
->test_ctx_1
.mock_inferior
,
1767 SELF_CHECK (regcaches_size () == regcaches_size_before
);
1770 /* Test marking all regcaches of all targets as changed. */
1773 registers_changed_ptid_all_test ()
1775 regcache_test_data_up data
= populate_regcaches_for_test ();
1777 registers_changed_ptid (nullptr, minus_one_ptid
);
1778 SELF_CHECK (regcaches_size () == 0);
1781 /* Test marking regcaches of a specific target as changed. */
1784 registers_changed_ptid_target_test ()
1786 regcache_test_data_up data
= populate_regcaches_for_test ();
1788 registers_changed_ptid (&data
->test_ctx_1
.mock_target
, minus_one_ptid
);
1789 SELF_CHECK (regcaches_size () == 6);
1791 /* Check that we deleted the regcache for the right target. */
1792 SELF_CHECK (regcache_count (&data
->test_ctx_1
.mock_target
,
1793 ptid_t (2, 2)) == 0);
1794 SELF_CHECK (regcache_count (&data
->test_ctx_2
.mock_target
,
1795 ptid_t (2, 2)) == 1);
1798 /* Test marking regcaches of a specific (target, pid) as changed. */
1801 registers_changed_ptid_target_pid_test ()
1803 regcache_test_data_up data
= populate_regcaches_for_test ();
1805 registers_changed_ptid (&data
->test_ctx_1
.mock_target
, ptid_t (2));
1806 SELF_CHECK (regcaches_size () == 9);
1808 /* Regcaches from target1 should not exist, while regcaches from target2
1810 SELF_CHECK (regcache_count (&data
->test_ctx_1
.mock_target
,
1811 ptid_t (2, 2)) == 0);
1812 SELF_CHECK (regcache_count (&data
->test_ctx_2
.mock_target
,
1813 ptid_t (2, 2)) == 1);
1816 /* Test marking regcaches of a specific (target, ptid) as changed. */
1819 registers_changed_ptid_target_ptid_test ()
1821 regcache_test_data_up data
= populate_regcaches_for_test ();
1823 registers_changed_ptid (&data
->test_ctx_1
.mock_target
, ptid_t (2, 2));
1824 SELF_CHECK (regcaches_size () == 11);
1826 /* Check that we deleted the regcache for the right target. */
1827 SELF_CHECK (regcache_count (&data
->test_ctx_1
.mock_target
,
1828 ptid_t (2, 2)) == 0);
1829 SELF_CHECK (regcache_count (&data
->test_ctx_2
.mock_target
,
1830 ptid_t (2, 2)) == 1);
1833 /* Test using reg_buffer::raw_compare with offset equal to the register size
1834 (thus comparing 0 bytes). */
1837 reg_buffer_raw_compare_zero_len_test ()
1839 regcache_test_data_up data
= populate_regcaches_for_test ();
1840 inferior
&inf
= data
->test_ctx_1
.mock_inferior
;
1841 const regcache
*regcache
1842 = get_thread_arch_regcache (&inf
, ptid_t (1, 1), inf
.arch ());
1844 /* The buffer address is irrelevant since we end up comparing 0 bytes, we just
1845 need to pass something. */
1847 SELF_CHECK (regcache
->raw_compare (0, &buf
, register_size (inf
.arch (), 0)));
1850 class target_ops_no_register
: public test_target_ops
1853 target_ops_no_register ()
1854 : test_target_ops
{}
1859 fetch_registers_called
= 0;
1860 store_registers_called
= 0;
1861 xfer_partial_called
= 0;
1864 void fetch_registers (regcache
*regs
, int regno
) override
;
1865 void store_registers (regcache
*regs
, int regno
) override
;
1867 enum target_xfer_status
xfer_partial (enum target_object object
,
1868 const char *annex
, gdb_byte
*readbuf
,
1869 const gdb_byte
*writebuf
,
1870 ULONGEST offset
, ULONGEST len
,
1871 ULONGEST
*xfered_len
) override
;
1873 unsigned int fetch_registers_called
= 0;
1874 unsigned int store_registers_called
= 0;
1875 unsigned int xfer_partial_called
= 0;
1879 target_ops_no_register::fetch_registers (regcache
*regs
, int regno
)
1881 /* Mark register available. */
1882 regs
->raw_supply_zeroed (regno
);
1883 this->fetch_registers_called
++;
1887 target_ops_no_register::store_registers (regcache
*regs
, int regno
)
1889 this->store_registers_called
++;
1892 enum target_xfer_status
1893 target_ops_no_register::xfer_partial (enum target_object object
,
1894 const char *annex
, gdb_byte
*readbuf
,
1895 const gdb_byte
*writebuf
,
1896 ULONGEST offset
, ULONGEST len
,
1897 ULONGEST
*xfered_len
)
1899 this->xfer_partial_called
++;
1902 return TARGET_XFER_OK
;
1905 class readwrite_regcache
: public regcache
1908 readwrite_regcache (inferior
*inf_for_target_calls
,
1909 struct gdbarch
*gdbarch
)
1910 : regcache (inf_for_target_calls
, gdbarch
)
1914 /* Test regcache::cooked_read gets registers from raw registers and
1915 memory instead of target to_{fetch,store}_registers. */
1918 cooked_read_test (struct gdbarch
*gdbarch
)
1920 if (selftest_skip_warning_arch (gdbarch
))
1923 scoped_mock_context
<target_ops_no_register
> mockctx (gdbarch
);
1925 /* Test that read one raw register from regcache_no_target will go
1926 to the target layer. */
1928 /* Find a raw register which size isn't zero. */
1930 for (nonzero_regnum
= 0;
1931 nonzero_regnum
< gdbarch_num_regs (gdbarch
);
1934 if (register_size (gdbarch
, nonzero_regnum
) != 0)
1938 /* Install this regcache in the regcaches global structure, so that. */
1939 pid_ptid_regcache_map
&x
= regcaches
[&mockctx
.mock_target
];
1940 ptid_regcache_map
&y
= x
[mockctx
.mock_ptid
.pid ()];
1942 = *y
.emplace (std::make_pair (mockctx
.mock_ptid
,
1943 std::make_unique
<readwrite_regcache
> (
1944 &mockctx
.mock_inferior
, gdbarch
)))
1947 readwrite
.set_ptid (mockctx
.mock_ptid
);
1949 gdb::byte_vector
buf (register_size (gdbarch
, nonzero_regnum
));
1950 readwrite
.raw_read (nonzero_regnum
, buf
);
1952 /* raw_read calls target_fetch_registers. */
1953 SELF_CHECK (mockctx
.mock_target
.fetch_registers_called
> 0);
1954 mockctx
.mock_target
.reset ();
1956 /* Mark all raw registers valid, so the following raw registers
1957 accesses won't go to target. */
1958 for (auto i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
1959 readwrite
.raw_update (i
);
1961 mockctx
.mock_target
.reset ();
1962 /* Then, read all raw and pseudo registers, and don't expect calling
1963 to_{fetch,store}_registers. */
1964 for (int regnum
= 0; regnum
< gdbarch_num_cooked_regs (gdbarch
); regnum
++)
1966 if (register_size (gdbarch
, regnum
) == 0)
1969 gdb::byte_vector
inner_buf (register_size (gdbarch
, regnum
));
1971 SELF_CHECK (REG_VALID
== readwrite
.cooked_read (regnum
, inner_buf
));
1972 SELF_CHECK (mockctx
.mock_target
.fetch_registers_called
== 0);
1973 SELF_CHECK (mockctx
.mock_target
.store_registers_called
== 0);
1974 SELF_CHECK (mockctx
.mock_target
.xfer_partial_called
== 0);
1976 mockctx
.mock_target
.reset ();
1979 readonly_detached_regcache
readonly (readwrite
);
1981 /* GDB may go to target layer to fetch all registers and memory for
1982 readonly regcache. */
1983 mockctx
.mock_target
.reset ();
1985 for (int regnum
= 0; regnum
< gdbarch_num_cooked_regs (gdbarch
); regnum
++)
1987 if (register_size (gdbarch
, regnum
) == 0)
1990 gdb::byte_vector
inner_buf (register_size (gdbarch
, regnum
));
1991 register_status status
= readonly
.cooked_read (regnum
, inner_buf
);
1993 if (regnum
< gdbarch_num_regs (gdbarch
))
1995 auto bfd_arch
= gdbarch_bfd_arch_info (gdbarch
)->arch
;
1997 if (bfd_arch
== bfd_arch_amdgcn
1998 || bfd_arch
== bfd_arch_frv
|| bfd_arch
== bfd_arch_h8300
1999 || bfd_arch
== bfd_arch_m32c
|| bfd_arch
== bfd_arch_sh
2000 || bfd_arch
== bfd_arch_alpha
|| bfd_arch
== bfd_arch_v850
2001 || bfd_arch
== bfd_arch_msp430
|| bfd_arch
== bfd_arch_mep
2002 || bfd_arch
== bfd_arch_mips
|| bfd_arch
== bfd_arch_v850_rh850
2003 || bfd_arch
== bfd_arch_tic6x
|| bfd_arch
== bfd_arch_mn10300
2004 || bfd_arch
== bfd_arch_rl78
|| bfd_arch
== bfd_arch_score
2005 || bfd_arch
== bfd_arch_riscv
|| bfd_arch
== bfd_arch_csky
)
2007 /* Raw registers. If raw registers are not in save_reggroup,
2008 their status are unknown. */
2009 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, save_reggroup
))
2010 SELF_CHECK (status
== REG_VALID
);
2012 SELF_CHECK (status
== REG_UNKNOWN
);
2015 SELF_CHECK (status
== REG_VALID
);
2019 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, save_reggroup
))
2020 SELF_CHECK (status
== REG_VALID
);
2023 /* If pseudo registers are not in save_reggroup, some of
2024 them can be computed from saved raw registers, but some
2025 of them are unknown. */
2026 auto bfd_arch
= gdbarch_bfd_arch_info (gdbarch
)->arch
;
2028 if (bfd_arch
== bfd_arch_frv
2029 || bfd_arch
== bfd_arch_m32c
2030 || bfd_arch
== bfd_arch_mep
2031 || bfd_arch
== bfd_arch_sh
)
2032 SELF_CHECK (status
== REG_VALID
|| status
== REG_UNKNOWN
);
2033 else if (bfd_arch
== bfd_arch_mips
2034 || bfd_arch
== bfd_arch_h8300
)
2035 SELF_CHECK (status
== REG_UNKNOWN
);
2037 SELF_CHECK (status
== REG_VALID
);
2041 SELF_CHECK (mockctx
.mock_target
.fetch_registers_called
== 0);
2042 SELF_CHECK (mockctx
.mock_target
.store_registers_called
== 0);
2043 SELF_CHECK (mockctx
.mock_target
.xfer_partial_called
== 0);
2045 mockctx
.mock_target
.reset ();
2048 regcaches
.erase (&mockctx
.mock_target
);
2051 /* Test regcache::cooked_write by writing some expected contents to
2052 registers, and checking that contents read from registers and the
2053 expected contents are the same. */
2056 cooked_write_test (struct gdbarch
*gdbarch
)
2058 if (selftest_skip_warning_arch (gdbarch
))
2061 /* Create a mock environment. A process_stratum target pushed. */
2062 scoped_mock_context
<target_ops_no_register
> ctx (gdbarch
);
2065 /* Install this regcache in the regcaches global structure, so that. */
2066 pid_ptid_regcache_map
&x
= regcaches
[&ctx
.mock_target
];
2067 ptid_regcache_map
&y
= x
[ctx
.mock_ptid
.pid ()];
2069 = *y
.emplace (std::make_pair (ctx
.mock_ptid
,
2070 std::make_unique
<readwrite_regcache
> (
2071 &ctx
.mock_inferior
, gdbarch
)))
2074 readwrite
.set_ptid (ctx
.mock_ptid
);
2075 const int num_regs
= gdbarch_num_cooked_regs (gdbarch
);
2077 for (auto regnum
= 0; regnum
< num_regs
; regnum
++)
2079 if (register_size (gdbarch
, regnum
) == 0
2080 || gdbarch_cannot_store_register (gdbarch
, regnum
))
2083 auto bfd_arch
= gdbarch_bfd_arch_info (gdbarch
)->arch
;
2085 if (bfd_arch
== bfd_arch_sparc
2086 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
2087 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */
2088 && gdbarch_ptr_bit (gdbarch
) == 64
2089 && (regnum
>= gdbarch_num_regs (gdbarch
)
2090 && regnum
<= gdbarch_num_regs (gdbarch
) + 4))
2093 gdb::byte_vector
expected (register_size (gdbarch
, regnum
), 0);
2094 gdb::byte_vector
buf (register_size (gdbarch
, regnum
), 0);
2095 const auto type
= register_type (gdbarch
, regnum
);
2097 if (type
->code () == TYPE_CODE_FLT
2098 || type
->code () == TYPE_CODE_DECFLOAT
)
2100 /* Generate valid float format. */
2101 target_float_from_string (expected
.data (), type
, "1.25");
2103 else if (type
->code () == TYPE_CODE_INT
2104 || type
->code () == TYPE_CODE_ARRAY
2105 || type
->code () == TYPE_CODE_PTR
2106 || type
->code () == TYPE_CODE_UNION
2107 || type
->code () == TYPE_CODE_STRUCT
)
2109 if (bfd_arch
== bfd_arch_ia64
2110 || (regnum
>= gdbarch_num_regs (gdbarch
)
2111 && (bfd_arch
== bfd_arch_xtensa
2112 || bfd_arch
== bfd_arch_bfin
2113 || bfd_arch
== bfd_arch_m32c
2114 /* m68hc11 pseudo registers are in memory. */
2115 || bfd_arch
== bfd_arch_m68hc11
2116 || bfd_arch
== bfd_arch_m68hc12
2117 || bfd_arch
== bfd_arch_s390
))
2118 || (bfd_arch
== bfd_arch_frv
2119 /* FRV pseudo registers except iacc0. */
2120 && regnum
> gdbarch_num_regs (gdbarch
)))
2122 /* Skip setting the expected values for some architecture
2125 else if (bfd_arch
== bfd_arch_rl78
&& regnum
== 40)
2127 /* RL78_PC_REGNUM */
2128 for (auto j
= 0; j
< register_size (gdbarch
, regnum
) - 1; j
++)
2133 for (auto j
= 0; j
< register_size (gdbarch
, regnum
); j
++)
2137 else if (type
->code () == TYPE_CODE_FLAGS
)
2139 /* No idea how to test flags. */
2144 /* If we don't know how to create the expected value for the
2145 this type, make it fail. */
2149 readwrite
.cooked_write (regnum
, expected
);
2151 SELF_CHECK (readwrite
.cooked_read (regnum
, buf
) == REG_VALID
);
2152 SELF_CHECK (expected
== buf
);
2155 regcaches
.erase (&ctx
.mock_target
);
2158 /* Verify that when two threads with the same ptid exist (from two different
2159 targets) and one of them changes ptid, we only update the appropriate
2163 regcache_thread_ptid_changed ()
2165 /* This test relies on the global regcache list to initially be empty. */
2166 registers_changed ();
2168 /* Any arch will do. */
2169 gdbarch
*arch
= current_inferior ()->arch ();
2171 /* Prepare two targets with one thread each, with the same ptid. */
2172 scoped_mock_context
<test_target_ops
> target1 (arch
);
2173 scoped_mock_context
<test_target_ops
> target2 (arch
);
2175 ptid_t
old_ptid (111, 222);
2176 ptid_t
new_ptid (111, 333);
2178 target1
.mock_inferior
.pid
= old_ptid
.pid ();
2179 target1
.mock_thread
.ptid
= old_ptid
;
2180 target1
.mock_inferior
.ptid_thread_map
.clear ();
2181 target1
.mock_inferior
.ptid_thread_map
[old_ptid
] = &target1
.mock_thread
;
2183 target2
.mock_inferior
.pid
= old_ptid
.pid ();
2184 target2
.mock_thread
.ptid
= old_ptid
;
2185 target2
.mock_inferior
.ptid_thread_map
.clear ();
2186 target2
.mock_inferior
.ptid_thread_map
[old_ptid
] = &target2
.mock_thread
;
2188 gdb_assert (regcaches
.empty ());
2190 /* Populate the regcaches container. */
2191 get_thread_arch_regcache (&target1
.mock_inferior
, old_ptid
, arch
);
2192 get_thread_arch_regcache (&target2
.mock_inferior
, old_ptid
, arch
);
2194 gdb_assert (regcaches
.size () == 2);
2195 gdb_assert (regcache_count (&target1
.mock_target
, old_ptid
) == 1);
2196 gdb_assert (regcache_count (&target1
.mock_target
, new_ptid
) == 0);
2197 gdb_assert (regcache_count (&target2
.mock_target
, old_ptid
) == 1);
2198 gdb_assert (regcache_count (&target2
.mock_target
, new_ptid
) == 0);
2200 thread_change_ptid (&target1
.mock_target
, old_ptid
, new_ptid
);
2202 gdb_assert (regcaches
.size () == 2);
2203 gdb_assert (regcache_count (&target1
.mock_target
, old_ptid
) == 0);
2204 gdb_assert (regcache_count (&target1
.mock_target
, new_ptid
) == 1);
2205 gdb_assert (regcache_count (&target2
.mock_target
, old_ptid
) == 1);
2206 gdb_assert (regcache_count (&target2
.mock_target
, new_ptid
) == 0);
2208 /* Leave the regcache list empty. */
2209 registers_changed ();
2210 gdb_assert (regcaches
.empty ());
2213 } /* namespace selftests */
2214 #endif /* GDB_SELF_TEST */
2216 INIT_GDB_FILE (regcache
)
2218 struct cmd_list_element
*c
;
2220 gdb::observers::target_changed
.attach (regcache_observer_target_changed
,
2222 gdb::observers::thread_ptid_changed
.attach (regcache_thread_ptid_changed
,
2225 cmd_list_element
*maintenance_flush_register_cache_cmd
2226 = add_cmd ("register-cache", class_maintenance
, reg_flush_command
,
2227 _("Force gdb to flush its register and frame cache."),
2228 &maintenanceflushlist
);
2229 c
= add_com_alias ("flushregs", maintenance_flush_register_cache_cmd
,
2230 class_maintenance
, 0);
2231 deprecate_cmd (c
, "maintenance flush register-cache");
2234 selftests::register_test ("get_thread_arch_regcache",
2235 selftests::get_thread_arch_regcache_test
);
2236 selftests::register_test ("registers_changed_ptid_all",
2237 selftests::registers_changed_ptid_all_test
);
2238 selftests::register_test ("registers_changed_ptid_target",
2239 selftests::registers_changed_ptid_target_test
);
2240 selftests::register_test ("registers_changed_ptid_target_pid",
2241 selftests::registers_changed_ptid_target_pid_test
);
2242 selftests::register_test ("registers_changed_ptid_target_ptid",
2243 selftests::registers_changed_ptid_target_ptid_test
);
2244 selftests::register_test ("reg_buffer_raw_compare_zero_len",
2245 selftests::reg_buffer_raw_compare_zero_len_test
);
2247 selftests::register_test_foreach_arch ("regcache::cooked_read_test",
2248 selftests::cooked_read_test
);
2249 selftests::register_test_foreach_arch ("regcache::cooked_write_test",
2250 selftests::cooked_write_test
);
2251 selftests::register_test ("regcache_thread_ptid_changed",
2252 selftests::regcache_thread_ptid_changed
);