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