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