1 /* Cache and manage the values of registers for GDB, the GNU debugger.
3 Copyright (C) 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000, 2001,
4 2002, 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
27 #include "reggroups.h"
28 #include "gdb_assert.h"
29 #include "gdb_string.h"
30 #include "gdbcmd.h" /* For maintenanceprintlist. */
36 * Here is the actual register cache.
39 /* Per-architecture object describing the layout of a register cache.
40 Computed once when the architecture is created */
42 struct gdbarch_data
*regcache_descr_handle
;
46 /* The architecture this descriptor belongs to. */
47 struct gdbarch
*gdbarch
;
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
55 long sizeof_raw_registers
;
56 long sizeof_raw_register_valid_p
;
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_valid_p
;
68 /* Offset and size (in 8 bit bytes), of reach register in the
69 register cache. All registers (including those in the range
70 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an offset.
71 Assigning all registers an offset makes it possible to keep
72 legacy code, such as that found in read_register_bytes() and
73 write_register_bytes() working. */
74 long *register_offset
;
75 long *sizeof_register
;
77 /* Cached table containing the type of each register. */
78 struct type
**register_type
;
82 init_regcache_descr (struct gdbarch
*gdbarch
)
85 struct regcache_descr
*descr
;
86 gdb_assert (gdbarch
!= NULL
);
88 /* Create an initial, zero filled, table. */
89 descr
= GDBARCH_OBSTACK_ZALLOC (gdbarch
, struct regcache_descr
);
90 descr
->gdbarch
= gdbarch
;
92 /* Total size of the register space. The raw registers are mapped
93 directly onto the raw register cache while the pseudo's are
94 either mapped onto raw-registers or memory. */
95 descr
->nr_cooked_registers
= gdbarch_num_regs (gdbarch
)
96 + gdbarch_num_pseudo_regs (gdbarch
);
97 descr
->sizeof_cooked_register_valid_p
= gdbarch_num_regs (gdbarch
)
98 + gdbarch_num_pseudo_regs
101 /* Fill in a table of register types. */
103 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
, struct type
*);
104 for (i
= 0; i
< descr
->nr_cooked_registers
; i
++)
105 descr
->register_type
[i
] = gdbarch_register_type (gdbarch
, i
);
107 /* Construct a strictly RAW register cache. Don't allow pseudo's
108 into the register cache. */
109 descr
->nr_raw_registers
= gdbarch_num_regs (gdbarch
);
111 /* FIXME: cagney/2002-08-13: Overallocate the register_valid_p
112 array. This pretects GDB from erant code that accesses elements
113 of the global register_valid_p[] array in the range
114 [gdbarch_num_regs .. gdbarch_num_regs + gdbarch_num_pseudo_regs). */
115 descr
->sizeof_raw_register_valid_p
= descr
->sizeof_cooked_register_valid_p
;
117 /* Lay out the register cache.
119 NOTE: cagney/2002-05-22: Only register_type() is used when
120 constructing the register cache. It is assumed that the
121 register's raw size, virtual size and type length are all the
127 descr
->sizeof_register
128 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
, long);
129 descr
->register_offset
130 = GDBARCH_OBSTACK_CALLOC (gdbarch
, descr
->nr_cooked_registers
, long);
131 for (i
= 0; i
< descr
->nr_cooked_registers
; i
++)
133 descr
->sizeof_register
[i
] = TYPE_LENGTH (descr
->register_type
[i
]);
134 descr
->register_offset
[i
] = offset
;
135 offset
+= descr
->sizeof_register
[i
];
136 gdb_assert (MAX_REGISTER_SIZE
>= descr
->sizeof_register
[i
]);
138 /* Set the real size of the register cache buffer. */
139 descr
->sizeof_cooked_registers
= offset
;
142 /* FIXME: cagney/2002-05-22: Should only need to allocate space for
143 the raw registers. Unfortunately some code still accesses the
144 register array directly using the global registers[]. Until that
145 code has been purged, play safe and over allocating the register
147 descr
->sizeof_raw_registers
= descr
->sizeof_cooked_registers
;
152 static struct regcache_descr
*
153 regcache_descr (struct gdbarch
*gdbarch
)
155 return gdbarch_data (gdbarch
, regcache_descr_handle
);
158 /* Utility functions returning useful register attributes stored in
159 the regcache descr. */
162 register_type (struct gdbarch
*gdbarch
, int regnum
)
164 struct regcache_descr
*descr
= regcache_descr (gdbarch
);
166 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_cooked_registers
);
167 return descr
->register_type
[regnum
];
170 /* Utility functions returning useful register attributes stored in
171 the regcache descr. */
174 register_size (struct gdbarch
*gdbarch
, int regnum
)
176 struct regcache_descr
*descr
= regcache_descr (gdbarch
);
179 gdb_assert (regnum
>= 0
180 && regnum
< (gdbarch_num_regs (gdbarch
)
181 + gdbarch_num_pseudo_regs (gdbarch
)));
182 size
= descr
->sizeof_register
[regnum
];
186 /* The register cache for storing raw register values. */
190 struct regcache_descr
*descr
;
192 /* The address space of this register cache (for registers where it
193 makes sense, like PC or SP). */
194 struct address_space
*aspace
;
196 /* The register buffers. A read-only register cache can hold the
197 full [0 .. gdbarch_num_regs + gdbarch_num_pseudo_regs) while a read/write
198 register cache can only hold [0 .. gdbarch_num_regs). */
200 /* Register cache status:
201 register_valid_p[REG] == 0 if REG value is not in the cache
202 > 0 if REG value is in the cache
203 < 0 if REG value is permanently unavailable */
204 signed char *register_valid_p
;
205 /* Is this a read-only cache? A read-only cache is used for saving
206 the target's register state (e.g, across an inferior function
207 call or just before forcing a function return). A read-only
208 cache can only be updated via the methods regcache_dup() and
209 regcache_cpy(). The actual contents are determined by the
210 reggroup_save and reggroup_restore methods. */
212 /* If this is a read-write cache, which thread's registers is
218 regcache_xmalloc (struct gdbarch
*gdbarch
, struct address_space
*aspace
)
220 struct regcache_descr
*descr
;
221 struct regcache
*regcache
;
223 gdb_assert (gdbarch
!= NULL
);
224 descr
= regcache_descr (gdbarch
);
225 regcache
= XMALLOC (struct regcache
);
226 regcache
->descr
= descr
;
228 = XCALLOC (descr
->sizeof_raw_registers
, gdb_byte
);
229 regcache
->register_valid_p
230 = XCALLOC (descr
->sizeof_raw_register_valid_p
, gdb_byte
);
231 regcache
->aspace
= aspace
;
232 regcache
->readonly_p
= 1;
233 regcache
->ptid
= minus_one_ptid
;
238 regcache_xfree (struct regcache
*regcache
)
240 if (regcache
== NULL
)
242 xfree (regcache
->registers
);
243 xfree (regcache
->register_valid_p
);
248 do_regcache_xfree (void *data
)
250 regcache_xfree (data
);
254 make_cleanup_regcache_xfree (struct regcache
*regcache
)
256 return make_cleanup (do_regcache_xfree
, regcache
);
259 /* Return REGCACHE's architecture. */
262 get_regcache_arch (const struct regcache
*regcache
)
264 return regcache
->descr
->gdbarch
;
267 struct address_space
*
268 get_regcache_aspace (const struct regcache
*regcache
)
270 return regcache
->aspace
;
273 /* Return a pointer to register REGNUM's buffer cache. */
276 register_buffer (const struct regcache
*regcache
, int regnum
)
278 return regcache
->registers
+ regcache
->descr
->register_offset
[regnum
];
282 regcache_save (struct regcache
*dst
, regcache_cooked_read_ftype
*cooked_read
,
285 struct gdbarch
*gdbarch
= dst
->descr
->gdbarch
;
286 gdb_byte buf
[MAX_REGISTER_SIZE
];
289 /* The DST should be `read-only', if it wasn't then the save would
290 end up trying to write the register values back out to the
292 gdb_assert (dst
->readonly_p
);
293 /* Clear the dest. */
294 memset (dst
->registers
, 0, dst
->descr
->sizeof_cooked_registers
);
295 memset (dst
->register_valid_p
, 0, dst
->descr
->sizeof_cooked_register_valid_p
);
296 /* Copy over any registers (identified by their membership in the
297 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
298 gdbarch_num_pseudo_regs) range is checked since some architectures need
299 to save/restore `cooked' registers that live in memory. */
300 for (regnum
= 0; regnum
< dst
->descr
->nr_cooked_registers
; regnum
++)
302 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, save_reggroup
))
304 int valid
= cooked_read (src
, regnum
, buf
);
308 memcpy (register_buffer (dst
, regnum
), buf
,
309 register_size (gdbarch
, regnum
));
310 dst
->register_valid_p
[regnum
] = 1;
317 regcache_restore (struct regcache
*dst
,
318 regcache_cooked_read_ftype
*cooked_read
,
319 void *cooked_read_context
)
321 struct gdbarch
*gdbarch
= dst
->descr
->gdbarch
;
322 gdb_byte buf
[MAX_REGISTER_SIZE
];
325 /* The dst had better not be read-only. If it is, the `restore'
326 doesn't make much sense. */
327 gdb_assert (!dst
->readonly_p
);
328 /* Copy over any registers, being careful to only restore those that
329 were both saved and need to be restored. The full [0 .. gdbarch_num_regs
330 + gdbarch_num_pseudo_regs) range is checked since some architectures need
331 to save/restore `cooked' registers that live in memory. */
332 for (regnum
= 0; regnum
< dst
->descr
->nr_cooked_registers
; regnum
++)
334 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, restore_reggroup
))
336 int valid
= cooked_read (cooked_read_context
, regnum
, buf
);
339 regcache_cooked_write (dst
, regnum
, buf
);
345 do_cooked_read (void *src
, int regnum
, gdb_byte
*buf
)
347 struct regcache
*regcache
= src
;
349 if (!regcache
->register_valid_p
[regnum
] && regcache
->readonly_p
)
350 /* Don't even think about fetching a register from a read-only
351 cache when the register isn't yet valid. There isn't a target
352 from which the register value can be fetched. */
354 regcache_cooked_read (regcache
, regnum
, buf
);
360 regcache_cpy (struct regcache
*dst
, struct regcache
*src
)
362 gdb_assert (src
!= NULL
&& dst
!= NULL
);
363 gdb_assert (src
->descr
->gdbarch
== dst
->descr
->gdbarch
);
364 gdb_assert (src
!= dst
);
365 gdb_assert (src
->readonly_p
|| dst
->readonly_p
);
367 if (!src
->readonly_p
)
368 regcache_save (dst
, do_cooked_read
, src
);
369 else if (!dst
->readonly_p
)
370 regcache_restore (dst
, do_cooked_read
, src
);
372 regcache_cpy_no_passthrough (dst
, src
);
376 regcache_cpy_no_passthrough (struct regcache
*dst
, struct regcache
*src
)
378 gdb_assert (src
!= NULL
&& dst
!= NULL
);
379 gdb_assert (src
->descr
->gdbarch
== dst
->descr
->gdbarch
);
380 /* NOTE: cagney/2002-05-17: Don't let the caller do a no-passthrough
381 move of data into the current regcache. Doing this would be
382 silly - it would mean that valid_p would be completely invalid. */
383 gdb_assert (dst
->readonly_p
);
385 memcpy (dst
->registers
, src
->registers
, dst
->descr
->sizeof_raw_registers
);
386 memcpy (dst
->register_valid_p
, src
->register_valid_p
,
387 dst
->descr
->sizeof_raw_register_valid_p
);
391 regcache_dup (struct regcache
*src
)
393 struct regcache
*newbuf
;
395 newbuf
= regcache_xmalloc (src
->descr
->gdbarch
, get_regcache_aspace (src
));
396 regcache_cpy (newbuf
, src
);
401 regcache_dup_no_passthrough (struct regcache
*src
)
403 struct regcache
*newbuf
;
405 newbuf
= regcache_xmalloc (src
->descr
->gdbarch
, get_regcache_aspace (src
));
406 regcache_cpy_no_passthrough (newbuf
, src
);
411 regcache_valid_p (const struct regcache
*regcache
, int regnum
)
413 gdb_assert (regcache
!= NULL
);
414 gdb_assert (regnum
>= 0);
415 if (regcache
->readonly_p
)
416 gdb_assert (regnum
< regcache
->descr
->nr_cooked_registers
);
418 gdb_assert (regnum
< regcache
->descr
->nr_raw_registers
);
420 return regcache
->register_valid_p
[regnum
];
424 regcache_invalidate (struct regcache
*regcache
, int regnum
)
426 gdb_assert (regcache
!= NULL
);
427 gdb_assert (regnum
>= 0);
428 gdb_assert (!regcache
->readonly_p
);
429 gdb_assert (regnum
< regcache
->descr
->nr_raw_registers
);
430 regcache
->register_valid_p
[regnum
] = 0;
434 /* Global structure containing the current regcache. */
436 /* NOTE: this is a write-through cache. There is no "dirty" bit for
437 recording if the register values have been changed (eg. by the
438 user). Therefore all registers must be written back to the
439 target when appropriate. */
443 struct regcache
*regcache
;
444 struct regcache_list
*next
;
447 static struct regcache_list
*current_regcache
;
450 get_thread_arch_regcache (ptid_t ptid
, struct gdbarch
*gdbarch
)
452 struct regcache_list
*list
;
453 struct regcache
*new_regcache
;
455 for (list
= current_regcache
; list
; list
= list
->next
)
456 if (ptid_equal (list
->regcache
->ptid
, ptid
)
457 && get_regcache_arch (list
->regcache
) == gdbarch
)
458 return list
->regcache
;
460 new_regcache
= regcache_xmalloc (gdbarch
,
461 target_thread_address_space (ptid
));
462 new_regcache
->readonly_p
= 0;
463 new_regcache
->ptid
= ptid
;
464 gdb_assert (new_regcache
->aspace
!= NULL
);
466 list
= xmalloc (sizeof (struct regcache_list
));
467 list
->regcache
= new_regcache
;
468 list
->next
= current_regcache
;
469 current_regcache
= list
;
474 static ptid_t current_thread_ptid
;
475 static struct gdbarch
*current_thread_arch
;
478 get_thread_regcache (ptid_t ptid
)
480 if (!current_thread_arch
|| !ptid_equal (current_thread_ptid
, ptid
))
482 current_thread_ptid
= ptid
;
483 current_thread_arch
= target_thread_architecture (ptid
);
486 return get_thread_arch_regcache (ptid
, current_thread_arch
);
490 get_current_regcache (void)
492 return get_thread_regcache (inferior_ptid
);
496 /* Observer for the target_changed event. */
499 regcache_observer_target_changed (struct target_ops
*target
)
501 registers_changed ();
504 /* Update global variables old ptids to hold NEW_PTID if they were
507 regcache_thread_ptid_changed (ptid_t old_ptid
, ptid_t new_ptid
)
509 struct regcache_list
*list
;
511 for (list
= current_regcache
; list
; list
= list
->next
)
512 if (ptid_equal (list
->regcache
->ptid
, old_ptid
))
513 list
->regcache
->ptid
= new_ptid
;
516 /* Low level examining and depositing of registers.
518 The caller is responsible for making sure that the inferior is
519 stopped before calling the fetching routines, or it will get
520 garbage. (a change from GDB version 3, in which the caller got the
521 value from the last stop). */
523 /* REGISTERS_CHANGED ()
525 Indicate that registers may have changed, so invalidate the cache. */
528 registers_changed_ptid (ptid_t ptid
)
530 struct regcache_list
*list
, **list_link
;
532 list
= current_regcache
;
533 list_link
= ¤t_regcache
;
536 if (ptid_match (list
->regcache
->ptid
, ptid
))
538 struct regcache_list
*dead
= list
;
540 *list_link
= list
->next
;
541 regcache_xfree (list
->regcache
);
547 list_link
= &list
->next
;
551 current_regcache
= NULL
;
553 current_thread_ptid
= null_ptid
;
554 current_thread_arch
= NULL
;
556 /* Need to forget about any frames we have cached, too. */
557 reinit_frame_cache ();
559 /* Force cleanup of any alloca areas if using C alloca instead of
560 a builtin alloca. This particular call is used to clean up
561 areas allocated by low level target code which may build up
562 during lengthy interactions between gdb and the target before
563 gdb gives control to the user (ie watchpoints). */
568 registers_changed (void)
570 registers_changed_ptid (minus_one_ptid
);
574 regcache_raw_read (struct regcache
*regcache
, int regnum
, gdb_byte
*buf
)
576 gdb_assert (regcache
!= NULL
&& buf
!= NULL
);
577 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_raw_registers
);
578 /* Make certain that the register cache is up-to-date with respect
579 to the current thread. This switching shouldn't be necessary
580 only there is still only one target side register cache. Sigh!
581 On the bright side, at least there is a regcache object. */
582 if (!regcache
->readonly_p
)
584 if (!regcache_valid_p (regcache
, regnum
))
586 struct cleanup
*old_chain
= save_inferior_ptid ();
588 inferior_ptid
= regcache
->ptid
;
589 target_fetch_registers (regcache
, regnum
);
590 do_cleanups (old_chain
);
593 /* FIXME: cagney/2004-08-07: At present a number of targets
594 forget (or didn't know that they needed) to set this leading to
595 panics. Also is the problem that targets need to indicate
596 that a register is in one of the possible states: valid,
597 undefined, unknown. The last of which isn't yet
599 gdb_assert (regcache_valid_p (regcache
, regnum
));
602 /* Copy the value directly into the register cache. */
603 memcpy (buf
, register_buffer (regcache
, regnum
),
604 regcache
->descr
->sizeof_register
[regnum
]);
608 regcache_raw_read_signed (struct regcache
*regcache
, int regnum
, LONGEST
*val
)
612 gdb_assert (regcache
!= NULL
);
613 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_raw_registers
);
614 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
615 regcache_raw_read (regcache
, regnum
, buf
);
616 (*val
) = extract_signed_integer
617 (buf
, regcache
->descr
->sizeof_register
[regnum
],
618 gdbarch_byte_order (regcache
->descr
->gdbarch
));
622 regcache_raw_read_unsigned (struct regcache
*regcache
, int regnum
,
627 gdb_assert (regcache
!= NULL
);
628 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_raw_registers
);
629 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
630 regcache_raw_read (regcache
, regnum
, buf
);
631 (*val
) = extract_unsigned_integer
632 (buf
, regcache
->descr
->sizeof_register
[regnum
],
633 gdbarch_byte_order (regcache
->descr
->gdbarch
));
637 regcache_raw_write_signed (struct regcache
*regcache
, int regnum
, LONGEST val
)
641 gdb_assert (regcache
!= NULL
);
642 gdb_assert (regnum
>=0 && regnum
< regcache
->descr
->nr_raw_registers
);
643 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
644 store_signed_integer (buf
, regcache
->descr
->sizeof_register
[regnum
],
645 gdbarch_byte_order (regcache
->descr
->gdbarch
), val
);
646 regcache_raw_write (regcache
, regnum
, buf
);
650 regcache_raw_write_unsigned (struct regcache
*regcache
, int regnum
,
655 gdb_assert (regcache
!= NULL
);
656 gdb_assert (regnum
>=0 && regnum
< regcache
->descr
->nr_raw_registers
);
657 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
658 store_unsigned_integer (buf
, regcache
->descr
->sizeof_register
[regnum
],
659 gdbarch_byte_order (regcache
->descr
->gdbarch
), val
);
660 regcache_raw_write (regcache
, regnum
, buf
);
664 regcache_cooked_read (struct regcache
*regcache
, int regnum
, gdb_byte
*buf
)
666 gdb_assert (regnum
>= 0);
667 gdb_assert (regnum
< regcache
->descr
->nr_cooked_registers
);
668 if (regnum
< regcache
->descr
->nr_raw_registers
)
669 regcache_raw_read (regcache
, regnum
, buf
);
670 else if (regcache
->readonly_p
671 && regnum
< regcache
->descr
->nr_cooked_registers
672 && regcache
->register_valid_p
[regnum
])
673 /* Read-only register cache, perhaps the cooked value was cached? */
674 memcpy (buf
, register_buffer (regcache
, regnum
),
675 regcache
->descr
->sizeof_register
[regnum
]);
677 gdbarch_pseudo_register_read (regcache
->descr
->gdbarch
, regcache
,
682 regcache_cooked_read_signed (struct regcache
*regcache
, int regnum
,
687 gdb_assert (regcache
!= NULL
);
688 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_cooked_registers
);
689 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
690 regcache_cooked_read (regcache
, regnum
, buf
);
691 (*val
) = extract_signed_integer
692 (buf
, regcache
->descr
->sizeof_register
[regnum
],
693 gdbarch_byte_order (regcache
->descr
->gdbarch
));
697 regcache_cooked_read_unsigned (struct regcache
*regcache
, int regnum
,
702 gdb_assert (regcache
!= NULL
);
703 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_cooked_registers
);
704 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
705 regcache_cooked_read (regcache
, regnum
, buf
);
706 (*val
) = extract_unsigned_integer
707 (buf
, regcache
->descr
->sizeof_register
[regnum
],
708 gdbarch_byte_order (regcache
->descr
->gdbarch
));
712 regcache_cooked_write_signed (struct regcache
*regcache
, int regnum
,
717 gdb_assert (regcache
!= NULL
);
718 gdb_assert (regnum
>=0 && regnum
< regcache
->descr
->nr_cooked_registers
);
719 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
720 store_signed_integer (buf
, regcache
->descr
->sizeof_register
[regnum
],
721 gdbarch_byte_order (regcache
->descr
->gdbarch
), val
);
722 regcache_cooked_write (regcache
, regnum
, buf
);
726 regcache_cooked_write_unsigned (struct regcache
*regcache
, int regnum
,
731 gdb_assert (regcache
!= NULL
);
732 gdb_assert (regnum
>=0 && regnum
< regcache
->descr
->nr_cooked_registers
);
733 buf
= alloca (regcache
->descr
->sizeof_register
[regnum
]);
734 store_unsigned_integer (buf
, regcache
->descr
->sizeof_register
[regnum
],
735 gdbarch_byte_order (regcache
->descr
->gdbarch
), val
);
736 regcache_cooked_write (regcache
, regnum
, buf
);
740 regcache_raw_write (struct regcache
*regcache
, int regnum
,
743 struct cleanup
*old_chain
;
745 gdb_assert (regcache
!= NULL
&& buf
!= NULL
);
746 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_raw_registers
);
747 gdb_assert (!regcache
->readonly_p
);
749 /* On the sparc, writing %g0 is a no-op, so we don't even want to
750 change the registers array if something writes to this register. */
751 if (gdbarch_cannot_store_register (get_regcache_arch (regcache
), regnum
))
754 /* If we have a valid copy of the register, and new value == old
755 value, then don't bother doing the actual store. */
756 if (regcache_valid_p (regcache
, regnum
)
757 && (memcmp (register_buffer (regcache
, regnum
), buf
,
758 regcache
->descr
->sizeof_register
[regnum
]) == 0))
761 old_chain
= save_inferior_ptid ();
762 inferior_ptid
= regcache
->ptid
;
764 target_prepare_to_store (regcache
);
765 memcpy (register_buffer (regcache
, regnum
), buf
,
766 regcache
->descr
->sizeof_register
[regnum
]);
767 regcache
->register_valid_p
[regnum
] = 1;
768 target_store_registers (regcache
, regnum
);
770 do_cleanups (old_chain
);
774 regcache_cooked_write (struct regcache
*regcache
, int regnum
,
777 gdb_assert (regnum
>= 0);
778 gdb_assert (regnum
< regcache
->descr
->nr_cooked_registers
);
779 if (regnum
< regcache
->descr
->nr_raw_registers
)
780 regcache_raw_write (regcache
, regnum
, buf
);
782 gdbarch_pseudo_register_write (regcache
->descr
->gdbarch
, regcache
,
786 /* Perform a partial register transfer using a read, modify, write
789 typedef void (regcache_read_ftype
) (struct regcache
*regcache
, int regnum
,
791 typedef void (regcache_write_ftype
) (struct regcache
*regcache
, int regnum
,
795 regcache_xfer_part (struct regcache
*regcache
, int regnum
,
796 int offset
, int len
, void *in
, const void *out
,
797 void (*read
) (struct regcache
*regcache
, int regnum
,
799 void (*write
) (struct regcache
*regcache
, int regnum
,
800 const gdb_byte
*buf
))
802 struct regcache_descr
*descr
= regcache
->descr
;
803 gdb_byte reg
[MAX_REGISTER_SIZE
];
805 gdb_assert (offset
>= 0 && offset
<= descr
->sizeof_register
[regnum
]);
806 gdb_assert (len
>= 0 && offset
+ len
<= descr
->sizeof_register
[regnum
]);
807 /* Something to do? */
808 if (offset
+ len
== 0)
810 /* Read (when needed) ... */
813 || offset
+ len
< descr
->sizeof_register
[regnum
])
815 gdb_assert (read
!= NULL
);
816 read (regcache
, regnum
, reg
);
820 memcpy (in
, reg
+ offset
, len
);
822 memcpy (reg
+ offset
, out
, len
);
823 /* ... write (when needed). */
826 gdb_assert (write
!= NULL
);
827 write (regcache
, regnum
, reg
);
832 regcache_raw_read_part (struct regcache
*regcache
, int regnum
,
833 int offset
, int len
, gdb_byte
*buf
)
835 struct regcache_descr
*descr
= regcache
->descr
;
837 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_raw_registers
);
838 regcache_xfer_part (regcache
, regnum
, offset
, len
, buf
, NULL
,
839 regcache_raw_read
, regcache_raw_write
);
843 regcache_raw_write_part (struct regcache
*regcache
, int regnum
,
844 int offset
, int len
, const gdb_byte
*buf
)
846 struct regcache_descr
*descr
= regcache
->descr
;
848 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_raw_registers
);
849 regcache_xfer_part (regcache
, regnum
, offset
, len
, NULL
, buf
,
850 regcache_raw_read
, regcache_raw_write
);
854 regcache_cooked_read_part (struct regcache
*regcache
, int regnum
,
855 int offset
, int len
, gdb_byte
*buf
)
857 struct regcache_descr
*descr
= regcache
->descr
;
859 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_cooked_registers
);
860 regcache_xfer_part (regcache
, regnum
, offset
, len
, buf
, NULL
,
861 regcache_cooked_read
, regcache_cooked_write
);
865 regcache_cooked_write_part (struct regcache
*regcache
, int regnum
,
866 int offset
, int len
, const gdb_byte
*buf
)
868 struct regcache_descr
*descr
= regcache
->descr
;
870 gdb_assert (regnum
>= 0 && regnum
< descr
->nr_cooked_registers
);
871 regcache_xfer_part (regcache
, regnum
, offset
, len
, NULL
, buf
,
872 regcache_cooked_read
, regcache_cooked_write
);
875 /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */
878 regcache_raw_supply (struct regcache
*regcache
, int regnum
, const void *buf
)
883 gdb_assert (regcache
!= NULL
);
884 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_raw_registers
);
885 gdb_assert (!regcache
->readonly_p
);
887 regbuf
= register_buffer (regcache
, regnum
);
888 size
= regcache
->descr
->sizeof_register
[regnum
];
891 memcpy (regbuf
, buf
, size
);
893 memset (regbuf
, 0, size
);
895 /* Mark the register as cached. */
896 regcache
->register_valid_p
[regnum
] = 1;
899 /* Collect register REGNUM from REGCACHE and store its contents in BUF. */
902 regcache_raw_collect (const struct regcache
*regcache
, int regnum
, void *buf
)
907 gdb_assert (regcache
!= NULL
&& buf
!= NULL
);
908 gdb_assert (regnum
>= 0 && regnum
< regcache
->descr
->nr_raw_registers
);
910 regbuf
= register_buffer (regcache
, regnum
);
911 size
= regcache
->descr
->sizeof_register
[regnum
];
912 memcpy (buf
, regbuf
, size
);
916 /* Special handling for register PC. */
919 regcache_read_pc (struct regcache
*regcache
)
921 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
925 if (gdbarch_read_pc_p (gdbarch
))
926 pc_val
= gdbarch_read_pc (gdbarch
, regcache
);
927 /* Else use per-frame method on get_current_frame. */
928 else if (gdbarch_pc_regnum (gdbarch
) >= 0)
932 regcache_cooked_read_unsigned (regcache
,
933 gdbarch_pc_regnum (gdbarch
),
935 pc_val
= gdbarch_addr_bits_remove (gdbarch
, raw_val
);
938 internal_error (__FILE__
, __LINE__
,
939 _("regcache_read_pc: Unable to find PC"));
944 regcache_write_pc (struct regcache
*regcache
, CORE_ADDR pc
)
946 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
948 if (gdbarch_write_pc_p (gdbarch
))
949 gdbarch_write_pc (gdbarch
, regcache
, pc
);
950 else if (gdbarch_pc_regnum (gdbarch
) >= 0)
951 regcache_cooked_write_unsigned (regcache
,
952 gdbarch_pc_regnum (gdbarch
), pc
);
954 internal_error (__FILE__
, __LINE__
,
955 _("regcache_write_pc: Unable to update PC"));
957 /* Writing the PC (for instance, from "load") invalidates the
959 reinit_frame_cache ();
964 reg_flush_command (char *command
, int from_tty
)
966 /* Force-flush the register cache. */
967 registers_changed ();
969 printf_filtered (_("Register cache flushed.\n"));
973 dump_endian_bytes (struct ui_file
*file
, enum bfd_endian endian
,
974 const unsigned char *buf
, long len
)
981 for (i
= 0; i
< len
; i
++)
982 fprintf_unfiltered (file
, "%02x", buf
[i
]);
984 case BFD_ENDIAN_LITTLE
:
985 for (i
= len
- 1; i
>= 0; i
--)
986 fprintf_unfiltered (file
, "%02x", buf
[i
]);
989 internal_error (__FILE__
, __LINE__
, _("Bad switch"));
993 enum regcache_dump_what
995 regcache_dump_none
, regcache_dump_raw
, regcache_dump_cooked
, regcache_dump_groups
999 regcache_dump (struct regcache
*regcache
, struct ui_file
*file
,
1000 enum regcache_dump_what what_to_dump
)
1002 struct cleanup
*cleanups
= make_cleanup (null_cleanup
, NULL
);
1003 struct gdbarch
*gdbarch
= regcache
->descr
->gdbarch
;
1005 int footnote_nr
= 0;
1006 int footnote_register_size
= 0;
1007 int footnote_register_offset
= 0;
1008 int footnote_register_type_name_null
= 0;
1009 long register_offset
= 0;
1010 unsigned char buf
[MAX_REGISTER_SIZE
];
1013 fprintf_unfiltered (file
, "nr_raw_registers %d\n",
1014 regcache
->descr
->nr_raw_registers
);
1015 fprintf_unfiltered (file
, "nr_cooked_registers %d\n",
1016 regcache
->descr
->nr_cooked_registers
);
1017 fprintf_unfiltered (file
, "sizeof_raw_registers %ld\n",
1018 regcache
->descr
->sizeof_raw_registers
);
1019 fprintf_unfiltered (file
, "sizeof_raw_register_valid_p %ld\n",
1020 regcache
->descr
->sizeof_raw_register_valid_p
);
1021 fprintf_unfiltered (file
, "gdbarch_num_regs %d\n",
1022 gdbarch_num_regs (gdbarch
));
1023 fprintf_unfiltered (file
, "gdbarch_num_pseudo_regs %d\n",
1024 gdbarch_num_pseudo_regs (gdbarch
));
1027 gdb_assert (regcache
->descr
->nr_cooked_registers
1028 == (gdbarch_num_regs (gdbarch
)
1029 + gdbarch_num_pseudo_regs (gdbarch
)));
1031 for (regnum
= -1; regnum
< regcache
->descr
->nr_cooked_registers
; regnum
++)
1035 fprintf_unfiltered (file
, " %-10s", "Name");
1038 const char *p
= gdbarch_register_name (gdbarch
, regnum
);
1042 else if (p
[0] == '\0')
1044 fprintf_unfiltered (file
, " %-10s", p
);
1049 fprintf_unfiltered (file
, " %4s", "Nr");
1051 fprintf_unfiltered (file
, " %4d", regnum
);
1053 /* Relative number. */
1055 fprintf_unfiltered (file
, " %4s", "Rel");
1056 else if (regnum
< gdbarch_num_regs (gdbarch
))
1057 fprintf_unfiltered (file
, " %4d", regnum
);
1059 fprintf_unfiltered (file
, " %4d",
1060 (regnum
- gdbarch_num_regs (gdbarch
)));
1064 fprintf_unfiltered (file
, " %6s ", "Offset");
1067 fprintf_unfiltered (file
, " %6ld",
1068 regcache
->descr
->register_offset
[regnum
]);
1069 if (register_offset
!= regcache
->descr
->register_offset
[regnum
]
1071 && (regcache
->descr
->register_offset
[regnum
]
1072 != (regcache
->descr
->register_offset
[regnum
- 1]
1073 + regcache
->descr
->sizeof_register
[regnum
- 1])))
1076 if (!footnote_register_offset
)
1077 footnote_register_offset
= ++footnote_nr
;
1078 fprintf_unfiltered (file
, "*%d", footnote_register_offset
);
1081 fprintf_unfiltered (file
, " ");
1082 register_offset
= (regcache
->descr
->register_offset
[regnum
]
1083 + regcache
->descr
->sizeof_register
[regnum
]);
1088 fprintf_unfiltered (file
, " %5s ", "Size");
1090 fprintf_unfiltered (file
, " %5ld",
1091 regcache
->descr
->sizeof_register
[regnum
]);
1101 static const char blt
[] = "builtin_type";
1103 t
= TYPE_NAME (register_type (regcache
->descr
->gdbarch
, regnum
));
1108 if (!footnote_register_type_name_null
)
1109 footnote_register_type_name_null
= ++footnote_nr
;
1110 n
= xstrprintf ("*%d", footnote_register_type_name_null
);
1111 make_cleanup (xfree
, n
);
1114 /* Chop a leading builtin_type. */
1115 if (strncmp (t
, blt
, strlen (blt
)) == 0)
1118 fprintf_unfiltered (file
, " %-15s", t
);
1121 /* Leading space always present. */
1122 fprintf_unfiltered (file
, " ");
1125 if (what_to_dump
== regcache_dump_raw
)
1128 fprintf_unfiltered (file
, "Raw value");
1129 else if (regnum
>= regcache
->descr
->nr_raw_registers
)
1130 fprintf_unfiltered (file
, "<cooked>");
1131 else if (!regcache_valid_p (regcache
, regnum
))
1132 fprintf_unfiltered (file
, "<invalid>");
1135 regcache_raw_read (regcache
, regnum
, buf
);
1136 fprintf_unfiltered (file
, "0x");
1137 dump_endian_bytes (file
,
1138 gdbarch_byte_order (gdbarch
), buf
,
1139 regcache
->descr
->sizeof_register
[regnum
]);
1143 /* Value, cooked. */
1144 if (what_to_dump
== regcache_dump_cooked
)
1147 fprintf_unfiltered (file
, "Cooked value");
1150 regcache_cooked_read (regcache
, regnum
, buf
);
1151 fprintf_unfiltered (file
, "0x");
1152 dump_endian_bytes (file
,
1153 gdbarch_byte_order (gdbarch
), buf
,
1154 regcache
->descr
->sizeof_register
[regnum
]);
1158 /* Group members. */
1159 if (what_to_dump
== regcache_dump_groups
)
1162 fprintf_unfiltered (file
, "Groups");
1165 const char *sep
= "";
1166 struct reggroup
*group
;
1168 for (group
= reggroup_next (gdbarch
, NULL
);
1170 group
= reggroup_next (gdbarch
, group
))
1172 if (gdbarch_register_reggroup_p (gdbarch
, regnum
, group
))
1174 fprintf_unfiltered (file
, "%s%s", sep
, reggroup_name (group
));
1181 fprintf_unfiltered (file
, "\n");
1184 if (footnote_register_size
)
1185 fprintf_unfiltered (file
, "*%d: Inconsistent register sizes.\n",
1186 footnote_register_size
);
1187 if (footnote_register_offset
)
1188 fprintf_unfiltered (file
, "*%d: Inconsistent register offsets.\n",
1189 footnote_register_offset
);
1190 if (footnote_register_type_name_null
)
1191 fprintf_unfiltered (file
,
1192 "*%d: Register type's name NULL.\n",
1193 footnote_register_type_name_null
);
1194 do_cleanups (cleanups
);
1198 regcache_print (char *args
, enum regcache_dump_what what_to_dump
)
1201 regcache_dump (get_current_regcache (), gdb_stdout
, what_to_dump
);
1204 struct cleanup
*cleanups
;
1205 struct ui_file
*file
= gdb_fopen (args
, "w");
1208 perror_with_name (_("maintenance print architecture"));
1209 cleanups
= make_cleanup_ui_file_delete (file
);
1210 regcache_dump (get_current_regcache (), file
, what_to_dump
);
1211 do_cleanups (cleanups
);
1216 maintenance_print_registers (char *args
, int from_tty
)
1218 regcache_print (args
, regcache_dump_none
);
1222 maintenance_print_raw_registers (char *args
, int from_tty
)
1224 regcache_print (args
, regcache_dump_raw
);
1228 maintenance_print_cooked_registers (char *args
, int from_tty
)
1230 regcache_print (args
, regcache_dump_cooked
);
1234 maintenance_print_register_groups (char *args
, int from_tty
)
1236 regcache_print (args
, regcache_dump_groups
);
1239 extern initialize_file_ftype _initialize_regcache
; /* -Wmissing-prototype */
1242 _initialize_regcache (void)
1244 regcache_descr_handle
= gdbarch_data_register_post_init (init_regcache_descr
);
1246 observer_attach_target_changed (regcache_observer_target_changed
);
1247 observer_attach_thread_ptid_changed (regcache_thread_ptid_changed
);
1249 add_com ("flushregs", class_maintenance
, reg_flush_command
,
1250 _("Force gdb to flush its register cache (maintainer command)"));
1252 add_cmd ("registers", class_maintenance
, maintenance_print_registers
, _("\
1253 Print the internal register configuration.\n\
1254 Takes an optional file parameter."), &maintenanceprintlist
);
1255 add_cmd ("raw-registers", class_maintenance
,
1256 maintenance_print_raw_registers
, _("\
1257 Print the internal register configuration including raw values.\n\
1258 Takes an optional file parameter."), &maintenanceprintlist
);
1259 add_cmd ("cooked-registers", class_maintenance
,
1260 maintenance_print_cooked_registers
, _("\
1261 Print the internal register configuration including cooked values.\n\
1262 Takes an optional file parameter."), &maintenanceprintlist
);
1263 add_cmd ("register-groups", class_maintenance
,
1264 maintenance_print_register_groups
, _("\
1265 Print the internal register configuration including each register's group.\n\
1266 Takes an optional file parameter."),
1267 &maintenanceprintlist
);