Add `set print array-indexes' tests for C/C++ arrays
[binutils-gdb.git] / gdb / regcache.c
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2
3 Copyright (C) 1986-2022 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "inferior.h"
22 #include "gdbthread.h"
23 #include "target.h"
24 #include "test-target.h"
25 #include "scoped-mock-context.h"
26 #include "gdbarch.h"
27 #include "gdbcmd.h"
28 #include "regcache.h"
29 #include "reggroups.h"
30 #include "observable.h"
31 #include "regset.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 static struct gdbarch_data *regcache_descr_handle;
45
46 struct regcache_descr
47 {
48 /* The architecture this descriptor belongs to. */
49 struct gdbarch *gdbarch;
50
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
55 cache. */
56 long sizeof_raw_registers;
57
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;
66
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
70 offset. */
71 long *register_offset;
72 long *sizeof_register;
73
74 /* Cached table containing the type of each register. */
75 struct type **register_type;
76 };
77
78 static void *
79 init_regcache_descr (struct gdbarch *gdbarch)
80 {
81 int i;
82 struct regcache_descr *descr;
83 gdb_assert (gdbarch != NULL);
84
85 /* Create an initial, zero filled, table. */
86 descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr);
87 descr->gdbarch = gdbarch;
88
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);
93
94 /* Fill in a table of register types. */
95 descr->register_type
96 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
97 struct type *);
98 for (i = 0; i < descr->nr_cooked_registers; i++)
99 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
100
101 /* Construct a strictly RAW register cache. Don't allow pseudo's
102 into the register cache. */
103
104 /* Lay out the register cache.
105
106 NOTE: cagney/2002-05-22: Only register_type () is used when
107 constructing the register cache. It is assumed that the
108 register's raw size, virtual size and type length are all the
109 same. */
110
111 {
112 long offset = 0;
113
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++)
119 {
120 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
121 descr->register_offset[i] = offset;
122 offset += descr->sizeof_register[i];
123 }
124 /* Set the real size of the raw register cache buffer. */
125 descr->sizeof_raw_registers = offset;
126
127 for (; i < descr->nr_cooked_registers; i++)
128 {
129 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
130 descr->register_offset[i] = offset;
131 offset += descr->sizeof_register[i];
132 }
133 /* Set the real size of the readonly register cache buffer. */
134 descr->sizeof_cooked_registers = offset;
135 }
136
137 return descr;
138 }
139
140 static struct regcache_descr *
141 regcache_descr (struct gdbarch *gdbarch)
142 {
143 return (struct regcache_descr *) gdbarch_data (gdbarch,
144 regcache_descr_handle);
145 }
146
147 /* Utility functions returning useful register attributes stored in
148 the regcache descr. */
149
150 struct type *
151 register_type (struct gdbarch *gdbarch, int regnum)
152 {
153 struct regcache_descr *descr = regcache_descr (gdbarch);
154
155 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
156 return descr->register_type[regnum];
157 }
158
159 /* Utility functions returning useful register attributes stored in
160 the regcache descr. */
161
162 int
163 register_size (struct gdbarch *gdbarch, int regnum)
164 {
165 struct regcache_descr *descr = regcache_descr (gdbarch);
166 int size;
167
168 gdb_assert (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch));
169 size = descr->sizeof_register[regnum];
170 return size;
171 }
172
173 /* See gdbsupport/common-regcache.h. */
174
175 int
176 regcache_register_size (const struct regcache *regcache, int n)
177 {
178 return register_size (regcache->arch (), n);
179 }
180
181 reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
182 : m_has_pseudo (has_pseudo)
183 {
184 gdb_assert (gdbarch != NULL);
185 m_descr = regcache_descr (gdbarch);
186
187 /* 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
189 REG_VALID. */
190 if (has_pseudo)
191 {
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] ());
195 }
196 else
197 {
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)] ());
201 }
202 }
203
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)
209 {
210 m_ptid = minus_one_ptid;
211 }
212
213 readonly_detached_regcache::readonly_detached_regcache (regcache &src)
214 : readonly_detached_regcache (src.arch (),
215 [&src] (int regnum, gdb_byte *buf)
216 {
217 return src.cooked_read (regnum, buf);
218 })
219 {
220 }
221
222 gdbarch *
223 reg_buffer::arch () const
224 {
225 return m_descr->gdbarch;
226 }
227
228 /* Return a pointer to register REGNUM's buffer cache. */
229
230 gdb_byte *
231 reg_buffer::register_buffer (int regnum) const
232 {
233 return m_registers.get () + m_descr->register_offset[regnum];
234 }
235
236 void
237 reg_buffer::save (register_read_ftype cooked_read)
238 {
239 struct gdbarch *gdbarch = m_descr->gdbarch;
240 int regnum;
241
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++)
252 {
253 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
254 {
255 gdb_byte *dst_buf = register_buffer (regnum);
256 enum register_status status = cooked_read (regnum, dst_buf);
257
258 gdb_assert (status != REG_UNKNOWN);
259
260 if (status != REG_VALID)
261 memset (dst_buf, 0, register_size (gdbarch, regnum));
262
263 m_register_status[regnum] = status;
264 }
265 }
266 }
267
268 void
269 regcache::restore (readonly_detached_regcache *src)
270 {
271 struct gdbarch *gdbarch = m_descr->gdbarch;
272 int regnum;
273
274 gdb_assert (src != NULL);
275 gdb_assert (src->m_has_pseudo);
276
277 gdb_assert (gdbarch == src->arch ());
278
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++)
284 {
285 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
286 {
287 if (src->m_register_status[regnum] == REG_VALID)
288 cooked_write (regnum, src->register_buffer (regnum));
289 }
290 }
291 }
292
293 /* See gdbsupport/common-regcache.h. */
294
295 enum register_status
296 reg_buffer::get_register_status (int regnum) const
297 {
298 assert_regnum (regnum);
299
300 return m_register_status[regnum];
301 }
302
303 void
304 reg_buffer::invalidate (int regnum)
305 {
306 assert_regnum (regnum);
307 m_register_status[regnum] = REG_UNKNOWN;
308 }
309
310 void
311 reg_buffer::assert_regnum (int regnum) const
312 {
313 gdb_assert (regnum >= 0);
314 if (m_has_pseudo)
315 gdb_assert (regnum < m_descr->nr_cooked_registers);
316 else
317 gdb_assert (regnum < gdbarch_num_regs (arch ()));
318 }
319
320 /* Type to map a ptid to a list of regcaches (one thread may have multiple
321 regcaches, associated to different gdbarches). */
322
323 using ptid_regcache_map
324 = std::unordered_multimap<ptid_t, regcache_up, hash_ptid>;
325
326 /* Type holding regcaches for a given pid. */
327
328 using pid_ptid_regcache_map = std::unordered_map<int, ptid_regcache_map>;
329
330 /* Type holding regcaches for a given target. */
331
332 using target_pid_ptid_regcache_map
333 = std::unordered_map<process_stratum_target *, pid_ptid_regcache_map>;
334
335 /* Global structure containing the existing regcaches. */
336
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;
342
343 struct regcache *
344 get_thread_arch_aspace_regcache (process_stratum_target *target,
345 ptid_t ptid, gdbarch *arch,
346 struct address_space *aspace)
347 {
348 gdb_assert (target != nullptr);
349
350 /* Find the map for this target. */
351 pid_ptid_regcache_map &pid_ptid_regc_map = regcaches[target];
352
353 /* Find the map for this pid. */
354 ptid_regcache_map &ptid_regc_map = pid_ptid_regc_map[ptid.pid ()];
355
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)
359 {
360 if (it->second->arch () == arch)
361 return it->second.get ();
362 }
363
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)));
370
371 return new_regcache;
372 }
373
374 struct regcache *
375 get_thread_arch_regcache (process_stratum_target *target, ptid_t ptid,
376 struct gdbarch *gdbarch)
377 {
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);
381
382 return get_thread_arch_aspace_regcache (target, ptid, gdbarch, aspace);
383 }
384
385 static process_stratum_target *current_thread_target;
386 static ptid_t current_thread_ptid;
387 static struct gdbarch *current_thread_arch;
388
389 struct regcache *
390 get_thread_regcache (process_stratum_target *target, ptid_t ptid)
391 {
392 if (!current_thread_arch
393 || target != current_thread_target
394 || current_thread_ptid != ptid)
395 {
396 gdb_assert (ptid != null_ptid);
397
398 current_thread_ptid = ptid;
399 current_thread_target = target;
400
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);
404 }
405
406 return get_thread_arch_regcache (target, ptid, current_thread_arch);
407 }
408
409 /* See regcache.h. */
410
411 struct regcache *
412 get_thread_regcache (thread_info *thread)
413 {
414 return get_thread_regcache (thread->inf->process_target (),
415 thread->ptid);
416 }
417
418 struct regcache *
419 get_current_regcache (void)
420 {
421 return get_thread_regcache (inferior_thread ());
422 }
423
424 /* See gdbsupport/common-regcache.h. */
425
426 struct regcache *
427 get_thread_regcache_for_ptid (ptid_t ptid)
428 {
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);
434 }
435
436 /* Observer for the target_changed event. */
437
438 static void
439 regcache_observer_target_changed (struct target_ops *target)
440 {
441 registers_changed ();
442 }
443
444 /* Update regcaches related to OLD_PTID to now use NEW_PTID. */
445 static void
446 regcache_thread_ptid_changed (process_stratum_target *target,
447 ptid_t old_ptid, ptid_t new_ptid)
448 {
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 ())
452 return;
453
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 ())
458 return;
459
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;)
464 {
465 regcache_up rc = std::move (it->second);
466 rc->set_ptid (new_ptid);
467
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)));
472 }
473 }
474
475 /* Low level examining and depositing of registers.
476
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). */
481
482 /* REGISTERS_CHANGED ()
483
484 Indicate that registers may have changed, so invalidate the cache. */
485
486 void
487 registers_changed_ptid (process_stratum_target *target, ptid_t ptid)
488 {
489 if (target == nullptr)
490 {
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);
494
495 /* Delete all the regcaches of all targets. */
496 regcaches.clear ();
497 }
498 else if (ptid.is_pid ())
499 {
500 /* Non-NULL target and pid ptid, delete all regcaches belonging
501 to this (TARGET, PID). */
502
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 ())
506 {
507 pid_ptid_regcache_map &pid_ptid_regc_map
508 = pid_ptid_regc_map_it->second;
509
510 pid_ptid_regc_map.erase (ptid.pid ());
511 }
512 }
513 else if (ptid != minus_one_ptid)
514 {
515 /* Non-NULL target and non-minus_one_ptid, delete all regcaches belonging
516 to this (TARGET, PTID). */
517
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 ())
521 {
522 pid_ptid_regcache_map &pid_ptid_regc_map
523 = pid_ptid_regc_map_it->second;
524
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 ())
529 {
530 ptid_regcache_map &ptid_regc_map
531 = ptid_regc_map_it->second;
532
533 ptid_regc_map.erase (ptid);
534 }
535 }
536 }
537 else
538 {
539 /* Non-NULL target and minus_one_ptid, delete all regcaches
540 associated to this target. */
541 regcaches.erase (target);
542 }
543
544 if ((target == nullptr || current_thread_target == target)
545 && current_thread_ptid.matches (ptid))
546 {
547 current_thread_target = NULL;
548 current_thread_ptid = null_ptid;
549 current_thread_arch = NULL;
550 }
551
552 if ((target == nullptr || current_inferior ()->process_target () == target)
553 && inferior_ptid.matches (ptid))
554 {
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 ();
558 }
559 }
560
561 /* See regcache.h. */
562
563 void
564 registers_changed_thread (thread_info *thread)
565 {
566 registers_changed_ptid (thread->inf->process_target (), thread->ptid);
567 }
568
569 void
570 registers_changed (void)
571 {
572 registers_changed_ptid (nullptr, minus_one_ptid);
573 }
574
575 void
576 regcache::raw_update (int regnum)
577 {
578 assert_regnum (regnum);
579
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. */
584
585 if (get_register_status (regnum) == REG_UNKNOWN)
586 {
587 target_fetch_registers (this, regnum);
588
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
591 them). */
592 if (m_register_status[regnum] == REG_UNKNOWN)
593 m_register_status[regnum] = REG_UNAVAILABLE;
594 }
595 }
596
597 enum register_status
598 readable_regcache::raw_read (int regnum, gdb_byte *buf)
599 {
600 gdb_assert (buf != NULL);
601 raw_update (regnum);
602
603 if (m_register_status[regnum] != REG_VALID)
604 memset (buf, 0, m_descr->sizeof_register[regnum]);
605 else
606 memcpy (buf, register_buffer (regnum),
607 m_descr->sizeof_register[regnum]);
608
609 return m_register_status[regnum];
610 }
611
612 enum register_status
613 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
614 {
615 gdb_assert (regcache != NULL);
616 return regcache->raw_read (regnum, val);
617 }
618
619 template<typename T, typename>
620 enum register_status
621 readable_regcache::raw_read (int regnum, T *val)
622 {
623 assert_regnum (regnum);
624 size_t len = m_descr->sizeof_register[regnum];
625 gdb_byte *buf = (gdb_byte *) alloca (len);
626 register_status status = raw_read (regnum, buf);
627 if (status == REG_VALID)
628 *val = extract_integer<T> ({buf, len},
629 gdbarch_byte_order (m_descr->gdbarch));
630 else
631 *val = 0;
632 return status;
633 }
634
635 enum register_status
636 regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
637 ULONGEST *val)
638 {
639 gdb_assert (regcache != NULL);
640 return regcache->raw_read (regnum, val);
641 }
642
643 void
644 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
645 {
646 gdb_assert (regcache != NULL);
647 regcache->raw_write (regnum, val);
648 }
649
650 template<typename T, typename>
651 void
652 regcache::raw_write (int regnum, T val)
653 {
654 gdb_byte *buf;
655
656 assert_regnum (regnum);
657 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
658 store_integer (buf, m_descr->sizeof_register[regnum],
659 gdbarch_byte_order (m_descr->gdbarch), val);
660 raw_write (regnum, buf);
661 }
662
663 void
664 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
665 ULONGEST val)
666 {
667 gdb_assert (regcache != NULL);
668 regcache->raw_write (regnum, val);
669 }
670
671 LONGEST
672 regcache_raw_get_signed (struct regcache *regcache, int regnum)
673 {
674 LONGEST value;
675 enum register_status status;
676
677 status = regcache_raw_read_signed (regcache, regnum, &value);
678 if (status == REG_UNAVAILABLE)
679 throw_error (NOT_AVAILABLE_ERROR,
680 _("Register %d is not available"), regnum);
681 return value;
682 }
683
684 enum register_status
685 readable_regcache::cooked_read (int regnum, gdb_byte *buf)
686 {
687 gdb_assert (regnum >= 0);
688 gdb_assert (regnum < m_descr->nr_cooked_registers);
689 if (regnum < num_raw_registers ())
690 return raw_read (regnum, buf);
691 else if (m_has_pseudo
692 && m_register_status[regnum] != REG_UNKNOWN)
693 {
694 if (m_register_status[regnum] == REG_VALID)
695 memcpy (buf, register_buffer (regnum),
696 m_descr->sizeof_register[regnum]);
697 else
698 memset (buf, 0, m_descr->sizeof_register[regnum]);
699
700 return m_register_status[regnum];
701 }
702 else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
703 {
704 struct value *mark, *computed;
705 enum register_status result = REG_VALID;
706
707 mark = value_mark ();
708
709 computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch,
710 this, regnum);
711 if (value_entirely_available (computed))
712 memcpy (buf, value_contents_raw (computed).data (),
713 m_descr->sizeof_register[regnum]);
714 else
715 {
716 memset (buf, 0, m_descr->sizeof_register[regnum]);
717 result = REG_UNAVAILABLE;
718 }
719
720 value_free_to_mark (mark);
721
722 return result;
723 }
724 else
725 return gdbarch_pseudo_register_read (m_descr->gdbarch, this,
726 regnum, buf);
727 }
728
729 struct value *
730 readable_regcache::cooked_read_value (int regnum)
731 {
732 gdb_assert (regnum >= 0);
733 gdb_assert (regnum < m_descr->nr_cooked_registers);
734
735 if (regnum < num_raw_registers ()
736 || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
737 || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
738 {
739 struct value *result;
740
741 result = allocate_value (register_type (m_descr->gdbarch, regnum));
742 VALUE_LVAL (result) = lval_register;
743 VALUE_REGNUM (result) = regnum;
744
745 /* It is more efficient in general to do this delegation in this
746 direction than in the other one, even though the value-based
747 API is preferred. */
748 if (cooked_read (regnum,
749 value_contents_raw (result).data ()) == REG_UNAVAILABLE)
750 mark_value_bytes_unavailable (result, 0,
751 TYPE_LENGTH (value_type (result)));
752
753 return result;
754 }
755 else
756 return gdbarch_pseudo_register_read_value (m_descr->gdbarch,
757 this, regnum);
758 }
759
760 enum register_status
761 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
762 LONGEST *val)
763 {
764 gdb_assert (regcache != NULL);
765 return regcache->cooked_read (regnum, val);
766 }
767
768 template<typename T, typename>
769 enum register_status
770 readable_regcache::cooked_read (int regnum, T *val)
771 {
772 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
773 size_t len = m_descr->sizeof_register[regnum];
774 gdb_byte *buf = (gdb_byte *) alloca (len);
775 register_status status = cooked_read (regnum, buf);
776 if (status == REG_VALID)
777 *val = extract_integer<T> ({buf, len},
778 gdbarch_byte_order (m_descr->gdbarch));
779 else
780 *val = 0;
781 return status;
782 }
783
784 enum register_status
785 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
786 ULONGEST *val)
787 {
788 gdb_assert (regcache != NULL);
789 return regcache->cooked_read (regnum, val);
790 }
791
792 void
793 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
794 LONGEST val)
795 {
796 gdb_assert (regcache != NULL);
797 regcache->cooked_write (regnum, val);
798 }
799
800 template<typename T, typename>
801 void
802 regcache::cooked_write (int regnum, T val)
803 {
804 gdb_byte *buf;
805
806 gdb_assert (regnum >=0 && regnum < m_descr->nr_cooked_registers);
807 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
808 store_integer (buf, m_descr->sizeof_register[regnum],
809 gdbarch_byte_order (m_descr->gdbarch), val);
810 cooked_write (regnum, buf);
811 }
812
813 void
814 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
815 ULONGEST val)
816 {
817 gdb_assert (regcache != NULL);
818 regcache->cooked_write (regnum, val);
819 }
820
821 void
822 regcache::raw_write (int regnum, const gdb_byte *buf)
823 {
824
825 gdb_assert (buf != NULL);
826 assert_regnum (regnum);
827
828 /* On the sparc, writing %g0 is a no-op, so we don't even want to
829 change the registers array if something writes to this register. */
830 if (gdbarch_cannot_store_register (arch (), regnum))
831 return;
832
833 /* If we have a valid copy of the register, and new value == old
834 value, then don't bother doing the actual store. */
835 if (get_register_status (regnum) == REG_VALID
836 && (memcmp (register_buffer (regnum), buf,
837 m_descr->sizeof_register[regnum]) == 0))
838 return;
839
840 target_prepare_to_store (this);
841 raw_supply (regnum, buf);
842
843 /* Invalidate the register after it is written, in case of a
844 failure. */
845 auto invalidator
846 = make_scope_exit ([&] { this->invalidate (regnum); });
847
848 target_store_registers (this, regnum);
849
850 /* The target did not throw an error so we can discard invalidating
851 the register. */
852 invalidator.release ();
853 }
854
855 void
856 regcache::cooked_write (int regnum, const gdb_byte *buf)
857 {
858 gdb_assert (regnum >= 0);
859 gdb_assert (regnum < m_descr->nr_cooked_registers);
860 if (regnum < num_raw_registers ())
861 raw_write (regnum, buf);
862 else
863 gdbarch_pseudo_register_write (m_descr->gdbarch, this,
864 regnum, buf);
865 }
866
867 /* See regcache.h. */
868
869 enum register_status
870 readable_regcache::read_part (int regnum, int offset, int len,
871 gdb_byte *out, bool is_raw)
872 {
873 int reg_size = register_size (arch (), regnum);
874
875 gdb_assert (out != NULL);
876 gdb_assert (offset >= 0 && offset <= reg_size);
877 gdb_assert (len >= 0 && offset + len <= reg_size);
878
879 if (offset == 0 && len == 0)
880 {
881 /* Nothing to do. */
882 return REG_VALID;
883 }
884
885 if (offset == 0 && len == reg_size)
886 {
887 /* Read the full register. */
888 return (is_raw) ? raw_read (regnum, out) : cooked_read (regnum, out);
889 }
890
891 enum register_status status;
892 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
893
894 /* Read full register to buffer. */
895 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
896 if (status != REG_VALID)
897 return status;
898
899 /* Copy out. */
900 memcpy (out, reg + offset, len);
901 return REG_VALID;
902 }
903
904 /* See regcache.h. */
905
906 void
907 reg_buffer::raw_collect_part (int regnum, int offset, int len,
908 gdb_byte *out) const
909 {
910 int reg_size = register_size (arch (), regnum);
911
912 gdb_assert (out != nullptr);
913 gdb_assert (offset >= 0 && offset <= reg_size);
914 gdb_assert (len >= 0 && offset + len <= reg_size);
915
916 if (offset == 0 && len == 0)
917 {
918 /* Nothing to do. */
919 return;
920 }
921
922 if (offset == 0 && len == reg_size)
923 {
924 /* Collect the full register. */
925 return raw_collect (regnum, out);
926 }
927
928 /* Read to buffer, then write out. */
929 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
930 raw_collect (regnum, reg);
931 memcpy (out, reg + offset, len);
932 }
933
934 /* See regcache.h. */
935
936 enum register_status
937 regcache::write_part (int regnum, int offset, int len,
938 const gdb_byte *in, bool is_raw)
939 {
940 int reg_size = register_size (arch (), regnum);
941
942 gdb_assert (in != NULL);
943 gdb_assert (offset >= 0 && offset <= reg_size);
944 gdb_assert (len >= 0 && offset + len <= reg_size);
945
946 if (offset == 0 && len == 0)
947 {
948 /* Nothing to do. */
949 return REG_VALID;
950 }
951
952 if (offset == 0 && len == reg_size)
953 {
954 /* Write the full register. */
955 (is_raw) ? raw_write (regnum, in) : cooked_write (regnum, in);
956 return REG_VALID;
957 }
958
959 enum register_status status;
960 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
961
962 /* Read existing register to buffer. */
963 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
964 if (status != REG_VALID)
965 return status;
966
967 /* Update buffer, then write back to regcache. */
968 memcpy (reg + offset, in, len);
969 is_raw ? raw_write (regnum, reg) : cooked_write (regnum, reg);
970 return REG_VALID;
971 }
972
973 /* See regcache.h. */
974
975 void
976 reg_buffer::raw_supply_part (int regnum, int offset, int len,
977 const gdb_byte *in)
978 {
979 int reg_size = register_size (arch (), regnum);
980
981 gdb_assert (in != nullptr);
982 gdb_assert (offset >= 0 && offset <= reg_size);
983 gdb_assert (len >= 0 && offset + len <= reg_size);
984
985 if (offset == 0 && len == 0)
986 {
987 /* Nothing to do. */
988 return;
989 }
990
991 if (offset == 0 && len == reg_size)
992 {
993 /* Supply the full register. */
994 return raw_supply (regnum, in);
995 }
996
997 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
998
999 /* Read existing value to buffer. */
1000 raw_collect (regnum, reg);
1001
1002 /* Write to buffer, then write out. */
1003 memcpy (reg + offset, in, len);
1004 raw_supply (regnum, reg);
1005 }
1006
1007 enum register_status
1008 readable_regcache::raw_read_part (int regnum, int offset, int len,
1009 gdb_byte *buf)
1010 {
1011 assert_regnum (regnum);
1012 return read_part (regnum, offset, len, buf, true);
1013 }
1014
1015 /* See regcache.h. */
1016
1017 void
1018 regcache::raw_write_part (int regnum, int offset, int len,
1019 const gdb_byte *buf)
1020 {
1021 assert_regnum (regnum);
1022 write_part (regnum, offset, len, buf, true);
1023 }
1024
1025 /* See regcache.h. */
1026
1027 enum register_status
1028 readable_regcache::cooked_read_part (int regnum, int offset, int len,
1029 gdb_byte *buf)
1030 {
1031 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
1032 return read_part (regnum, offset, len, buf, false);
1033 }
1034
1035 /* See regcache.h. */
1036
1037 void
1038 regcache::cooked_write_part (int regnum, int offset, int len,
1039 const gdb_byte *buf)
1040 {
1041 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
1042 write_part (regnum, offset, len, buf, false);
1043 }
1044
1045 /* See gdbsupport/common-regcache.h. */
1046
1047 void
1048 reg_buffer::raw_supply (int regnum, const void *buf)
1049 {
1050 void *regbuf;
1051 size_t size;
1052
1053 assert_regnum (regnum);
1054
1055 regbuf = register_buffer (regnum);
1056 size = m_descr->sizeof_register[regnum];
1057
1058 if (buf)
1059 {
1060 memcpy (regbuf, buf, size);
1061 m_register_status[regnum] = REG_VALID;
1062 }
1063 else
1064 {
1065 /* This memset not strictly necessary, but better than garbage
1066 in case the register value manages to escape somewhere (due
1067 to a bug, no less). */
1068 memset (regbuf, 0, size);
1069 m_register_status[regnum] = REG_UNAVAILABLE;
1070 }
1071 }
1072
1073 /* See regcache.h. */
1074
1075 void
1076 reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr,
1077 int addr_len, bool is_signed)
1078 {
1079 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1080 gdb_byte *regbuf;
1081 size_t regsize;
1082
1083 assert_regnum (regnum);
1084
1085 regbuf = register_buffer (regnum);
1086 regsize = m_descr->sizeof_register[regnum];
1087
1088 copy_integer_to_size (regbuf, regsize, addr, addr_len, is_signed,
1089 byte_order);
1090 m_register_status[regnum] = REG_VALID;
1091 }
1092
1093 /* See regcache.h. */
1094
1095 void
1096 reg_buffer::raw_supply_zeroed (int regnum)
1097 {
1098 void *regbuf;
1099 size_t size;
1100
1101 assert_regnum (regnum);
1102
1103 regbuf = register_buffer (regnum);
1104 size = m_descr->sizeof_register[regnum];
1105
1106 memset (regbuf, 0, size);
1107 m_register_status[regnum] = REG_VALID;
1108 }
1109
1110 /* See gdbsupport/common-regcache.h. */
1111
1112 void
1113 reg_buffer::raw_collect (int regnum, void *buf) const
1114 {
1115 const void *regbuf;
1116 size_t size;
1117
1118 gdb_assert (buf != NULL);
1119 assert_regnum (regnum);
1120
1121 regbuf = register_buffer (regnum);
1122 size = m_descr->sizeof_register[regnum];
1123 memcpy (buf, regbuf, size);
1124 }
1125
1126 /* See regcache.h. */
1127
1128 void
1129 reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
1130 bool is_signed) const
1131 {
1132 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1133 const gdb_byte *regbuf;
1134 size_t regsize;
1135
1136 assert_regnum (regnum);
1137
1138 regbuf = register_buffer (regnum);
1139 regsize = m_descr->sizeof_register[regnum];
1140
1141 copy_integer_to_size (addr, addr_len, regbuf, regsize, is_signed,
1142 byte_order);
1143 }
1144
1145 /* See regcache.h. */
1146
1147 void
1148 regcache::transfer_regset_register (struct regcache *out_regcache, int regnum,
1149 const gdb_byte *in_buf, gdb_byte *out_buf,
1150 int slot_size, int offs) const
1151 {
1152 struct gdbarch *gdbarch = arch ();
1153 int reg_size = std::min (register_size (gdbarch, regnum), slot_size);
1154
1155 /* Use part versions and reg_size to prevent possible buffer overflows when
1156 accessing the regcache. */
1157
1158 if (out_buf != nullptr)
1159 {
1160 raw_collect_part (regnum, 0, reg_size, out_buf + offs);
1161
1162 /* Ensure any additional space is cleared. */
1163 if (slot_size > reg_size)
1164 memset (out_buf + offs + reg_size, 0, slot_size - reg_size);
1165 }
1166 else if (in_buf != nullptr)
1167 out_regcache->raw_supply_part (regnum, 0, reg_size, in_buf + offs);
1168 else
1169 {
1170 /* Invalidate the register. */
1171 out_regcache->raw_supply (regnum, nullptr);
1172 }
1173 }
1174
1175 /* See regcache.h. */
1176
1177 void
1178 regcache::transfer_regset (const struct regset *regset,
1179 struct regcache *out_regcache,
1180 int regnum, const gdb_byte *in_buf,
1181 gdb_byte *out_buf, size_t size) const
1182 {
1183 const struct regcache_map_entry *map;
1184 int offs = 0, count;
1185
1186 for (map = (const struct regcache_map_entry *) regset->regmap;
1187 (count = map->count) != 0;
1188 map++)
1189 {
1190 int regno = map->regno;
1191 int slot_size = map->size;
1192
1193 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1194 slot_size = m_descr->sizeof_register[regno];
1195
1196 if (regno == REGCACHE_MAP_SKIP
1197 || (regnum != -1
1198 && (regnum < regno || regnum >= regno + count)))
1199 offs += count * slot_size;
1200
1201 else if (regnum == -1)
1202 for (; count--; regno++, offs += slot_size)
1203 {
1204 if (offs + slot_size > size)
1205 break;
1206
1207 transfer_regset_register (out_regcache, regno, in_buf, out_buf,
1208 slot_size, offs);
1209 }
1210 else
1211 {
1212 /* Transfer a single register and return. */
1213 offs += (regnum - regno) * slot_size;
1214 if (offs + slot_size > size)
1215 return;
1216
1217 transfer_regset_register (out_regcache, regnum, in_buf, out_buf,
1218 slot_size, offs);
1219 return;
1220 }
1221 }
1222 }
1223
1224 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1225 in REGSET. If REGNUM is -1, do this for all registers in REGSET.
1226 If BUF is NULL, set the register(s) to "unavailable" status. */
1227
1228 void
1229 regcache_supply_regset (const struct regset *regset,
1230 struct regcache *regcache,
1231 int regnum, const void *buf, size_t size)
1232 {
1233 regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size);
1234 }
1235
1236 void
1237 regcache::supply_regset (const struct regset *regset,
1238 int regnum, const void *buf, size_t size)
1239 {
1240 transfer_regset (regset, this, regnum, (const gdb_byte *) buf, nullptr, size);
1241 }
1242
1243 /* Collect register REGNUM from REGCACHE to BUF, using the register
1244 map in REGSET. If REGNUM is -1, do this for all registers in
1245 REGSET. */
1246
1247 void
1248 regcache_collect_regset (const struct regset *regset,
1249 const struct regcache *regcache,
1250 int regnum, void *buf, size_t size)
1251 {
1252 regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size);
1253 }
1254
1255 void
1256 regcache::collect_regset (const struct regset *regset,
1257 int regnum, void *buf, size_t size) const
1258 {
1259 transfer_regset (regset, nullptr, regnum, nullptr, (gdb_byte *) buf, size);
1260 }
1261
1262 /* See regcache.h */
1263
1264 bool
1265 regcache_map_supplies (const struct regcache_map_entry *map, int regnum,
1266 struct gdbarch *gdbarch, size_t size)
1267 {
1268 int offs = 0, count;
1269
1270 for (; (count = map->count) != 0; map++)
1271 {
1272 int regno = map->regno;
1273 int slot_size = map->size;
1274
1275 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1276 slot_size = register_size (gdbarch, regno);
1277
1278 if (regno != REGCACHE_MAP_SKIP && regnum >= regno
1279 && regnum < regno + count)
1280 return offs + (regnum - regno + 1) * slot_size <= size;
1281
1282 offs += count * slot_size;
1283 if (offs >= size)
1284 return false;
1285 }
1286 return false;
1287 }
1288
1289 /* See gdbsupport/common-regcache.h. */
1290
1291 bool
1292 reg_buffer::raw_compare (int regnum, const void *buf, int offset) const
1293 {
1294 gdb_assert (buf != NULL);
1295 assert_regnum (regnum);
1296
1297 const char *regbuf = (const char *) register_buffer (regnum);
1298 size_t size = m_descr->sizeof_register[regnum];
1299 gdb_assert (size >= offset);
1300
1301 return (memcmp (buf, regbuf + offset, size - offset) == 0);
1302 }
1303
1304 /* Special handling for register PC. */
1305
1306 CORE_ADDR
1307 regcache_read_pc (struct regcache *regcache)
1308 {
1309 struct gdbarch *gdbarch = regcache->arch ();
1310
1311 CORE_ADDR pc_val;
1312
1313 if (gdbarch_read_pc_p (gdbarch))
1314 pc_val = gdbarch_read_pc (gdbarch, regcache);
1315 /* Else use per-frame method on get_current_frame. */
1316 else if (gdbarch_pc_regnum (gdbarch) >= 0)
1317 {
1318 ULONGEST raw_val;
1319
1320 if (regcache_cooked_read_unsigned (regcache,
1321 gdbarch_pc_regnum (gdbarch),
1322 &raw_val) == REG_UNAVAILABLE)
1323 throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
1324
1325 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
1326 }
1327 else
1328 internal_error (__FILE__, __LINE__,
1329 _("regcache_read_pc: Unable to find PC"));
1330 return pc_val;
1331 }
1332
1333 /* See gdbsupport/common-regcache.h. */
1334
1335 CORE_ADDR
1336 regcache_read_pc_protected (regcache *regcache)
1337 {
1338 CORE_ADDR pc;
1339 try
1340 {
1341 pc = regcache_read_pc (regcache);
1342 }
1343 catch (const gdb_exception_error &ex)
1344 {
1345 pc = 0;
1346 }
1347
1348 return pc;
1349 }
1350
1351 void
1352 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
1353 {
1354 struct gdbarch *gdbarch = regcache->arch ();
1355
1356 if (gdbarch_write_pc_p (gdbarch))
1357 gdbarch_write_pc (gdbarch, regcache, pc);
1358 else if (gdbarch_pc_regnum (gdbarch) >= 0)
1359 regcache_cooked_write_unsigned (regcache,
1360 gdbarch_pc_regnum (gdbarch), pc);
1361 else
1362 internal_error (__FILE__, __LINE__,
1363 _("regcache_write_pc: Unable to update PC"));
1364
1365 /* Writing the PC (for instance, from "load") invalidates the
1366 current frame. */
1367 reinit_frame_cache ();
1368 }
1369
1370 int
1371 reg_buffer::num_raw_registers () const
1372 {
1373 return gdbarch_num_regs (arch ());
1374 }
1375
1376 void
1377 regcache::debug_print_register (const char *func, int regno)
1378 {
1379 struct gdbarch *gdbarch = arch ();
1380
1381 fprintf_unfiltered (gdb_stdlog, "%s ", func);
1382 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
1383 && gdbarch_register_name (gdbarch, regno) != NULL
1384 && gdbarch_register_name (gdbarch, regno)[0] != '\0')
1385 fprintf_unfiltered (gdb_stdlog, "(%s)",
1386 gdbarch_register_name (gdbarch, regno));
1387 else
1388 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1389 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1390 {
1391 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1392 int size = register_size (gdbarch, regno);
1393 gdb_byte *buf = register_buffer (regno);
1394
1395 fprintf_unfiltered (gdb_stdlog, " = ");
1396 for (int i = 0; i < size; i++)
1397 {
1398 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1399 }
1400 if (size <= sizeof (LONGEST))
1401 {
1402 ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
1403
1404 fprintf_unfiltered (gdb_stdlog, " %s %s",
1405 core_addr_to_string_nz (val), plongest (val));
1406 }
1407 }
1408 fprintf_unfiltered (gdb_stdlog, "\n");
1409 }
1410
1411 /* Implement 'maint flush register-cache' command. */
1412
1413 static void
1414 reg_flush_command (const char *command, int from_tty)
1415 {
1416 /* Force-flush the register cache. */
1417 registers_changed ();
1418 if (from_tty)
1419 printf_filtered (_("Register cache flushed.\n"));
1420 }
1421
1422 void
1423 register_dump::dump (ui_file *file)
1424 {
1425 auto descr = regcache_descr (m_gdbarch);
1426 int regnum;
1427 int footnote_nr = 0;
1428 int footnote_register_offset = 0;
1429 int footnote_register_type_name_null = 0;
1430 long register_offset = 0;
1431
1432 gdb_assert (descr->nr_cooked_registers
1433 == gdbarch_num_cooked_regs (m_gdbarch));
1434
1435 for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++)
1436 {
1437 /* Name. */
1438 if (regnum < 0)
1439 fprintf_filtered (file, " %-10s", "Name");
1440 else
1441 {
1442 const char *p = gdbarch_register_name (m_gdbarch, regnum);
1443
1444 if (p == NULL)
1445 p = "";
1446 else if (p[0] == '\0')
1447 p = "''";
1448 fprintf_filtered (file, " %-10s", p);
1449 }
1450
1451 /* Number. */
1452 if (regnum < 0)
1453 fprintf_filtered (file, " %4s", "Nr");
1454 else
1455 fprintf_filtered (file, " %4d", regnum);
1456
1457 /* Relative number. */
1458 if (regnum < 0)
1459 fprintf_filtered (file, " %4s", "Rel");
1460 else if (regnum < gdbarch_num_regs (m_gdbarch))
1461 fprintf_filtered (file, " %4d", regnum);
1462 else
1463 fprintf_filtered (file, " %4d",
1464 (regnum - gdbarch_num_regs (m_gdbarch)));
1465
1466 /* Offset. */
1467 if (regnum < 0)
1468 fprintf_filtered (file, " %6s ", "Offset");
1469 else
1470 {
1471 fprintf_filtered (file, " %6ld",
1472 descr->register_offset[regnum]);
1473 if (register_offset != descr->register_offset[regnum]
1474 || (regnum > 0
1475 && (descr->register_offset[regnum]
1476 != (descr->register_offset[regnum - 1]
1477 + descr->sizeof_register[regnum - 1])))
1478 )
1479 {
1480 if (!footnote_register_offset)
1481 footnote_register_offset = ++footnote_nr;
1482 fprintf_filtered (file, "*%d", footnote_register_offset);
1483 }
1484 else
1485 fprintf_filtered (file, " ");
1486 register_offset = (descr->register_offset[regnum]
1487 + descr->sizeof_register[regnum]);
1488 }
1489
1490 /* Size. */
1491 if (regnum < 0)
1492 fprintf_filtered (file, " %5s ", "Size");
1493 else
1494 fprintf_filtered (file, " %5ld", descr->sizeof_register[regnum]);
1495
1496 /* Type. */
1497 {
1498 const char *t;
1499 std::string name_holder;
1500
1501 if (regnum < 0)
1502 t = "Type";
1503 else
1504 {
1505 static const char blt[] = "builtin_type";
1506
1507 t = register_type (m_gdbarch, regnum)->name ();
1508 if (t == NULL)
1509 {
1510 if (!footnote_register_type_name_null)
1511 footnote_register_type_name_null = ++footnote_nr;
1512 name_holder = string_printf ("*%d",
1513 footnote_register_type_name_null);
1514 t = name_holder.c_str ();
1515 }
1516 /* Chop a leading builtin_type. */
1517 if (startswith (t, blt))
1518 t += strlen (blt);
1519 }
1520 fprintf_filtered (file, " %-15s", t);
1521 }
1522
1523 /* Leading space always present. */
1524 fprintf_filtered (file, " ");
1525
1526 dump_reg (file, regnum);
1527
1528 fprintf_filtered (file, "\n");
1529 }
1530
1531 if (footnote_register_offset)
1532 fprintf_filtered (file, "*%d: Inconsistent register offsets.\n",
1533 footnote_register_offset);
1534 if (footnote_register_type_name_null)
1535 fprintf_filtered (file,
1536 "*%d: Register type's name NULL.\n",
1537 footnote_register_type_name_null);
1538 }
1539
1540 #if GDB_SELF_TEST
1541 #include "gdbsupport/selftest.h"
1542 #include "selftest-arch.h"
1543 #include "target-float.h"
1544
1545 namespace selftests {
1546
1547 static size_t
1548 regcaches_size ()
1549 {
1550 size_t size = 0;
1551
1552 for (auto pid_ptid_regc_map_it = regcaches.cbegin ();
1553 pid_ptid_regc_map_it != regcaches.cend ();
1554 ++pid_ptid_regc_map_it)
1555 {
1556 const pid_ptid_regcache_map &pid_ptid_regc_map
1557 = pid_ptid_regc_map_it->second;
1558
1559 for (auto ptid_regc_map_it = pid_ptid_regc_map.cbegin ();
1560 ptid_regc_map_it != pid_ptid_regc_map.cend ();
1561 ++ptid_regc_map_it)
1562 {
1563 const ptid_regcache_map &ptid_regc_map
1564 = ptid_regc_map_it->second;
1565
1566 size += ptid_regc_map.size ();
1567 }
1568 }
1569
1570 return size;
1571 }
1572
1573 /* Return the count of regcaches for (TARGET, PTID) in REGCACHES. */
1574
1575 static int
1576 regcache_count (process_stratum_target *target, ptid_t ptid)
1577 {
1578 /* Look up map for target. */
1579 auto pid_ptid_regc_map_it = regcaches.find (target);
1580 if (pid_ptid_regc_map_it != regcaches.end ())
1581 {
1582 pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second;
1583
1584 /* Look map for pid. */
1585 auto ptid_regc_map_it = pid_ptid_regc_map.find (ptid.pid ());
1586 if (ptid_regc_map_it != pid_ptid_regc_map.end ())
1587 {
1588 ptid_regcache_map &ptid_regc_map = ptid_regc_map_it->second;
1589 auto range = ptid_regc_map.equal_range (ptid);
1590
1591 return std::distance (range.first, range.second);
1592 }
1593 }
1594
1595 return 0;
1596 };
1597
1598 /* Wrapper around get_thread_arch_aspace_regcache that does some self checks. */
1599
1600 static void
1601 get_thread_arch_aspace_regcache_and_check (process_stratum_target *target,
1602 ptid_t ptid)
1603 {
1604 /* We currently only test with a single gdbarch. Any gdbarch will do, so use
1605 the current inferior's gdbarch. Also use the current inferior's address
1606 space. */
1607 gdbarch *arch = current_inferior ()->gdbarch;
1608 address_space *aspace = current_inferior ()->aspace;
1609 regcache *regcache
1610 = get_thread_arch_aspace_regcache (target, ptid, arch, aspace);
1611
1612 SELF_CHECK (regcache != NULL);
1613 SELF_CHECK (regcache->target () == target);
1614 SELF_CHECK (regcache->ptid () == ptid);
1615 SELF_CHECK (regcache->arch () == arch);
1616 SELF_CHECK (regcache->aspace () == aspace);
1617 }
1618
1619 /* The data that the regcaches selftests must hold onto for the duration of the
1620 test. */
1621
1622 struct regcache_test_data
1623 {
1624 regcache_test_data ()
1625 {
1626 /* Ensure the regcaches container is empty at the start. */
1627 registers_changed ();
1628 }
1629
1630 ~regcache_test_data ()
1631 {
1632 /* Make sure to leave the global regcaches container empty. */
1633 registers_changed ();
1634 }
1635
1636 test_target_ops test_target1;
1637 test_target_ops test_target2;
1638 };
1639
1640 using regcache_test_data_up = std::unique_ptr<regcache_test_data>;
1641
1642 /* Set up a few regcaches from two different targets, for use in
1643 regcache-management tests.
1644
1645 Return a pointer, because the `regcache_test_data` type is not moveable. */
1646
1647 static regcache_test_data_up
1648 populate_regcaches_for_test ()
1649 {
1650 regcache_test_data_up data (new regcache_test_data);
1651 size_t expected_regcache_size = 0;
1652
1653 SELF_CHECK (regcaches_size () == 0);
1654
1655 /* Populate the regcache container with a few regcaches for the two test
1656 targets. */
1657 for (int pid : { 1, 2 })
1658 {
1659 for (long lwp : { 1, 2, 3 })
1660 {
1661 get_thread_arch_aspace_regcache_and_check
1662 (&data->test_target1, ptid_t (pid, lwp));
1663 expected_regcache_size++;
1664 SELF_CHECK (regcaches_size () == expected_regcache_size);
1665
1666 get_thread_arch_aspace_regcache_and_check
1667 (&data->test_target2, ptid_t (pid, lwp));
1668 expected_regcache_size++;
1669 SELF_CHECK (regcaches_size () == expected_regcache_size);
1670 }
1671 }
1672
1673 return data;
1674 }
1675
1676 static void
1677 get_thread_arch_aspace_regcache_test ()
1678 {
1679 /* populate_regcaches_for_test already tests most of the
1680 get_thread_arch_aspace_regcache functionality. */
1681 regcache_test_data_up data = populate_regcaches_for_test ();
1682 size_t regcaches_size_before = regcaches_size ();
1683
1684 /* Test that getting an existing regcache doesn't create a new one. */
1685 get_thread_arch_aspace_regcache_and_check (&data->test_target1, ptid_t (2, 2));
1686 SELF_CHECK (regcaches_size () == regcaches_size_before);
1687 }
1688
1689 /* Test marking all regcaches of all targets as changed. */
1690
1691 static void
1692 registers_changed_ptid_all_test ()
1693 {
1694 regcache_test_data_up data = populate_regcaches_for_test ();
1695
1696 registers_changed_ptid (nullptr, minus_one_ptid);
1697 SELF_CHECK (regcaches_size () == 0);
1698 }
1699
1700 /* Test marking regcaches of a specific target as changed. */
1701
1702 static void
1703 registers_changed_ptid_target_test ()
1704 {
1705 regcache_test_data_up data = populate_regcaches_for_test ();
1706
1707 registers_changed_ptid (&data->test_target1, minus_one_ptid);
1708 SELF_CHECK (regcaches_size () == 6);
1709
1710 /* Check that we deleted the regcache for the right target. */
1711 SELF_CHECK (regcache_count (&data->test_target1, ptid_t (2, 2)) == 0);
1712 SELF_CHECK (regcache_count (&data->test_target2, ptid_t (2, 2)) == 1);
1713 }
1714
1715 /* Test marking regcaches of a specific (target, pid) as changed. */
1716
1717 static void
1718 registers_changed_ptid_target_pid_test ()
1719 {
1720 regcache_test_data_up data = populate_regcaches_for_test ();
1721
1722 registers_changed_ptid (&data->test_target1, ptid_t (2));
1723 SELF_CHECK (regcaches_size () == 9);
1724
1725 /* Regcaches from target1 should not exist, while regcaches from target2
1726 should exist. */
1727 SELF_CHECK (regcache_count (&data->test_target1, ptid_t (2, 2)) == 0);
1728 SELF_CHECK (regcache_count (&data->test_target2, ptid_t (2, 2)) == 1);
1729 }
1730
1731 /* Test marking regcaches of a specific (target, ptid) as changed. */
1732
1733 static void
1734 registers_changed_ptid_target_ptid_test ()
1735 {
1736 regcache_test_data_up data = populate_regcaches_for_test ();
1737
1738 registers_changed_ptid (&data->test_target1, ptid_t (2, 2));
1739 SELF_CHECK (regcaches_size () == 11);
1740
1741 /* Check that we deleted the regcache for the right target. */
1742 SELF_CHECK (regcache_count (&data->test_target1, ptid_t (2, 2)) == 0);
1743 SELF_CHECK (regcache_count (&data->test_target2, ptid_t (2, 2)) == 1);
1744 }
1745
1746 class target_ops_no_register : public test_target_ops
1747 {
1748 public:
1749 target_ops_no_register ()
1750 : test_target_ops {}
1751 {}
1752
1753 void reset ()
1754 {
1755 fetch_registers_called = 0;
1756 store_registers_called = 0;
1757 xfer_partial_called = 0;
1758 }
1759
1760 void fetch_registers (regcache *regs, int regno) override;
1761 void store_registers (regcache *regs, int regno) override;
1762
1763 enum target_xfer_status xfer_partial (enum target_object object,
1764 const char *annex, gdb_byte *readbuf,
1765 const gdb_byte *writebuf,
1766 ULONGEST offset, ULONGEST len,
1767 ULONGEST *xfered_len) override;
1768
1769 unsigned int fetch_registers_called = 0;
1770 unsigned int store_registers_called = 0;
1771 unsigned int xfer_partial_called = 0;
1772 };
1773
1774 void
1775 target_ops_no_register::fetch_registers (regcache *regs, int regno)
1776 {
1777 /* Mark register available. */
1778 regs->raw_supply_zeroed (regno);
1779 this->fetch_registers_called++;
1780 }
1781
1782 void
1783 target_ops_no_register::store_registers (regcache *regs, int regno)
1784 {
1785 this->store_registers_called++;
1786 }
1787
1788 enum target_xfer_status
1789 target_ops_no_register::xfer_partial (enum target_object object,
1790 const char *annex, gdb_byte *readbuf,
1791 const gdb_byte *writebuf,
1792 ULONGEST offset, ULONGEST len,
1793 ULONGEST *xfered_len)
1794 {
1795 this->xfer_partial_called++;
1796
1797 *xfered_len = len;
1798 return TARGET_XFER_OK;
1799 }
1800
1801 class readwrite_regcache : public regcache
1802 {
1803 public:
1804 readwrite_regcache (process_stratum_target *target,
1805 struct gdbarch *gdbarch)
1806 : regcache (target, gdbarch, nullptr)
1807 {}
1808 };
1809
1810 /* Test regcache::cooked_read gets registers from raw registers and
1811 memory instead of target to_{fetch,store}_registers. */
1812
1813 static void
1814 cooked_read_test (struct gdbarch *gdbarch)
1815 {
1816 scoped_mock_context<target_ops_no_register> mockctx (gdbarch);
1817
1818 /* Test that read one raw register from regcache_no_target will go
1819 to the target layer. */
1820
1821 /* Find a raw register which size isn't zero. */
1822 int nonzero_regnum;
1823 for (nonzero_regnum = 0;
1824 nonzero_regnum < gdbarch_num_regs (gdbarch);
1825 nonzero_regnum++)
1826 {
1827 if (register_size (gdbarch, nonzero_regnum) != 0)
1828 break;
1829 }
1830
1831 readwrite_regcache readwrite (&mockctx.mock_target, gdbarch);
1832 gdb::def_vector<gdb_byte> buf (register_size (gdbarch, nonzero_regnum));
1833
1834 readwrite.raw_read (nonzero_regnum, buf.data ());
1835
1836 /* raw_read calls target_fetch_registers. */
1837 SELF_CHECK (mockctx.mock_target.fetch_registers_called > 0);
1838 mockctx.mock_target.reset ();
1839
1840 /* Mark all raw registers valid, so the following raw registers
1841 accesses won't go to target. */
1842 for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++)
1843 readwrite.raw_update (i);
1844
1845 mockctx.mock_target.reset ();
1846 /* Then, read all raw and pseudo registers, and don't expect calling
1847 to_{fetch,store}_registers. */
1848 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1849 {
1850 if (register_size (gdbarch, regnum) == 0)
1851 continue;
1852
1853 gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum));
1854
1855 SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum,
1856 inner_buf.data ()));
1857
1858 SELF_CHECK (mockctx.mock_target.fetch_registers_called == 0);
1859 SELF_CHECK (mockctx.mock_target.store_registers_called == 0);
1860 SELF_CHECK (mockctx.mock_target.xfer_partial_called == 0);
1861
1862 mockctx.mock_target.reset ();
1863 }
1864
1865 readonly_detached_regcache readonly (readwrite);
1866
1867 /* GDB may go to target layer to fetch all registers and memory for
1868 readonly regcache. */
1869 mockctx.mock_target.reset ();
1870
1871 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1872 {
1873 if (register_size (gdbarch, regnum) == 0)
1874 continue;
1875
1876 gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum));
1877 enum register_status status = readonly.cooked_read (regnum,
1878 inner_buf.data ());
1879
1880 if (regnum < gdbarch_num_regs (gdbarch))
1881 {
1882 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1883
1884 if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300
1885 || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh
1886 || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850
1887 || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep
1888 || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850
1889 || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300
1890 || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score
1891 || bfd_arch == bfd_arch_riscv || bfd_arch == bfd_arch_csky)
1892 {
1893 /* Raw registers. If raw registers are not in save_reggroup,
1894 their status are unknown. */
1895 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1896 SELF_CHECK (status == REG_VALID);
1897 else
1898 SELF_CHECK (status == REG_UNKNOWN);
1899 }
1900 else
1901 SELF_CHECK (status == REG_VALID);
1902 }
1903 else
1904 {
1905 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1906 SELF_CHECK (status == REG_VALID);
1907 else
1908 {
1909 /* If pseudo registers are not in save_reggroup, some of
1910 them can be computed from saved raw registers, but some
1911 of them are unknown. */
1912 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1913
1914 if (bfd_arch == bfd_arch_frv
1915 || bfd_arch == bfd_arch_m32c
1916 || bfd_arch == bfd_arch_mep
1917 || bfd_arch == bfd_arch_sh)
1918 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN);
1919 else if (bfd_arch == bfd_arch_mips
1920 || bfd_arch == bfd_arch_h8300)
1921 SELF_CHECK (status == REG_UNKNOWN);
1922 else
1923 SELF_CHECK (status == REG_VALID);
1924 }
1925 }
1926
1927 SELF_CHECK (mockctx.mock_target.fetch_registers_called == 0);
1928 SELF_CHECK (mockctx.mock_target.store_registers_called == 0);
1929 SELF_CHECK (mockctx.mock_target.xfer_partial_called == 0);
1930
1931 mockctx.mock_target.reset ();
1932 }
1933 }
1934
1935 /* Test regcache::cooked_write by writing some expected contents to
1936 registers, and checking that contents read from registers and the
1937 expected contents are the same. */
1938
1939 static void
1940 cooked_write_test (struct gdbarch *gdbarch)
1941 {
1942 /* Error out if debugging something, because we're going to push the
1943 test target, which would pop any existing target. */
1944 if (current_inferior ()->top_target ()->stratum () >= process_stratum)
1945 error (_("target already pushed"));
1946
1947 /* Create a mock environment. A process_stratum target pushed. */
1948
1949 target_ops_no_register mock_target;
1950
1951 /* Push the process_stratum target so we can mock accessing
1952 registers. */
1953 current_inferior ()->push_target (&mock_target);
1954
1955 /* Pop it again on exit (return/exception). */
1956 struct on_exit
1957 {
1958 ~on_exit ()
1959 {
1960 pop_all_targets_at_and_above (process_stratum);
1961 }
1962 } pop_targets;
1963
1964 readwrite_regcache readwrite (&mock_target, gdbarch);
1965
1966 const int num_regs = gdbarch_num_cooked_regs (gdbarch);
1967
1968 for (auto regnum = 0; regnum < num_regs; regnum++)
1969 {
1970 if (register_size (gdbarch, regnum) == 0
1971 || gdbarch_cannot_store_register (gdbarch, regnum))
1972 continue;
1973
1974 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1975
1976 if (bfd_arch == bfd_arch_sparc
1977 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
1978 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */
1979 && gdbarch_ptr_bit (gdbarch) == 64
1980 && (regnum >= gdbarch_num_regs (gdbarch)
1981 && regnum <= gdbarch_num_regs (gdbarch) + 4))
1982 continue;
1983
1984 std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0);
1985 std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0);
1986 const auto type = register_type (gdbarch, regnum);
1987
1988 if (type->code () == TYPE_CODE_FLT
1989 || type->code () == TYPE_CODE_DECFLOAT)
1990 {
1991 /* Generate valid float format. */
1992 target_float_from_string (expected.data (), type, "1.25");
1993 }
1994 else if (type->code () == TYPE_CODE_INT
1995 || type->code () == TYPE_CODE_ARRAY
1996 || type->code () == TYPE_CODE_PTR
1997 || type->code () == TYPE_CODE_UNION
1998 || type->code () == TYPE_CODE_STRUCT)
1999 {
2000 if (bfd_arch == bfd_arch_ia64
2001 || (regnum >= gdbarch_num_regs (gdbarch)
2002 && (bfd_arch == bfd_arch_xtensa
2003 || bfd_arch == bfd_arch_bfin
2004 || bfd_arch == bfd_arch_m32c
2005 /* m68hc11 pseudo registers are in memory. */
2006 || bfd_arch == bfd_arch_m68hc11
2007 || bfd_arch == bfd_arch_m68hc12
2008 || bfd_arch == bfd_arch_s390))
2009 || (bfd_arch == bfd_arch_frv
2010 /* FRV pseudo registers except iacc0. */
2011 && regnum > gdbarch_num_regs (gdbarch)))
2012 {
2013 /* Skip setting the expected values for some architecture
2014 registers. */
2015 }
2016 else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
2017 {
2018 /* RL78_PC_REGNUM */
2019 for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
2020 expected[j] = j;
2021 }
2022 else
2023 {
2024 for (auto j = 0; j < register_size (gdbarch, regnum); j++)
2025 expected[j] = j;
2026 }
2027 }
2028 else if (type->code () == TYPE_CODE_FLAGS)
2029 {
2030 /* No idea how to test flags. */
2031 continue;
2032 }
2033 else
2034 {
2035 /* If we don't know how to create the expected value for the
2036 this type, make it fail. */
2037 SELF_CHECK (0);
2038 }
2039
2040 readwrite.cooked_write (regnum, expected.data ());
2041
2042 SELF_CHECK (readwrite.cooked_read (regnum, buf.data ()) == REG_VALID);
2043 SELF_CHECK (expected == buf);
2044 }
2045 }
2046
2047 /* Verify that when two threads with the same ptid exist (from two different
2048 targets) and one of them changes ptid, we only update the appropriate
2049 regcaches. */
2050
2051 static void
2052 regcache_thread_ptid_changed ()
2053 {
2054 /* This test relies on the global regcache list to initially be empty. */
2055 registers_changed ();
2056
2057 /* Any arch will do. */
2058 gdbarch *arch = current_inferior ()->gdbarch;
2059
2060 /* Prepare two targets with one thread each, with the same ptid. */
2061 scoped_mock_context<test_target_ops> target1 (arch);
2062 scoped_mock_context<test_target_ops> target2 (arch);
2063
2064 ptid_t old_ptid (111, 222);
2065 ptid_t new_ptid (111, 333);
2066
2067 target1.mock_inferior.pid = old_ptid.pid ();
2068 target1.mock_thread.ptid = old_ptid;
2069 target1.mock_inferior.ptid_thread_map.clear ();
2070 target1.mock_inferior.ptid_thread_map[old_ptid] = &target1.mock_thread;
2071
2072 target2.mock_inferior.pid = old_ptid.pid ();
2073 target2.mock_thread.ptid = old_ptid;
2074 target2.mock_inferior.ptid_thread_map.clear ();
2075 target2.mock_inferior.ptid_thread_map[old_ptid] = &target2.mock_thread;
2076
2077 gdb_assert (regcaches.empty ());
2078
2079 /* Populate the regcaches container. */
2080 get_thread_arch_aspace_regcache (&target1.mock_target, old_ptid, arch,
2081 nullptr);
2082 get_thread_arch_aspace_regcache (&target2.mock_target, old_ptid, arch,
2083 nullptr);
2084
2085 gdb_assert (regcaches.size () == 2);
2086 gdb_assert (regcache_count (&target1.mock_target, old_ptid) == 1);
2087 gdb_assert (regcache_count (&target1.mock_target, new_ptid) == 0);
2088 gdb_assert (regcache_count (&target2.mock_target, old_ptid) == 1);
2089 gdb_assert (regcache_count (&target2.mock_target, new_ptid) == 0);
2090
2091 thread_change_ptid (&target1.mock_target, old_ptid, new_ptid);
2092
2093 gdb_assert (regcaches.size () == 2);
2094 gdb_assert (regcache_count (&target1.mock_target, old_ptid) == 0);
2095 gdb_assert (regcache_count (&target1.mock_target, new_ptid) == 1);
2096 gdb_assert (regcache_count (&target2.mock_target, old_ptid) == 1);
2097 gdb_assert (regcache_count (&target2.mock_target, new_ptid) == 0);
2098
2099 /* Leave the regcache list empty. */
2100 registers_changed ();
2101 gdb_assert (regcaches.empty ());
2102 }
2103
2104 } // namespace selftests
2105 #endif /* GDB_SELF_TEST */
2106
2107 void _initialize_regcache ();
2108 void
2109 _initialize_regcache ()
2110 {
2111 struct cmd_list_element *c;
2112
2113 regcache_descr_handle
2114 = gdbarch_data_register_post_init (init_regcache_descr);
2115
2116 gdb::observers::target_changed.attach (regcache_observer_target_changed,
2117 "regcache");
2118 gdb::observers::thread_ptid_changed.attach (regcache_thread_ptid_changed,
2119 "regcache");
2120
2121 cmd_list_element *maintenance_flush_register_cache_cmd
2122 = add_cmd ("register-cache", class_maintenance, reg_flush_command,
2123 _("Force gdb to flush its register and frame cache."),
2124 &maintenanceflushlist);
2125 c = add_com_alias ("flushregs", maintenance_flush_register_cache_cmd,
2126 class_maintenance, 0);
2127 deprecate_cmd (c, "maintenance flush register-cache");
2128
2129 #if GDB_SELF_TEST
2130 selftests::register_test ("get_thread_arch_aspace_regcache",
2131 selftests::get_thread_arch_aspace_regcache_test);
2132 selftests::register_test ("registers_changed_ptid_all",
2133 selftests::registers_changed_ptid_all_test);
2134 selftests::register_test ("registers_changed_ptid_target",
2135 selftests::registers_changed_ptid_target_test);
2136 selftests::register_test ("registers_changed_ptid_target_pid",
2137 selftests::registers_changed_ptid_target_pid_test);
2138 selftests::register_test ("registers_changed_ptid_target_ptid",
2139 selftests::registers_changed_ptid_target_ptid_test);
2140
2141 selftests::register_test_foreach_arch ("regcache::cooked_read_test",
2142 selftests::cooked_read_test);
2143 selftests::register_test_foreach_arch ("regcache::cooked_write_test",
2144 selftests::cooked_write_test);
2145 selftests::register_test ("regcache_thread_ptid_changed",
2146 selftests::regcache_thread_ptid_changed);
2147 #endif
2148 }