gdb/
[deliverable/binutils-gdb.git] / gdb / regcache.c
CommitLineData
32178cab 1/* Cache and manage the values of registers for GDB, the GNU debugger.
3fadccb3 2
6aba47ca 3 Copyright (C) 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000, 2001,
7b6bb8da 4 2002, 2004, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
32178cab
MS
5
6 This file is part of GDB.
7
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
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
32178cab
MS
11 (at your option) any later version.
12
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.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
32178cab
MS
20
21#include "defs.h"
32178cab
MS
22#include "inferior.h"
23#include "target.h"
24#include "gdbarch.h"
705152c5 25#include "gdbcmd.h"
4e052eda 26#include "regcache.h"
b59ff9d5 27#include "reggroups.h"
61a0eb5b 28#include "gdb_assert.h"
b66d6d2e 29#include "gdb_string.h"
af030b9a 30#include "gdbcmd.h" /* For maintenanceprintlist. */
f4c5303c 31#include "observer.h"
05d1431c 32#include "exceptions.h"
32178cab
MS
33
34/*
35 * DATA STRUCTURE
36 *
37 * Here is the actual register cache.
38 */
39
3fadccb3 40/* Per-architecture object describing the layout of a register cache.
0df8b418 41 Computed once when the architecture is created. */
3fadccb3
AC
42
43struct gdbarch_data *regcache_descr_handle;
44
45struct regcache_descr
46{
47 /* The architecture this descriptor belongs to. */
48 struct gdbarch *gdbarch;
49
bb1db049
AC
50 /* The raw register cache. Each raw (or hard) register is supplied
51 by the target interface. The raw cache should not contain
52 redundant information - if the PC is constructed from two
d2f0b918 53 registers then those registers and not the PC lives in the raw
bb1db049 54 cache. */
3fadccb3
AC
55 int nr_raw_registers;
56 long sizeof_raw_registers;
ee99023e 57 long sizeof_raw_register_status;
3fadccb3 58
d138e37a
AC
59 /* The cooked register space. Each cooked register in the range
60 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
61 register. The remaining [NR_RAW_REGISTERS
02f60eae 62 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
d138e37a 63 both raw registers and memory by the architecture methods
02f60eae 64 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */
d138e37a 65 int nr_cooked_registers;
067df2e5 66 long sizeof_cooked_registers;
ee99023e 67 long sizeof_cooked_register_status;
d138e37a
AC
68
69 /* Offset and size (in 8 bit bytes), of reach register in the
70 register cache. All registers (including those in the range
99e42fd8
PA
71 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an
72 offset. */
3fadccb3 73 long *register_offset;
3fadccb3 74 long *sizeof_register;
3fadccb3 75
bb425013
AC
76 /* Cached table containing the type of each register. */
77 struct type **register_type;
3fadccb3
AC
78};
79
3fadccb3
AC
80static void *
81init_regcache_descr (struct gdbarch *gdbarch)
82{
83 int i;
84 struct regcache_descr *descr;
85 gdb_assert (gdbarch != NULL);
86
bb425013 87 /* Create an initial, zero filled, table. */
116f06ea 88 descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr);
3fadccb3 89 descr->gdbarch = gdbarch;
3fadccb3 90
d138e37a
AC
91 /* Total size of the register space. The raw registers are mapped
92 directly onto the raw register cache while the pseudo's are
3fadccb3 93 either mapped onto raw-registers or memory. */
214e098a
UW
94 descr->nr_cooked_registers = gdbarch_num_regs (gdbarch)
95 + gdbarch_num_pseudo_regs (gdbarch);
ee99023e
PA
96 descr->sizeof_cooked_register_status
97 = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
3fadccb3 98
bb425013 99 /* Fill in a table of register types. */
116f06ea 100 descr->register_type
3e43a32a
MS
101 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
102 struct type *);
bb425013 103 for (i = 0; i < descr->nr_cooked_registers; i++)
336a3131 104 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
bb425013 105
bb1db049
AC
106 /* Construct a strictly RAW register cache. Don't allow pseudo's
107 into the register cache. */
214e098a 108 descr->nr_raw_registers = gdbarch_num_regs (gdbarch);
ee99023e 109 descr->sizeof_raw_register_status = gdbarch_num_regs (gdbarch);
bb1db049 110
067df2e5 111 /* Lay out the register cache.
3fadccb3 112
bb425013
AC
113 NOTE: cagney/2002-05-22: Only register_type() is used when
114 constructing the register cache. It is assumed that the
115 register's raw size, virtual size and type length are all the
116 same. */
3fadccb3
AC
117
118 {
119 long offset = 0;
123f5f96 120
116f06ea
AC
121 descr->sizeof_register
122 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
123 descr->register_offset
124 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
99e42fd8
PA
125 for (i = 0; i < descr->nr_raw_registers; i++)
126 {
127 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
128 descr->register_offset[i] = offset;
129 offset += descr->sizeof_register[i];
130 gdb_assert (MAX_REGISTER_SIZE >= descr->sizeof_register[i]);
131 }
132 /* Set the real size of the raw register cache buffer. */
133 descr->sizeof_raw_registers = offset;
134
135 for (; i < descr->nr_cooked_registers; i++)
3fadccb3 136 {
bb425013 137 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
3fadccb3
AC
138 descr->register_offset[i] = offset;
139 offset += descr->sizeof_register[i];
123a958e 140 gdb_assert (MAX_REGISTER_SIZE >= descr->sizeof_register[i]);
3fadccb3 141 }
99e42fd8 142 /* Set the real size of the readonly register cache buffer. */
067df2e5 143 descr->sizeof_cooked_registers = offset;
3fadccb3
AC
144 }
145
3fadccb3
AC
146 return descr;
147}
148
149static struct regcache_descr *
150regcache_descr (struct gdbarch *gdbarch)
151{
152 return gdbarch_data (gdbarch, regcache_descr_handle);
153}
154
bb425013
AC
155/* Utility functions returning useful register attributes stored in
156 the regcache descr. */
157
158struct type *
159register_type (struct gdbarch *gdbarch, int regnum)
160{
161 struct regcache_descr *descr = regcache_descr (gdbarch);
123f5f96 162
bb425013
AC
163 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
164 return descr->register_type[regnum];
165}
166
0ed04cce
AC
167/* Utility functions returning useful register attributes stored in
168 the regcache descr. */
169
08a617da
AC
170int
171register_size (struct gdbarch *gdbarch, int regnum)
172{
173 struct regcache_descr *descr = regcache_descr (gdbarch);
174 int size;
123f5f96 175
f57d151a 176 gdb_assert (regnum >= 0
214e098a
UW
177 && regnum < (gdbarch_num_regs (gdbarch)
178 + gdbarch_num_pseudo_regs (gdbarch)));
08a617da 179 size = descr->sizeof_register[regnum];
08a617da
AC
180 return size;
181}
182
3fadccb3
AC
183/* The register cache for storing raw register values. */
184
185struct regcache
186{
187 struct regcache_descr *descr;
6c95b8df
PA
188
189 /* The address space of this register cache (for registers where it
190 makes sense, like PC or SP). */
191 struct address_space *aspace;
192
51b1fe4e 193 /* The register buffers. A read-only register cache can hold the
f57d151a
UW
194 full [0 .. gdbarch_num_regs + gdbarch_num_pseudo_regs) while a read/write
195 register cache can only hold [0 .. gdbarch_num_regs). */
2d522557 196 gdb_byte *registers;
ee99023e
PA
197 /* Register cache status. */
198 signed char *register_status;
2d28509a
AC
199 /* Is this a read-only cache? A read-only cache is used for saving
200 the target's register state (e.g, across an inferior function
201 call or just before forcing a function return). A read-only
202 cache can only be updated via the methods regcache_dup() and
203 regcache_cpy(). The actual contents are determined by the
204 reggroup_save and reggroup_restore methods. */
205 int readonly_p;
594f7785
UW
206 /* If this is a read-write cache, which thread's registers is
207 it connected to? */
208 ptid_t ptid;
3fadccb3
AC
209};
210
99e42fd8
PA
211static struct regcache *
212regcache_xmalloc_1 (struct gdbarch *gdbarch, struct address_space *aspace,
213 int readonly_p)
3fadccb3
AC
214{
215 struct regcache_descr *descr;
216 struct regcache *regcache;
123f5f96 217
3fadccb3
AC
218 gdb_assert (gdbarch != NULL);
219 descr = regcache_descr (gdbarch);
220 regcache = XMALLOC (struct regcache);
221 regcache->descr = descr;
99e42fd8
PA
222 regcache->readonly_p = readonly_p;
223 if (readonly_p)
224 {
225 regcache->registers
226 = XCALLOC (descr->sizeof_cooked_registers, gdb_byte);
ee99023e
PA
227 regcache->register_status
228 = XCALLOC (descr->sizeof_cooked_register_status, gdb_byte);
99e42fd8
PA
229 }
230 else
231 {
232 regcache->registers
233 = XCALLOC (descr->sizeof_raw_registers, gdb_byte);
ee99023e
PA
234 regcache->register_status
235 = XCALLOC (descr->sizeof_raw_register_status, gdb_byte);
99e42fd8 236 }
d37346f0 237 regcache->aspace = aspace;
594f7785 238 regcache->ptid = minus_one_ptid;
3fadccb3
AC
239 return regcache;
240}
241
99e42fd8
PA
242struct regcache *
243regcache_xmalloc (struct gdbarch *gdbarch, struct address_space *aspace)
244{
245 return regcache_xmalloc_1 (gdbarch, aspace, 1);
246}
247
3fadccb3
AC
248void
249regcache_xfree (struct regcache *regcache)
250{
251 if (regcache == NULL)
252 return;
51b1fe4e 253 xfree (regcache->registers);
ee99023e 254 xfree (regcache->register_status);
3fadccb3
AC
255 xfree (regcache);
256}
257
b9362cc7 258static void
36160dc4
AC
259do_regcache_xfree (void *data)
260{
261 regcache_xfree (data);
262}
263
264struct cleanup *
265make_cleanup_regcache_xfree (struct regcache *regcache)
266{
267 return make_cleanup (do_regcache_xfree, regcache);
268}
269
41d35cb0
MK
270/* Return REGCACHE's architecture. */
271
272struct gdbarch *
273get_regcache_arch (const struct regcache *regcache)
274{
275 return regcache->descr->gdbarch;
276}
277
6c95b8df
PA
278struct address_space *
279get_regcache_aspace (const struct regcache *regcache)
280{
281 return regcache->aspace;
282}
283
51b1fe4e
AC
284/* Return a pointer to register REGNUM's buffer cache. */
285
2d522557 286static gdb_byte *
9a661b68 287register_buffer (const struct regcache *regcache, int regnum)
51b1fe4e
AC
288{
289 return regcache->registers + regcache->descr->register_offset[regnum];
290}
291
2d28509a 292void
5602984a
AC
293regcache_save (struct regcache *dst, regcache_cooked_read_ftype *cooked_read,
294 void *src)
2d28509a
AC
295{
296 struct gdbarch *gdbarch = dst->descr->gdbarch;
2d522557 297 gdb_byte buf[MAX_REGISTER_SIZE];
2d28509a 298 int regnum;
123f5f96 299
2d28509a 300 /* The DST should be `read-only', if it wasn't then the save would
5602984a 301 end up trying to write the register values back out to the
2d28509a 302 target. */
2d28509a
AC
303 gdb_assert (dst->readonly_p);
304 /* Clear the dest. */
305 memset (dst->registers, 0, dst->descr->sizeof_cooked_registers);
ee99023e
PA
306 memset (dst->register_status, 0,
307 dst->descr->sizeof_cooked_register_status);
2d28509a 308 /* Copy over any registers (identified by their membership in the
f57d151a
UW
309 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
310 gdbarch_num_pseudo_regs) range is checked since some architectures need
5602984a 311 to save/restore `cooked' registers that live in memory. */
2d28509a
AC
312 for (regnum = 0; regnum < dst->descr->nr_cooked_registers; regnum++)
313 {
314 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
315 {
05d1431c 316 enum register_status status = cooked_read (src, regnum, buf);
123f5f96 317
05d1431c
PA
318 if (status == REG_VALID)
319 memcpy (register_buffer (dst, regnum), buf,
320 register_size (gdbarch, regnum));
321 else
5602984a 322 {
05d1431c
PA
323 gdb_assert (status != REG_UNKNOWN);
324
325 memset (register_buffer (dst, regnum), 0,
5602984a 326 register_size (gdbarch, regnum));
5602984a 327 }
05d1431c 328 dst->register_status[regnum] = status;
2d28509a
AC
329 }
330 }
331}
332
333void
5602984a
AC
334regcache_restore (struct regcache *dst,
335 regcache_cooked_read_ftype *cooked_read,
2d522557 336 void *cooked_read_context)
2d28509a
AC
337{
338 struct gdbarch *gdbarch = dst->descr->gdbarch;
2d522557 339 gdb_byte buf[MAX_REGISTER_SIZE];
2d28509a 340 int regnum;
123f5f96 341
5602984a
AC
342 /* The dst had better not be read-only. If it is, the `restore'
343 doesn't make much sense. */
2d28509a 344 gdb_assert (!dst->readonly_p);
2d28509a 345 /* Copy over any registers, being careful to only restore those that
f57d151a
UW
346 were both saved and need to be restored. The full [0 .. gdbarch_num_regs
347 + gdbarch_num_pseudo_regs) range is checked since some architectures need
5602984a
AC
348 to save/restore `cooked' registers that live in memory. */
349 for (regnum = 0; regnum < dst->descr->nr_cooked_registers; regnum++)
2d28509a 350 {
5602984a 351 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
2d28509a 352 {
2d522557 353 int valid = cooked_read (cooked_read_context, regnum, buf);
123f5f96 354
5602984a
AC
355 if (valid)
356 regcache_cooked_write (dst, regnum, buf);
2d28509a
AC
357 }
358 }
359}
360
05d1431c 361static enum register_status
2d522557 362do_cooked_read (void *src, int regnum, gdb_byte *buf)
5602984a
AC
363{
364 struct regcache *regcache = src;
123f5f96 365
05d1431c 366 return regcache_cooked_read (regcache, regnum, buf);
5602984a
AC
367}
368
3fadccb3
AC
369void
370regcache_cpy (struct regcache *dst, struct regcache *src)
371{
3fadccb3
AC
372 gdb_assert (src != NULL && dst != NULL);
373 gdb_assert (src->descr->gdbarch == dst->descr->gdbarch);
374 gdb_assert (src != dst);
2d28509a 375 gdb_assert (src->readonly_p || dst->readonly_p);
6c95b8df 376
2d28509a 377 if (!src->readonly_p)
5602984a 378 regcache_save (dst, do_cooked_read, src);
2d28509a 379 else if (!dst->readonly_p)
5602984a 380 regcache_restore (dst, do_cooked_read, src);
2d28509a
AC
381 else
382 regcache_cpy_no_passthrough (dst, src);
3fadccb3
AC
383}
384
385void
386regcache_cpy_no_passthrough (struct regcache *dst, struct regcache *src)
387{
3fadccb3
AC
388 gdb_assert (src != NULL && dst != NULL);
389 gdb_assert (src->descr->gdbarch == dst->descr->gdbarch);
390 /* NOTE: cagney/2002-05-17: Don't let the caller do a no-passthrough
ee99023e
PA
391 move of data into a thread's regcache. Doing this would be silly
392 - it would mean that regcache->register_status would be
393 completely invalid. */
99e42fd8 394 gdb_assert (dst->readonly_p && src->readonly_p);
6c95b8df 395
99e42fd8
PA
396 memcpy (dst->registers, src->registers,
397 dst->descr->sizeof_cooked_registers);
ee99023e
PA
398 memcpy (dst->register_status, src->register_status,
399 dst->descr->sizeof_cooked_register_status);
3fadccb3
AC
400}
401
402struct regcache *
403regcache_dup (struct regcache *src)
404{
405 struct regcache *newbuf;
123f5f96 406
d37346f0 407 newbuf = regcache_xmalloc (src->descr->gdbarch, get_regcache_aspace (src));
3fadccb3
AC
408 regcache_cpy (newbuf, src);
409 return newbuf;
410}
411
3fadccb3 412int
ee99023e 413regcache_register_status (const struct regcache *regcache, int regnum)
3fadccb3
AC
414{
415 gdb_assert (regcache != NULL);
6ed7ea50
UW
416 gdb_assert (regnum >= 0);
417 if (regcache->readonly_p)
418 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
419 else
420 gdb_assert (regnum < regcache->descr->nr_raw_registers);
421
ee99023e 422 return regcache->register_status[regnum];
3fadccb3
AC
423}
424
9c5ea4d9
UW
425void
426regcache_invalidate (struct regcache *regcache, int regnum)
427{
428 gdb_assert (regcache != NULL);
429 gdb_assert (regnum >= 0);
430 gdb_assert (!regcache->readonly_p);
431 gdb_assert (regnum < regcache->descr->nr_raw_registers);
ee99023e 432 regcache->register_status[regnum] = REG_UNKNOWN;
9c5ea4d9
UW
433}
434
435
3fadccb3 436/* Global structure containing the current regcache. */
3fadccb3 437
5ebd2499 438/* NOTE: this is a write-through cache. There is no "dirty" bit for
32178cab
MS
439 recording if the register values have been changed (eg. by the
440 user). Therefore all registers must be written back to the
441 target when appropriate. */
442
c2250ad1 443struct regcache_list
594f7785 444{
c2250ad1
UW
445 struct regcache *regcache;
446 struct regcache_list *next;
447};
448
449static struct regcache_list *current_regcache;
450
451struct regcache *
452get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch)
453{
454 struct regcache_list *list;
455 struct regcache *new_regcache;
594f7785 456
c2250ad1
UW
457 for (list = current_regcache; list; list = list->next)
458 if (ptid_equal (list->regcache->ptid, ptid)
459 && get_regcache_arch (list->regcache) == gdbarch)
460 return list->regcache;
594f7785 461
99e42fd8
PA
462 new_regcache = regcache_xmalloc_1 (gdbarch,
463 target_thread_address_space (ptid), 0);
c2250ad1 464 new_regcache->ptid = ptid;
6c95b8df 465 gdb_assert (new_regcache->aspace != NULL);
594f7785 466
c2250ad1
UW
467 list = xmalloc (sizeof (struct regcache_list));
468 list->regcache = new_regcache;
469 list->next = current_regcache;
470 current_regcache = list;
594f7785 471
c2250ad1 472 return new_regcache;
594f7785
UW
473}
474
c2250ad1
UW
475static ptid_t current_thread_ptid;
476static struct gdbarch *current_thread_arch;
477
478struct regcache *
479get_thread_regcache (ptid_t ptid)
480{
481 if (!current_thread_arch || !ptid_equal (current_thread_ptid, ptid))
482 {
483 current_thread_ptid = ptid;
484 current_thread_arch = target_thread_architecture (ptid);
485 }
486
487 return get_thread_arch_regcache (ptid, current_thread_arch);
488}
489
490struct regcache *
491get_current_regcache (void)
594f7785
UW
492{
493 return get_thread_regcache (inferior_ptid);
494}
32178cab 495
32178cab 496
f4c5303c
OF
497/* Observer for the target_changed event. */
498
2c0b251b 499static void
f4c5303c
OF
500regcache_observer_target_changed (struct target_ops *target)
501{
502 registers_changed ();
503}
504
5231c1fd
PA
505/* Update global variables old ptids to hold NEW_PTID if they were
506 holding OLD_PTID. */
507static void
508regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
509{
c2250ad1
UW
510 struct regcache_list *list;
511
512 for (list = current_regcache; list; list = list->next)
513 if (ptid_equal (list->regcache->ptid, old_ptid))
514 list->regcache->ptid = new_ptid;
5231c1fd
PA
515}
516
32178cab
MS
517/* Low level examining and depositing of registers.
518
519 The caller is responsible for making sure that the inferior is
520 stopped before calling the fetching routines, or it will get
521 garbage. (a change from GDB version 3, in which the caller got the
522 value from the last stop). */
523
524/* REGISTERS_CHANGED ()
525
526 Indicate that registers may have changed, so invalidate the cache. */
527
528void
e66408ed 529registers_changed_ptid (ptid_t ptid)
32178cab 530{
e66408ed 531 struct regcache_list *list, **list_link;
041274d8 532 int wildcard = ptid_equal (ptid, minus_one_ptid);
c2250ad1 533
e66408ed
PA
534 list = current_regcache;
535 list_link = &current_regcache;
536 while (list)
c2250ad1 537 {
e66408ed
PA
538 if (ptid_match (list->regcache->ptid, ptid))
539 {
540 struct regcache_list *dead = list;
541
542 *list_link = list->next;
543 regcache_xfree (list->regcache);
544 list = *list_link;
545 xfree (dead);
546 continue;
547 }
548
549 list_link = &list->next;
550 list = *list_link;
c2250ad1 551 }
32178cab 552
041274d8
PA
553 if (wildcard || ptid_equal (ptid, current_thread_ptid))
554 {
555 current_thread_ptid = null_ptid;
556 current_thread_arch = NULL;
557 }
32178cab 558
041274d8
PA
559 if (wildcard || ptid_equal (ptid, inferior_ptid))
560 {
561 /* We just deleted the regcache of the current thread. Need to
562 forget about any frames we have cached, too. */
563 reinit_frame_cache ();
564 }
565}
c2250ad1 566
041274d8
PA
567void
568registers_changed (void)
569{
570 registers_changed_ptid (minus_one_ptid);
a5d9d57d 571
32178cab
MS
572 /* Force cleanup of any alloca areas if using C alloca instead of
573 a builtin alloca. This particular call is used to clean up
574 areas allocated by low level target code which may build up
575 during lengthy interactions between gdb and the target before
576 gdb gives control to the user (ie watchpoints). */
577 alloca (0);
32178cab
MS
578}
579
05d1431c 580enum register_status
2d522557 581regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)
61a0eb5b 582{
3fadccb3
AC
583 gdb_assert (regcache != NULL && buf != NULL);
584 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
3fadccb3
AC
585 /* Make certain that the register cache is up-to-date with respect
586 to the current thread. This switching shouldn't be necessary
587 only there is still only one target side register cache. Sigh!
588 On the bright side, at least there is a regcache object. */
2d28509a 589 if (!regcache->readonly_p)
3fadccb3 590 {
ee99023e 591 if (regcache_register_status (regcache, regnum) == REG_UNKNOWN)
3fadccb3 592 {
594f7785 593 struct cleanup *old_chain = save_inferior_ptid ();
123f5f96 594
594f7785
UW
595 inferior_ptid = regcache->ptid;
596 target_fetch_registers (regcache, regnum);
597 do_cleanups (old_chain);
3fadccb3 598 }
0a8146bf
AC
599#if 0
600 /* FIXME: cagney/2004-08-07: At present a number of targets
04c663e3
DA
601 forget (or didn't know that they needed) to set this leading to
602 panics. Also is the problem that targets need to indicate
0a8146bf
AC
603 that a register is in one of the possible states: valid,
604 undefined, unknown. The last of which isn't yet
605 possible. */
ee99023e 606 gdb_assert (regcache_register_status (regcache, regnum) == REG_VALID);
0a8146bf 607#endif
3fadccb3 608 }
05d1431c
PA
609
610 if (regcache->register_status[regnum] != REG_VALID)
611 memset (buf, 0, regcache->descr->sizeof_register[regnum]);
612 else
613 memcpy (buf, register_buffer (regcache, regnum),
614 regcache->descr->sizeof_register[regnum]);
615
616 return regcache->register_status[regnum];
61a0eb5b
AC
617}
618
05d1431c 619enum register_status
28fc6740
AC
620regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
621{
2d522557 622 gdb_byte *buf;
05d1431c 623 enum register_status status;
123f5f96 624
28fc6740
AC
625 gdb_assert (regcache != NULL);
626 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
627 buf = alloca (regcache->descr->sizeof_register[regnum]);
05d1431c
PA
628 status = regcache_raw_read (regcache, regnum, buf);
629 if (status == REG_VALID)
630 *val = extract_signed_integer
631 (buf, regcache->descr->sizeof_register[regnum],
632 gdbarch_byte_order (regcache->descr->gdbarch));
633 else
634 *val = 0;
635 return status;
28fc6740
AC
636}
637
05d1431c 638enum register_status
28fc6740
AC
639regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
640 ULONGEST *val)
641{
2d522557 642 gdb_byte *buf;
05d1431c 643 enum register_status status;
123f5f96 644
28fc6740
AC
645 gdb_assert (regcache != NULL);
646 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
647 buf = alloca (regcache->descr->sizeof_register[regnum]);
05d1431c
PA
648 status = regcache_raw_read (regcache, regnum, buf);
649 if (status == REG_VALID)
650 *val = extract_unsigned_integer
651 (buf, regcache->descr->sizeof_register[regnum],
652 gdbarch_byte_order (regcache->descr->gdbarch));
653 else
654 *val = 0;
655 return status;
28fc6740
AC
656}
657
c00dcbe9
MK
658void
659regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
660{
661 void *buf;
123f5f96 662
c00dcbe9
MK
663 gdb_assert (regcache != NULL);
664 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_raw_registers);
665 buf = alloca (regcache->descr->sizeof_register[regnum]);
e17a4113
UW
666 store_signed_integer (buf, regcache->descr->sizeof_register[regnum],
667 gdbarch_byte_order (regcache->descr->gdbarch), val);
c00dcbe9
MK
668 regcache_raw_write (regcache, regnum, buf);
669}
670
671void
672regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
673 ULONGEST val)
674{
675 void *buf;
123f5f96 676
c00dcbe9
MK
677 gdb_assert (regcache != NULL);
678 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_raw_registers);
679 buf = alloca (regcache->descr->sizeof_register[regnum]);
e17a4113
UW
680 store_unsigned_integer (buf, regcache->descr->sizeof_register[regnum],
681 gdbarch_byte_order (regcache->descr->gdbarch), val);
c00dcbe9
MK
682 regcache_raw_write (regcache, regnum, buf);
683}
684
05d1431c 685enum register_status
2d522557 686regcache_cooked_read (struct regcache *regcache, int regnum, gdb_byte *buf)
68365089 687{
d138e37a 688 gdb_assert (regnum >= 0);
68365089
AC
689 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
690 if (regnum < regcache->descr->nr_raw_registers)
05d1431c 691 return regcache_raw_read (regcache, regnum, buf);
2d28509a 692 else if (regcache->readonly_p
05d1431c
PA
693 && regcache->register_status[regnum] != REG_UNKNOWN)
694 {
695 /* Read-only register cache, perhaps the cooked value was
696 cached? */
697 struct gdbarch *gdbarch = regcache->descr->gdbarch;
698
699 if (regcache->register_status[regnum] == REG_VALID)
700 memcpy (buf, register_buffer (regcache, regnum),
701 regcache->descr->sizeof_register[regnum]);
702 else
703 memset (buf, 0, regcache->descr->sizeof_register[regnum]);
704
705 return regcache->register_status[regnum];
706 }
d138e37a 707 else
05d1431c
PA
708 return gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
709 regnum, buf);
61a0eb5b
AC
710}
711
05d1431c 712enum register_status
a378f419
AC
713regcache_cooked_read_signed (struct regcache *regcache, int regnum,
714 LONGEST *val)
715{
05d1431c 716 enum register_status status;
2d522557 717 gdb_byte *buf;
123f5f96 718
a378f419 719 gdb_assert (regcache != NULL);
a66a9c23 720 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_cooked_registers);
a378f419 721 buf = alloca (regcache->descr->sizeof_register[regnum]);
05d1431c
PA
722 status = regcache_cooked_read (regcache, regnum, buf);
723 if (status == REG_VALID)
724 *val = extract_signed_integer
725 (buf, regcache->descr->sizeof_register[regnum],
726 gdbarch_byte_order (regcache->descr->gdbarch));
727 else
728 *val = 0;
729 return status;
a378f419
AC
730}
731
05d1431c 732enum register_status
a378f419
AC
733regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
734 ULONGEST *val)
735{
05d1431c 736 enum register_status status;
2d522557 737 gdb_byte *buf;
123f5f96 738
a378f419 739 gdb_assert (regcache != NULL);
a66a9c23 740 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_cooked_registers);
a378f419 741 buf = alloca (regcache->descr->sizeof_register[regnum]);
05d1431c
PA
742 status = regcache_cooked_read (regcache, regnum, buf);
743 if (status == REG_VALID)
744 *val = extract_unsigned_integer
745 (buf, regcache->descr->sizeof_register[regnum],
746 gdbarch_byte_order (regcache->descr->gdbarch));
747 else
748 *val = 0;
749 return status;
a378f419
AC
750}
751
a66a9c23
AC
752void
753regcache_cooked_write_signed (struct regcache *regcache, int regnum,
754 LONGEST val)
755{
756 void *buf;
123f5f96 757
a66a9c23
AC
758 gdb_assert (regcache != NULL);
759 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_cooked_registers);
760 buf = alloca (regcache->descr->sizeof_register[regnum]);
e17a4113
UW
761 store_signed_integer (buf, regcache->descr->sizeof_register[regnum],
762 gdbarch_byte_order (regcache->descr->gdbarch), val);
a66a9c23
AC
763 regcache_cooked_write (regcache, regnum, buf);
764}
765
766void
767regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
768 ULONGEST val)
769{
770 void *buf;
123f5f96 771
a66a9c23
AC
772 gdb_assert (regcache != NULL);
773 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_cooked_registers);
774 buf = alloca (regcache->descr->sizeof_register[regnum]);
e17a4113
UW
775 store_unsigned_integer (buf, regcache->descr->sizeof_register[regnum],
776 gdbarch_byte_order (regcache->descr->gdbarch), val);
a66a9c23
AC
777 regcache_cooked_write (regcache, regnum, buf);
778}
779
61a0eb5b 780void
2d522557
AC
781regcache_raw_write (struct regcache *regcache, int regnum,
782 const gdb_byte *buf)
61a0eb5b 783{
594f7785
UW
784 struct cleanup *old_chain;
785
3fadccb3
AC
786 gdb_assert (regcache != NULL && buf != NULL);
787 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
2d28509a 788 gdb_assert (!regcache->readonly_p);
3fadccb3 789
3fadccb3
AC
790 /* On the sparc, writing %g0 is a no-op, so we don't even want to
791 change the registers array if something writes to this register. */
214e098a 792 if (gdbarch_cannot_store_register (get_regcache_arch (regcache), regnum))
3fadccb3
AC
793 return;
794
3fadccb3 795 /* If we have a valid copy of the register, and new value == old
0df8b418 796 value, then don't bother doing the actual store. */
ee99023e 797 if (regcache_register_status (regcache, regnum) == REG_VALID
3fadccb3
AC
798 && (memcmp (register_buffer (regcache, regnum), buf,
799 regcache->descr->sizeof_register[regnum]) == 0))
800 return;
801
594f7785
UW
802 old_chain = save_inferior_ptid ();
803 inferior_ptid = regcache->ptid;
804
316f2060 805 target_prepare_to_store (regcache);
3fadccb3
AC
806 memcpy (register_buffer (regcache, regnum), buf,
807 regcache->descr->sizeof_register[regnum]);
ee99023e 808 regcache->register_status[regnum] = REG_VALID;
56be3814 809 target_store_registers (regcache, regnum);
594f7785
UW
810
811 do_cleanups (old_chain);
61a0eb5b
AC
812}
813
68365089 814void
2d522557
AC
815regcache_cooked_write (struct regcache *regcache, int regnum,
816 const gdb_byte *buf)
68365089 817{
d138e37a 818 gdb_assert (regnum >= 0);
68365089
AC
819 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
820 if (regnum < regcache->descr->nr_raw_registers)
821 regcache_raw_write (regcache, regnum, buf);
d138e37a 822 else
68365089 823 gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
d8124050 824 regnum, buf);
61a0eb5b
AC
825}
826
06c0b04e
AC
827/* Perform a partial register transfer using a read, modify, write
828 operation. */
829
830typedef void (regcache_read_ftype) (struct regcache *regcache, int regnum,
831 void *buf);
832typedef void (regcache_write_ftype) (struct regcache *regcache, int regnum,
833 const void *buf);
834
05d1431c 835static enum register_status
06c0b04e
AC
836regcache_xfer_part (struct regcache *regcache, int regnum,
837 int offset, int len, void *in, const void *out,
05d1431c
PA
838 enum register_status (*read) (struct regcache *regcache,
839 int regnum,
840 gdb_byte *buf),
2d522557
AC
841 void (*write) (struct regcache *regcache, int regnum,
842 const gdb_byte *buf))
06c0b04e
AC
843{
844 struct regcache_descr *descr = regcache->descr;
fc1a4b47 845 gdb_byte reg[MAX_REGISTER_SIZE];
123f5f96 846
06c0b04e
AC
847 gdb_assert (offset >= 0 && offset <= descr->sizeof_register[regnum]);
848 gdb_assert (len >= 0 && offset + len <= descr->sizeof_register[regnum]);
849 /* Something to do? */
850 if (offset + len == 0)
05d1431c 851 return REG_VALID;
0df8b418 852 /* Read (when needed) ... */
06c0b04e
AC
853 if (in != NULL
854 || offset > 0
855 || offset + len < descr->sizeof_register[regnum])
856 {
05d1431c
PA
857 enum register_status status;
858
06c0b04e 859 gdb_assert (read != NULL);
05d1431c
PA
860 status = read (regcache, regnum, reg);
861 if (status != REG_VALID)
862 return status;
06c0b04e 863 }
0df8b418 864 /* ... modify ... */
06c0b04e
AC
865 if (in != NULL)
866 memcpy (in, reg + offset, len);
867 if (out != NULL)
868 memcpy (reg + offset, out, len);
869 /* ... write (when needed). */
870 if (out != NULL)
871 {
872 gdb_assert (write != NULL);
873 write (regcache, regnum, reg);
874 }
05d1431c
PA
875
876 return REG_VALID;
06c0b04e
AC
877}
878
05d1431c 879enum register_status
06c0b04e 880regcache_raw_read_part (struct regcache *regcache, int regnum,
2d522557 881 int offset, int len, gdb_byte *buf)
06c0b04e
AC
882{
883 struct regcache_descr *descr = regcache->descr;
123f5f96 884
06c0b04e 885 gdb_assert (regnum >= 0 && regnum < descr->nr_raw_registers);
05d1431c
PA
886 return regcache_xfer_part (regcache, regnum, offset, len, buf, NULL,
887 regcache_raw_read, regcache_raw_write);
06c0b04e
AC
888}
889
890void
891regcache_raw_write_part (struct regcache *regcache, int regnum,
2d522557 892 int offset, int len, const gdb_byte *buf)
06c0b04e
AC
893{
894 struct regcache_descr *descr = regcache->descr;
123f5f96 895
06c0b04e
AC
896 gdb_assert (regnum >= 0 && regnum < descr->nr_raw_registers);
897 regcache_xfer_part (regcache, regnum, offset, len, NULL, buf,
898 regcache_raw_read, regcache_raw_write);
899}
900
05d1431c 901enum register_status
06c0b04e 902regcache_cooked_read_part (struct regcache *regcache, int regnum,
2d522557 903 int offset, int len, gdb_byte *buf)
06c0b04e
AC
904{
905 struct regcache_descr *descr = regcache->descr;
123f5f96 906
06c0b04e 907 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
05d1431c
PA
908 return regcache_xfer_part (regcache, regnum, offset, len, buf, NULL,
909 regcache_cooked_read, regcache_cooked_write);
06c0b04e
AC
910}
911
912void
913regcache_cooked_write_part (struct regcache *regcache, int regnum,
2d522557 914 int offset, int len, const gdb_byte *buf)
06c0b04e
AC
915{
916 struct regcache_descr *descr = regcache->descr;
123f5f96 917
06c0b04e
AC
918 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
919 regcache_xfer_part (regcache, regnum, offset, len, NULL, buf,
920 regcache_cooked_read, regcache_cooked_write);
921}
32178cab 922
a16d75cc 923/* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */
9a661b68
MK
924
925void
6618125d 926regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
9a661b68
MK
927{
928 void *regbuf;
929 size_t size;
930
a16d75cc 931 gdb_assert (regcache != NULL);
9a661b68
MK
932 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
933 gdb_assert (!regcache->readonly_p);
934
9a661b68
MK
935 regbuf = register_buffer (regcache, regnum);
936 size = regcache->descr->sizeof_register[regnum];
937
938 if (buf)
ee99023e
PA
939 {
940 memcpy (regbuf, buf, size);
941 regcache->register_status[regnum] = REG_VALID;
942 }
9a661b68 943 else
ee99023e
PA
944 {
945 /* This memset not strictly necessary, but better than garbage
946 in case the register value manages to escape somewhere (due
947 to a bug, no less). */
948 memset (regbuf, 0, size);
949 regcache->register_status[regnum] = REG_UNAVAILABLE;
950 }
9a661b68
MK
951}
952
953/* Collect register REGNUM from REGCACHE and store its contents in BUF. */
954
955void
6618125d 956regcache_raw_collect (const struct regcache *regcache, int regnum, void *buf)
9a661b68
MK
957{
958 const void *regbuf;
959 size_t size;
960
961 gdb_assert (regcache != NULL && buf != NULL);
962 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
963
964 regbuf = register_buffer (regcache, regnum);
965 size = regcache->descr->sizeof_register[regnum];
966 memcpy (buf, regbuf, size);
967}
968
193cb69f 969
515630c5 970/* Special handling for register PC. */
32178cab
MS
971
972CORE_ADDR
515630c5 973regcache_read_pc (struct regcache *regcache)
32178cab 974{
61a1198a
UW
975 struct gdbarch *gdbarch = get_regcache_arch (regcache);
976
32178cab
MS
977 CORE_ADDR pc_val;
978
61a1198a
UW
979 if (gdbarch_read_pc_p (gdbarch))
980 pc_val = gdbarch_read_pc (gdbarch, regcache);
cde9ea48 981 /* Else use per-frame method on get_current_frame. */
214e098a 982 else if (gdbarch_pc_regnum (gdbarch) >= 0)
cde9ea48 983 {
61a1198a 984 ULONGEST raw_val;
123f5f96 985
05d1431c
PA
986 if (regcache_cooked_read_unsigned (regcache,
987 gdbarch_pc_regnum (gdbarch),
988 &raw_val) == REG_UNAVAILABLE)
989 throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
990
214e098a 991 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
cde9ea48
AC
992 }
993 else
515630c5
UW
994 internal_error (__FILE__, __LINE__,
995 _("regcache_read_pc: Unable to find PC"));
32178cab
MS
996 return pc_val;
997}
998
32178cab 999void
515630c5 1000regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
32178cab 1001{
61a1198a
UW
1002 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1003
61a1198a
UW
1004 if (gdbarch_write_pc_p (gdbarch))
1005 gdbarch_write_pc (gdbarch, regcache, pc);
214e098a 1006 else if (gdbarch_pc_regnum (gdbarch) >= 0)
3e8c568d 1007 regcache_cooked_write_unsigned (regcache,
214e098a 1008 gdbarch_pc_regnum (gdbarch), pc);
61a1198a
UW
1009 else
1010 internal_error (__FILE__, __LINE__,
515630c5 1011 _("regcache_write_pc: Unable to update PC"));
edb3359d
DJ
1012
1013 /* Writing the PC (for instance, from "load") invalidates the
1014 current frame. */
1015 reinit_frame_cache ();
32178cab
MS
1016}
1017
32178cab 1018
705152c5
MS
1019static void
1020reg_flush_command (char *command, int from_tty)
1021{
1022 /* Force-flush the register cache. */
1023 registers_changed ();
1024 if (from_tty)
a3f17187 1025 printf_filtered (_("Register cache flushed.\n"));
705152c5
MS
1026}
1027
af030b9a
AC
1028static void
1029dump_endian_bytes (struct ui_file *file, enum bfd_endian endian,
1030 const unsigned char *buf, long len)
1031{
1032 int i;
123f5f96 1033
af030b9a
AC
1034 switch (endian)
1035 {
1036 case BFD_ENDIAN_BIG:
1037 for (i = 0; i < len; i++)
1038 fprintf_unfiltered (file, "%02x", buf[i]);
1039 break;
1040 case BFD_ENDIAN_LITTLE:
1041 for (i = len - 1; i >= 0; i--)
1042 fprintf_unfiltered (file, "%02x", buf[i]);
1043 break;
1044 default:
e2e0b3e5 1045 internal_error (__FILE__, __LINE__, _("Bad switch"));
af030b9a
AC
1046 }
1047}
1048
1049enum regcache_dump_what
1050{
3e43a32a
MS
1051 regcache_dump_none, regcache_dump_raw,
1052 regcache_dump_cooked, regcache_dump_groups
af030b9a
AC
1053};
1054
1055static void
1056regcache_dump (struct regcache *regcache, struct ui_file *file,
1057 enum regcache_dump_what what_to_dump)
1058{
1059 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
b59ff9d5 1060 struct gdbarch *gdbarch = regcache->descr->gdbarch;
af030b9a
AC
1061 int regnum;
1062 int footnote_nr = 0;
1063 int footnote_register_size = 0;
1064 int footnote_register_offset = 0;
1065 int footnote_register_type_name_null = 0;
1066 long register_offset = 0;
123a958e 1067 unsigned char buf[MAX_REGISTER_SIZE];
af030b9a
AC
1068
1069#if 0
af030b9a
AC
1070 fprintf_unfiltered (file, "nr_raw_registers %d\n",
1071 regcache->descr->nr_raw_registers);
1072 fprintf_unfiltered (file, "nr_cooked_registers %d\n",
1073 regcache->descr->nr_cooked_registers);
1074 fprintf_unfiltered (file, "sizeof_raw_registers %ld\n",
1075 regcache->descr->sizeof_raw_registers);
ee99023e
PA
1076 fprintf_unfiltered (file, "sizeof_raw_register_status %ld\n",
1077 regcache->descr->sizeof_raw_register_status);
f57d151a 1078 fprintf_unfiltered (file, "gdbarch_num_regs %d\n",
214e098a 1079 gdbarch_num_regs (gdbarch));
f57d151a 1080 fprintf_unfiltered (file, "gdbarch_num_pseudo_regs %d\n",
214e098a 1081 gdbarch_num_pseudo_regs (gdbarch));
af030b9a
AC
1082#endif
1083
1084 gdb_assert (regcache->descr->nr_cooked_registers
214e098a
UW
1085 == (gdbarch_num_regs (gdbarch)
1086 + gdbarch_num_pseudo_regs (gdbarch)));
af030b9a
AC
1087
1088 for (regnum = -1; regnum < regcache->descr->nr_cooked_registers; regnum++)
1089 {
1090 /* Name. */
1091 if (regnum < 0)
1092 fprintf_unfiltered (file, " %-10s", "Name");
1093 else
1094 {
214e098a 1095 const char *p = gdbarch_register_name (gdbarch, regnum);
123f5f96 1096
af030b9a
AC
1097 if (p == NULL)
1098 p = "";
1099 else if (p[0] == '\0')
1100 p = "''";
1101 fprintf_unfiltered (file, " %-10s", p);
1102 }
1103
1104 /* Number. */
1105 if (regnum < 0)
1106 fprintf_unfiltered (file, " %4s", "Nr");
1107 else
1108 fprintf_unfiltered (file, " %4d", regnum);
1109
1110 /* Relative number. */
1111 if (regnum < 0)
1112 fprintf_unfiltered (file, " %4s", "Rel");
214e098a 1113 else if (regnum < gdbarch_num_regs (gdbarch))
af030b9a
AC
1114 fprintf_unfiltered (file, " %4d", regnum);
1115 else
f57d151a 1116 fprintf_unfiltered (file, " %4d",
214e098a 1117 (regnum - gdbarch_num_regs (gdbarch)));
af030b9a
AC
1118
1119 /* Offset. */
1120 if (regnum < 0)
1121 fprintf_unfiltered (file, " %6s ", "Offset");
1122 else
1123 {
1124 fprintf_unfiltered (file, " %6ld",
1125 regcache->descr->register_offset[regnum]);
a7e3c2ad 1126 if (register_offset != regcache->descr->register_offset[regnum]
d3b22ed5
AC
1127 || (regnum > 0
1128 && (regcache->descr->register_offset[regnum]
1129 != (regcache->descr->register_offset[regnum - 1]
1130 + regcache->descr->sizeof_register[regnum - 1])))
1131 )
af030b9a
AC
1132 {
1133 if (!footnote_register_offset)
1134 footnote_register_offset = ++footnote_nr;
1135 fprintf_unfiltered (file, "*%d", footnote_register_offset);
1136 }
1137 else
1138 fprintf_unfiltered (file, " ");
1139 register_offset = (regcache->descr->register_offset[regnum]
1140 + regcache->descr->sizeof_register[regnum]);
1141 }
1142
1143 /* Size. */
1144 if (regnum < 0)
1145 fprintf_unfiltered (file, " %5s ", "Size");
1146 else
01e1877c
AC
1147 fprintf_unfiltered (file, " %5ld",
1148 regcache->descr->sizeof_register[regnum]);
af030b9a
AC
1149
1150 /* Type. */
b59ff9d5
AC
1151 {
1152 const char *t;
123f5f96 1153
b59ff9d5
AC
1154 if (regnum < 0)
1155 t = "Type";
1156 else
1157 {
1158 static const char blt[] = "builtin_type";
123f5f96 1159
b59ff9d5
AC
1160 t = TYPE_NAME (register_type (regcache->descr->gdbarch, regnum));
1161 if (t == NULL)
1162 {
1163 char *n;
123f5f96 1164
b59ff9d5
AC
1165 if (!footnote_register_type_name_null)
1166 footnote_register_type_name_null = ++footnote_nr;
b435e160 1167 n = xstrprintf ("*%d", footnote_register_type_name_null);
b59ff9d5
AC
1168 make_cleanup (xfree, n);
1169 t = n;
1170 }
1171 /* Chop a leading builtin_type. */
1172 if (strncmp (t, blt, strlen (blt)) == 0)
1173 t += strlen (blt);
1174 }
1175 fprintf_unfiltered (file, " %-15s", t);
1176 }
1177
1178 /* Leading space always present. */
1179 fprintf_unfiltered (file, " ");
af030b9a
AC
1180
1181 /* Value, raw. */
1182 if (what_to_dump == regcache_dump_raw)
1183 {
1184 if (regnum < 0)
1185 fprintf_unfiltered (file, "Raw value");
1186 else if (regnum >= regcache->descr->nr_raw_registers)
1187 fprintf_unfiltered (file, "<cooked>");
ee99023e 1188 else if (regcache_register_status (regcache, regnum) == REG_UNKNOWN)
af030b9a 1189 fprintf_unfiltered (file, "<invalid>");
ee99023e
PA
1190 else if (regcache_register_status (regcache, regnum) == REG_UNAVAILABLE)
1191 fprintf_unfiltered (file, "<unavailable>");
af030b9a
AC
1192 else
1193 {
1194 regcache_raw_read (regcache, regnum, buf);
1195 fprintf_unfiltered (file, "0x");
0d20ae72 1196 dump_endian_bytes (file,
214e098a 1197 gdbarch_byte_order (gdbarch), buf,
01e1877c 1198 regcache->descr->sizeof_register[regnum]);
af030b9a
AC
1199 }
1200 }
1201
1202 /* Value, cooked. */
1203 if (what_to_dump == regcache_dump_cooked)
1204 {
1205 if (regnum < 0)
1206 fprintf_unfiltered (file, "Cooked value");
1207 else
1208 {
05d1431c
PA
1209 enum register_status status;
1210
1211 status = regcache_cooked_read (regcache, regnum, buf);
1212 if (status == REG_UNKNOWN)
1213 fprintf_unfiltered (file, "<invalid>");
1214 else if (status == REG_UNAVAILABLE)
1215 fprintf_unfiltered (file, "<unavailable>");
1216 else
1217 {
1218 fprintf_unfiltered (file, "0x");
1219 dump_endian_bytes (file,
1220 gdbarch_byte_order (gdbarch), buf,
1221 regcache->descr->sizeof_register[regnum]);
1222 }
af030b9a
AC
1223 }
1224 }
1225
b59ff9d5
AC
1226 /* Group members. */
1227 if (what_to_dump == regcache_dump_groups)
1228 {
1229 if (regnum < 0)
1230 fprintf_unfiltered (file, "Groups");
1231 else
1232 {
b59ff9d5 1233 const char *sep = "";
6c7d17ba 1234 struct reggroup *group;
123f5f96 1235
6c7d17ba
AC
1236 for (group = reggroup_next (gdbarch, NULL);
1237 group != NULL;
1238 group = reggroup_next (gdbarch, group))
b59ff9d5 1239 {
6c7d17ba 1240 if (gdbarch_register_reggroup_p (gdbarch, regnum, group))
b59ff9d5 1241 {
3e43a32a
MS
1242 fprintf_unfiltered (file,
1243 "%s%s", sep, reggroup_name (group));
b59ff9d5
AC
1244 sep = ",";
1245 }
1246 }
1247 }
1248 }
1249
af030b9a
AC
1250 fprintf_unfiltered (file, "\n");
1251 }
1252
1253 if (footnote_register_size)
1254 fprintf_unfiltered (file, "*%d: Inconsistent register sizes.\n",
1255 footnote_register_size);
1256 if (footnote_register_offset)
1257 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1258 footnote_register_offset);
1259 if (footnote_register_type_name_null)
1260 fprintf_unfiltered (file,
1261 "*%d: Register type's name NULL.\n",
1262 footnote_register_type_name_null);
1263 do_cleanups (cleanups);
1264}
1265
1266static void
1267regcache_print (char *args, enum regcache_dump_what what_to_dump)
1268{
1269 if (args == NULL)
28c38f10 1270 regcache_dump (get_current_regcache (), gdb_stdout, what_to_dump);
af030b9a
AC
1271 else
1272 {
724b958c 1273 struct cleanup *cleanups;
af030b9a 1274 struct ui_file *file = gdb_fopen (args, "w");
123f5f96 1275
af030b9a 1276 if (file == NULL)
e2e0b3e5 1277 perror_with_name (_("maintenance print architecture"));
724b958c 1278 cleanups = make_cleanup_ui_file_delete (file);
28c38f10 1279 regcache_dump (get_current_regcache (), file, what_to_dump);
724b958c 1280 do_cleanups (cleanups);
af030b9a
AC
1281 }
1282}
1283
1284static void
1285maintenance_print_registers (char *args, int from_tty)
1286{
1287 regcache_print (args, regcache_dump_none);
1288}
1289
1290static void
1291maintenance_print_raw_registers (char *args, int from_tty)
1292{
1293 regcache_print (args, regcache_dump_raw);
1294}
1295
1296static void
1297maintenance_print_cooked_registers (char *args, int from_tty)
1298{
1299 regcache_print (args, regcache_dump_cooked);
1300}
1301
b59ff9d5
AC
1302static void
1303maintenance_print_register_groups (char *args, int from_tty)
1304{
1305 regcache_print (args, regcache_dump_groups);
1306}
1307
b9362cc7
AC
1308extern initialize_file_ftype _initialize_regcache; /* -Wmissing-prototype */
1309
32178cab
MS
1310void
1311_initialize_regcache (void)
1312{
3e43a32a
MS
1313 regcache_descr_handle
1314 = gdbarch_data_register_post_init (init_regcache_descr);
705152c5 1315
f4c5303c 1316 observer_attach_target_changed (regcache_observer_target_changed);
5231c1fd 1317 observer_attach_thread_ptid_changed (regcache_thread_ptid_changed);
f4c5303c 1318
705152c5 1319 add_com ("flushregs", class_maintenance, reg_flush_command,
1bedd215 1320 _("Force gdb to flush its register cache (maintainer command)"));
39f77062 1321
3e43a32a
MS
1322 add_cmd ("registers", class_maintenance, maintenance_print_registers,
1323 _("Print the internal register configuration.\n"
1324 "Takes an optional file parameter."), &maintenanceprintlist);
af030b9a 1325 add_cmd ("raw-registers", class_maintenance,
3e43a32a
MS
1326 maintenance_print_raw_registers,
1327 _("Print the internal register configuration "
1328 "including raw values.\n"
1329 "Takes an optional file parameter."), &maintenanceprintlist);
af030b9a 1330 add_cmd ("cooked-registers", class_maintenance,
3e43a32a
MS
1331 maintenance_print_cooked_registers,
1332 _("Print the internal register configuration "
1333 "including cooked values.\n"
1334 "Takes an optional file parameter."), &maintenanceprintlist);
b59ff9d5 1335 add_cmd ("register-groups", class_maintenance,
3e43a32a
MS
1336 maintenance_print_register_groups,
1337 _("Print the internal register configuration "
1338 "including each register's group.\n"
1339 "Takes an optional file parameter."),
af030b9a
AC
1340 &maintenanceprintlist);
1341
32178cab 1342}
This page took 1.074375 seconds and 4 git commands to generate.