4a68390c5f7c2e31ee1e7ce4f303fa84375c3f42
[deliverable/binutils-gdb.git] / gdb / regcache.c
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2
3 Copyright (C) 1986-2019 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 "gdbarch.h"
26 #include "gdbcmd.h"
27 #include "regcache.h"
28 #include "reggroups.h"
29 #include "observable.h"
30 #include "regset.h"
31 #include <forward_list>
32
33 /*
34 * DATA STRUCTURE
35 *
36 * Here is the actual register cache.
37 */
38
39 /* Per-architecture object describing the layout of a register cache.
40 Computed once when the architecture is created. */
41
42 struct gdbarch_data *regcache_descr_handle;
43
44 struct regcache_descr
45 {
46 /* The architecture this descriptor belongs to. */
47 struct gdbarch *gdbarch;
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;
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;
63 long sizeof_cooked_registers;
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;
70 long *sizeof_register;
71
72 /* Cached table containing the type of each register. */
73 struct type **register_type;
74 };
75
76 static void *
77 init_regcache_descr (struct gdbarch *gdbarch)
78 {
79 int i;
80 struct regcache_descr *descr;
81 gdb_assert (gdbarch != NULL);
82
83 /* Create an initial, zero filled, table. */
84 descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr);
85 descr->gdbarch = gdbarch;
86
87 /* Total size of the register space. The raw registers are mapped
88 directly onto the raw register cache while the pseudo's are
89 either mapped onto raw-registers or memory. */
90 descr->nr_cooked_registers = gdbarch_num_cooked_regs (gdbarch);
91
92 /* Fill in a table of register types. */
93 descr->register_type
94 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
95 struct type *);
96 for (i = 0; i < descr->nr_cooked_registers; i++)
97 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
98
99 /* Construct a strictly RAW register cache. Don't allow pseudo's
100 into the register cache. */
101
102 /* Lay out the register cache.
103
104 NOTE: cagney/2002-05-22: Only register_type() is used when
105 constructing the register cache. It is assumed that the
106 register's raw size, virtual size and type length are all the
107 same. */
108
109 {
110 long offset = 0;
111
112 descr->sizeof_register
113 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
114 descr->register_offset
115 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
116 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
117 {
118 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
119 descr->register_offset[i] = offset;
120 offset += descr->sizeof_register[i];
121 }
122 /* Set the real size of the raw register cache buffer. */
123 descr->sizeof_raw_registers = offset;
124
125 for (; i < descr->nr_cooked_registers; i++)
126 {
127 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
128 descr->register_offset[i] = offset;
129 offset += descr->sizeof_register[i];
130 }
131 /* Set the real size of the readonly register cache buffer. */
132 descr->sizeof_cooked_registers = offset;
133 }
134
135 return descr;
136 }
137
138 static struct regcache_descr *
139 regcache_descr (struct gdbarch *gdbarch)
140 {
141 return (struct regcache_descr *) gdbarch_data (gdbarch,
142 regcache_descr_handle);
143 }
144
145 /* Utility functions returning useful register attributes stored in
146 the regcache descr. */
147
148 struct type *
149 register_type (struct gdbarch *gdbarch, int regnum)
150 {
151 struct regcache_descr *descr = regcache_descr (gdbarch);
152
153 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
154 return descr->register_type[regnum];
155 }
156
157 /* Utility functions returning useful register attributes stored in
158 the regcache descr. */
159
160 int
161 register_size (struct gdbarch *gdbarch, int regnum)
162 {
163 struct regcache_descr *descr = regcache_descr (gdbarch);
164 int size;
165
166 gdb_assert (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch));
167 size = descr->sizeof_register[regnum];
168 return size;
169 }
170
171 /* See common/common-regcache.h. */
172
173 int
174 regcache_register_size (const struct regcache *regcache, int n)
175 {
176 return register_size (regcache->arch (), n);
177 }
178
179 reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
180 : m_has_pseudo (has_pseudo)
181 {
182 gdb_assert (gdbarch != NULL);
183 m_descr = regcache_descr (gdbarch);
184
185 if (has_pseudo)
186 {
187 m_registers.reset (new gdb_byte[m_descr->sizeof_cooked_registers] ());
188 m_register_status.reset
189 (new register_status[m_descr->nr_cooked_registers] ());
190 }
191 else
192 {
193 m_registers.reset (new gdb_byte[m_descr->sizeof_raw_registers] ());
194 m_register_status.reset
195 (new register_status[gdbarch_num_regs (gdbarch)] ());
196 }
197 }
198
199 regcache::regcache (gdbarch *gdbarch, const address_space *aspace_)
200 /* The register buffers. A read/write register cache can only hold
201 [0 .. gdbarch_num_regs). */
202 : detached_regcache (gdbarch, false), m_aspace (aspace_)
203 {
204 m_ptid = minus_one_ptid;
205 }
206
207 readonly_detached_regcache::readonly_detached_regcache (regcache &src)
208 : readonly_detached_regcache (src.arch (),
209 [&src] (int regnum, gdb_byte *buf)
210 {
211 return src.cooked_read (regnum, buf);
212 })
213 {
214 }
215
216 gdbarch *
217 reg_buffer::arch () const
218 {
219 return m_descr->gdbarch;
220 }
221
222 /* Cleanup class for invalidating a register. */
223
224 class regcache_invalidator
225 {
226 public:
227
228 regcache_invalidator (struct regcache *regcache, int regnum)
229 : m_regcache (regcache),
230 m_regnum (regnum)
231 {
232 }
233
234 ~regcache_invalidator ()
235 {
236 if (m_regcache != nullptr)
237 m_regcache->invalidate (m_regnum);
238 }
239
240 DISABLE_COPY_AND_ASSIGN (regcache_invalidator);
241
242 void release ()
243 {
244 m_regcache = nullptr;
245 }
246
247 private:
248
249 struct regcache *m_regcache;
250 int m_regnum;
251 };
252
253 /* Return a pointer to register REGNUM's buffer cache. */
254
255 gdb_byte *
256 reg_buffer::register_buffer (int regnum) const
257 {
258 return m_registers.get () + m_descr->register_offset[regnum];
259 }
260
261 void
262 reg_buffer::save (register_read_ftype cooked_read)
263 {
264 struct gdbarch *gdbarch = m_descr->gdbarch;
265 int regnum;
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 (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
277 {
278 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
279 {
280 gdb_byte *dst_buf = register_buffer (regnum);
281 enum 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, 0, register_size (gdbarch, regnum));
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 common/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 /* Global structure containing the current regcache. */
346
347 /* NOTE: this is a write-through cache. There is no "dirty" bit for
348 recording if the register values have been changed (eg. by the
349 user). Therefore all registers must be written back to the
350 target when appropriate. */
351 std::forward_list<regcache *> regcache::current_regcache;
352
353 struct regcache *
354 get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch,
355 struct address_space *aspace)
356 {
357 for (const auto &regcache : regcache::current_regcache)
358 if (regcache->ptid () == ptid && regcache->arch () == gdbarch)
359 return regcache;
360
361 regcache *new_regcache = new regcache (gdbarch, aspace);
362
363 regcache::current_regcache.push_front (new_regcache);
364 new_regcache->set_ptid (ptid);
365
366 return new_regcache;
367 }
368
369 struct regcache *
370 get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch)
371 {
372 address_space *aspace = target_thread_address_space (ptid);
373
374 return get_thread_arch_aspace_regcache (ptid, gdbarch, aspace);
375 }
376
377 static ptid_t current_thread_ptid;
378 static struct gdbarch *current_thread_arch;
379
380 struct regcache *
381 get_thread_regcache (ptid_t ptid)
382 {
383 if (!current_thread_arch || current_thread_ptid != ptid)
384 {
385 current_thread_ptid = ptid;
386 current_thread_arch = target_thread_architecture (ptid);
387 }
388
389 return get_thread_arch_regcache (ptid, current_thread_arch);
390 }
391
392 /* See regcache.h. */
393
394 struct regcache *
395 get_thread_regcache (thread_info *thread)
396 {
397 return get_thread_regcache (thread->ptid);
398 }
399
400 struct regcache *
401 get_current_regcache (void)
402 {
403 return get_thread_regcache (inferior_thread ());
404 }
405
406 /* See common/common-regcache.h. */
407
408 struct regcache *
409 get_thread_regcache_for_ptid (ptid_t ptid)
410 {
411 return get_thread_regcache (ptid);
412 }
413
414 /* Observer for the target_changed event. */
415
416 static void
417 regcache_observer_target_changed (struct target_ops *target)
418 {
419 registers_changed ();
420 }
421
422 /* Update global variables old ptids to hold NEW_PTID if they were
423 holding OLD_PTID. */
424 void
425 regcache::regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
426 {
427 for (auto &regcache : regcache::current_regcache)
428 {
429 if (regcache->ptid () == old_ptid)
430 regcache->set_ptid (new_ptid);
431 }
432 }
433
434 /* Low level examining and depositing of registers.
435
436 The caller is responsible for making sure that the inferior is
437 stopped before calling the fetching routines, or it will get
438 garbage. (a change from GDB version 3, in which the caller got the
439 value from the last stop). */
440
441 /* REGISTERS_CHANGED ()
442
443 Indicate that registers may have changed, so invalidate the cache. */
444
445 void
446 registers_changed_ptid (ptid_t ptid)
447 {
448 for (auto oit = regcache::current_regcache.before_begin (),
449 it = std::next (oit);
450 it != regcache::current_regcache.end ();
451 )
452 {
453 if ((*it)->ptid ().matches (ptid))
454 {
455 delete *it;
456 it = regcache::current_regcache.erase_after (oit);
457 }
458 else
459 oit = it++;
460 }
461
462 if (current_thread_ptid.matches (ptid))
463 {
464 current_thread_ptid = null_ptid;
465 current_thread_arch = NULL;
466 }
467
468 if (inferior_ptid.matches (ptid))
469 {
470 /* We just deleted the regcache of the current thread. Need to
471 forget about any frames we have cached, too. */
472 reinit_frame_cache ();
473 }
474 }
475
476 /* See regcache.h. */
477
478 void
479 registers_changed_thread (thread_info *thread)
480 {
481 registers_changed_ptid (thread->ptid);
482 }
483
484 void
485 registers_changed (void)
486 {
487 registers_changed_ptid (minus_one_ptid);
488
489 /* Force cleanup of any alloca areas if using C alloca instead of
490 a builtin alloca. This particular call is used to clean up
491 areas allocated by low level target code which may build up
492 during lengthy interactions between gdb and the target before
493 gdb gives control to the user (ie watchpoints). */
494 alloca (0);
495 }
496
497 void
498 regcache::raw_update (int regnum)
499 {
500 assert_regnum (regnum);
501
502 /* Make certain that the register cache is up-to-date with respect
503 to the current thread. This switching shouldn't be necessary
504 only there is still only one target side register cache. Sigh!
505 On the bright side, at least there is a regcache object. */
506
507 if (get_register_status (regnum) == REG_UNKNOWN)
508 {
509 target_fetch_registers (this, regnum);
510
511 /* A number of targets can't access the whole set of raw
512 registers (because the debug API provides no means to get at
513 them). */
514 if (m_register_status[regnum] == REG_UNKNOWN)
515 m_register_status[regnum] = REG_UNAVAILABLE;
516 }
517 }
518
519 enum register_status
520 readable_regcache::raw_read (int regnum, gdb_byte *buf)
521 {
522 gdb_assert (buf != NULL);
523 raw_update (regnum);
524
525 if (m_register_status[regnum] != REG_VALID)
526 memset (buf, 0, m_descr->sizeof_register[regnum]);
527 else
528 memcpy (buf, register_buffer (regnum),
529 m_descr->sizeof_register[regnum]);
530
531 return m_register_status[regnum];
532 }
533
534 enum register_status
535 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
536 {
537 gdb_assert (regcache != NULL);
538 return regcache->raw_read (regnum, val);
539 }
540
541 template<typename T, typename>
542 enum register_status
543 readable_regcache::raw_read (int regnum, T *val)
544 {
545 gdb_byte *buf;
546 enum register_status status;
547
548 assert_regnum (regnum);
549 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
550 status = raw_read (regnum, buf);
551 if (status == REG_VALID)
552 *val = extract_integer<T> (buf,
553 m_descr->sizeof_register[regnum],
554 gdbarch_byte_order (m_descr->gdbarch));
555 else
556 *val = 0;
557 return status;
558 }
559
560 enum register_status
561 regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
562 ULONGEST *val)
563 {
564 gdb_assert (regcache != NULL);
565 return regcache->raw_read (regnum, val);
566 }
567
568 void
569 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
570 {
571 gdb_assert (regcache != NULL);
572 regcache->raw_write (regnum, val);
573 }
574
575 template<typename T, typename>
576 void
577 regcache::raw_write (int regnum, T val)
578 {
579 gdb_byte *buf;
580
581 assert_regnum (regnum);
582 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
583 store_integer (buf, m_descr->sizeof_register[regnum],
584 gdbarch_byte_order (m_descr->gdbarch), val);
585 raw_write (regnum, buf);
586 }
587
588 void
589 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
590 ULONGEST val)
591 {
592 gdb_assert (regcache != NULL);
593 regcache->raw_write (regnum, val);
594 }
595
596 LONGEST
597 regcache_raw_get_signed (struct regcache *regcache, int regnum)
598 {
599 LONGEST value;
600 enum register_status status;
601
602 status = regcache_raw_read_signed (regcache, regnum, &value);
603 if (status == REG_UNAVAILABLE)
604 throw_error (NOT_AVAILABLE_ERROR,
605 _("Register %d is not available"), regnum);
606 return value;
607 }
608
609 enum register_status
610 readable_regcache::cooked_read (int regnum, gdb_byte *buf)
611 {
612 gdb_assert (regnum >= 0);
613 gdb_assert (regnum < m_descr->nr_cooked_registers);
614 if (regnum < num_raw_registers ())
615 return raw_read (regnum, buf);
616 else if (m_has_pseudo
617 && m_register_status[regnum] != REG_UNKNOWN)
618 {
619 if (m_register_status[regnum] == REG_VALID)
620 memcpy (buf, register_buffer (regnum),
621 m_descr->sizeof_register[regnum]);
622 else
623 memset (buf, 0, m_descr->sizeof_register[regnum]);
624
625 return m_register_status[regnum];
626 }
627 else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
628 {
629 struct value *mark, *computed;
630 enum register_status result = REG_VALID;
631
632 mark = value_mark ();
633
634 computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch,
635 this, regnum);
636 if (value_entirely_available (computed))
637 memcpy (buf, value_contents_raw (computed),
638 m_descr->sizeof_register[regnum]);
639 else
640 {
641 memset (buf, 0, m_descr->sizeof_register[regnum]);
642 result = REG_UNAVAILABLE;
643 }
644
645 value_free_to_mark (mark);
646
647 return result;
648 }
649 else
650 return gdbarch_pseudo_register_read (m_descr->gdbarch, this,
651 regnum, buf);
652 }
653
654 struct value *
655 readable_regcache::cooked_read_value (int regnum)
656 {
657 gdb_assert (regnum >= 0);
658 gdb_assert (regnum < m_descr->nr_cooked_registers);
659
660 if (regnum < num_raw_registers ()
661 || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
662 || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
663 {
664 struct value *result;
665
666 result = allocate_value (register_type (m_descr->gdbarch, regnum));
667 VALUE_LVAL (result) = lval_register;
668 VALUE_REGNUM (result) = regnum;
669
670 /* It is more efficient in general to do this delegation in this
671 direction than in the other one, even though the value-based
672 API is preferred. */
673 if (cooked_read (regnum,
674 value_contents_raw (result)) == REG_UNAVAILABLE)
675 mark_value_bytes_unavailable (result, 0,
676 TYPE_LENGTH (value_type (result)));
677
678 return result;
679 }
680 else
681 return gdbarch_pseudo_register_read_value (m_descr->gdbarch,
682 this, regnum);
683 }
684
685 enum register_status
686 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
687 LONGEST *val)
688 {
689 gdb_assert (regcache != NULL);
690 return regcache->cooked_read (regnum, val);
691 }
692
693 template<typename T, typename>
694 enum register_status
695 readable_regcache::cooked_read (int regnum, T *val)
696 {
697 enum register_status status;
698 gdb_byte *buf;
699
700 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
701 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
702 status = cooked_read (regnum, buf);
703 if (status == REG_VALID)
704 *val = extract_integer<T> (buf, m_descr->sizeof_register[regnum],
705 gdbarch_byte_order (m_descr->gdbarch));
706 else
707 *val = 0;
708 return status;
709 }
710
711 enum register_status
712 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
713 ULONGEST *val)
714 {
715 gdb_assert (regcache != NULL);
716 return regcache->cooked_read (regnum, val);
717 }
718
719 void
720 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
721 LONGEST val)
722 {
723 gdb_assert (regcache != NULL);
724 regcache->cooked_write (regnum, val);
725 }
726
727 template<typename T, typename>
728 void
729 regcache::cooked_write (int regnum, T val)
730 {
731 gdb_byte *buf;
732
733 gdb_assert (regnum >=0 && regnum < m_descr->nr_cooked_registers);
734 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
735 store_integer (buf, m_descr->sizeof_register[regnum],
736 gdbarch_byte_order (m_descr->gdbarch), val);
737 cooked_write (regnum, buf);
738 }
739
740 void
741 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
742 ULONGEST val)
743 {
744 gdb_assert (regcache != NULL);
745 regcache->cooked_write (regnum, val);
746 }
747
748 void
749 regcache::raw_write (int regnum, const gdb_byte *buf)
750 {
751
752 gdb_assert (buf != NULL);
753 assert_regnum (regnum);
754
755 /* On the sparc, writing %g0 is a no-op, so we don't even want to
756 change the registers array if something writes to this register. */
757 if (gdbarch_cannot_store_register (arch (), regnum))
758 return;
759
760 /* If we have a valid copy of the register, and new value == old
761 value, then don't bother doing the actual store. */
762 if (get_register_status (regnum) == REG_VALID
763 && (memcmp (register_buffer (regnum), buf,
764 m_descr->sizeof_register[regnum]) == 0))
765 return;
766
767 target_prepare_to_store (this);
768 raw_supply (regnum, buf);
769
770 /* Invalidate the register after it is written, in case of a
771 failure. */
772 regcache_invalidator invalidator (this, regnum);
773
774 target_store_registers (this, regnum);
775
776 /* The target did not throw an error so we can discard invalidating
777 the register. */
778 invalidator.release ();
779 }
780
781 void
782 regcache::cooked_write (int regnum, const gdb_byte *buf)
783 {
784 gdb_assert (regnum >= 0);
785 gdb_assert (regnum < m_descr->nr_cooked_registers);
786 if (regnum < num_raw_registers ())
787 raw_write (regnum, buf);
788 else
789 gdbarch_pseudo_register_write (m_descr->gdbarch, this,
790 regnum, buf);
791 }
792
793 /* See regcache.h. */
794
795 enum register_status
796 readable_regcache::read_part (int regnum, int offset, int len,
797 gdb_byte *out, bool is_raw)
798 {
799 int reg_size = register_size (arch (), regnum);
800
801 gdb_assert (out != NULL);
802 gdb_assert (offset >= 0 && offset <= reg_size);
803 gdb_assert (len >= 0 && offset + len <= reg_size);
804
805 if (offset == 0 && len == 0)
806 {
807 /* Nothing to do. */
808 return REG_VALID;
809 }
810
811 if (offset == 0 && len == reg_size)
812 {
813 /* Read the full register. */
814 return (is_raw) ? raw_read (regnum, out) : cooked_read (regnum, out);
815 }
816
817 enum register_status status;
818 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
819
820 /* Read full register to buffer. */
821 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
822 if (status != REG_VALID)
823 return status;
824
825 /* Copy out. */
826 memcpy (out, reg + offset, len);
827 return REG_VALID;
828 }
829
830 /* See regcache.h. */
831
832 void
833 reg_buffer::raw_collect_part (int regnum, int offset, int len,
834 gdb_byte *out) const
835 {
836 int reg_size = register_size (arch (), regnum);
837
838 gdb_assert (out != nullptr);
839 gdb_assert (offset >= 0 && offset <= reg_size);
840 gdb_assert (len >= 0 && offset + len <= reg_size);
841
842 if (offset == 0 && len == 0)
843 {
844 /* Nothing to do. */
845 return;
846 }
847
848 if (offset == 0 && len == reg_size)
849 {
850 /* Collect the full register. */
851 return raw_collect (regnum, out);
852 }
853
854 /* Read to buffer, then write out. */
855 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
856 raw_collect (regnum, reg);
857 memcpy (out, reg + offset, len);
858 }
859
860 /* See regcache.h. */
861
862 enum register_status
863 regcache::write_part (int regnum, int offset, int len,
864 const gdb_byte *in, bool is_raw)
865 {
866 int reg_size = register_size (arch (), regnum);
867
868 gdb_assert (in != NULL);
869 gdb_assert (offset >= 0 && offset <= reg_size);
870 gdb_assert (len >= 0 && offset + len <= reg_size);
871
872 if (offset == 0 && len == 0)
873 {
874 /* Nothing to do. */
875 return REG_VALID;
876 }
877
878 if (offset == 0 && len == reg_size)
879 {
880 /* Write the full register. */
881 (is_raw) ? raw_write (regnum, in) : cooked_write (regnum, in);
882 return REG_VALID;
883 }
884
885 enum register_status status;
886 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
887
888 /* Read existing register to buffer. */
889 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
890 if (status != REG_VALID)
891 return status;
892
893 /* Update buffer, then write back to regcache. */
894 memcpy (reg + offset, in, len);
895 is_raw ? raw_write (regnum, reg) : cooked_write (regnum, reg);
896 return REG_VALID;
897 }
898
899 /* See regcache.h. */
900
901 void
902 reg_buffer::raw_supply_part (int regnum, int offset, int len,
903 const gdb_byte *in)
904 {
905 int reg_size = register_size (arch (), regnum);
906
907 gdb_assert (in != nullptr);
908 gdb_assert (offset >= 0 && offset <= reg_size);
909 gdb_assert (len >= 0 && offset + len <= reg_size);
910
911 if (offset == 0 && len == 0)
912 {
913 /* Nothing to do. */
914 return;
915 }
916
917 if (offset == 0 && len == reg_size)
918 {
919 /* Supply the full register. */
920 return raw_supply (regnum, in);
921 }
922
923 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
924
925 /* Read existing value to buffer. */
926 raw_collect (regnum, reg);
927
928 /* Write to buffer, then write out. */
929 memcpy (reg + offset, in, len);
930 raw_supply (regnum, reg);
931 }
932
933 enum register_status
934 readable_regcache::raw_read_part (int regnum, int offset, int len,
935 gdb_byte *buf)
936 {
937 assert_regnum (regnum);
938 return read_part (regnum, offset, len, buf, true);
939 }
940
941 /* See regcache.h. */
942
943 void
944 regcache::raw_write_part (int regnum, int offset, int len,
945 const gdb_byte *buf)
946 {
947 assert_regnum (regnum);
948 write_part (regnum, offset, len, buf, true);
949 }
950
951 /* See regcache.h. */
952
953 enum register_status
954 readable_regcache::cooked_read_part (int regnum, int offset, int len,
955 gdb_byte *buf)
956 {
957 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
958 return read_part (regnum, offset, len, buf, false);
959 }
960
961 /* See regcache.h. */
962
963 void
964 regcache::cooked_write_part (int regnum, int offset, int len,
965 const gdb_byte *buf)
966 {
967 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
968 write_part (regnum, offset, len, buf, false);
969 }
970
971 /* See common/common-regcache.h. */
972
973 void
974 reg_buffer::raw_supply (int regnum, const void *buf)
975 {
976 void *regbuf;
977 size_t size;
978
979 assert_regnum (regnum);
980
981 regbuf = register_buffer (regnum);
982 size = m_descr->sizeof_register[regnum];
983
984 if (buf)
985 {
986 memcpy (regbuf, buf, size);
987 m_register_status[regnum] = REG_VALID;
988 }
989 else
990 {
991 /* This memset not strictly necessary, but better than garbage
992 in case the register value manages to escape somewhere (due
993 to a bug, no less). */
994 memset (regbuf, 0, size);
995 m_register_status[regnum] = REG_UNAVAILABLE;
996 }
997 }
998
999 /* See regcache.h. */
1000
1001 void
1002 reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr,
1003 int addr_len, bool is_signed)
1004 {
1005 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1006 gdb_byte *regbuf;
1007 size_t regsize;
1008
1009 assert_regnum (regnum);
1010
1011 regbuf = register_buffer (regnum);
1012 regsize = m_descr->sizeof_register[regnum];
1013
1014 copy_integer_to_size (regbuf, regsize, addr, addr_len, is_signed,
1015 byte_order);
1016 m_register_status[regnum] = REG_VALID;
1017 }
1018
1019 /* See regcache.h. */
1020
1021 void
1022 reg_buffer::raw_supply_zeroed (int regnum)
1023 {
1024 void *regbuf;
1025 size_t size;
1026
1027 assert_regnum (regnum);
1028
1029 regbuf = register_buffer (regnum);
1030 size = m_descr->sizeof_register[regnum];
1031
1032 memset (regbuf, 0, size);
1033 m_register_status[regnum] = REG_VALID;
1034 }
1035
1036 /* See common/common-regcache.h. */
1037
1038 void
1039 reg_buffer::raw_collect (int regnum, void *buf) const
1040 {
1041 const void *regbuf;
1042 size_t size;
1043
1044 gdb_assert (buf != NULL);
1045 assert_regnum (regnum);
1046
1047 regbuf = register_buffer (regnum);
1048 size = m_descr->sizeof_register[regnum];
1049 memcpy (buf, regbuf, size);
1050 }
1051
1052 /* See regcache.h. */
1053
1054 void
1055 reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
1056 bool is_signed) const
1057 {
1058 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
1059 const gdb_byte *regbuf;
1060 size_t regsize;
1061
1062 assert_regnum (regnum);
1063
1064 regbuf = register_buffer (regnum);
1065 regsize = m_descr->sizeof_register[regnum];
1066
1067 copy_integer_to_size (addr, addr_len, regbuf, regsize, is_signed,
1068 byte_order);
1069 }
1070
1071 /* See regcache.h. */
1072
1073 void
1074 regcache::transfer_regset_register (struct regcache *out_regcache, int regnum,
1075 const gdb_byte *in_buf, gdb_byte *out_buf,
1076 int slot_size, int offs) const
1077 {
1078 struct gdbarch *gdbarch = arch ();
1079 int reg_size = std::min (register_size (gdbarch, regnum), slot_size);
1080
1081 /* Use part versions and reg_size to prevent possible buffer overflows when
1082 accessing the regcache. */
1083
1084 if (out_buf != nullptr)
1085 {
1086 raw_collect_part (regnum, 0, reg_size, out_buf + offs);
1087
1088 /* Ensure any additional space is cleared. */
1089 if (slot_size > reg_size)
1090 memset (out_buf + offs + reg_size, 0, slot_size - reg_size);
1091 }
1092 else if (in_buf != nullptr)
1093 out_regcache->raw_supply_part (regnum, 0, reg_size, in_buf + offs);
1094 else
1095 {
1096 /* Invalidate the register. */
1097 out_regcache->raw_supply (regnum, nullptr);
1098 }
1099 }
1100
1101 /* See regcache.h. */
1102
1103 void
1104 regcache::transfer_regset (const struct regset *regset,
1105 struct regcache *out_regcache,
1106 int regnum, const gdb_byte *in_buf,
1107 gdb_byte *out_buf, size_t size) const
1108 {
1109 const struct regcache_map_entry *map;
1110 int offs = 0, count;
1111
1112 for (map = (const struct regcache_map_entry *) regset->regmap;
1113 (count = map->count) != 0;
1114 map++)
1115 {
1116 int regno = map->regno;
1117 int slot_size = map->size;
1118
1119 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
1120 slot_size = m_descr->sizeof_register[regno];
1121
1122 if (regno == REGCACHE_MAP_SKIP
1123 || (regnum != -1
1124 && (regnum < regno || regnum >= regno + count)))
1125 offs += count * slot_size;
1126
1127 else if (regnum == -1)
1128 for (; count--; regno++, offs += slot_size)
1129 {
1130 if (offs + slot_size > size)
1131 break;
1132
1133 transfer_regset_register (out_regcache, regno, in_buf, out_buf,
1134 slot_size, offs);
1135 }
1136 else
1137 {
1138 /* Transfer a single register and return. */
1139 offs += (regnum - regno) * slot_size;
1140 if (offs + slot_size > size)
1141 return;
1142
1143 transfer_regset_register (out_regcache, regnum, in_buf, out_buf,
1144 slot_size, offs);
1145 return;
1146 }
1147 }
1148 }
1149
1150 /* Supply register REGNUM from BUF to REGCACHE, using the register map
1151 in REGSET. If REGNUM is -1, do this for all registers in REGSET.
1152 If BUF is NULL, set the register(s) to "unavailable" status. */
1153
1154 void
1155 regcache_supply_regset (const struct regset *regset,
1156 struct regcache *regcache,
1157 int regnum, const void *buf, size_t size)
1158 {
1159 regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size);
1160 }
1161
1162 void
1163 regcache::supply_regset (const struct regset *regset,
1164 int regnum, const void *buf, size_t size)
1165 {
1166 transfer_regset (regset, this, regnum, (const gdb_byte *) buf, nullptr, size);
1167 }
1168
1169 /* Collect register REGNUM from REGCACHE to BUF, using the register
1170 map in REGSET. If REGNUM is -1, do this for all registers in
1171 REGSET. */
1172
1173 void
1174 regcache_collect_regset (const struct regset *regset,
1175 const struct regcache *regcache,
1176 int regnum, void *buf, size_t size)
1177 {
1178 regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size);
1179 }
1180
1181 void
1182 regcache::collect_regset (const struct regset *regset,
1183 int regnum, void *buf, size_t size) const
1184 {
1185 transfer_regset (regset, nullptr, regnum, nullptr, (gdb_byte *) buf, size);
1186 }
1187
1188 /* See common/common-regcache.h. */
1189
1190 bool
1191 reg_buffer::raw_compare (int regnum, const void *buf, int offset) const
1192 {
1193 gdb_assert (buf != NULL);
1194 assert_regnum (regnum);
1195
1196 const char *regbuf = (const char *) register_buffer (regnum);
1197 size_t size = m_descr->sizeof_register[regnum];
1198 gdb_assert (size >= offset);
1199
1200 return (memcmp (buf, regbuf + offset, size - offset) == 0);
1201 }
1202
1203 /* Special handling for register PC. */
1204
1205 CORE_ADDR
1206 regcache_read_pc (struct regcache *regcache)
1207 {
1208 struct gdbarch *gdbarch = regcache->arch ();
1209
1210 CORE_ADDR pc_val;
1211
1212 if (gdbarch_read_pc_p (gdbarch))
1213 pc_val = gdbarch_read_pc (gdbarch, regcache);
1214 /* Else use per-frame method on get_current_frame. */
1215 else if (gdbarch_pc_regnum (gdbarch) >= 0)
1216 {
1217 ULONGEST raw_val;
1218
1219 if (regcache_cooked_read_unsigned (regcache,
1220 gdbarch_pc_regnum (gdbarch),
1221 &raw_val) == REG_UNAVAILABLE)
1222 throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
1223
1224 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
1225 }
1226 else
1227 internal_error (__FILE__, __LINE__,
1228 _("regcache_read_pc: Unable to find PC"));
1229 return pc_val;
1230 }
1231
1232 void
1233 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
1234 {
1235 struct gdbarch *gdbarch = regcache->arch ();
1236
1237 if (gdbarch_write_pc_p (gdbarch))
1238 gdbarch_write_pc (gdbarch, regcache, pc);
1239 else if (gdbarch_pc_regnum (gdbarch) >= 0)
1240 regcache_cooked_write_unsigned (regcache,
1241 gdbarch_pc_regnum (gdbarch), pc);
1242 else
1243 internal_error (__FILE__, __LINE__,
1244 _("regcache_write_pc: Unable to update PC"));
1245
1246 /* Writing the PC (for instance, from "load") invalidates the
1247 current frame. */
1248 reinit_frame_cache ();
1249 }
1250
1251 int
1252 reg_buffer::num_raw_registers () const
1253 {
1254 return gdbarch_num_regs (arch ());
1255 }
1256
1257 void
1258 regcache::debug_print_register (const char *func, int regno)
1259 {
1260 struct gdbarch *gdbarch = arch ();
1261
1262 fprintf_unfiltered (gdb_stdlog, "%s ", func);
1263 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
1264 && gdbarch_register_name (gdbarch, regno) != NULL
1265 && gdbarch_register_name (gdbarch, regno)[0] != '\0')
1266 fprintf_unfiltered (gdb_stdlog, "(%s)",
1267 gdbarch_register_name (gdbarch, regno));
1268 else
1269 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1270 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1271 {
1272 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1273 int size = register_size (gdbarch, regno);
1274 gdb_byte *buf = register_buffer (regno);
1275
1276 fprintf_unfiltered (gdb_stdlog, " = ");
1277 for (int i = 0; i < size; i++)
1278 {
1279 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1280 }
1281 if (size <= sizeof (LONGEST))
1282 {
1283 ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
1284
1285 fprintf_unfiltered (gdb_stdlog, " %s %s",
1286 core_addr_to_string_nz (val), plongest (val));
1287 }
1288 }
1289 fprintf_unfiltered (gdb_stdlog, "\n");
1290 }
1291
1292 static void
1293 reg_flush_command (const char *command, int from_tty)
1294 {
1295 /* Force-flush the register cache. */
1296 registers_changed ();
1297 if (from_tty)
1298 printf_filtered (_("Register cache flushed.\n"));
1299 }
1300
1301 void
1302 register_dump::dump (ui_file *file)
1303 {
1304 auto descr = regcache_descr (m_gdbarch);
1305 int regnum;
1306 int footnote_nr = 0;
1307 int footnote_register_offset = 0;
1308 int footnote_register_type_name_null = 0;
1309 long register_offset = 0;
1310
1311 gdb_assert (descr->nr_cooked_registers
1312 == gdbarch_num_cooked_regs (m_gdbarch));
1313
1314 for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++)
1315 {
1316 /* Name. */
1317 if (regnum < 0)
1318 fprintf_unfiltered (file, " %-10s", "Name");
1319 else
1320 {
1321 const char *p = gdbarch_register_name (m_gdbarch, regnum);
1322
1323 if (p == NULL)
1324 p = "";
1325 else if (p[0] == '\0')
1326 p = "''";
1327 fprintf_unfiltered (file, " %-10s", p);
1328 }
1329
1330 /* Number. */
1331 if (regnum < 0)
1332 fprintf_unfiltered (file, " %4s", "Nr");
1333 else
1334 fprintf_unfiltered (file, " %4d", regnum);
1335
1336 /* Relative number. */
1337 if (regnum < 0)
1338 fprintf_unfiltered (file, " %4s", "Rel");
1339 else if (regnum < gdbarch_num_regs (m_gdbarch))
1340 fprintf_unfiltered (file, " %4d", regnum);
1341 else
1342 fprintf_unfiltered (file, " %4d",
1343 (regnum - gdbarch_num_regs (m_gdbarch)));
1344
1345 /* Offset. */
1346 if (regnum < 0)
1347 fprintf_unfiltered (file, " %6s ", "Offset");
1348 else
1349 {
1350 fprintf_unfiltered (file, " %6ld",
1351 descr->register_offset[regnum]);
1352 if (register_offset != descr->register_offset[regnum]
1353 || (regnum > 0
1354 && (descr->register_offset[regnum]
1355 != (descr->register_offset[regnum - 1]
1356 + descr->sizeof_register[regnum - 1])))
1357 )
1358 {
1359 if (!footnote_register_offset)
1360 footnote_register_offset = ++footnote_nr;
1361 fprintf_unfiltered (file, "*%d", footnote_register_offset);
1362 }
1363 else
1364 fprintf_unfiltered (file, " ");
1365 register_offset = (descr->register_offset[regnum]
1366 + descr->sizeof_register[regnum]);
1367 }
1368
1369 /* Size. */
1370 if (regnum < 0)
1371 fprintf_unfiltered (file, " %5s ", "Size");
1372 else
1373 fprintf_unfiltered (file, " %5ld", descr->sizeof_register[regnum]);
1374
1375 /* Type. */
1376 {
1377 const char *t;
1378 std::string name_holder;
1379
1380 if (regnum < 0)
1381 t = "Type";
1382 else
1383 {
1384 static const char blt[] = "builtin_type";
1385
1386 t = TYPE_NAME (register_type (m_gdbarch, regnum));
1387 if (t == NULL)
1388 {
1389 if (!footnote_register_type_name_null)
1390 footnote_register_type_name_null = ++footnote_nr;
1391 name_holder = string_printf ("*%d",
1392 footnote_register_type_name_null);
1393 t = name_holder.c_str ();
1394 }
1395 /* Chop a leading builtin_type. */
1396 if (startswith (t, blt))
1397 t += strlen (blt);
1398 }
1399 fprintf_unfiltered (file, " %-15s", t);
1400 }
1401
1402 /* Leading space always present. */
1403 fprintf_unfiltered (file, " ");
1404
1405 dump_reg (file, regnum);
1406
1407 fprintf_unfiltered (file, "\n");
1408 }
1409
1410 if (footnote_register_offset)
1411 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1412 footnote_register_offset);
1413 if (footnote_register_type_name_null)
1414 fprintf_unfiltered (file,
1415 "*%d: Register type's name NULL.\n",
1416 footnote_register_type_name_null);
1417 }
1418
1419 #if GDB_SELF_TEST
1420 #include "selftest.h"
1421 #include "selftest-arch.h"
1422 #include "target-float.h"
1423
1424 namespace selftests {
1425
1426 class regcache_access : public regcache
1427 {
1428 public:
1429
1430 /* Return the number of elements in current_regcache. */
1431
1432 static size_t
1433 current_regcache_size ()
1434 {
1435 return std::distance (regcache::current_regcache.begin (),
1436 regcache::current_regcache.end ());
1437 }
1438 };
1439
1440 static void
1441 current_regcache_test (void)
1442 {
1443 /* It is empty at the start. */
1444 SELF_CHECK (regcache_access::current_regcache_size () == 0);
1445
1446 ptid_t ptid1 (1), ptid2 (2), ptid3 (3);
1447
1448 /* Get regcache from ptid1, a new regcache is added to
1449 current_regcache. */
1450 regcache *regcache = get_thread_arch_aspace_regcache (ptid1,
1451 target_gdbarch (),
1452 NULL);
1453
1454 SELF_CHECK (regcache != NULL);
1455 SELF_CHECK (regcache->ptid () == ptid1);
1456 SELF_CHECK (regcache_access::current_regcache_size () == 1);
1457
1458 /* Get regcache from ptid2, a new regcache is added to
1459 current_regcache. */
1460 regcache = get_thread_arch_aspace_regcache (ptid2,
1461 target_gdbarch (),
1462 NULL);
1463 SELF_CHECK (regcache != NULL);
1464 SELF_CHECK (regcache->ptid () == ptid2);
1465 SELF_CHECK (regcache_access::current_regcache_size () == 2);
1466
1467 /* Get regcache from ptid3, a new regcache is added to
1468 current_regcache. */
1469 regcache = get_thread_arch_aspace_regcache (ptid3,
1470 target_gdbarch (),
1471 NULL);
1472 SELF_CHECK (regcache != NULL);
1473 SELF_CHECK (regcache->ptid () == ptid3);
1474 SELF_CHECK (regcache_access::current_regcache_size () == 3);
1475
1476 /* Get regcache from ptid2 again, nothing is added to
1477 current_regcache. */
1478 regcache = get_thread_arch_aspace_regcache (ptid2,
1479 target_gdbarch (),
1480 NULL);
1481 SELF_CHECK (regcache != NULL);
1482 SELF_CHECK (regcache->ptid () == ptid2);
1483 SELF_CHECK (regcache_access::current_regcache_size () == 3);
1484
1485 /* Mark ptid2 is changed, so regcache of ptid2 should be removed from
1486 current_regcache. */
1487 registers_changed_ptid (ptid2);
1488 SELF_CHECK (regcache_access::current_regcache_size () == 2);
1489 }
1490
1491 class target_ops_no_register : public test_target_ops
1492 {
1493 public:
1494 target_ops_no_register ()
1495 : test_target_ops {}
1496 {}
1497
1498 void reset ()
1499 {
1500 fetch_registers_called = 0;
1501 store_registers_called = 0;
1502 xfer_partial_called = 0;
1503 }
1504
1505 void fetch_registers (regcache *regs, int regno) override;
1506 void store_registers (regcache *regs, int regno) override;
1507
1508 enum target_xfer_status xfer_partial (enum target_object object,
1509 const char *annex, gdb_byte *readbuf,
1510 const gdb_byte *writebuf,
1511 ULONGEST offset, ULONGEST len,
1512 ULONGEST *xfered_len) override;
1513
1514 unsigned int fetch_registers_called = 0;
1515 unsigned int store_registers_called = 0;
1516 unsigned int xfer_partial_called = 0;
1517 };
1518
1519 void
1520 target_ops_no_register::fetch_registers (regcache *regs, int regno)
1521 {
1522 /* Mark register available. */
1523 regs->raw_supply_zeroed (regno);
1524 this->fetch_registers_called++;
1525 }
1526
1527 void
1528 target_ops_no_register::store_registers (regcache *regs, int regno)
1529 {
1530 this->store_registers_called++;
1531 }
1532
1533 enum target_xfer_status
1534 target_ops_no_register::xfer_partial (enum target_object object,
1535 const char *annex, gdb_byte *readbuf,
1536 const gdb_byte *writebuf,
1537 ULONGEST offset, ULONGEST len,
1538 ULONGEST *xfered_len)
1539 {
1540 this->xfer_partial_called++;
1541
1542 *xfered_len = len;
1543 return TARGET_XFER_OK;
1544 }
1545
1546 class readwrite_regcache : public regcache
1547 {
1548 public:
1549 readwrite_regcache (struct gdbarch *gdbarch)
1550 : regcache (gdbarch, nullptr)
1551 {}
1552 };
1553
1554 /* Test regcache::cooked_read gets registers from raw registers and
1555 memory instead of target to_{fetch,store}_registers. */
1556
1557 static void
1558 cooked_read_test (struct gdbarch *gdbarch)
1559 {
1560 /* Error out if debugging something, because we're going to push the
1561 test target, which would pop any existing target. */
1562 if (current_top_target ()->stratum () >= process_stratum)
1563 error (_("target already pushed"));
1564
1565 /* Create a mock environment. An inferior with a thread, with a
1566 process_stratum target pushed. */
1567
1568 target_ops_no_register mock_target;
1569 ptid_t mock_ptid (1, 1);
1570 inferior mock_inferior (mock_ptid.pid ());
1571 address_space mock_aspace {};
1572 mock_inferior.gdbarch = gdbarch;
1573 mock_inferior.aspace = &mock_aspace;
1574 thread_info mock_thread (&mock_inferior, mock_ptid);
1575
1576 /* Add the mock inferior to the inferior list so that look ups by
1577 target+ptid can find it. */
1578 scoped_restore restore_inferior_list
1579 = make_scoped_restore (&inferior_list);
1580 inferior_list = &mock_inferior;
1581
1582 /* Switch to the mock inferior. */
1583 scoped_restore_current_inferior restore_current_inferior;
1584 set_current_inferior (&mock_inferior);
1585
1586 /* Push the process_stratum target so we can mock accessing
1587 registers. */
1588 push_target (&mock_target);
1589
1590 /* Pop it again on exit (return/exception). */
1591 struct on_exit
1592 {
1593 ~on_exit ()
1594 {
1595 pop_all_targets_at_and_above (process_stratum);
1596 }
1597 } pop_targets;
1598
1599 /* Switch to the mock thread. */
1600 scoped_restore restore_inferior_ptid
1601 = make_scoped_restore (&inferior_ptid, mock_ptid);
1602
1603 /* Test that read one raw register from regcache_no_target will go
1604 to the target layer. */
1605
1606 /* Find a raw register which size isn't zero. */
1607 int nonzero_regnum;
1608 for (nonzero_regnum = 0;
1609 nonzero_regnum < gdbarch_num_regs (gdbarch);
1610 nonzero_regnum++)
1611 {
1612 if (register_size (gdbarch, nonzero_regnum) != 0)
1613 break;
1614 }
1615
1616 readwrite_regcache readwrite (gdbarch);
1617 gdb::def_vector<gdb_byte> buf (register_size (gdbarch, nonzero_regnum));
1618
1619 readwrite.raw_read (nonzero_regnum, buf.data ());
1620
1621 /* raw_read calls target_fetch_registers. */
1622 SELF_CHECK (mock_target.fetch_registers_called > 0);
1623 mock_target.reset ();
1624
1625 /* Mark all raw registers valid, so the following raw registers
1626 accesses won't go to target. */
1627 for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++)
1628 readwrite.raw_update (i);
1629
1630 mock_target.reset ();
1631 /* Then, read all raw and pseudo registers, and don't expect calling
1632 to_{fetch,store}_registers. */
1633 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1634 {
1635 if (register_size (gdbarch, regnum) == 0)
1636 continue;
1637
1638 gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum));
1639
1640 SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum,
1641 inner_buf.data ()));
1642
1643 SELF_CHECK (mock_target.fetch_registers_called == 0);
1644 SELF_CHECK (mock_target.store_registers_called == 0);
1645
1646 /* Some SPU pseudo registers are got via TARGET_OBJECT_SPU. */
1647 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
1648 SELF_CHECK (mock_target.xfer_partial_called == 0);
1649
1650 mock_target.reset ();
1651 }
1652
1653 readonly_detached_regcache readonly (readwrite);
1654
1655 /* GDB may go to target layer to fetch all registers and memory for
1656 readonly regcache. */
1657 mock_target.reset ();
1658
1659 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
1660 {
1661 if (register_size (gdbarch, regnum) == 0)
1662 continue;
1663
1664 gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum));
1665 enum register_status status = readonly.cooked_read (regnum,
1666 inner_buf.data ());
1667
1668 if (regnum < gdbarch_num_regs (gdbarch))
1669 {
1670 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1671
1672 if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300
1673 || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh
1674 || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850
1675 || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep
1676 || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850
1677 || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300
1678 || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score
1679 || bfd_arch == bfd_arch_riscv || bfd_arch == bfd_arch_csky)
1680 {
1681 /* Raw registers. If raw registers are not in save_reggroup,
1682 their status are unknown. */
1683 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1684 SELF_CHECK (status == REG_VALID);
1685 else
1686 SELF_CHECK (status == REG_UNKNOWN);
1687 }
1688 else
1689 SELF_CHECK (status == REG_VALID);
1690 }
1691 else
1692 {
1693 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1694 SELF_CHECK (status == REG_VALID);
1695 else
1696 {
1697 /* If pseudo registers are not in save_reggroup, some of
1698 them can be computed from saved raw registers, but some
1699 of them are unknown. */
1700 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1701
1702 if (bfd_arch == bfd_arch_frv
1703 || bfd_arch == bfd_arch_m32c
1704 || bfd_arch == bfd_arch_mep
1705 || bfd_arch == bfd_arch_sh)
1706 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN);
1707 else if (bfd_arch == bfd_arch_mips
1708 || bfd_arch == bfd_arch_h8300)
1709 SELF_CHECK (status == REG_UNKNOWN);
1710 else
1711 SELF_CHECK (status == REG_VALID);
1712 }
1713 }
1714
1715 SELF_CHECK (mock_target.fetch_registers_called == 0);
1716 SELF_CHECK (mock_target.store_registers_called == 0);
1717 SELF_CHECK (mock_target.xfer_partial_called == 0);
1718
1719 mock_target.reset ();
1720 }
1721 }
1722
1723 /* Test regcache::cooked_write by writing some expected contents to
1724 registers, and checking that contents read from registers and the
1725 expected contents are the same. */
1726
1727 static void
1728 cooked_write_test (struct gdbarch *gdbarch)
1729 {
1730 /* Error out if debugging something, because we're going to push the
1731 test target, which would pop any existing target. */
1732 if (current_top_target ()->stratum () >= process_stratum)
1733 error (_("target already pushed"));
1734
1735 /* Create a mock environment. A process_stratum target pushed. */
1736
1737 target_ops_no_register mock_target;
1738
1739 /* Push the process_stratum target so we can mock accessing
1740 registers. */
1741 push_target (&mock_target);
1742
1743 /* Pop it again on exit (return/exception). */
1744 struct on_exit
1745 {
1746 ~on_exit ()
1747 {
1748 pop_all_targets_at_and_above (process_stratum);
1749 }
1750 } pop_targets;
1751
1752 readwrite_regcache readwrite (gdbarch);
1753
1754 const int num_regs = gdbarch_num_cooked_regs (gdbarch);
1755
1756 for (auto regnum = 0; regnum < num_regs; regnum++)
1757 {
1758 if (register_size (gdbarch, regnum) == 0
1759 || gdbarch_cannot_store_register (gdbarch, regnum))
1760 continue;
1761
1762 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1763
1764 if ((bfd_arch == bfd_arch_sparc
1765 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
1766 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */
1767 && gdbarch_ptr_bit (gdbarch) == 64
1768 && (regnum >= gdbarch_num_regs (gdbarch)
1769 && regnum <= gdbarch_num_regs (gdbarch) + 4))
1770 || (bfd_arch == bfd_arch_spu
1771 /* SPU pseudo registers except SPU_SP_REGNUM are got by
1772 TARGET_OBJECT_SPU. */
1773 && regnum >= gdbarch_num_regs (gdbarch) && regnum != 130))
1774 continue;
1775
1776 std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0);
1777 std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0);
1778 const auto type = register_type (gdbarch, regnum);
1779
1780 if (TYPE_CODE (type) == TYPE_CODE_FLT
1781 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1782 {
1783 /* Generate valid float format. */
1784 target_float_from_string (expected.data (), type, "1.25");
1785 }
1786 else if (TYPE_CODE (type) == TYPE_CODE_INT
1787 || TYPE_CODE (type) == TYPE_CODE_ARRAY
1788 || TYPE_CODE (type) == TYPE_CODE_PTR
1789 || TYPE_CODE (type) == TYPE_CODE_UNION
1790 || TYPE_CODE (type) == TYPE_CODE_STRUCT)
1791 {
1792 if (bfd_arch == bfd_arch_ia64
1793 || (regnum >= gdbarch_num_regs (gdbarch)
1794 && (bfd_arch == bfd_arch_xtensa
1795 || bfd_arch == bfd_arch_bfin
1796 || bfd_arch == bfd_arch_m32c
1797 /* m68hc11 pseudo registers are in memory. */
1798 || bfd_arch == bfd_arch_m68hc11
1799 || bfd_arch == bfd_arch_m68hc12
1800 || bfd_arch == bfd_arch_s390))
1801 || (bfd_arch == bfd_arch_frv
1802 /* FRV pseudo registers except iacc0. */
1803 && regnum > gdbarch_num_regs (gdbarch)))
1804 {
1805 /* Skip setting the expected values for some architecture
1806 registers. */
1807 }
1808 else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
1809 {
1810 /* RL78_PC_REGNUM */
1811 for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
1812 expected[j] = j;
1813 }
1814 else
1815 {
1816 for (auto j = 0; j < register_size (gdbarch, regnum); j++)
1817 expected[j] = j;
1818 }
1819 }
1820 else if (TYPE_CODE (type) == TYPE_CODE_FLAGS)
1821 {
1822 /* No idea how to test flags. */
1823 continue;
1824 }
1825 else
1826 {
1827 /* If we don't know how to create the expected value for the
1828 this type, make it fail. */
1829 SELF_CHECK (0);
1830 }
1831
1832 readwrite.cooked_write (regnum, expected.data ());
1833
1834 SELF_CHECK (readwrite.cooked_read (regnum, buf.data ()) == REG_VALID);
1835 SELF_CHECK (expected == buf);
1836 }
1837 }
1838
1839 } // namespace selftests
1840 #endif /* GDB_SELF_TEST */
1841
1842 void
1843 _initialize_regcache (void)
1844 {
1845 regcache_descr_handle
1846 = gdbarch_data_register_post_init (init_regcache_descr);
1847
1848 gdb::observers::target_changed.attach (regcache_observer_target_changed);
1849 gdb::observers::thread_ptid_changed.attach
1850 (regcache::regcache_thread_ptid_changed);
1851
1852 add_com ("flushregs", class_maintenance, reg_flush_command,
1853 _("Force gdb to flush its register cache (maintainer command)"));
1854
1855 #if GDB_SELF_TEST
1856 selftests::register_test ("current_regcache", selftests::current_regcache_test);
1857
1858 selftests::register_test_foreach_arch ("regcache::cooked_read_test",
1859 selftests::cooked_read_test);
1860 selftests::register_test_foreach_arch ("regcache::cooked_write_test",
1861 selftests::cooked_write_test);
1862 #endif
1863 }
This page took 0.070737 seconds and 4 git commands to generate.