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