]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/regcache.c
9892c54ba12406ddba3cd14b4abcece377969c89
[thirdparty/binutils-gdb.git] / gdb / regcache.c
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2
3 Copyright (C) 1986-2025 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "extract-store-integer.h"
21 #include "inferior.h"
22 #include "gdbthread.h"
23 #include "target.h"
24 #include "test-target.h"
25 #include "scoped-mock-context.h"
26 #include "gdbarch.h"
27 #include "regcache.h"
28 #include "reggroups.h"
29 #include "observable.h"
30 #include "regset.h"
31 #include "gdbsupport/unordered_map.h"
32 #include <unordered_map>
33 #include "cli/cli-cmds.h"
34
35 /*
36 * DATA STRUCTURE
37 *
38 * Here is the actual register cache.
39 */
40
41 /* Per-architecture object describing the layout of a register cache.
42 Computed once when the architecture is created. */
43
44 struct regcache_descr
45 {
46 /* The architecture this descriptor belongs to. */
47 struct gdbarch *gdbarch = nullptr;
48
49 /* The raw register cache. Each raw (or hard) register is supplied
50 by the target interface. The raw cache should not contain
51 redundant information - if the PC is constructed from two
52 registers then those registers and not the PC lives in the raw
53 cache. */
54 long sizeof_raw_registers = 0;
55
56 /* The cooked register space. Each cooked register in the range
57 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
58 register. The remaining [NR_RAW_REGISTERS
59 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
60 both raw registers and memory by the architecture methods
61 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */
62 int nr_cooked_registers = 0;
63 long sizeof_cooked_registers = 0;
64
65 /* Offset and size (in 8 bit bytes), of each register in the
66 register cache. All registers (including those in the range
67 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an
68 offset. */
69 long *register_offset = nullptr;
70 long *sizeof_register = nullptr;
71
72 /* Cached table containing the type of each register. */
73 struct type **register_type = nullptr;
74 };
75
76 static const registry<gdbarch>::key<struct regcache_descr>
77 regcache_descr_handle;
78
79 static struct regcache_descr *
80 init_regcache_descr (struct gdbarch *gdbarch)
81 {
82 int i;
83 struct regcache_descr *descr;
84 gdb_assert (gdbarch != NULL);
85
86 /* Create an initial, zero filled, table. */
87 descr = new struct regcache_descr;
88 descr->gdbarch = gdbarch;
89
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);
94
95 /* Fill in a table of register types. */
96 descr->register_type
97 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
98 struct type *);
99 for (i = 0; i < descr->nr_cooked_registers; i++)
100 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
101
102 /* Construct a strictly RAW register cache. Don't allow pseudo's
103 into the register cache. */
104
105 /* Lay out the register cache.
106
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
110 same. */
111
112 {
113 long offset = 0;
114
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++)
120 {
121 descr->sizeof_register[i] = descr->register_type[i]->length ();
122 descr->register_offset[i] = offset;
123 offset += descr->sizeof_register[i];
124 }
125 /* Set the real size of the raw register cache buffer. */
126 descr->sizeof_raw_registers = offset;
127
128 for (; i < descr->nr_cooked_registers; i++)
129 {
130 descr->sizeof_register[i] = descr->register_type[i]->length ();
131 descr->register_offset[i] = offset;
132 offset += descr->sizeof_register[i];
133 }
134 /* Set the real size of the readonly register cache buffer. */
135 descr->sizeof_cooked_registers = offset;
136 }
137
138 return descr;
139 }
140
141 static struct regcache_descr *
142 regcache_descr (struct gdbarch *gdbarch)
143 {
144 struct regcache_descr *result = regcache_descr_handle.get (gdbarch);
145 if (result == nullptr)
146 {
147 result = init_regcache_descr (gdbarch);
148 regcache_descr_handle.set (gdbarch, result);
149 }
150
151 return result;
152 }
153
154 /* Utility functions returning useful register attributes stored in
155 the regcache descr. */
156
157 struct type *
158 register_type (struct gdbarch *gdbarch, int regnum)
159 {
160 struct regcache_descr *descr = regcache_descr (gdbarch);
161
162 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
163 return descr->register_type[regnum];
164 }
165
166 /* Utility functions returning useful register attributes stored in
167 the regcache descr. */
168
169 int
170 register_size (struct gdbarch *gdbarch, int regnum)
171 {
172 struct regcache_descr *descr = regcache_descr (gdbarch);
173 int size;
174
175 gdb_assert (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch));
176 size = descr->sizeof_register[regnum];
177 return size;
178 }
179
180 /* See gdbsupport/common-regcache.h. */
181
182 int
183 reg_buffer::register_size (int regnum) const
184 {
185 return ::register_size (this->arch (), regnum);
186 }
187
188 reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
189 : m_has_pseudo (has_pseudo)
190 {
191 gdb_assert (gdbarch != NULL);
192 m_descr = regcache_descr (gdbarch);
193
194 /* We don't zero-initialize the M_REGISTERS array, as the bytes it contains
195 aren't meaningful as long as the corresponding register status is not
196 REG_VALID. */
197 if (has_pseudo)
198 {
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] ());
202 }
203 else
204 {
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)] ());
208 }
209 }
210
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)
216 {
217 m_ptid = minus_one_ptid;
218 }
219
220 readonly_detached_regcache::readonly_detached_regcache (regcache &src)
221 : readonly_detached_regcache (src.arch (),
222 [&src] (int regnum,
223 gdb::array_view<gdb_byte> buf)
224 { return src.cooked_read (regnum, buf); })
225 {
226 }
227
228 gdbarch *
229 reg_buffer::arch () const
230 {
231 return m_descr->gdbarch;
232 }
233
234 /* Helper for reg_buffer::register_buffer. */
235
236 template<typename ElemType>
237 gdb::array_view<ElemType>
238 reg_buffer::register_buffer (int regnum) const
239 {
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);
244 }
245
246 /* See regcache.h. */
247
248 gdb::array_view<const gdb_byte>
249 reg_buffer::register_buffer (int regnum) const
250 {
251 return register_buffer<const gdb_byte> (regnum);
252 }
253
254 /* See regcache.h. */
255
256 gdb::array_view<gdb_byte>
257 reg_buffer::register_buffer (int regnum)
258 {
259 return register_buffer<gdb_byte> (regnum);
260 }
261
262 void
263 reg_buffer::save (register_read_ftype cooked_read)
264 {
265 struct gdbarch *gdbarch = m_descr->gdbarch;
266
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++)
277 {
278 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
279 {
280 gdb::array_view<gdb_byte> dst_buf = register_buffer (regnum);
281 register_status status = cooked_read (regnum, dst_buf);
282
283 gdb_assert (status != REG_UNKNOWN);
284
285 if (status != REG_VALID)
286 memset (dst_buf.data (), 0, dst_buf.size ());
287
288 m_register_status[regnum] = status;
289 }
290 }
291 }
292
293 void
294 regcache::restore (readonly_detached_regcache *src)
295 {
296 struct gdbarch *gdbarch = m_descr->gdbarch;
297 int regnum;
298
299 gdb_assert (src != NULL);
300 gdb_assert (src->m_has_pseudo);
301
302 gdb_assert (gdbarch == src->arch ());
303
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++)
309 {
310 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
311 {
312 if (src->m_register_status[regnum] == REG_VALID)
313 cooked_write (regnum, src->register_buffer (regnum));
314 }
315 }
316 }
317
318 /* See gdbsupport/common-regcache.h. */
319
320 enum register_status
321 reg_buffer::get_register_status (int regnum) const
322 {
323 assert_regnum (regnum);
324
325 return m_register_status[regnum];
326 }
327
328 void
329 reg_buffer::invalidate (int regnum)
330 {
331 assert_regnum (regnum);
332 m_register_status[regnum] = REG_UNKNOWN;
333 }
334
335 void
336 reg_buffer::assert_regnum (int regnum) const
337 {
338 gdb_assert (regnum >= 0);
339 if (m_has_pseudo)
340 gdb_assert (regnum < m_descr->nr_cooked_registers);
341 else
342 gdb_assert (regnum < gdbarch_num_regs (arch ()));
343 }
344
345 /* Type to map a ptid to a list of regcaches (one thread may have multiple
346 regcaches, associated to different gdbarches). */
347
348 using ptid_regcache_map
349 = std::unordered_multimap<ptid_t, regcache_up>;
350
351 /* Type holding regcaches for a given pid. */
352
353 using pid_ptid_regcache_map = gdb::unordered_map<int, ptid_regcache_map>;
354
355 /* Type holding regcaches for a given target. */
356
357 using target_pid_ptid_regcache_map
358 = gdb::unordered_map<process_stratum_target *, pid_ptid_regcache_map>;
359
360 /* Global structure containing the existing regcaches. */
361
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;
367
368 regcache *
369 get_thread_arch_regcache (inferior *inf_for_target_calls, ptid_t ptid,
370 gdbarch *arch)
371 {
372 gdb_assert (inf_for_target_calls != nullptr);
373
374 process_stratum_target *proc_target = inf_for_target_calls->process_target ();
375 gdb_assert (proc_target != nullptr);
376
377 /* Find the map for this target. */
378 pid_ptid_regcache_map &pid_ptid_regc_map = regcaches[proc_target];
379
380 /* Find the map for this pid. */
381 ptid_regcache_map &ptid_regc_map = pid_ptid_regc_map[ptid.pid ()];
382
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)
386 {
387 if (it->second->arch () == arch)
388 return it->second.get ();
389 }
390
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)));
397
398 return new_regcache;
399 }
400
401 static process_stratum_target *current_thread_target;
402 static ptid_t current_thread_ptid;
403 static struct gdbarch *current_thread_arch;
404
405 struct regcache *
406 get_thread_regcache (process_stratum_target *target, ptid_t ptid)
407 {
408 inferior *inf = find_inferior_ptid (target, ptid);
409
410 if (!current_thread_arch
411 || target != current_thread_target
412 || current_thread_ptid != ptid)
413 {
414 gdb_assert (ptid != null_ptid);
415
416 current_thread_ptid = ptid;
417 current_thread_target = target;
418
419 scoped_restore_current_inferior restore_current_inferior;
420 set_current_inferior (inf);
421 current_thread_arch = target_thread_architecture (ptid);
422 }
423
424 return get_thread_arch_regcache (inf, ptid, current_thread_arch);
425 }
426
427 /* See regcache.h. */
428
429 struct regcache *
430 get_thread_regcache (thread_info *thread)
431 {
432 gdb_assert (thread->state != THREAD_EXITED);
433
434 return get_thread_regcache (thread->inf->process_target (),
435 thread->ptid);
436 }
437
438 /* See gdbsupport/common-regcache.h. */
439
440 reg_buffer_common *
441 get_thread_regcache_for_ptid (ptid_t ptid)
442 {
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);
448 }
449
450 /* Observer for the target_changed event. */
451
452 static void
453 regcache_observer_target_changed (struct target_ops *target)
454 {
455 registers_changed ();
456 }
457
458 /* Update regcaches related to OLD_PTID to now use NEW_PTID. */
459 static void
460 regcache_thread_ptid_changed (process_stratum_target *target,
461 ptid_t old_ptid, ptid_t new_ptid)
462 {
463 /* Look up map for target. */
464 auto pid_ptid_regc_map_it = regcaches.find (target);
465 if (pid_ptid_regc_map_it == regcaches.end ())
466 return;
467
468 /* Look up map for pid. */
469 pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second;
470 auto ptid_regc_map_it = pid_ptid_regc_map.find (old_ptid.pid ());
471 if (ptid_regc_map_it == pid_ptid_regc_map.end ())
472 return;
473
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;)
478 {
479 regcache_up rc = std::move (it->second);
480 rc->set_ptid (new_ptid);
481
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)));
486 }
487 }
488
489 /* Low level examining and depositing of registers.
490
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). */
495
496 /* REGISTERS_CHANGED ()
497
498 Indicate that registers may have changed, so invalidate the cache. */
499
500 void
501 registers_changed_ptid (process_stratum_target *target, ptid_t ptid)
502 {
503 if (target == nullptr)
504 {
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);
508
509 /* Delete all the regcaches of all targets. */
510 regcaches.clear ();
511 }
512 else if (ptid.is_pid ())
513 {
514 /* Non-NULL target and pid ptid, delete all regcaches belonging
515 to this (TARGET, PID). */
516
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 ())
520 {
521 pid_ptid_regcache_map &pid_ptid_regc_map
522 = pid_ptid_regc_map_it->second;
523
524 pid_ptid_regc_map.erase (ptid.pid ());
525 }
526 }
527 else if (ptid != minus_one_ptid)
528 {
529 /* Non-NULL target and non-minus_one_ptid, delete all regcaches belonging
530 to this (TARGET, PTID). */
531
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 ())
535 {
536 pid_ptid_regcache_map &pid_ptid_regc_map
537 = pid_ptid_regc_map_it->second;
538
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 ())
543 {
544 ptid_regcache_map &ptid_regc_map
545 = ptid_regc_map_it->second;
546
547 ptid_regc_map.erase (ptid);
548 }
549 }
550 }
551 else
552 {
553 /* Non-NULL target and minus_one_ptid, delete all regcaches
554 associated to this target. */
555 regcaches.erase (target);
556 }
557
558 if ((target == nullptr || current_thread_target == target)
559 && current_thread_ptid.matches (ptid))
560 {
561 current_thread_target = NULL;
562 current_thread_ptid = null_ptid;
563 current_thread_arch = NULL;
564 }
565
566 if ((target == nullptr || current_inferior ()->process_target () == target)
567 && inferior_ptid.matches (ptid))
568 {
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 ();
572 }
573 }
574
575 /* See regcache.h. */
576
577 void
578 registers_changed_thread (thread_info *thread)
579 {
580 registers_changed_ptid (thread->inf->process_target (), thread->ptid);
581 }
582
583 void
584 registers_changed (void)
585 {
586 registers_changed_ptid (nullptr, minus_one_ptid);
587 }
588
589 void
590 regcache::raw_update (int regnum)
591 {
592 assert_regnum (regnum);
593
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. */
598
599 if (get_register_status (regnum) == REG_UNKNOWN)
600 {
601 std::optional<scoped_restore_current_thread> maybe_restore_thread
602 = maybe_switch_inferior (m_inf_for_target_calls);
603
604 target_fetch_registers (this, regnum);
605
606 /* A number of targets can't access the whole set of raw
607 registers (because the debug API provides no means to get at
608 them). */
609 if (m_register_status[regnum] == REG_UNKNOWN)
610 m_register_status[regnum] = REG_UNAVAILABLE;
611 }
612 }
613
614 register_status
615 readable_regcache::raw_read (int regnum, gdb::array_view<gdb_byte> dst)
616 {
617 assert_regnum (regnum);
618 gdb_assert (dst.size () == m_descr->sizeof_register[regnum]);
619
620 raw_update (regnum);
621
622 if (m_register_status[regnum] != REG_VALID)
623 memset (dst.data (), 0, dst.size ());
624 else
625 copy (register_buffer (regnum), dst);
626
627 return m_register_status[regnum];
628 }
629
630 register_status
631 readable_regcache::raw_read (int regnum, gdb_byte *dst)
632 {
633 assert_regnum (regnum);
634 int size = m_descr->sizeof_register[regnum];
635 return raw_read (regnum, gdb::make_array_view (dst, size));
636 }
637
638 enum register_status
639 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
640 {
641 gdb_assert (regcache != NULL);
642 return regcache->raw_read (regnum, val);
643 }
644
645 template<typename T, typename>
646 enum register_status
647 readable_regcache::raw_read (int regnum, T *val)
648 {
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);
654
655 if (status == REG_VALID)
656 *val = extract_integer<T> (view, gdbarch_byte_order (m_descr->gdbarch));
657 else
658 *val = 0;
659
660 return status;
661 }
662
663 enum register_status
664 regcache_raw_read_unsigned (reg_buffer_common *regcache, int regnum,
665 ULONGEST *val)
666 {
667 gdb_assert (regcache != NULL);
668 return gdb::checked_static_cast<struct regcache *> (regcache)->raw_read
669 (regnum, val);
670 }
671
672 void
673 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
674 {
675 gdb_assert (regcache != NULL);
676 regcache->raw_write (regnum, val);
677 }
678
679 template<typename T, typename>
680 void
681 regcache::raw_write (int regnum, T val)
682 {
683 assert_regnum (regnum);
684
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);
690 }
691
692 void
693 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
694 ULONGEST val)
695 {
696 gdb_assert (regcache != NULL);
697 regcache->raw_write (regnum, val);
698 }
699
700 LONGEST
701 regcache_raw_get_signed (struct regcache *regcache, int regnum)
702 {
703 LONGEST value;
704 enum register_status status;
705
706 status = regcache_raw_read_signed (regcache, regnum, &value);
707 if (status == REG_UNAVAILABLE)
708 throw_error (NOT_AVAILABLE_ERROR,
709 _("Register %d is not available"), regnum);
710 return value;
711 }
712
713 /* See regcache.h. */
714
715 register_status
716 readable_regcache::cooked_read (int regnum, gdb::array_view<gdb_byte> dst)
717 {
718 gdb_assert (regnum >= 0);
719 gdb_assert (regnum < m_descr->nr_cooked_registers);
720
721 if (regnum < num_raw_registers ())
722 return raw_read (regnum, dst);
723
724 gdb_assert (dst.size () == m_descr->sizeof_register[regnum]);
725
726 if (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
727 {
728 if (m_register_status[regnum] == REG_VALID)
729 copy (register_buffer (regnum), dst);
730 else
731 memset (dst.data (), 0, dst.size ());
732
733 return m_register_status[regnum];
734 }
735 else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
736 {
737 register_status result = REG_VALID;
738 scoped_value_mark mark;
739 value *computed = gdbarch_pseudo_register_read_value
740 (m_descr->gdbarch, get_next_frame_sentinel_okay (get_current_frame ()),
741 regnum);
742
743 if (computed->entirely_available ())
744 copy (computed->contents_raw (), dst);
745 else
746 {
747 memset (dst.data (), 0, dst.size ());
748 result = REG_UNAVAILABLE;
749 }
750
751 return result;
752 }
753 else
754 return gdbarch_pseudo_register_read (m_descr->gdbarch, this, regnum,
755 dst.data ());
756 }
757
758 /* See regcache.h. */
759
760 register_status
761 readable_regcache::cooked_read (int regnum, gdb_byte *dst)
762 {
763 gdb_assert (regnum >= 0);
764 gdb_assert (regnum < m_descr->nr_cooked_registers);
765
766 int size = m_descr->sizeof_register[regnum];
767 return cooked_read (regnum, gdb::make_array_view (dst, size));
768 }
769
770 struct value *
771 readable_regcache::cooked_read_value (int regnum)
772 {
773 gdb_assert (regnum >= 0);
774 gdb_assert (regnum < m_descr->nr_cooked_registers);
775
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))
779 {
780 value *result = value::allocate_register
781 (get_next_frame_sentinel_okay (get_current_frame ()), regnum);
782
783 /* It is more efficient in general to do this delegation in this
784 direction than in the other one, even though the value-based
785 API is preferred. */
786 if (cooked_read (regnum, result->contents_raw ()) == REG_UNAVAILABLE)
787 result->mark_bytes_unavailable (0,
788 result->type ()->length ());
789
790 return result;
791 }
792 else
793 return gdbarch_pseudo_register_read_value
794 (m_descr->gdbarch, get_next_frame_sentinel_okay (get_current_frame ()),
795 regnum);
796 }
797
798 enum register_status
799 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
800 LONGEST *val)
801 {
802 gdb_assert (regcache != NULL);
803 return regcache->cooked_read (regnum, val);
804 }
805
806 template<typename T, typename>
807 enum register_status
808 readable_regcache::cooked_read (int regnum, T *val)
809 {
810 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
811 size_t size = m_descr->sizeof_register[regnum];
812 gdb_byte *buf = (gdb_byte *) alloca (size);
813 auto view = gdb::make_array_view (buf, size);
814 register_status status = cooked_read (regnum, view);
815 if (status == REG_VALID)
816 *val = extract_integer<T> (view, gdbarch_byte_order (m_descr->gdbarch));
817 else
818 *val = 0;
819 return status;
820 }
821
822 enum register_status
823 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
824 ULONGEST *val)
825 {
826 gdb_assert (regcache != NULL);
827 return regcache->cooked_read (regnum, val);
828 }
829
830 void
831 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
832 LONGEST val)
833 {
834 gdb_assert (regcache != NULL);
835 regcache->cooked_write (regnum, val);
836 }
837
838 template<typename T, typename>
839 void
840 regcache::cooked_write (int regnum, T val)
841 {
842 gdb_assert (regnum >= 0);
843 gdb_assert (regnum < m_descr->nr_cooked_registers);
844
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);
850 }
851
852 void
853 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
854 ULONGEST val)
855 {
856 gdb_assert (regcache != NULL);
857 regcache->cooked_write (regnum, val);
858 }
859
860 void
861 regcache::raw_write (int regnum, gdb::array_view<const gdb_byte> src)
862 {
863 assert_regnum (regnum);
864 gdb_assert (src.size () == m_descr->sizeof_register[regnum]);
865
866 /* On the sparc, writing %g0 is a no-op, so we don't even want to
867 change the registers array if something writes to this register. */
868 if (gdbarch_cannot_store_register (arch (), regnum))
869 return;
870
871 /* If we have a valid copy of the register, and new value == old
872 value, then don't bother doing the actual store. */
873 if (get_register_status (regnum) == REG_VALID
874 && (memcmp (register_buffer (regnum).data (), src.data (), src.size ())
875 == 0))
876 return;
877
878 std::optional<scoped_restore_current_thread> maybe_restore_thread
879 = maybe_switch_inferior (m_inf_for_target_calls);
880
881 target_prepare_to_store (this);
882 raw_supply (regnum, src);
883
884 /* Invalidate the register after it is written, in case of a
885 failure. */
886 auto invalidator
887 = make_scope_exit ([&] { this->invalidate (regnum); });
888
889 target_store_registers (this, regnum);
890
891 /* The target did not throw an error so we can discard invalidating
892 the register. */
893 invalidator.release ();
894 }
895
896 void
897 regcache::raw_write (int regnum, const gdb_byte *src)
898 {
899 assert_regnum (regnum);
900
901 int size = m_descr->sizeof_register[regnum];
902 raw_write (regnum, gdb::make_array_view (src, size));
903 }
904
905 /* See regcache.h. */
906
907 void
908 regcache::cooked_write (int regnum, gdb::array_view<const gdb_byte> src)
909 {
910 gdb_assert (regnum >= 0);
911 gdb_assert (regnum < m_descr->nr_cooked_registers);
912
913 if (regnum < num_raw_registers ())
914 raw_write (regnum, src);
915 else if (gdbarch_pseudo_register_write_p (m_descr->gdbarch))
916 gdbarch_pseudo_register_write
917 (m_descr->gdbarch, get_next_frame_sentinel_okay (get_current_frame ()),
918 regnum, src);
919 else
920 gdbarch_deprecated_pseudo_register_write (m_descr->gdbarch, this, regnum,
921 src.data ());
922 }
923
924 /* See regcache.h. */
925
926 void
927 regcache::cooked_write (int regnum, const gdb_byte *src)
928 {
929 gdb_assert (regnum >= 0);
930 gdb_assert (regnum < m_descr->nr_cooked_registers);
931
932 int size = m_descr->sizeof_register[regnum];
933 return cooked_write (regnum, gdb::make_array_view (src, size));
934 }
935
936 /* See regcache.h. */
937
938 register_status
939 readable_regcache::read_part (int regnum, int offset,
940 gdb::array_view<gdb_byte> dst, bool is_raw)
941 {
942 int reg_size = register_size (regnum);
943
944 gdb_assert (offset >= 0);
945 gdb_assert (offset + dst.size () <= reg_size);
946
947 if (dst.size () == 0)
948 {
949 /* Nothing to do. */
950 return REG_VALID;
951 }
952
953 if (dst.size () == reg_size)
954 {
955 /* Read the full register. */
956 if (is_raw)
957 return raw_read (regnum, dst);
958 else
959 return cooked_read (regnum, dst);
960 }
961
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);
966
967 if (is_raw)
968 status = raw_read (regnum, reg);
969 else
970 status = cooked_read (regnum, reg);
971
972 if (status != REG_VALID)
973 return status;
974
975 /* Copy out. */
976 copy (reg.slice (offset, dst.size ()), dst);
977 return REG_VALID;
978 }
979
980 /* See regcache.h. */
981
982 void
983 reg_buffer::raw_collect_part (int regnum, int offset,
984 gdb::array_view<gdb_byte> dst) const
985 {
986 int reg_size = register_size (regnum);
987
988 gdb_assert (offset >= 0);
989 gdb_assert (offset + dst.size () <= reg_size);
990
991 if (dst.size () == 0)
992 {
993 /* Nothing to do. */
994 return;
995 }
996
997 if (dst.size () == reg_size)
998 {
999 /* Collect the full register. */
1000 return raw_collect (regnum, dst);
1001 }
1002
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);
1008 }
1009
1010 /* See regcache.h. */
1011
1012 register_status
1013 regcache::write_part (int regnum, int offset,
1014 gdb::array_view<const gdb_byte> src, bool is_raw)
1015 {
1016 int reg_size = register_size (regnum);
1017
1018 gdb_assert (offset >= 0);
1019 gdb_assert (offset + src.size () <= reg_size);
1020
1021 if (src.size () == 0)
1022 {
1023 /* Nothing to do. */
1024 return REG_VALID;
1025 }
1026
1027 if (src.size () == reg_size)
1028 {
1029 /* Write the full register. */
1030 if (is_raw)
1031 raw_write (regnum, src);
1032 else
1033 cooked_write (regnum, src);
1034
1035 return REG_VALID;
1036 }
1037
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);
1042
1043 if (is_raw)
1044 status = raw_read (regnum, reg);
1045 else
1046 status = cooked_read (regnum, reg);
1047
1048 if (status != REG_VALID)
1049 return status;
1050
1051 /* Update buffer, then write back to regcache. */
1052 copy (src, reg.slice (offset, src.size ()));
1053
1054 if (is_raw)
1055 raw_write (regnum, reg);
1056 else
1057 cooked_write (regnum, reg);
1058
1059 return REG_VALID;
1060 }
1061
1062 /* See regcache.h. */
1063
1064 void
1065 reg_buffer::raw_supply_part (int regnum, int offset,
1066 gdb::array_view<const gdb_byte> src)
1067 {
1068 int reg_size = register_size (regnum);
1069
1070 gdb_assert (offset >= 0);
1071 gdb_assert (offset + src.size () <= reg_size);
1072
1073 if (src.size () == 0)
1074 {
1075 /* Nothing to do. */
1076 return;
1077 }
1078
1079 if (src.size () == reg_size)
1080 {
1081 /* Supply the full register. */
1082 return raw_supply (regnum, src);
1083 }
1084
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);
1089
1090 /* Write to buffer, then write out. */
1091 copy (src, reg.slice (offset, src.size ()));
1092 raw_supply (regnum, reg);
1093 }
1094
1095 register_status
1096 readable_regcache::raw_read_part (int regnum, int offset,
1097 gdb::array_view<gdb_byte> dst)
1098 {
1099 assert_regnum (regnum);
1100 return read_part (regnum, offset, dst, true);
1101 }
1102
1103 /* See regcache.h. */
1104
1105 void
1106 regcache::raw_write_part (int regnum, int offset,
1107 gdb::array_view<const gdb_byte> src)
1108 {
1109 assert_regnum (regnum);
1110 write_part (regnum, offset, src, true);
1111 }
1112
1113 /* See regcache.h. */
1114
1115 register_status
1116 readable_regcache::cooked_read_part (int regnum, int offset,
1117 gdb::array_view<gdb_byte> dst)
1118 {
1119 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
1120 return read_part (regnum, offset, dst, false);
1121 }
1122
1123 /* See regcache.h. */
1124
1125 void
1126 regcache::cooked_write_part (int regnum, int offset,
1127 gdb::array_view<const gdb_byte> src)
1128 {
1129 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
1130 write_part (regnum, offset, src, false);
1131 }
1132
1133 /* See gdbsupport/common-regcache.h. */
1134
1135 void
1136 reg_buffer::raw_supply (int regnum, gdb::array_view<const gdb_byte> src)
1137 {
1138 gdb::array_view<gdb_byte> dst = register_buffer (regnum);
1139
1140 if (src.data () != nullptr)
1141 {
1142 copy (src, dst);
1143 m_register_status[regnum] = REG_VALID;
1144 }
1145 else
1146 {
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;
1152 }
1153 }
1154
1155 /* See regcache.h. */
1156
1157 void
1158 reg_buffer::raw_supply (int regnum, const void *src)
1159 {
1160 assert_regnum (regnum);
1161
1162 int size = m_descr->sizeof_register[regnum];
1163 raw_supply (regnum, gdb::make_array_view ((const gdb_byte *) src, size));
1164 }
1165
1166 /* See regcache.h. */
1167
1168 void
1169 reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr, int addr_len,
1170 bool is_signed)
1171 {
1172 gdb::array_view<gdb_byte> dst = register_buffer (regnum);
1173 bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1174
1175 copy_integer_to_size (dst.data (), dst.size (), addr, addr_len, is_signed,
1176 byte_order);
1177 m_register_status[regnum] = REG_VALID;
1178 }
1179
1180 /* See regcache.h. */
1181
1182 void
1183 reg_buffer::raw_supply_zeroed (int regnum)
1184 {
1185 gdb::array_view<gdb_byte> dst = register_buffer (regnum);
1186 memset (dst.data (), 0, dst.size ());
1187 m_register_status[regnum] = REG_VALID;
1188 }
1189
1190 /* See gdbsupport/common-regcache.h. */
1191
1192 void
1193 reg_buffer::raw_supply_part_zeroed (int regnum, int offset, size_t size)
1194 {
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;
1198 }
1199
1200 /* See gdbsupport/common-regcache.h. */
1201
1202 void
1203 reg_buffer::raw_collect (int regnum, gdb::array_view<gdb_byte> dst) const
1204 {
1205 gdb::array_view<const gdb_byte> src = register_buffer (regnum);
1206 copy (src, dst);
1207 }
1208
1209 /* See regcache.h. */
1210
1211 void
1212 reg_buffer::raw_collect (int regnum, void *dst) const
1213 {
1214 assert_regnum (regnum);
1215
1216 int size = m_descr->sizeof_register[regnum];
1217 return raw_collect (regnum, gdb::make_array_view ((gdb_byte *) dst, size));
1218 }
1219
1220 /* See regcache.h. */
1221
1222 void
1223 reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
1224 bool is_signed) const
1225 {
1226 gdb::array_view<const gdb_byte> dst = register_buffer (regnum);
1227 bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1228 copy_integer_to_size (addr, addr_len, dst.data (), dst.size (), is_signed,
1229 byte_order);
1230 }
1231
1232 /* See regcache.h. */
1233
1234 void
1235 regcache::transfer_regset_register (struct regcache *out_regcache, int regnum,
1236 const gdb_byte *in_buf, gdb_byte *out_buf,
1237 int slot_size, int offs) const
1238 {
1239 int reg_size = std::min (register_size (regnum), slot_size);
1240
1241 /* Use part versions and reg_size to prevent possible buffer overflows when
1242 accessing the regcache. */
1243
1244 if (out_buf != nullptr)
1245 {
1246 raw_collect_part (regnum, 0,
1247 gdb::make_array_view (out_buf + offs, reg_size));
1248
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);
1252 }
1253 else if (in_buf != nullptr)
1254 {
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,
1260 reg_size));
1261 }
1262 else
1263 {
1264 /* Invalidate the register. */
1265 out_regcache->raw_supply (regnum, {});
1266 }
1267 }
1268
1269 /* See regcache.h. */
1270
1271 void
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
1276 {
1277 const struct regcache_map_entry *map;
1278 int offs = 0, count;
1279
1280 for (map = (const struct regcache_map_entry *) regset->regmap;
1281 (count = map->count) != 0;
1282 map++)
1283 {
1284 int regno = map->regno;
1285 int slot_size = map->size;
1286
1287 if (regno != REGCACHE_MAP_SKIP)
1288 regno += regbase;
1289
1290 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1291 slot_size = m_descr->sizeof_register[regno];
1292
1293 if (regno == REGCACHE_MAP_SKIP
1294 || (regnum != -1
1295 && (regnum < regno || regnum >= regno + count)))
1296 offs += count * slot_size;
1297
1298 else if (regnum == -1)
1299 for (; count--; regno++, offs += slot_size)
1300 {
1301 if (offs + slot_size > size)
1302 return;
1303
1304 transfer_regset_register (out_regcache, regno, in_buf, out_buf,
1305 slot_size, offs);
1306 }
1307 else
1308 {
1309 /* Transfer a single register and return. */
1310 offs += (regnum - regno) * slot_size;
1311 if (offs + slot_size > size)
1312 return;
1313
1314 transfer_regset_register (out_regcache, regnum, in_buf, out_buf,
1315 slot_size, offs);
1316 return;
1317 }
1318 }
1319 }
1320
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. */
1324
1325 void
1326 regcache_supply_regset (const struct regset *regset,
1327 struct regcache *regcache,
1328 int regnum, const void *buf, size_t size)
1329 {
1330 regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size);
1331 }
1332
1333 /* See regcache.h. */
1334
1335 void
1336 regcache::supply_regset (const struct regset *regset, int regbase,
1337 int regnum, const void *buf, size_t size)
1338 {
1339 transfer_regset (regset, regbase, this, regnum, (const gdb_byte *) buf,
1340 nullptr, size);
1341 }
1342
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
1345 REGSET. */
1346
1347 void
1348 regcache_collect_regset (const struct regset *regset,
1349 const struct regcache *regcache,
1350 int regnum, void *buf, size_t size)
1351 {
1352 regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size);
1353 }
1354
1355 /* See regcache.h */
1356
1357 void
1358 regcache::collect_regset (const struct regset *regset, int regbase,
1359 int regnum, void *buf, size_t size) const
1360 {
1361 transfer_regset (regset, regbase, nullptr, regnum, nullptr, (gdb_byte *) buf,
1362 size);
1363 }
1364
1365 bool
1366 regcache_map_supplies (const struct regcache_map_entry *map, int regnum,
1367 struct gdbarch *gdbarch, size_t size)
1368 {
1369 int offs = 0, count;
1370
1371 for (; (count = map->count) != 0; map++)
1372 {
1373 int regno = map->regno;
1374 int slot_size = map->size;
1375
1376 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1377 slot_size = register_size (gdbarch, regno);
1378
1379 if (regno != REGCACHE_MAP_SKIP && regnum >= regno
1380 && regnum < regno + count)
1381 return offs + (regnum - regno + 1) * slot_size <= size;
1382
1383 offs += count * slot_size;
1384 if (offs >= size)
1385 return false;
1386 }
1387 return false;
1388 }
1389
1390 /* See gdbsupport/common-regcache.h. */
1391
1392 bool
1393 reg_buffer::raw_compare (int regnum, const void *buf, int offset) const
1394 {
1395 gdb_assert (buf != NULL);
1396
1397 gdb::array_view<const gdb_byte> regbuf = register_buffer (regnum);
1398 gdb_assert (offset <= regbuf.size ());
1399 regbuf = regbuf.slice (offset);
1400
1401 return memcmp (buf, regbuf.data (), regbuf.size ()) == 0;
1402 }
1403
1404 /* Special handling for register PC. */
1405
1406 CORE_ADDR
1407 regcache_read_pc (reg_buffer_common *reg_buf)
1408 {
1409 regcache *regcache = gdb::checked_static_cast<struct regcache *> (reg_buf);
1410 struct gdbarch *gdbarch = regcache->arch ();
1411
1412 CORE_ADDR pc_val;
1413
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)
1418 {
1419 ULONGEST raw_val;
1420
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"));
1425
1426 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
1427 }
1428 else
1429 internal_error (_("regcache_read_pc: Unable to find PC"));
1430 return pc_val;
1431 }
1432
1433 /* See gdbsupport/common-regcache.h. */
1434
1435 CORE_ADDR
1436 regcache_read_pc_protected (reg_buffer_common *regcache)
1437 {
1438 CORE_ADDR pc;
1439 try
1440 {
1441 pc = regcache_read_pc (regcache);
1442 }
1443 catch (const gdb_exception_error &ex)
1444 {
1445 pc = 0;
1446 }
1447
1448 return pc;
1449 }
1450
1451 void
1452 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
1453 {
1454 struct gdbarch *gdbarch = regcache->arch ();
1455
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);
1461 else
1462 internal_error (_("regcache_write_pc: Unable to update PC"));
1463
1464 /* Writing the PC (for instance, from "load") invalidates the
1465 current frame. */
1466 reinit_frame_cache ();
1467 }
1468
1469 int
1470 reg_buffer::num_raw_registers () const
1471 {
1472 return gdbarch_num_regs (arch ());
1473 }
1474
1475 std::string
1476 regcache::register_debug_string (int regno)
1477 {
1478 struct gdbarch *gdbarch = arch ();
1479 std::string s;
1480
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));
1484 else
1485 string_appendf (s, "register %d:", regno);
1486
1487 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1488 {
1489 gdb::array_view<gdb_byte> buf = register_buffer (regno);
1490
1491 string_appendf (s, " = ");
1492
1493 for (gdb_byte byte : buf)
1494 string_appendf (s, "%02x", byte);
1495
1496 if (buf.size () <= sizeof (LONGEST))
1497 {
1498 ULONGEST val
1499 = extract_unsigned_integer (buf, gdbarch_byte_order (gdbarch));
1500
1501 string_appendf (s, " %s %s",
1502 core_addr_to_string_nz (val), plongest (val));
1503 }
1504 }
1505
1506 return s;
1507 }
1508
1509 /* Implement 'maint flush register-cache' command. */
1510
1511 static void
1512 reg_flush_command (const char *command, int from_tty)
1513 {
1514 /* Force-flush the register cache. */
1515 registers_changed ();
1516 if (from_tty)
1517 gdb_printf (_("Register cache flushed.\n"));
1518 }
1519
1520 void
1521 register_dump::dump (ui_out *out, const char *name)
1522 {
1523 auto descr = regcache_descr (m_gdbarch);
1524 int regnum;
1525 int footnote_nr = 0;
1526 int footnote_register_offset = 0;
1527 int footnote_register_type_name_null = 0;
1528 long register_offset = 0;
1529
1530 gdb_assert (descr->nr_cooked_registers
1531 == gdbarch_num_cooked_regs (m_gdbarch));
1532
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);
1541 out->table_body ();
1542
1543 for (regnum = 0; regnum < descr->nr_cooked_registers; regnum++)
1544 {
1545 ui_out_emit_tuple tuple_emitter (out, nullptr);
1546
1547 /* Name. */
1548 const char *p = gdbarch_register_name (m_gdbarch, regnum);
1549 if (p[0] == '\0')
1550 p = "''";
1551 out->field_string ("name", p);
1552
1553 /* Number. */
1554 out->field_signed ("num", regnum);
1555
1556 /* Relative number. */
1557 if (regnum < gdbarch_num_regs (m_gdbarch))
1558 out->field_signed ("relnum", regnum);
1559 else
1560 out->field_signed ("relnum", (regnum - gdbarch_num_regs (m_gdbarch)));
1561
1562 /* Offset. */
1563 if (register_offset != descr->register_offset[regnum]
1564 || (regnum > 0
1565 && (descr->register_offset[regnum]
1566 != (descr->register_offset[regnum - 1]
1567 + descr->sizeof_register[regnum - 1]))))
1568 {
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);
1575 }
1576 else
1577 out->field_signed ("offset", descr->register_offset[regnum]);
1578 register_offset = (descr->register_offset[regnum]
1579 + descr->sizeof_register[regnum]);
1580
1581 /* Size. */
1582 out->field_signed ("size", descr->sizeof_register[regnum]);
1583
1584 /* Type. */
1585 {
1586 const char *t;
1587 std::string name_holder;
1588
1589 static const char blt[] = "builtin_type";
1590
1591 t = register_type (m_gdbarch, regnum)->name ();
1592 if (t == NULL)
1593 {
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 ();
1599 }
1600 /* Chop a leading builtin_type. */
1601 if (startswith (t, blt))
1602 t += strlen (blt);
1603
1604 out->field_string ("type", t);
1605 }
1606
1607 dump_reg (out, regnum);
1608
1609 out->text ("\n");
1610 }
1611
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);
1618 }
1619
1620 #if GDB_SELF_TEST
1621 #include "gdbsupport/selftest.h"
1622 #include "selftest-arch.h"
1623 #include "target-float.h"
1624
1625 namespace selftests {
1626
1627 static size_t
1628 regcaches_size ()
1629 {
1630 size_t size = 0;
1631
1632 for (auto pid_ptid_regc_map_it = regcaches.cbegin ();
1633 pid_ptid_regc_map_it != regcaches.cend ();
1634 ++pid_ptid_regc_map_it)
1635 {
1636 const pid_ptid_regcache_map &pid_ptid_regc_map
1637 = pid_ptid_regc_map_it->second;
1638
1639 for (auto ptid_regc_map_it = pid_ptid_regc_map.cbegin ();
1640 ptid_regc_map_it != pid_ptid_regc_map.cend ();
1641 ++ptid_regc_map_it)
1642 {
1643 const ptid_regcache_map &ptid_regc_map
1644 = ptid_regc_map_it->second;
1645
1646 size += ptid_regc_map.size ();
1647 }
1648 }
1649
1650 return size;
1651 }
1652
1653 /* Return the count of regcaches for (TARGET, PTID) in REGCACHES. */
1654
1655 static int
1656 regcache_count (process_stratum_target *target, ptid_t ptid)
1657 {
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 ())
1661 {
1662 pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second;
1663
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 ())
1667 {
1668 ptid_regcache_map &ptid_regc_map = ptid_regc_map_it->second;
1669 auto range = ptid_regc_map.equal_range (ptid);
1670
1671 return std::distance (range.first, range.second);
1672 }
1673 }
1674
1675 return 0;
1676 };
1677
1678 /* Wrapper around get_thread_arch_regcache that does some self checks. */
1679
1680 static void
1681 get_thread_arch_regcache_and_check (inferior *inf_for_target_calls,
1682 ptid_t ptid)
1683 {
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
1686 space. */
1687 gdbarch *arch = inf_for_target_calls->arch ();
1688 regcache *regcache
1689 = get_thread_arch_regcache (inf_for_target_calls, ptid, arch);
1690
1691 SELF_CHECK (regcache != NULL);
1692 SELF_CHECK (regcache->ptid () == ptid);
1693 SELF_CHECK (regcache->arch () == arch);
1694 }
1695
1696 /* The data that the regcaches selftests must hold onto for the duration of the
1697 test. */
1698
1699 struct regcache_test_data
1700 {
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 ())
1705 {
1706 /* Ensure the regcaches container is empty at the start. */
1707 registers_changed ();
1708 }
1709
1710 ~regcache_test_data ()
1711 {
1712 /* Make sure to leave the global regcaches container empty. */
1713 registers_changed ();
1714 }
1715
1716 scoped_mock_context<test_target_ops> test_ctx_1;
1717 scoped_mock_context<test_target_ops> test_ctx_2;
1718 };
1719
1720 using regcache_test_data_up = std::unique_ptr<regcache_test_data>;
1721
1722 /* Set up a few regcaches from two different targets, for use in
1723 regcache-management tests.
1724
1725 Return a pointer, because the `regcache_test_data` type is not moveable. */
1726
1727 static regcache_test_data_up
1728 populate_regcaches_for_test ()
1729 {
1730 regcache_test_data_up data (new regcache_test_data);
1731 size_t expected_regcache_size = 0;
1732
1733 SELF_CHECK (regcaches_size () == 0);
1734
1735 /* Populate the regcache container with a few regcaches for the two test
1736 targets. */
1737 for (int pid : { 1, 2 })
1738 {
1739 for (long lwp : { 1, 2, 3 })
1740 {
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);
1745
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);
1750 }
1751 }
1752
1753 return data;
1754 }
1755
1756 static void
1757 get_thread_arch_regcache_test ()
1758 {
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 ();
1763
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,
1766 ptid_t (2, 2));
1767 SELF_CHECK (regcaches_size () == regcaches_size_before);
1768 }
1769
1770 /* Test marking all regcaches of all targets as changed. */
1771
1772 static void
1773 registers_changed_ptid_all_test ()
1774 {
1775 regcache_test_data_up data = populate_regcaches_for_test ();
1776
1777 registers_changed_ptid (nullptr, minus_one_ptid);
1778 SELF_CHECK (regcaches_size () == 0);
1779 }
1780
1781 /* Test marking regcaches of a specific target as changed. */
1782
1783 static void
1784 registers_changed_ptid_target_test ()
1785 {
1786 regcache_test_data_up data = populate_regcaches_for_test ();
1787
1788 registers_changed_ptid (&data->test_ctx_1.mock_target, minus_one_ptid);
1789 SELF_CHECK (regcaches_size () == 6);
1790
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);
1796 }
1797
1798 /* Test marking regcaches of a specific (target, pid) as changed. */
1799
1800 static void
1801 registers_changed_ptid_target_pid_test ()
1802 {
1803 regcache_test_data_up data = populate_regcaches_for_test ();
1804
1805 registers_changed_ptid (&data->test_ctx_1.mock_target, ptid_t (2));
1806 SELF_CHECK (regcaches_size () == 9);
1807
1808 /* Regcaches from target1 should not exist, while regcaches from target2
1809 should exist. */
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);
1814 }
1815
1816 /* Test marking regcaches of a specific (target, ptid) as changed. */
1817
1818 static void
1819 registers_changed_ptid_target_ptid_test ()
1820 {
1821 regcache_test_data_up data = populate_regcaches_for_test ();
1822
1823 registers_changed_ptid (&data->test_ctx_1.mock_target, ptid_t (2, 2));
1824 SELF_CHECK (regcaches_size () == 11);
1825
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);
1831 }
1832
1833 /* Test using reg_buffer::raw_compare with offset equal to the register size
1834 (thus comparing 0 bytes). */
1835
1836 static void
1837 reg_buffer_raw_compare_zero_len_test ()
1838 {
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 ());
1843
1844 /* The buffer address is irrelevant since we end up comparing 0 bytes, we just
1845 need to pass something. */
1846 gdb_byte buf;
1847 SELF_CHECK (regcache->raw_compare (0, &buf, register_size (inf.arch (), 0)));
1848 }
1849
1850 class target_ops_no_register : public test_target_ops
1851 {
1852 public:
1853 target_ops_no_register ()
1854 : test_target_ops {}
1855 {}
1856
1857 void reset ()
1858 {
1859 fetch_registers_called = 0;
1860 store_registers_called = 0;
1861 xfer_partial_called = 0;
1862 }
1863
1864 void fetch_registers (regcache *regs, int regno) override;
1865 void store_registers (regcache *regs, int regno) override;
1866
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;
1872
1873 unsigned int fetch_registers_called = 0;
1874 unsigned int store_registers_called = 0;
1875 unsigned int xfer_partial_called = 0;
1876 };
1877
1878 void
1879 target_ops_no_register::fetch_registers (regcache *regs, int regno)
1880 {
1881 /* Mark register available. */
1882 regs->raw_supply_zeroed (regno);
1883 this->fetch_registers_called++;
1884 }
1885
1886 void
1887 target_ops_no_register::store_registers (regcache *regs, int regno)
1888 {
1889 this->store_registers_called++;
1890 }
1891
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)
1898 {
1899 this->xfer_partial_called++;
1900
1901 *xfered_len = len;
1902 return TARGET_XFER_OK;
1903 }
1904
1905 class readwrite_regcache : public regcache
1906 {
1907 public:
1908 readwrite_regcache (inferior *inf_for_target_calls,
1909 struct gdbarch *gdbarch)
1910 : regcache (inf_for_target_calls, gdbarch)
1911 {}
1912 };
1913
1914 /* Test regcache::cooked_read gets registers from raw registers and
1915 memory instead of target to_{fetch,store}_registers. */
1916
1917 static void
1918 cooked_read_test (struct gdbarch *gdbarch)
1919 {
1920 if (selftest_skip_warning_arch (gdbarch))
1921 return;
1922
1923 scoped_mock_context<target_ops_no_register> mockctx (gdbarch);
1924
1925 /* Test that read one raw register from regcache_no_target will go
1926 to the target layer. */
1927
1928 /* Find a raw register which size isn't zero. */
1929 int nonzero_regnum;
1930 for (nonzero_regnum = 0;
1931 nonzero_regnum < gdbarch_num_regs (gdbarch);
1932 nonzero_regnum++)
1933 {
1934 if (register_size (gdbarch, nonzero_regnum) != 0)
1935 break;
1936 }
1937
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 ()];
1941 regcache &readwrite
1942 = *y.emplace (std::make_pair (mockctx.mock_ptid,
1943 std::make_unique<readwrite_regcache> (
1944 &mockctx.mock_inferior, gdbarch)))
1945 ->second;
1946
1947 readwrite.set_ptid (mockctx.mock_ptid);
1948
1949 gdb::byte_vector buf (register_size (gdbarch, nonzero_regnum));
1950 readwrite.raw_read (nonzero_regnum, buf);
1951
1952 /* raw_read calls target_fetch_registers. */
1953 SELF_CHECK (mockctx.mock_target.fetch_registers_called > 0);
1954 mockctx.mock_target.reset ();
1955
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);
1960
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++)
1965 {
1966 if (register_size (gdbarch, regnum) == 0)
1967 continue;
1968
1969 gdb::byte_vector inner_buf (register_size (gdbarch, regnum));
1970
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);
1975
1976 mockctx.mock_target.reset ();
1977 }
1978
1979 readonly_detached_regcache readonly (readwrite);
1980
1981 /* GDB may go to target layer to fetch all registers and memory for
1982 readonly regcache. */
1983 mockctx.mock_target.reset ();
1984
1985 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1986 {
1987 if (register_size (gdbarch, regnum) == 0)
1988 continue;
1989
1990 gdb::byte_vector inner_buf (register_size (gdbarch, regnum));
1991 register_status status = readonly.cooked_read (regnum, inner_buf);
1992
1993 if (regnum < gdbarch_num_regs (gdbarch))
1994 {
1995 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1996
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)
2006 {
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);
2011 else
2012 SELF_CHECK (status == REG_UNKNOWN);
2013 }
2014 else
2015 SELF_CHECK (status == REG_VALID);
2016 }
2017 else
2018 {
2019 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
2020 SELF_CHECK (status == REG_VALID);
2021 else
2022 {
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;
2027
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);
2036 else
2037 SELF_CHECK (status == REG_VALID);
2038 }
2039 }
2040
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);
2044
2045 mockctx.mock_target.reset ();
2046 }
2047
2048 regcaches.erase (&mockctx.mock_target);
2049 }
2050
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. */
2054
2055 static void
2056 cooked_write_test (struct gdbarch *gdbarch)
2057 {
2058 if (selftest_skip_warning_arch (gdbarch))
2059 return;
2060
2061 /* Create a mock environment. A process_stratum target pushed. */
2062 scoped_mock_context<target_ops_no_register> ctx (gdbarch);
2063
2064
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 ()];
2068 regcache &readwrite
2069 = *y.emplace (std::make_pair (ctx.mock_ptid,
2070 std::make_unique<readwrite_regcache> (
2071 &ctx.mock_inferior, gdbarch)))
2072 ->second;
2073
2074 readwrite.set_ptid (ctx.mock_ptid);
2075 const int num_regs = gdbarch_num_cooked_regs (gdbarch);
2076
2077 for (auto regnum = 0; regnum < num_regs; regnum++)
2078 {
2079 if (register_size (gdbarch, regnum) == 0
2080 || gdbarch_cannot_store_register (gdbarch, regnum))
2081 continue;
2082
2083 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
2084
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))
2091 continue;
2092
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);
2096
2097 if (type->code () == TYPE_CODE_FLT
2098 || type->code () == TYPE_CODE_DECFLOAT)
2099 {
2100 /* Generate valid float format. */
2101 target_float_from_string (expected.data (), type, "1.25");
2102 }
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)
2108 {
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)))
2121 {
2122 /* Skip setting the expected values for some architecture
2123 registers. */
2124 }
2125 else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
2126 {
2127 /* RL78_PC_REGNUM */
2128 for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
2129 expected[j] = j;
2130 }
2131 else
2132 {
2133 for (auto j = 0; j < register_size (gdbarch, regnum); j++)
2134 expected[j] = j;
2135 }
2136 }
2137 else if (type->code () == TYPE_CODE_FLAGS)
2138 {
2139 /* No idea how to test flags. */
2140 continue;
2141 }
2142 else
2143 {
2144 /* If we don't know how to create the expected value for the
2145 this type, make it fail. */
2146 SELF_CHECK (0);
2147 }
2148
2149 readwrite.cooked_write (regnum, expected);
2150
2151 SELF_CHECK (readwrite.cooked_read (regnum, buf) == REG_VALID);
2152 SELF_CHECK (expected == buf);
2153 }
2154
2155 regcaches.erase (&ctx.mock_target);
2156 }
2157
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
2160 regcaches. */
2161
2162 static void
2163 regcache_thread_ptid_changed ()
2164 {
2165 /* This test relies on the global regcache list to initially be empty. */
2166 registers_changed ();
2167
2168 /* Any arch will do. */
2169 gdbarch *arch = current_inferior ()->arch ();
2170
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);
2174
2175 ptid_t old_ptid (111, 222);
2176 ptid_t new_ptid (111, 333);
2177
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;
2182
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;
2187
2188 gdb_assert (regcaches.empty ());
2189
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);
2193
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);
2199
2200 thread_change_ptid (&target1.mock_target, old_ptid, new_ptid);
2201
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);
2207
2208 /* Leave the regcache list empty. */
2209 registers_changed ();
2210 gdb_assert (regcaches.empty ());
2211 }
2212
2213 } /* namespace selftests */
2214 #endif /* GDB_SELF_TEST */
2215
2216 INIT_GDB_FILE (regcache)
2217 {
2218 struct cmd_list_element *c;
2219
2220 gdb::observers::target_changed.attach (regcache_observer_target_changed,
2221 "regcache");
2222 gdb::observers::thread_ptid_changed.attach (regcache_thread_ptid_changed,
2223 "regcache");
2224
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");
2232
2233 #if GDB_SELF_TEST
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);
2246
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);
2253 #endif
2254 }