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