1 /* Cache and manage the values of registers for GDB, the GNU debugger.
3 Copyright (C) 1986-2021 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/>. */
22 #include "gdbthread.h"
24 #include "test-target.h"
25 #include "scoped-mock-context.h"
29 #include "reggroups.h"
30 #include "observable.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. */
44 static struct gdbarch_data
*regcache_descr_handle
;
48 /* The architecture this descriptor belongs to. */
49 struct gdbarch
*gdbarch
;
51 /* The raw register cache. Each raw (or hard) register is supplied
52 by the target interface. The raw cache should not contain
53 redundant information - if the PC is constructed from two
54 registers then those registers and not the PC lives in the raw
56 long sizeof_raw_registers
;
58 /* The cooked register space. Each cooked register in the range
59 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
60 register. The remaining [NR_RAW_REGISTERS
61 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
62 both raw registers and memory by the architecture methods
63 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */
64 int nr_cooked_registers
;
65 long sizeof_cooked_registers
;
67 /* Offset and size (in 8 bit bytes), of each register in the
68 register cache. All registers (including those in the range
69 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an
71 long *register_offset
;
72 long *sizeof_register
;
74 /* Cached table containing the type of each register. */
75 struct type
**register_type
;
79 init_regcache_descr (struct gdbarch
*gdbarch
)
82 struct regcache_descr
*descr
;
83 gdb_assert (gdbarch
!= NULL
);
85 /* Create an initial, zero filled, table. */
86 descr
= GDBARCH_OBSTACK_ZALLOC (gdbarch
, 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. */
96 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
,
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
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
] = TYPE_LENGTH (descr
->register_type
[i
]);
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
] = TYPE_LENGTH (descr
->register_type
[i
]);
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
;
140 static struct regcache_descr
*
141 regcache_descr (struct gdbarch
*gdbarch
)
143 return (struct regcache_descr
*) gdbarch_data (gdbarch
,
144 regcache_descr_handle
);
147 /* Utility functions returning useful register attributes stored in
148 the regcache descr. */
151 register_type (struct gdbarch
*gdbarch
, int regnum
)
153 struct regcache_descr
*descr
= regcache_descr (gdbarch
);
155 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_cooked_registers
);
156 return descr
->register_type
[regnum
];
159 /* Utility functions returning useful register attributes stored in
160 the regcache descr. */
163 register_size (struct gdbarch
*gdbarch
, int regnum
)
165 struct regcache_descr
*descr
= regcache_descr (gdbarch
);
168 gdb_assert (regnum
>= 0 && regnum
< gdbarch_num_cooked_regs (gdbarch
));
169 size
= descr
->sizeof_register
[regnum
];
173 /* See gdbsupport/common-regcache.h. */
176 regcache_register_size (const struct regcache
*regcache
, int n
)
178 return register_size (regcache
->arch (), n
);
181 reg_buffer::reg_buffer (gdbarch
*gdbarch
, bool has_pseudo
)
182 : m_has_pseudo (has_pseudo
)
184 gdb_assert (gdbarch
!= NULL
);
185 m_descr
= regcache_descr (gdbarch
);
187 /* We don't zero-initialize the M_REGISTERS array, as the bytes it contains
188 aren't meaningful as long as the corresponding register status is not
192 m_registers
.reset (new gdb_byte
[m_descr
->sizeof_cooked_registers
]);
193 m_register_status
.reset
194 (new register_status
[m_descr
->nr_cooked_registers
] ());
198 m_registers
.reset (new gdb_byte
[m_descr
->sizeof_raw_registers
]);
199 m_register_status
.reset
200 (new register_status
[gdbarch_num_regs (gdbarch
)] ());
204 regcache::regcache (process_stratum_target
*target
, gdbarch
*gdbarch
,
205 const address_space
*aspace_
)
206 /* The register buffers. A read/write register cache can only hold
207 [0 .. gdbarch_num_regs). */
208 : detached_regcache (gdbarch
, false), m_aspace (aspace_
), m_target (target
)
210 m_ptid
= minus_one_ptid
;
213 readonly_detached_regcache::readonly_detached_regcache (regcache
&src
)
214 : readonly_detached_regcache (src
.arch (),
215 [&src
] (int regnum
, gdb_byte
*buf
)
217 return src
.cooked_read (regnum
, buf
);
223 reg_buffer::arch () const
225 return m_descr
->gdbarch
;
228 /* Return a pointer to register REGNUM's buffer cache. */
231 reg_buffer::register_buffer (int regnum
) const
233 return m_registers
.get () + m_descr
->register_offset
[regnum
];
237 reg_buffer::save (register_read_ftype cooked_read
)
239 struct gdbarch
*gdbarch
= m_descr
->gdbarch
;
242 /* It should have pseudo registers. */
243 gdb_assert (m_has_pseudo
);
244 /* Clear the dest. */
245 memset (m_registers
.get (), 0, m_descr
->sizeof_cooked_registers
);
246 memset (m_register_status
.get (), REG_UNKNOWN
, m_descr
->nr_cooked_registers
);
247 /* Copy over any registers (identified by their membership in the
248 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
249 gdbarch_num_pseudo_regs) range is checked since some architectures need
250 to save/restore `cooked' registers that live in memory. */
251 for (regnum
= 0; regnum
< m_descr
->nr_cooked_registers
; regnum
++)
253 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, save_reggroup
))
255 gdb_byte
*dst_buf
= register_buffer (regnum
);
256 enum register_status status
= cooked_read (regnum
, dst_buf
);
258 gdb_assert (status
!= REG_UNKNOWN
);
260 if (status
!= REG_VALID
)
261 memset (dst_buf
, 0, register_size (gdbarch
, regnum
));
263 m_register_status
[regnum
] = status
;
269 regcache::restore (readonly_detached_regcache
*src
)
271 struct gdbarch
*gdbarch
= m_descr
->gdbarch
;
274 gdb_assert (src
!= NULL
);
275 gdb_assert (src
->m_has_pseudo
);
277 gdb_assert (gdbarch
== src
->arch ());
279 /* Copy over any registers, being careful to only restore those that
280 were both saved and need to be restored. The full [0 .. gdbarch_num_regs
281 + gdbarch_num_pseudo_regs) range is checked since some architectures need
282 to save/restore `cooked' registers that live in memory. */
283 for (regnum
= 0; regnum
< m_descr
->nr_cooked_registers
; regnum
++)
285 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, restore_reggroup
))
287 if (src
->m_register_status
[regnum
] == REG_VALID
)
288 cooked_write (regnum
, src
->register_buffer (regnum
));
293 /* See gdbsupport/common-regcache.h. */
296 reg_buffer::get_register_status (int regnum
) const
298 assert_regnum (regnum
);
300 return m_register_status
[regnum
];
304 reg_buffer::invalidate (int regnum
)
306 assert_regnum (regnum
);
307 m_register_status
[regnum
] = REG_UNKNOWN
;
311 reg_buffer::assert_regnum (int regnum
) const
313 gdb_assert (regnum
>= 0);
315 gdb_assert (regnum
< m_descr
->nr_cooked_registers
);
317 gdb_assert (regnum
< gdbarch_num_regs (arch ()));
320 /* Type to map a ptid to a list of regcaches (one thread may have multiple
321 regcaches, associated to different gdbarches). */
323 using ptid_regcache_map
324 = std::unordered_multimap
<ptid_t
, regcache_up
, hash_ptid
>;
326 /* Type holding regcaches for a given pid. */
328 using pid_ptid_regcache_map
= std::unordered_map
<int, ptid_regcache_map
>;
330 /* Type holding regcaches for a given target. */
332 using target_pid_ptid_regcache_map
333 = std::unordered_map
<process_stratum_target
*, pid_ptid_regcache_map
>;
335 /* Global structure containing the existing regcaches. */
337 /* NOTE: this is a write-through cache. There is no "dirty" bit for
338 recording if the register values have been changed (eg. by the
339 user). Therefore all registers must be written back to the
340 target when appropriate. */
341 static target_pid_ptid_regcache_map regcaches
;
344 get_thread_arch_aspace_regcache (process_stratum_target
*target
,
345 ptid_t ptid
, gdbarch
*arch
,
346 struct address_space
*aspace
)
348 gdb_assert (target
!= nullptr);
350 /* Find the map for this target. */
351 pid_ptid_regcache_map
&pid_ptid_regc_map
= regcaches
[target
];
353 /* Find the map for this pid. */
354 ptid_regcache_map
&ptid_regc_map
= pid_ptid_regc_map
[ptid
.pid ()];
356 /* Check first if a regcache for this arch already exists. */
357 auto range
= ptid_regc_map
.equal_range (ptid
);
358 for (auto it
= range
.first
; it
!= range
.second
; ++it
)
360 if (it
->second
->arch () == arch
)
361 return it
->second
.get ();
364 /* It does not exist, create it. */
365 regcache
*new_regcache
= new regcache (target
, arch
, aspace
);
366 new_regcache
->set_ptid (ptid
);
367 /* Work around a problem with g++ 4.8 (PR96537): Call the regcache_up
368 constructor explictly instead of implicitly. */
369 ptid_regc_map
.insert (std::make_pair (ptid
, regcache_up (new_regcache
)));
375 get_thread_arch_regcache (process_stratum_target
*target
, ptid_t ptid
,
376 struct gdbarch
*gdbarch
)
378 scoped_restore_current_inferior restore_current_inferior
;
379 set_current_inferior (find_inferior_ptid (target
, ptid
));
380 address_space
*aspace
= target_thread_address_space (ptid
);
382 return get_thread_arch_aspace_regcache (target
, ptid
, gdbarch
, aspace
);
385 static process_stratum_target
*current_thread_target
;
386 static ptid_t current_thread_ptid
;
387 static struct gdbarch
*current_thread_arch
;
390 get_thread_regcache (process_stratum_target
*target
, ptid_t ptid
)
392 if (!current_thread_arch
393 || target
!= current_thread_target
394 || current_thread_ptid
!= ptid
)
396 gdb_assert (ptid
!= null_ptid
);
398 current_thread_ptid
= ptid
;
399 current_thread_target
= target
;
401 scoped_restore_current_inferior restore_current_inferior
;
402 set_current_inferior (find_inferior_ptid (target
, ptid
));
403 current_thread_arch
= target_thread_architecture (ptid
);
406 return get_thread_arch_regcache (target
, ptid
, current_thread_arch
);
409 /* See regcache.h. */
412 get_thread_regcache (thread_info
*thread
)
414 return get_thread_regcache (thread
->inf
->process_target (),
419 get_current_regcache (void)
421 return get_thread_regcache (inferior_thread ());
424 /* See gdbsupport/common-regcache.h. */
427 get_thread_regcache_for_ptid (ptid_t ptid
)
429 /* This function doesn't take a process_stratum_target parameter
430 because it's a gdbsupport/ routine implemented by both gdb and
431 gdbserver. It always refers to a ptid of the current target. */
432 process_stratum_target
*proc_target
= current_inferior ()->process_target ();
433 return get_thread_regcache (proc_target
, ptid
);
436 /* Observer for the target_changed event. */
439 regcache_observer_target_changed (struct target_ops
*target
)
441 registers_changed ();
444 /* Update regcaches related to OLD_PTID to now use NEW_PTID. */
446 regcache_thread_ptid_changed (process_stratum_target
*target
,
447 ptid_t old_ptid
, ptid_t new_ptid
)
449 /* Look up map for target. */
450 auto pid_ptid_regc_map_it
= regcaches
.find (target
);
451 if (pid_ptid_regc_map_it
== regcaches
.end ())
454 /* Look up map for pid. */
455 pid_ptid_regcache_map
&pid_ptid_regc_map
= pid_ptid_regc_map_it
->second
;
456 auto ptid_regc_map_it
= pid_ptid_regc_map
.find (old_ptid
.pid ());
457 if (ptid_regc_map_it
== pid_ptid_regc_map
.end ())
460 /* Update all regcaches belonging to old_ptid. */
461 ptid_regcache_map
&ptid_regc_map
= ptid_regc_map_it
->second
;
462 auto range
= ptid_regc_map
.equal_range (old_ptid
);
463 for (auto it
= range
.first
; it
!= range
.second
;)
465 regcache_up rc
= std::move (it
->second
);
466 rc
->set_ptid (new_ptid
);
468 /* Remove old before inserting new, to avoid rehashing,
469 which would invalidate iterators. */
470 it
= ptid_regc_map
.erase (it
);
471 ptid_regc_map
.insert (std::make_pair (new_ptid
, std::move (rc
)));
475 /* Low level examining and depositing of registers.
477 The caller is responsible for making sure that the inferior is
478 stopped before calling the fetching routines, or it will get
479 garbage. (a change from GDB version 3, in which the caller got the
480 value from the last stop). */
482 /* REGISTERS_CHANGED ()
484 Indicate that registers may have changed, so invalidate the cache. */
487 registers_changed_ptid (process_stratum_target
*target
, ptid_t ptid
)
489 if (target
== nullptr)
491 /* Since there can be ptid clashes between targets, it's not valid to
492 pass a ptid without saying to which target it belongs. */
493 gdb_assert (ptid
== minus_one_ptid
);
495 /* Delete all the regcaches of all targets. */
498 else if (ptid
.is_pid ())
500 /* Non-NULL target and pid ptid, delete all regcaches belonging
501 to this (TARGET, PID). */
503 /* Look up map for target. */
504 auto pid_ptid_regc_map_it
= regcaches
.find (target
);
505 if (pid_ptid_regc_map_it
!= regcaches
.end ())
507 pid_ptid_regcache_map
&pid_ptid_regc_map
508 = pid_ptid_regc_map_it
->second
;
510 pid_ptid_regc_map
.erase (ptid
.pid ());
513 else if (ptid
!= minus_one_ptid
)
515 /* Non-NULL target and non-minus_one_ptid, delete all regcaches belonging
516 to this (TARGET, PTID). */
518 /* Look up map for target. */
519 auto pid_ptid_regc_map_it
= regcaches
.find (target
);
520 if (pid_ptid_regc_map_it
!= regcaches
.end ())
522 pid_ptid_regcache_map
&pid_ptid_regc_map
523 = pid_ptid_regc_map_it
->second
;
525 /* Look up map for pid. */
526 auto ptid_regc_map_it
527 = pid_ptid_regc_map
.find (ptid
.pid ());
528 if (ptid_regc_map_it
!= pid_ptid_regc_map
.end ())
530 ptid_regcache_map
&ptid_regc_map
531 = ptid_regc_map_it
->second
;
533 ptid_regc_map
.erase (ptid
);
539 /* Non-NULL target and minus_one_ptid, delete all regcaches
540 associated to this target. */
541 regcaches
.erase (target
);
544 if ((target
== nullptr || current_thread_target
== target
)
545 && current_thread_ptid
.matches (ptid
))
547 current_thread_target
= NULL
;
548 current_thread_ptid
= null_ptid
;
549 current_thread_arch
= NULL
;
552 if ((target
== nullptr || current_inferior ()->process_target () == target
)
553 && inferior_ptid
.matches (ptid
))
555 /* We just deleted the regcache of the current thread. Need to
556 forget about any frames we have cached, too. */
557 reinit_frame_cache ();
561 /* See regcache.h. */
564 registers_changed_thread (thread_info
*thread
)
566 registers_changed_ptid (thread
->inf
->process_target (), thread
->ptid
);
570 registers_changed (void)
572 registers_changed_ptid (nullptr, minus_one_ptid
);
576 regcache::raw_update (int regnum
)
578 assert_regnum (regnum
);
580 /* Make certain that the register cache is up-to-date with respect
581 to the current thread. This switching shouldn't be necessary
582 only there is still only one target side register cache. Sigh!
583 On the bright side, at least there is a regcache object. */
585 if (get_register_status (regnum
) == REG_UNKNOWN
)
587 target_fetch_registers (this, regnum
);
589 /* A number of targets can't access the whole set of raw
590 registers (because the debug API provides no means to get at
592 if (m_register_status
[regnum
] == REG_UNKNOWN
)
593 m_register_status
[regnum
] = REG_UNAVAILABLE
;
598 readable_regcache::raw_read (int regnum
, gdb_byte
*buf
)
600 gdb_assert (buf
!= NULL
);
603 if (m_register_status
[regnum
] != REG_VALID
)
604 memset (buf
, 0, m_descr
->sizeof_register
[regnum
]);
606 memcpy (buf
, register_buffer (regnum
),
607 m_descr
->sizeof_register
[regnum
]);
609 return m_register_status
[regnum
];
613 regcache_raw_read_signed (struct regcache
*regcache
, int regnum
, LONGEST
*val
)
615 gdb_assert (regcache
!= NULL
);
616 return regcache
->raw_read (regnum
, val
);
619 template<typename T
, typename
>
621 readable_regcache::raw_read (int regnum
, T
*val
)
624 enum register_status status
;
626 assert_regnum (regnum
);
627 buf
= (gdb_byte
*) alloca (m_descr
->sizeof_register
[regnum
]);
628 status
= raw_read (regnum
, buf
);
629 if (status
== REG_VALID
)
630 *val
= extract_integer
<T
> (buf
,
631 m_descr
->sizeof_register
[regnum
],
632 gdbarch_byte_order (m_descr
->gdbarch
));
639 regcache_raw_read_unsigned (struct regcache
*regcache
, int regnum
,
642 gdb_assert (regcache
!= NULL
);
643 return regcache
->raw_read (regnum
, val
);
647 regcache_raw_write_signed (struct regcache
*regcache
, int regnum
, LONGEST val
)
649 gdb_assert (regcache
!= NULL
);
650 regcache
->raw_write (regnum
, val
);
653 template<typename T
, typename
>
655 regcache::raw_write (int regnum
, T val
)
659 assert_regnum (regnum
);
660 buf
= (gdb_byte
*) alloca (m_descr
->sizeof_register
[regnum
]);
661 store_integer (buf
, m_descr
->sizeof_register
[regnum
],
662 gdbarch_byte_order (m_descr
->gdbarch
), val
);
663 raw_write (regnum
, buf
);
667 regcache_raw_write_unsigned (struct regcache
*regcache
, int regnum
,
670 gdb_assert (regcache
!= NULL
);
671 regcache
->raw_write (regnum
, val
);
675 regcache_raw_get_signed (struct regcache
*regcache
, int regnum
)
678 enum register_status status
;
680 status
= regcache_raw_read_signed (regcache
, regnum
, &value
);
681 if (status
== REG_UNAVAILABLE
)
682 throw_error (NOT_AVAILABLE_ERROR
,
683 _("Register %d is not available"), regnum
);
688 readable_regcache::cooked_read (int regnum
, gdb_byte
*buf
)
690 gdb_assert (regnum
>= 0);
691 gdb_assert (regnum
< m_descr
->nr_cooked_registers
);
692 if (regnum
< num_raw_registers ())
693 return raw_read (regnum
, buf
);
694 else if (m_has_pseudo
695 && m_register_status
[regnum
] != REG_UNKNOWN
)
697 if (m_register_status
[regnum
] == REG_VALID
)
698 memcpy (buf
, register_buffer (regnum
),
699 m_descr
->sizeof_register
[regnum
]);
701 memset (buf
, 0, m_descr
->sizeof_register
[regnum
]);
703 return m_register_status
[regnum
];
705 else if (gdbarch_pseudo_register_read_value_p (m_descr
->gdbarch
))
707 struct value
*mark
, *computed
;
708 enum register_status result
= REG_VALID
;
710 mark
= value_mark ();
712 computed
= gdbarch_pseudo_register_read_value (m_descr
->gdbarch
,
714 if (value_entirely_available (computed
))
715 memcpy (buf
, value_contents_raw (computed
),
716 m_descr
->sizeof_register
[regnum
]);
719 memset (buf
, 0, m_descr
->sizeof_register
[regnum
]);
720 result
= REG_UNAVAILABLE
;
723 value_free_to_mark (mark
);
728 return gdbarch_pseudo_register_read (m_descr
->gdbarch
, this,
733 readable_regcache::cooked_read_value (int regnum
)
735 gdb_assert (regnum
>= 0);
736 gdb_assert (regnum
< m_descr
->nr_cooked_registers
);
738 if (regnum
< num_raw_registers ()
739 || (m_has_pseudo
&& m_register_status
[regnum
] != REG_UNKNOWN
)
740 || !gdbarch_pseudo_register_read_value_p (m_descr
->gdbarch
))
742 struct value
*result
;
744 result
= allocate_value (register_type (m_descr
->gdbarch
, regnum
));
745 VALUE_LVAL (result
) = lval_register
;
746 VALUE_REGNUM (result
) = regnum
;
748 /* It is more efficient in general to do this delegation in this
749 direction than in the other one, even though the value-based
751 if (cooked_read (regnum
,
752 value_contents_raw (result
)) == REG_UNAVAILABLE
)
753 mark_value_bytes_unavailable (result
, 0,
754 TYPE_LENGTH (value_type (result
)));
759 return gdbarch_pseudo_register_read_value (m_descr
->gdbarch
,
764 regcache_cooked_read_signed (struct regcache
*regcache
, int regnum
,
767 gdb_assert (regcache
!= NULL
);
768 return regcache
->cooked_read (regnum
, val
);
771 template<typename T
, typename
>
773 readable_regcache::cooked_read (int regnum
, T
*val
)
775 enum register_status status
;
778 gdb_assert (regnum
>= 0 && regnum
< m_descr
->nr_cooked_registers
);
779 buf
= (gdb_byte
*) alloca (m_descr
->sizeof_register
[regnum
]);
780 status
= cooked_read (regnum
, buf
);
781 if (status
== REG_VALID
)
782 *val
= extract_integer
<T
> (buf
, m_descr
->sizeof_register
[regnum
],
783 gdbarch_byte_order (m_descr
->gdbarch
));
790 regcache_cooked_read_unsigned (struct regcache
*regcache
, int regnum
,
793 gdb_assert (regcache
!= NULL
);
794 return regcache
->cooked_read (regnum
, val
);
798 regcache_cooked_write_signed (struct regcache
*regcache
, int regnum
,
801 gdb_assert (regcache
!= NULL
);
802 regcache
->cooked_write (regnum
, val
);
805 template<typename T
, typename
>
807 regcache::cooked_write (int regnum
, T val
)
811 gdb_assert (regnum
>=0 && regnum
< m_descr
->nr_cooked_registers
);
812 buf
= (gdb_byte
*) alloca (m_descr
->sizeof_register
[regnum
]);
813 store_integer (buf
, m_descr
->sizeof_register
[regnum
],
814 gdbarch_byte_order (m_descr
->gdbarch
), val
);
815 cooked_write (regnum
, buf
);
819 regcache_cooked_write_unsigned (struct regcache
*regcache
, int regnum
,
822 gdb_assert (regcache
!= NULL
);
823 regcache
->cooked_write (regnum
, val
);
827 regcache::raw_write (int regnum
, const gdb_byte
*buf
)
830 gdb_assert (buf
!= NULL
);
831 assert_regnum (regnum
);
833 /* On the sparc, writing %g0 is a no-op, so we don't even want to
834 change the registers array if something writes to this register. */
835 if (gdbarch_cannot_store_register (arch (), regnum
))
838 /* If we have a valid copy of the register, and new value == old
839 value, then don't bother doing the actual store. */
840 if (get_register_status (regnum
) == REG_VALID
841 && (memcmp (register_buffer (regnum
), buf
,
842 m_descr
->sizeof_register
[regnum
]) == 0))
845 target_prepare_to_store (this);
846 raw_supply (regnum
, buf
);
848 /* Invalidate the register after it is written, in case of a
851 = make_scope_exit ([&] { this->invalidate (regnum
); });
853 target_store_registers (this, regnum
);
855 /* The target did not throw an error so we can discard invalidating
857 invalidator
.release ();
861 regcache::cooked_write (int regnum
, const gdb_byte
*buf
)
863 gdb_assert (regnum
>= 0);
864 gdb_assert (regnum
< m_descr
->nr_cooked_registers
);
865 if (regnum
< num_raw_registers ())
866 raw_write (regnum
, buf
);
868 gdbarch_pseudo_register_write (m_descr
->gdbarch
, this,
872 /* See regcache.h. */
875 readable_regcache::read_part (int regnum
, int offset
, int len
,
876 gdb_byte
*out
, bool is_raw
)
878 int reg_size
= register_size (arch (), regnum
);
880 gdb_assert (out
!= NULL
);
881 gdb_assert (offset
>= 0 && offset
<= reg_size
);
882 gdb_assert (len
>= 0 && offset
+ len
<= reg_size
);
884 if (offset
== 0 && len
== 0)
890 if (offset
== 0 && len
== reg_size
)
892 /* Read the full register. */
893 return (is_raw
) ? raw_read (regnum
, out
) : cooked_read (regnum
, out
);
896 enum register_status status
;
897 gdb_byte
*reg
= (gdb_byte
*) alloca (reg_size
);
899 /* Read full register to buffer. */
900 status
= (is_raw
) ? raw_read (regnum
, reg
) : cooked_read (regnum
, reg
);
901 if (status
!= REG_VALID
)
905 memcpy (out
, reg
+ offset
, len
);
909 /* See regcache.h. */
912 reg_buffer::raw_collect_part (int regnum
, int offset
, int len
,
915 int reg_size
= register_size (arch (), regnum
);
917 gdb_assert (out
!= nullptr);
918 gdb_assert (offset
>= 0 && offset
<= reg_size
);
919 gdb_assert (len
>= 0 && offset
+ len
<= reg_size
);
921 if (offset
== 0 && len
== 0)
927 if (offset
== 0 && len
== reg_size
)
929 /* Collect the full register. */
930 return raw_collect (regnum
, out
);
933 /* Read to buffer, then write out. */
934 gdb_byte
*reg
= (gdb_byte
*) alloca (reg_size
);
935 raw_collect (regnum
, reg
);
936 memcpy (out
, reg
+ offset
, len
);
939 /* See regcache.h. */
942 regcache::write_part (int regnum
, int offset
, int len
,
943 const gdb_byte
*in
, bool is_raw
)
945 int reg_size
= register_size (arch (), regnum
);
947 gdb_assert (in
!= NULL
);
948 gdb_assert (offset
>= 0 && offset
<= reg_size
);
949 gdb_assert (len
>= 0 && offset
+ len
<= reg_size
);
951 if (offset
== 0 && len
== 0)
957 if (offset
== 0 && len
== reg_size
)
959 /* Write the full register. */
960 (is_raw
) ? raw_write (regnum
, in
) : cooked_write (regnum
, in
);
964 enum register_status status
;
965 gdb_byte
*reg
= (gdb_byte
*) alloca (reg_size
);
967 /* Read existing register to buffer. */
968 status
= (is_raw
) ? raw_read (regnum
, reg
) : cooked_read (regnum
, reg
);
969 if (status
!= REG_VALID
)
972 /* Update buffer, then write back to regcache. */
973 memcpy (reg
+ offset
, in
, len
);
974 is_raw
? raw_write (regnum
, reg
) : cooked_write (regnum
, reg
);
978 /* See regcache.h. */
981 reg_buffer::raw_supply_part (int regnum
, int offset
, int len
,
984 int reg_size
= register_size (arch (), regnum
);
986 gdb_assert (in
!= nullptr);
987 gdb_assert (offset
>= 0 && offset
<= reg_size
);
988 gdb_assert (len
>= 0 && offset
+ len
<= reg_size
);
990 if (offset
== 0 && len
== 0)
996 if (offset
== 0 && len
== reg_size
)
998 /* Supply the full register. */
999 return raw_supply (regnum
, in
);
1002 gdb_byte
*reg
= (gdb_byte
*) alloca (reg_size
);
1004 /* Read existing value to buffer. */
1005 raw_collect (regnum
, reg
);
1007 /* Write to buffer, then write out. */
1008 memcpy (reg
+ offset
, in
, len
);
1009 raw_supply (regnum
, reg
);
1012 enum register_status
1013 readable_regcache::raw_read_part (int regnum
, int offset
, int len
,
1016 assert_regnum (regnum
);
1017 return read_part (regnum
, offset
, len
, buf
, true);
1020 /* See regcache.h. */
1023 regcache::raw_write_part (int regnum
, int offset
, int len
,
1024 const gdb_byte
*buf
)
1026 assert_regnum (regnum
);
1027 write_part (regnum
, offset
, len
, buf
, true);
1030 /* See regcache.h. */
1032 enum register_status
1033 readable_regcache::cooked_read_part (int regnum
, int offset
, int len
,
1036 gdb_assert (regnum
>= 0 && regnum
< m_descr
->nr_cooked_registers
);
1037 return read_part (regnum
, offset
, len
, buf
, false);
1040 /* See regcache.h. */
1043 regcache::cooked_write_part (int regnum
, int offset
, int len
,
1044 const gdb_byte
*buf
)
1046 gdb_assert (regnum
>= 0 && regnum
< m_descr
->nr_cooked_registers
);
1047 write_part (regnum
, offset
, len
, buf
, false);
1050 /* See gdbsupport/common-regcache.h. */
1053 reg_buffer::raw_supply (int regnum
, const void *buf
)
1058 assert_regnum (regnum
);
1060 regbuf
= register_buffer (regnum
);
1061 size
= m_descr
->sizeof_register
[regnum
];
1065 memcpy (regbuf
, buf
, size
);
1066 m_register_status
[regnum
] = REG_VALID
;
1070 /* This memset not strictly necessary, but better than garbage
1071 in case the register value manages to escape somewhere (due
1072 to a bug, no less). */
1073 memset (regbuf
, 0, size
);
1074 m_register_status
[regnum
] = REG_UNAVAILABLE
;
1078 /* See regcache.h. */
1081 reg_buffer::raw_supply_integer (int regnum
, const gdb_byte
*addr
,
1082 int addr_len
, bool is_signed
)
1084 enum bfd_endian byte_order
= gdbarch_byte_order (m_descr
->gdbarch
);
1088 assert_regnum (regnum
);
1090 regbuf
= register_buffer (regnum
);
1091 regsize
= m_descr
->sizeof_register
[regnum
];
1093 copy_integer_to_size (regbuf
, regsize
, addr
, addr_len
, is_signed
,
1095 m_register_status
[regnum
] = REG_VALID
;
1098 /* See regcache.h. */
1101 reg_buffer::raw_supply_zeroed (int regnum
)
1106 assert_regnum (regnum
);
1108 regbuf
= register_buffer (regnum
);
1109 size
= m_descr
->sizeof_register
[regnum
];
1111 memset (regbuf
, 0, size
);
1112 m_register_status
[regnum
] = REG_VALID
;
1115 /* See gdbsupport/common-regcache.h. */
1118 reg_buffer::raw_collect (int regnum
, void *buf
) const
1123 gdb_assert (buf
!= NULL
);
1124 assert_regnum (regnum
);
1126 regbuf
= register_buffer (regnum
);
1127 size
= m_descr
->sizeof_register
[regnum
];
1128 memcpy (buf
, regbuf
, size
);
1131 /* See regcache.h. */
1134 reg_buffer::raw_collect_integer (int regnum
, gdb_byte
*addr
, int addr_len
,
1135 bool is_signed
) const
1137 enum bfd_endian byte_order
= gdbarch_byte_order (m_descr
->gdbarch
);
1138 const gdb_byte
*regbuf
;
1141 assert_regnum (regnum
);
1143 regbuf
= register_buffer (regnum
);
1144 regsize
= m_descr
->sizeof_register
[regnum
];
1146 copy_integer_to_size (addr
, addr_len
, regbuf
, regsize
, is_signed
,
1150 /* See regcache.h. */
1153 regcache::transfer_regset_register (struct regcache
*out_regcache
, int regnum
,
1154 const gdb_byte
*in_buf
, gdb_byte
*out_buf
,
1155 int slot_size
, int offs
) const
1157 struct gdbarch
*gdbarch
= arch ();
1158 int reg_size
= std::min (register_size (gdbarch
, regnum
), slot_size
);
1160 /* Use part versions and reg_size to prevent possible buffer overflows when
1161 accessing the regcache. */
1163 if (out_buf
!= nullptr)
1165 raw_collect_part (regnum
, 0, reg_size
, out_buf
+ offs
);
1167 /* Ensure any additional space is cleared. */
1168 if (slot_size
> reg_size
)
1169 memset (out_buf
+ offs
+ reg_size
, 0, slot_size
- reg_size
);
1171 else if (in_buf
!= nullptr)
1172 out_regcache
->raw_supply_part (regnum
, 0, reg_size
, in_buf
+ offs
);
1175 /* Invalidate the register. */
1176 out_regcache
->raw_supply (regnum
, nullptr);
1180 /* See regcache.h. */
1183 regcache::transfer_regset (const struct regset
*regset
,
1184 struct regcache
*out_regcache
,
1185 int regnum
, const gdb_byte
*in_buf
,
1186 gdb_byte
*out_buf
, size_t size
) const
1188 const struct regcache_map_entry
*map
;
1189 int offs
= 0, count
;
1191 for (map
= (const struct regcache_map_entry
*) regset
->regmap
;
1192 (count
= map
->count
) != 0;
1195 int regno
= map
->regno
;
1196 int slot_size
= map
->size
;
1198 if (slot_size
== 0 && regno
!= REGCACHE_MAP_SKIP
)
1199 slot_size
= m_descr
->sizeof_register
[regno
];
1201 if (regno
== REGCACHE_MAP_SKIP
1203 && (regnum
< regno
|| regnum
>= regno
+ count
)))
1204 offs
+= count
* slot_size
;
1206 else if (regnum
== -1)
1207 for (; count
--; regno
++, offs
+= slot_size
)
1209 if (offs
+ slot_size
> size
)
1212 transfer_regset_register (out_regcache
, regno
, in_buf
, out_buf
,
1217 /* Transfer a single register and return. */
1218 offs
+= (regnum
- regno
) * slot_size
;
1219 if (offs
+ slot_size
> size
)
1222 transfer_regset_register (out_regcache
, regnum
, in_buf
, out_buf
,
1229 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1230 in REGSET. If REGNUM is -1, do this for all registers in REGSET.
1231 If BUF is NULL, set the register(s) to "unavailable" status. */
1234 regcache_supply_regset (const struct regset
*regset
,
1235 struct regcache
*regcache
,
1236 int regnum
, const void *buf
, size_t size
)
1238 regcache
->supply_regset (regset
, regnum
, (const gdb_byte
*) buf
, size
);
1242 regcache::supply_regset (const struct regset
*regset
,
1243 int regnum
, const void *buf
, size_t size
)
1245 transfer_regset (regset
, this, regnum
, (const gdb_byte
*) buf
, nullptr, size
);
1248 /* Collect register REGNUM from REGCACHE to BUF, using the register
1249 map in REGSET. If REGNUM is -1, do this for all registers in
1253 regcache_collect_regset (const struct regset
*regset
,
1254 const struct regcache
*regcache
,
1255 int regnum
, void *buf
, size_t size
)
1257 regcache
->collect_regset (regset
, regnum
, (gdb_byte
*) buf
, size
);
1261 regcache::collect_regset (const struct regset
*regset
,
1262 int regnum
, void *buf
, size_t size
) const
1264 transfer_regset (regset
, nullptr, regnum
, nullptr, (gdb_byte
*) buf
, size
);
1267 /* See gdbsupport/common-regcache.h. */
1270 reg_buffer::raw_compare (int regnum
, const void *buf
, int offset
) const
1272 gdb_assert (buf
!= NULL
);
1273 assert_regnum (regnum
);
1275 const char *regbuf
= (const char *) register_buffer (regnum
);
1276 size_t size
= m_descr
->sizeof_register
[regnum
];
1277 gdb_assert (size
>= offset
);
1279 return (memcmp (buf
, regbuf
+ offset
, size
- offset
) == 0);
1282 /* Special handling for register PC. */
1285 regcache_read_pc (struct regcache
*regcache
)
1287 struct gdbarch
*gdbarch
= regcache
->arch ();
1291 if (gdbarch_read_pc_p (gdbarch
))
1292 pc_val
= gdbarch_read_pc (gdbarch
, regcache
);
1293 /* Else use per-frame method on get_current_frame. */
1294 else if (gdbarch_pc_regnum (gdbarch
) >= 0)
1298 if (regcache_cooked_read_unsigned (regcache
,
1299 gdbarch_pc_regnum (gdbarch
),
1300 &raw_val
) == REG_UNAVAILABLE
)
1301 throw_error (NOT_AVAILABLE_ERROR
, _("PC register is not available"));
1303 pc_val
= gdbarch_addr_bits_remove (gdbarch
, raw_val
);
1306 internal_error (__FILE__
, __LINE__
,
1307 _("regcache_read_pc: Unable to find PC"));
1311 /* See gdbsupport/common-regcache.h. */
1314 regcache_read_pc_protected (regcache
*regcache
)
1319 pc
= regcache_read_pc (regcache
);
1321 catch (const gdb_exception_error
&ex
)
1330 regcache_write_pc (struct regcache
*regcache
, CORE_ADDR pc
)
1332 struct gdbarch
*gdbarch
= regcache
->arch ();
1334 if (gdbarch_write_pc_p (gdbarch
))
1335 gdbarch_write_pc (gdbarch
, regcache
, pc
);
1336 else if (gdbarch_pc_regnum (gdbarch
) >= 0)
1337 regcache_cooked_write_unsigned (regcache
,
1338 gdbarch_pc_regnum (gdbarch
), pc
);
1340 internal_error (__FILE__
, __LINE__
,
1341 _("regcache_write_pc: Unable to update PC"));
1343 /* Writing the PC (for instance, from "load") invalidates the
1345 reinit_frame_cache ();
1349 reg_buffer::num_raw_registers () const
1351 return gdbarch_num_regs (arch ());
1355 regcache::debug_print_register (const char *func
, int regno
)
1357 struct gdbarch
*gdbarch
= arch ();
1359 fprintf_unfiltered (gdb_stdlog
, "%s ", func
);
1360 if (regno
>= 0 && regno
< gdbarch_num_regs (gdbarch
)
1361 && gdbarch_register_name (gdbarch
, regno
) != NULL
1362 && gdbarch_register_name (gdbarch
, regno
)[0] != '\0')
1363 fprintf_unfiltered (gdb_stdlog
, "(%s)",
1364 gdbarch_register_name (gdbarch
, regno
));
1366 fprintf_unfiltered (gdb_stdlog
, "(%d)", regno
);
1367 if (regno
>= 0 && regno
< gdbarch_num_regs (gdbarch
))
1369 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1370 int size
= register_size (gdbarch
, regno
);
1371 gdb_byte
*buf
= register_buffer (regno
);
1373 fprintf_unfiltered (gdb_stdlog
, " = ");
1374 for (int i
= 0; i
< size
; i
++)
1376 fprintf_unfiltered (gdb_stdlog
, "%02x", buf
[i
]);
1378 if (size
<= sizeof (LONGEST
))
1380 ULONGEST val
= extract_unsigned_integer (buf
, size
, byte_order
);
1382 fprintf_unfiltered (gdb_stdlog
, " %s %s",
1383 core_addr_to_string_nz (val
), plongest (val
));
1386 fprintf_unfiltered (gdb_stdlog
, "\n");
1389 /* Implement 'maint flush register-cache' command. */
1392 reg_flush_command (const char *command
, int from_tty
)
1394 /* Force-flush the register cache. */
1395 registers_changed ();
1397 printf_filtered (_("Register cache flushed.\n"));
1401 register_dump::dump (ui_file
*file
)
1403 auto descr
= regcache_descr (m_gdbarch
);
1405 int footnote_nr
= 0;
1406 int footnote_register_offset
= 0;
1407 int footnote_register_type_name_null
= 0;
1408 long register_offset
= 0;
1410 gdb_assert (descr
->nr_cooked_registers
1411 == gdbarch_num_cooked_regs (m_gdbarch
));
1413 for (regnum
= -1; regnum
< descr
->nr_cooked_registers
; regnum
++)
1417 fprintf_unfiltered (file
, " %-10s", "Name");
1420 const char *p
= gdbarch_register_name (m_gdbarch
, regnum
);
1424 else if (p
[0] == '\0')
1426 fprintf_unfiltered (file
, " %-10s", p
);
1431 fprintf_unfiltered (file
, " %4s", "Nr");
1433 fprintf_unfiltered (file
, " %4d", regnum
);
1435 /* Relative number. */
1437 fprintf_unfiltered (file
, " %4s", "Rel");
1438 else if (regnum
< gdbarch_num_regs (m_gdbarch
))
1439 fprintf_unfiltered (file
, " %4d", regnum
);
1441 fprintf_unfiltered (file
, " %4d",
1442 (regnum
- gdbarch_num_regs (m_gdbarch
)));
1446 fprintf_unfiltered (file
, " %6s ", "Offset");
1449 fprintf_unfiltered (file
, " %6ld",
1450 descr
->register_offset
[regnum
]);
1451 if (register_offset
!= descr
->register_offset
[regnum
]
1453 && (descr
->register_offset
[regnum
]
1454 != (descr
->register_offset
[regnum
- 1]
1455 + descr
->sizeof_register
[regnum
- 1])))
1458 if (!footnote_register_offset
)
1459 footnote_register_offset
= ++footnote_nr
;
1460 fprintf_unfiltered (file
, "*%d", footnote_register_offset
);
1463 fprintf_unfiltered (file
, " ");
1464 register_offset
= (descr
->register_offset
[regnum
]
1465 + descr
->sizeof_register
[regnum
]);
1470 fprintf_unfiltered (file
, " %5s ", "Size");
1472 fprintf_unfiltered (file
, " %5ld", descr
->sizeof_register
[regnum
]);
1477 std::string name_holder
;
1483 static const char blt
[] = "builtin_type";
1485 t
= register_type (m_gdbarch
, regnum
)->name ();
1488 if (!footnote_register_type_name_null
)
1489 footnote_register_type_name_null
= ++footnote_nr
;
1490 name_holder
= string_printf ("*%d",
1491 footnote_register_type_name_null
);
1492 t
= name_holder
.c_str ();
1494 /* Chop a leading builtin_type. */
1495 if (startswith (t
, blt
))
1498 fprintf_unfiltered (file
, " %-15s", t
);
1501 /* Leading space always present. */
1502 fprintf_unfiltered (file
, " ");
1504 dump_reg (file
, regnum
);
1506 fprintf_unfiltered (file
, "\n");
1509 if (footnote_register_offset
)
1510 fprintf_unfiltered (file
, "*%d: Inconsistent register offsets.\n",
1511 footnote_register_offset
);
1512 if (footnote_register_type_name_null
)
1513 fprintf_unfiltered (file
,
1514 "*%d: Register type's name NULL.\n",
1515 footnote_register_type_name_null
);
1519 #include "gdbsupport/selftest.h"
1520 #include "selftest-arch.h"
1521 #include "target-float.h"
1523 namespace selftests
{
1530 for (auto pid_ptid_regc_map_it
= regcaches
.cbegin ();
1531 pid_ptid_regc_map_it
!= regcaches
.cend ();
1532 ++pid_ptid_regc_map_it
)
1534 const pid_ptid_regcache_map
&pid_ptid_regc_map
1535 = pid_ptid_regc_map_it
->second
;
1537 for (auto ptid_regc_map_it
= pid_ptid_regc_map
.cbegin ();
1538 ptid_regc_map_it
!= pid_ptid_regc_map
.cend ();
1541 const ptid_regcache_map
&ptid_regc_map
1542 = ptid_regc_map_it
->second
;
1544 size
+= ptid_regc_map
.size ();
1551 /* Return the count of regcaches for (TARGET, PTID) in REGCACHES. */
1554 regcache_count (process_stratum_target
*target
, ptid_t ptid
)
1556 /* Look up map for target. */
1557 auto pid_ptid_regc_map_it
= regcaches
.find (target
);
1558 if (pid_ptid_regc_map_it
!= regcaches
.end ())
1560 pid_ptid_regcache_map
&pid_ptid_regc_map
= pid_ptid_regc_map_it
->second
;
1562 /* Look map for pid. */
1563 auto ptid_regc_map_it
= pid_ptid_regc_map
.find (ptid
.pid ());
1564 if (ptid_regc_map_it
!= pid_ptid_regc_map
.end ())
1566 ptid_regcache_map
&ptid_regc_map
= ptid_regc_map_it
->second
;
1567 auto range
= ptid_regc_map
.equal_range (ptid
);
1569 return std::distance (range
.first
, range
.second
);
1576 /* Wrapper around get_thread_arch_aspace_regcache that does some self checks. */
1579 get_thread_arch_aspace_regcache_and_check (process_stratum_target
*target
,
1582 /* We currently only test with a single gdbarch. Any gdbarch will do, so use
1583 the current inferior's gdbarch. Also use the current inferior's address
1585 gdbarch
*arch
= current_inferior ()->gdbarch
;
1586 address_space
*aspace
= current_inferior ()->aspace
;
1588 = get_thread_arch_aspace_regcache (target
, ptid
, arch
, aspace
);
1590 SELF_CHECK (regcache
!= NULL
);
1591 SELF_CHECK (regcache
->target () == target
);
1592 SELF_CHECK (regcache
->ptid () == ptid
);
1593 SELF_CHECK (regcache
->arch () == arch
);
1594 SELF_CHECK (regcache
->aspace () == aspace
);
1597 /* The data that the regcaches selftests must hold onto for the duration of the
1600 struct regcache_test_data
1602 regcache_test_data ()
1604 /* Ensure the regcaches container is empty at the start. */
1605 registers_changed ();
1608 ~regcache_test_data ()
1610 /* Make sure to leave the global regcaches container empty. */
1611 registers_changed ();
1614 test_target_ops test_target1
;
1615 test_target_ops test_target2
;
1618 using regcache_test_data_up
= std::unique_ptr
<regcache_test_data
>;
1620 /* Set up a few regcaches from two different targets, for use in
1621 regcache-management tests.
1623 Return a pointer, because the `regcache_test_data` type is not moveable. */
1625 static regcache_test_data_up
1626 populate_regcaches_for_test ()
1628 regcache_test_data_up
data (new regcache_test_data
);
1629 size_t expected_regcache_size
= 0;
1631 SELF_CHECK (regcaches_size () == 0);
1633 /* Populate the regcache container with a few regcaches for the two test
1635 for (int pid
: { 1, 2 })
1637 for (long lwp
: { 1, 2, 3 })
1639 get_thread_arch_aspace_regcache_and_check
1640 (&data
->test_target1
, ptid_t (pid
, lwp
));
1641 expected_regcache_size
++;
1642 SELF_CHECK (regcaches_size () == expected_regcache_size
);
1644 get_thread_arch_aspace_regcache_and_check
1645 (&data
->test_target2
, ptid_t (pid
, lwp
));
1646 expected_regcache_size
++;
1647 SELF_CHECK (regcaches_size () == expected_regcache_size
);
1655 get_thread_arch_aspace_regcache_test ()
1657 /* populate_regcaches_for_test already tests most of the
1658 get_thread_arch_aspace_regcache functionality. */
1659 regcache_test_data_up data
= populate_regcaches_for_test ();
1660 size_t regcaches_size_before
= regcaches_size ();
1662 /* Test that getting an existing regcache doesn't create a new one. */
1663 get_thread_arch_aspace_regcache_and_check (&data
->test_target1
, ptid_t (2, 2));
1664 SELF_CHECK (regcaches_size () == regcaches_size_before
);
1667 /* Test marking all regcaches of all targets as changed. */
1670 registers_changed_ptid_all_test ()
1672 regcache_test_data_up data
= populate_regcaches_for_test ();
1674 registers_changed_ptid (nullptr, minus_one_ptid
);
1675 SELF_CHECK (regcaches_size () == 0);
1678 /* Test marking regcaches of a specific target as changed. */
1681 registers_changed_ptid_target_test ()
1683 regcache_test_data_up data
= populate_regcaches_for_test ();
1685 registers_changed_ptid (&data
->test_target1
, minus_one_ptid
);
1686 SELF_CHECK (regcaches_size () == 6);
1688 /* Check that we deleted the regcache for the right target. */
1689 SELF_CHECK (regcache_count (&data
->test_target1
, ptid_t (2, 2)) == 0);
1690 SELF_CHECK (regcache_count (&data
->test_target2
, ptid_t (2, 2)) == 1);
1693 /* Test marking regcaches of a specific (target, pid) as changed. */
1696 registers_changed_ptid_target_pid_test ()
1698 regcache_test_data_up data
= populate_regcaches_for_test ();
1700 registers_changed_ptid (&data
->test_target1
, ptid_t (2));
1701 SELF_CHECK (regcaches_size () == 9);
1703 /* Regcaches from target1 should not exist, while regcaches from target2
1705 SELF_CHECK (regcache_count (&data
->test_target1
, ptid_t (2, 2)) == 0);
1706 SELF_CHECK (regcache_count (&data
->test_target2
, ptid_t (2, 2)) == 1);
1709 /* Test marking regcaches of a specific (target, ptid) as changed. */
1712 registers_changed_ptid_target_ptid_test ()
1714 regcache_test_data_up data
= populate_regcaches_for_test ();
1716 registers_changed_ptid (&data
->test_target1
, ptid_t (2, 2));
1717 SELF_CHECK (regcaches_size () == 11);
1719 /* Check that we deleted the regcache for the right target. */
1720 SELF_CHECK (regcache_count (&data
->test_target1
, ptid_t (2, 2)) == 0);
1721 SELF_CHECK (regcache_count (&data
->test_target2
, ptid_t (2, 2)) == 1);
1724 class target_ops_no_register
: public test_target_ops
1727 target_ops_no_register ()
1728 : test_target_ops
{}
1733 fetch_registers_called
= 0;
1734 store_registers_called
= 0;
1735 xfer_partial_called
= 0;
1738 void fetch_registers (regcache
*regs
, int regno
) override
;
1739 void store_registers (regcache
*regs
, int regno
) override
;
1741 enum target_xfer_status
xfer_partial (enum target_object object
,
1742 const char *annex
, gdb_byte
*readbuf
,
1743 const gdb_byte
*writebuf
,
1744 ULONGEST offset
, ULONGEST len
,
1745 ULONGEST
*xfered_len
) override
;
1747 unsigned int fetch_registers_called
= 0;
1748 unsigned int store_registers_called
= 0;
1749 unsigned int xfer_partial_called
= 0;
1753 target_ops_no_register::fetch_registers (regcache
*regs
, int regno
)
1755 /* Mark register available. */
1756 regs
->raw_supply_zeroed (regno
);
1757 this->fetch_registers_called
++;
1761 target_ops_no_register::store_registers (regcache
*regs
, int regno
)
1763 this->store_registers_called
++;
1766 enum target_xfer_status
1767 target_ops_no_register::xfer_partial (enum target_object object
,
1768 const char *annex
, gdb_byte
*readbuf
,
1769 const gdb_byte
*writebuf
,
1770 ULONGEST offset
, ULONGEST len
,
1771 ULONGEST
*xfered_len
)
1773 this->xfer_partial_called
++;
1776 return TARGET_XFER_OK
;
1779 class readwrite_regcache
: public regcache
1782 readwrite_regcache (process_stratum_target
*target
,
1783 struct gdbarch
*gdbarch
)
1784 : regcache (target
, gdbarch
, nullptr)
1788 /* Test regcache::cooked_read gets registers from raw registers and
1789 memory instead of target to_{fetch,store}_registers. */
1792 cooked_read_test (struct gdbarch
*gdbarch
)
1794 scoped_mock_context
<target_ops_no_register
> mockctx (gdbarch
);
1796 /* Test that read one raw register from regcache_no_target will go
1797 to the target layer. */
1799 /* Find a raw register which size isn't zero. */
1801 for (nonzero_regnum
= 0;
1802 nonzero_regnum
< gdbarch_num_regs (gdbarch
);
1805 if (register_size (gdbarch
, nonzero_regnum
) != 0)
1809 readwrite_regcache
readwrite (&mockctx
.mock_target
, gdbarch
);
1810 gdb::def_vector
<gdb_byte
> buf (register_size (gdbarch
, nonzero_regnum
));
1812 readwrite
.raw_read (nonzero_regnum
, buf
.data ());
1814 /* raw_read calls target_fetch_registers. */
1815 SELF_CHECK (mockctx
.mock_target
.fetch_registers_called
> 0);
1816 mockctx
.mock_target
.reset ();
1818 /* Mark all raw registers valid, so the following raw registers
1819 accesses won't go to target. */
1820 for (auto i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
1821 readwrite
.raw_update (i
);
1823 mockctx
.mock_target
.reset ();
1824 /* Then, read all raw and pseudo registers, and don't expect calling
1825 to_{fetch,store}_registers. */
1826 for (int regnum
= 0; regnum
< gdbarch_num_cooked_regs (gdbarch
); regnum
++)
1828 if (register_size (gdbarch
, regnum
) == 0)
1831 gdb::def_vector
<gdb_byte
> inner_buf (register_size (gdbarch
, regnum
));
1833 SELF_CHECK (REG_VALID
== readwrite
.cooked_read (regnum
,
1834 inner_buf
.data ()));
1836 SELF_CHECK (mockctx
.mock_target
.fetch_registers_called
== 0);
1837 SELF_CHECK (mockctx
.mock_target
.store_registers_called
== 0);
1838 SELF_CHECK (mockctx
.mock_target
.xfer_partial_called
== 0);
1840 mockctx
.mock_target
.reset ();
1843 readonly_detached_regcache
readonly (readwrite
);
1845 /* GDB may go to target layer to fetch all registers and memory for
1846 readonly regcache. */
1847 mockctx
.mock_target
.reset ();
1849 for (int regnum
= 0; regnum
< gdbarch_num_cooked_regs (gdbarch
); regnum
++)
1851 if (register_size (gdbarch
, regnum
) == 0)
1854 gdb::def_vector
<gdb_byte
> inner_buf (register_size (gdbarch
, regnum
));
1855 enum register_status status
= readonly
.cooked_read (regnum
,
1858 if (regnum
< gdbarch_num_regs (gdbarch
))
1860 auto bfd_arch
= gdbarch_bfd_arch_info (gdbarch
)->arch
;
1862 if (bfd_arch
== bfd_arch_frv
|| bfd_arch
== bfd_arch_h8300
1863 || bfd_arch
== bfd_arch_m32c
|| bfd_arch
== bfd_arch_sh
1864 || bfd_arch
== bfd_arch_alpha
|| bfd_arch
== bfd_arch_v850
1865 || bfd_arch
== bfd_arch_msp430
|| bfd_arch
== bfd_arch_mep
1866 || bfd_arch
== bfd_arch_mips
|| bfd_arch
== bfd_arch_v850_rh850
1867 || bfd_arch
== bfd_arch_tic6x
|| bfd_arch
== bfd_arch_mn10300
1868 || bfd_arch
== bfd_arch_rl78
|| bfd_arch
== bfd_arch_score
1869 || bfd_arch
== bfd_arch_riscv
|| bfd_arch
== bfd_arch_csky
)
1871 /* Raw registers. If raw registers are not in save_reggroup,
1872 their status are unknown. */
1873 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, save_reggroup
))
1874 SELF_CHECK (status
== REG_VALID
);
1876 SELF_CHECK (status
== REG_UNKNOWN
);
1879 SELF_CHECK (status
== REG_VALID
);
1883 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, save_reggroup
))
1884 SELF_CHECK (status
== REG_VALID
);
1887 /* If pseudo registers are not in save_reggroup, some of
1888 them can be computed from saved raw registers, but some
1889 of them are unknown. */
1890 auto bfd_arch
= gdbarch_bfd_arch_info (gdbarch
)->arch
;
1892 if (bfd_arch
== bfd_arch_frv
1893 || bfd_arch
== bfd_arch_m32c
1894 || bfd_arch
== bfd_arch_mep
1895 || bfd_arch
== bfd_arch_sh
)
1896 SELF_CHECK (status
== REG_VALID
|| status
== REG_UNKNOWN
);
1897 else if (bfd_arch
== bfd_arch_mips
1898 || bfd_arch
== bfd_arch_h8300
)
1899 SELF_CHECK (status
== REG_UNKNOWN
);
1901 SELF_CHECK (status
== REG_VALID
);
1905 SELF_CHECK (mockctx
.mock_target
.fetch_registers_called
== 0);
1906 SELF_CHECK (mockctx
.mock_target
.store_registers_called
== 0);
1907 SELF_CHECK (mockctx
.mock_target
.xfer_partial_called
== 0);
1909 mockctx
.mock_target
.reset ();
1913 /* Test regcache::cooked_write by writing some expected contents to
1914 registers, and checking that contents read from registers and the
1915 expected contents are the same. */
1918 cooked_write_test (struct gdbarch
*gdbarch
)
1920 /* Error out if debugging something, because we're going to push the
1921 test target, which would pop any existing target. */
1922 if (current_inferior ()->top_target ()->stratum () >= process_stratum
)
1923 error (_("target already pushed"));
1925 /* Create a mock environment. A process_stratum target pushed. */
1927 target_ops_no_register mock_target
;
1929 /* Push the process_stratum target so we can mock accessing
1931 current_inferior ()->push_target (&mock_target
);
1933 /* Pop it again on exit (return/exception). */
1938 pop_all_targets_at_and_above (process_stratum
);
1942 readwrite_regcache
readwrite (&mock_target
, gdbarch
);
1944 const int num_regs
= gdbarch_num_cooked_regs (gdbarch
);
1946 for (auto regnum
= 0; regnum
< num_regs
; regnum
++)
1948 if (register_size (gdbarch
, regnum
) == 0
1949 || gdbarch_cannot_store_register (gdbarch
, regnum
))
1952 auto bfd_arch
= gdbarch_bfd_arch_info (gdbarch
)->arch
;
1954 if (bfd_arch
== bfd_arch_sparc
1955 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
1956 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */
1957 && gdbarch_ptr_bit (gdbarch
) == 64
1958 && (regnum
>= gdbarch_num_regs (gdbarch
)
1959 && regnum
<= gdbarch_num_regs (gdbarch
) + 4))
1962 std::vector
<gdb_byte
> expected (register_size (gdbarch
, regnum
), 0);
1963 std::vector
<gdb_byte
> buf (register_size (gdbarch
, regnum
), 0);
1964 const auto type
= register_type (gdbarch
, regnum
);
1966 if (type
->code () == TYPE_CODE_FLT
1967 || type
->code () == TYPE_CODE_DECFLOAT
)
1969 /* Generate valid float format. */
1970 target_float_from_string (expected
.data (), type
, "1.25");
1972 else if (type
->code () == TYPE_CODE_INT
1973 || type
->code () == TYPE_CODE_ARRAY
1974 || type
->code () == TYPE_CODE_PTR
1975 || type
->code () == TYPE_CODE_UNION
1976 || type
->code () == TYPE_CODE_STRUCT
)
1978 if (bfd_arch
== bfd_arch_ia64
1979 || (regnum
>= gdbarch_num_regs (gdbarch
)
1980 && (bfd_arch
== bfd_arch_xtensa
1981 || bfd_arch
== bfd_arch_bfin
1982 || bfd_arch
== bfd_arch_m32c
1983 /* m68hc11 pseudo registers are in memory. */
1984 || bfd_arch
== bfd_arch_m68hc11
1985 || bfd_arch
== bfd_arch_m68hc12
1986 || bfd_arch
== bfd_arch_s390
))
1987 || (bfd_arch
== bfd_arch_frv
1988 /* FRV pseudo registers except iacc0. */
1989 && regnum
> gdbarch_num_regs (gdbarch
)))
1991 /* Skip setting the expected values for some architecture
1994 else if (bfd_arch
== bfd_arch_rl78
&& regnum
== 40)
1996 /* RL78_PC_REGNUM */
1997 for (auto j
= 0; j
< register_size (gdbarch
, regnum
) - 1; j
++)
2002 for (auto j
= 0; j
< register_size (gdbarch
, regnum
); j
++)
2006 else if (type
->code () == TYPE_CODE_FLAGS
)
2008 /* No idea how to test flags. */
2013 /* If we don't know how to create the expected value for the
2014 this type, make it fail. */
2018 readwrite
.cooked_write (regnum
, expected
.data ());
2020 SELF_CHECK (readwrite
.cooked_read (regnum
, buf
.data ()) == REG_VALID
);
2021 SELF_CHECK (expected
== buf
);
2025 /* Verify that when two threads with the same ptid exist (from two different
2026 targets) and one of them changes ptid, we only update the appropriate
2030 regcache_thread_ptid_changed ()
2032 /* This test relies on the global regcache list to initially be empty. */
2033 registers_changed ();
2035 /* Any arch will do. */
2036 gdbarch
*arch
= current_inferior ()->gdbarch
;
2038 /* Prepare two targets with one thread each, with the same ptid. */
2039 scoped_mock_context
<test_target_ops
> target1 (arch
);
2040 scoped_mock_context
<test_target_ops
> target2 (arch
);
2041 target2
.mock_inferior
.next
= &target1
.mock_inferior
;
2043 ptid_t
old_ptid (111, 222);
2044 ptid_t
new_ptid (111, 333);
2046 target1
.mock_inferior
.pid
= old_ptid
.pid ();
2047 target1
.mock_thread
.ptid
= old_ptid
;
2048 target2
.mock_inferior
.pid
= old_ptid
.pid ();
2049 target2
.mock_thread
.ptid
= old_ptid
;
2051 gdb_assert (regcaches
.empty ());
2053 /* Populate the regcaches container. */
2054 get_thread_arch_aspace_regcache (&target1
.mock_target
, old_ptid
, arch
,
2056 get_thread_arch_aspace_regcache (&target2
.mock_target
, old_ptid
, arch
,
2059 gdb_assert (regcaches
.size () == 2);
2060 gdb_assert (regcache_count (&target1
.mock_target
, old_ptid
) == 1);
2061 gdb_assert (regcache_count (&target1
.mock_target
, new_ptid
) == 0);
2062 gdb_assert (regcache_count (&target2
.mock_target
, old_ptid
) == 1);
2063 gdb_assert (regcache_count (&target2
.mock_target
, new_ptid
) == 0);
2065 thread_change_ptid (&target1
.mock_target
, old_ptid
, new_ptid
);
2067 gdb_assert (regcaches
.size () == 2);
2068 gdb_assert (regcache_count (&target1
.mock_target
, old_ptid
) == 0);
2069 gdb_assert (regcache_count (&target1
.mock_target
, new_ptid
) == 1);
2070 gdb_assert (regcache_count (&target2
.mock_target
, old_ptid
) == 1);
2071 gdb_assert (regcache_count (&target2
.mock_target
, new_ptid
) == 0);
2073 /* Leave the regcache list empty. */
2074 registers_changed ();
2075 gdb_assert (regcaches
.empty ());
2078 } // namespace selftests
2079 #endif /* GDB_SELF_TEST */
2081 void _initialize_regcache ();
2083 _initialize_regcache ()
2085 struct cmd_list_element
*c
;
2087 regcache_descr_handle
2088 = gdbarch_data_register_post_init (init_regcache_descr
);
2090 gdb::observers::target_changed
.attach (regcache_observer_target_changed
,
2092 gdb::observers::thread_ptid_changed
.attach (regcache_thread_ptid_changed
,
2095 cmd_list_element
*maintenance_flush_register_cache_cmd
2096 = add_cmd ("register-cache", class_maintenance
, reg_flush_command
,
2097 _("Force gdb to flush its register and frame cache."),
2098 &maintenanceflushlist
);
2099 c
= add_com_alias ("flushregs", maintenance_flush_register_cache_cmd
,
2100 class_maintenance
, 0);
2101 deprecate_cmd (c
, "maintenance flush register-cache");
2104 selftests::register_test ("get_thread_arch_aspace_regcache",
2105 selftests::get_thread_arch_aspace_regcache_test
);
2106 selftests::register_test ("registers_changed_ptid_all",
2107 selftests::registers_changed_ptid_all_test
);
2108 selftests::register_test ("registers_changed_ptid_target",
2109 selftests::registers_changed_ptid_target_test
);
2110 selftests::register_test ("registers_changed_ptid_target_pid",
2111 selftests::registers_changed_ptid_target_pid_test
);
2112 selftests::register_test ("registers_changed_ptid_target_ptid",
2113 selftests::registers_changed_ptid_target_ptid_test
);
2115 selftests::register_test_foreach_arch ("regcache::cooked_read_test",
2116 selftests::cooked_read_test
);
2117 selftests::register_test_foreach_arch ("regcache::cooked_write_test",
2118 selftests::cooked_write_test
);
2119 selftests::register_test ("regcache_thread_ptid_changed",
2120 selftests::regcache_thread_ptid_changed
);