2010-10-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
[binutils-gdb.git] / gdb / regcache.c
blob5342586759d2e06bf29584abbf034882a3c40841
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/>. */
21 #include "defs.h"
22 #include "inferior.h"
23 #include "target.h"
24 #include "gdbarch.h"
25 #include "gdbcmd.h"
26 #include "regcache.h"
27 #include "reggroups.h"
28 #include "gdb_assert.h"
29 #include "gdb_string.h"
30 #include "gdbcmd.h" /* For maintenanceprintlist. */
31 #include "observer.h"
34 * DATA STRUCTURE
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;
44 struct regcache_descr
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
53 cache. */
54 int nr_raw_registers;
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;
81 static void *
82 init_regcache_descr (struct gdbarch *gdbarch)
84 int i;
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
99 (gdbarch);
101 /* Fill in a table of register types. */
102 descr->register_type
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
122 same. */
125 long offset = 0;
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
146 buffer. Ulgh! */
147 descr->sizeof_raw_registers = descr->sizeof_cooked_registers;
149 return descr;
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. */
161 struct type *
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);
177 int size;
179 gdb_assert (regnum >= 0
180 && regnum < (gdbarch_num_regs (gdbarch)
181 + gdbarch_num_pseudo_regs (gdbarch)));
182 size = descr->sizeof_register[regnum];
183 return size;
186 /* The register cache for storing raw register values. */
188 struct regcache
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). */
199 gdb_byte *registers;
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. */
211 int readonly_p;
212 /* If this is a read-write cache, which thread's registers is
213 it connected to? */
214 ptid_t ptid;
217 struct regcache *
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;
227 regcache->registers
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;
234 return regcache;
237 void
238 regcache_xfree (struct regcache *regcache)
240 if (regcache == NULL)
241 return;
242 xfree (regcache->registers);
243 xfree (regcache->register_valid_p);
244 xfree (regcache);
247 static void
248 do_regcache_xfree (void *data)
250 regcache_xfree (data);
253 struct cleanup *
254 make_cleanup_regcache_xfree (struct regcache *regcache)
256 return make_cleanup (do_regcache_xfree, regcache);
259 /* Return REGCACHE's architecture. */
261 struct gdbarch *
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. */
275 static gdb_byte *
276 register_buffer (const struct regcache *regcache, int regnum)
278 return regcache->registers + regcache->descr->register_offset[regnum];
281 void
282 regcache_save (struct regcache *dst, regcache_cooked_read_ftype *cooked_read,
283 void *src)
285 struct gdbarch *gdbarch = dst->descr->gdbarch;
286 gdb_byte buf[MAX_REGISTER_SIZE];
287 int regnum;
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
291 target. */
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);
306 if (valid)
308 memcpy (register_buffer (dst, regnum), buf,
309 register_size (gdbarch, regnum));
310 dst->register_valid_p[regnum] = 1;
316 void
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];
323 int regnum;
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);
338 if (valid)
339 regcache_cooked_write (dst, regnum, buf);
344 static int
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. */
353 return 0;
354 regcache_cooked_read (regcache, regnum, buf);
355 return 1;
359 void
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);
371 else
372 regcache_cpy_no_passthrough (dst, src);
375 void
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);
390 struct regcache *
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);
397 return newbuf;
400 struct regcache *
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);
407 return newbuf;
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);
417 else
418 gdb_assert (regnum < regcache->descr->nr_raw_registers);
420 return regcache->register_valid_p[regnum];
423 void
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. */
441 struct regcache_list
443 struct regcache *regcache;
444 struct regcache_list *next;
447 static struct regcache_list *current_regcache;
449 struct 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;
471 return new_regcache;
474 static ptid_t current_thread_ptid;
475 static struct gdbarch *current_thread_arch;
477 struct regcache *
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);
489 struct regcache *
490 get_current_regcache (void)
492 return get_thread_regcache (inferior_ptid);
496 /* Observer for the target_changed event. */
498 static void
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
505 holding OLD_PTID. */
506 static void
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. */
527 void
528 registers_changed_ptid (ptid_t ptid)
530 struct regcache_list *list, **list_link;
532 list = current_regcache;
533 list_link = &current_regcache;
534 while (list)
536 if (ptid_match (list->regcache->ptid, ptid))
538 struct regcache_list *dead = list;
540 *list_link = list->next;
541 regcache_xfree (list->regcache);
542 list = *list_link;
543 xfree (dead);
544 continue;
547 list_link = &list->next;
548 list = *list_link;
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). */
564 alloca (0);
567 void
568 registers_changed (void)
570 registers_changed_ptid (minus_one_ptid);
573 void
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);
592 #if 0
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
598 possible. */
599 gdb_assert (regcache_valid_p (regcache, regnum));
600 #endif
602 /* Copy the value directly into the register cache. */
603 memcpy (buf, register_buffer (regcache, regnum),
604 regcache->descr->sizeof_register[regnum]);
607 void
608 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
610 gdb_byte *buf;
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));
621 void
622 regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
623 ULONGEST *val)
625 gdb_byte *buf;
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));
636 void
637 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
639 void *buf;
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);
649 void
650 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
651 ULONGEST val)
653 void *buf;
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);
663 void
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]);
676 else
677 gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
678 regnum, buf);
681 void
682 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
683 LONGEST *val)
685 gdb_byte *buf;
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));
696 void
697 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
698 ULONGEST *val)
700 gdb_byte *buf;
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));
711 void
712 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
713 LONGEST val)
715 void *buf;
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);
725 void
726 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
727 ULONGEST val)
729 void *buf;
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);
739 void
740 regcache_raw_write (struct regcache *regcache, int regnum,
741 const gdb_byte *buf)
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))
752 return;
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))
759 return;
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);
773 void
774 regcache_cooked_write (struct regcache *regcache, int regnum,
775 const gdb_byte *buf)
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);
781 else
782 gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
783 regnum, buf);
786 /* Perform a partial register transfer using a read, modify, write
787 operation. */
789 typedef void (regcache_read_ftype) (struct regcache *regcache, int regnum,
790 void *buf);
791 typedef void (regcache_write_ftype) (struct regcache *regcache, int regnum,
792 const void *buf);
794 static void
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,
798 gdb_byte *buf),
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)
809 return;
810 /* Read (when needed) ... */
811 if (in != NULL
812 || offset > 0
813 || offset + len < descr->sizeof_register[regnum])
815 gdb_assert (read != NULL);
816 read (regcache, regnum, reg);
818 /* ... modify ... */
819 if (in != NULL)
820 memcpy (in, reg + offset, len);
821 if (out != NULL)
822 memcpy (reg + offset, out, len);
823 /* ... write (when needed). */
824 if (out != NULL)
826 gdb_assert (write != NULL);
827 write (regcache, regnum, reg);
831 void
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);
842 void
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);
853 void
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);
864 void
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. */
877 void
878 regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
880 void *regbuf;
881 size_t size;
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];
890 if (buf)
891 memcpy (regbuf, buf, size);
892 else
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. */
901 void
902 regcache_raw_collect (const struct regcache *regcache, int regnum, void *buf)
904 const void *regbuf;
905 size_t size;
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. */
918 CORE_ADDR
919 regcache_read_pc (struct regcache *regcache)
921 struct gdbarch *gdbarch = get_regcache_arch (regcache);
923 CORE_ADDR pc_val;
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)
930 ULONGEST raw_val;
932 regcache_cooked_read_unsigned (regcache,
933 gdbarch_pc_regnum (gdbarch),
934 &raw_val);
935 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
937 else
938 internal_error (__FILE__, __LINE__,
939 _("regcache_read_pc: Unable to find PC"));
940 return pc_val;
943 void
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);
953 else
954 internal_error (__FILE__, __LINE__,
955 _("regcache_write_pc: Unable to update PC"));
957 /* Writing the PC (for instance, from "load") invalidates the
958 current frame. */
959 reinit_frame_cache ();
963 static void
964 reg_flush_command (char *command, int from_tty)
966 /* Force-flush the register cache. */
967 registers_changed ();
968 if (from_tty)
969 printf_filtered (_("Register cache flushed.\n"));
972 static void
973 dump_endian_bytes (struct ui_file *file, enum bfd_endian endian,
974 const unsigned char *buf, long len)
976 int i;
978 switch (endian)
980 case BFD_ENDIAN_BIG:
981 for (i = 0; i < len; i++)
982 fprintf_unfiltered (file, "%02x", buf[i]);
983 break;
984 case BFD_ENDIAN_LITTLE:
985 for (i = len - 1; i >= 0; i--)
986 fprintf_unfiltered (file, "%02x", buf[i]);
987 break;
988 default:
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
998 static void
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;
1004 int regnum;
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];
1012 #if 0
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));
1025 #endif
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++)
1033 /* Name. */
1034 if (regnum < 0)
1035 fprintf_unfiltered (file, " %-10s", "Name");
1036 else
1038 const char *p = gdbarch_register_name (gdbarch, regnum);
1040 if (p == NULL)
1041 p = "";
1042 else if (p[0] == '\0')
1043 p = "''";
1044 fprintf_unfiltered (file, " %-10s", p);
1047 /* Number. */
1048 if (regnum < 0)
1049 fprintf_unfiltered (file, " %4s", "Nr");
1050 else
1051 fprintf_unfiltered (file, " %4d", regnum);
1053 /* Relative number. */
1054 if (regnum < 0)
1055 fprintf_unfiltered (file, " %4s", "Rel");
1056 else if (regnum < gdbarch_num_regs (gdbarch))
1057 fprintf_unfiltered (file, " %4d", regnum);
1058 else
1059 fprintf_unfiltered (file, " %4d",
1060 (regnum - gdbarch_num_regs (gdbarch)));
1062 /* Offset. */
1063 if (regnum < 0)
1064 fprintf_unfiltered (file, " %6s ", "Offset");
1065 else
1067 fprintf_unfiltered (file, " %6ld",
1068 regcache->descr->register_offset[regnum]);
1069 if (register_offset != regcache->descr->register_offset[regnum]
1070 || (regnum > 0
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);
1080 else
1081 fprintf_unfiltered (file, " ");
1082 register_offset = (regcache->descr->register_offset[regnum]
1083 + regcache->descr->sizeof_register[regnum]);
1086 /* Size. */
1087 if (regnum < 0)
1088 fprintf_unfiltered (file, " %5s ", "Size");
1089 else
1090 fprintf_unfiltered (file, " %5ld",
1091 regcache->descr->sizeof_register[regnum]);
1093 /* Type. */
1095 const char *t;
1097 if (regnum < 0)
1098 t = "Type";
1099 else
1101 static const char blt[] = "builtin_type";
1103 t = TYPE_NAME (register_type (regcache->descr->gdbarch, regnum));
1104 if (t == NULL)
1106 char *n;
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);
1112 t = n;
1114 /* Chop a leading builtin_type. */
1115 if (strncmp (t, blt, strlen (blt)) == 0)
1116 t += strlen (blt);
1118 fprintf_unfiltered (file, " %-15s", t);
1121 /* Leading space always present. */
1122 fprintf_unfiltered (file, " ");
1124 /* Value, raw. */
1125 if (what_to_dump == regcache_dump_raw)
1127 if (regnum < 0)
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>");
1133 else
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)
1146 if (regnum < 0)
1147 fprintf_unfiltered (file, "Cooked value");
1148 else
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)
1161 if (regnum < 0)
1162 fprintf_unfiltered (file, "Groups");
1163 else
1165 const char *sep = "";
1166 struct reggroup *group;
1168 for (group = reggroup_next (gdbarch, NULL);
1169 group != 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));
1175 sep = ",";
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);
1197 static void
1198 regcache_print (char *args, enum regcache_dump_what what_to_dump)
1200 if (args == NULL)
1201 regcache_dump (get_current_regcache (), gdb_stdout, what_to_dump);
1202 else
1204 struct cleanup *cleanups;
1205 struct ui_file *file = gdb_fopen (args, "w");
1207 if (file == NULL)
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);
1215 static void
1216 maintenance_print_registers (char *args, int from_tty)
1218 regcache_print (args, regcache_dump_none);
1221 static void
1222 maintenance_print_raw_registers (char *args, int from_tty)
1224 regcache_print (args, regcache_dump_raw);
1227 static void
1228 maintenance_print_cooked_registers (char *args, int from_tty)
1230 regcache_print (args, regcache_dump_cooked);
1233 static void
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 */
1241 void
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);