]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/regcache.c
Move 2006 ChangeLog entries to ChangeLog-2006.
[thirdparty/binutils-gdb.git] / gdb / regcache.c
CommitLineData
32178cab 1/* Cache and manage the values of registers for GDB, the GNU debugger.
3fadccb3 2
197e01b6 3 Copyright (C) 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000,
9564ee9f 4 2001, 2002, 2004 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
384regcache_valid_p (struct regcache *regcache, int regnum)
385{
386 gdb_assert (regcache != NULL);
387 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
51b1fe4e 388 return regcache->register_valid_p[regnum];
3fadccb3
AC
389}
390
2d522557 391gdb_byte *
3fadccb3
AC
392deprecated_grub_regcache_for_registers (struct regcache *regcache)
393{
51b1fe4e 394 return regcache->registers;
3fadccb3
AC
395}
396
3fadccb3
AC
397/* Global structure containing the current regcache. */
398/* FIXME: cagney/2002-05-11: The two global arrays registers[] and
8262ee23 399 deprecated_register_valid[] currently point into this structure. */
3fadccb3
AC
400struct regcache *current_regcache;
401
5ebd2499 402/* NOTE: this is a write-through cache. There is no "dirty" bit for
32178cab
MS
403 recording if the register values have been changed (eg. by the
404 user). Therefore all registers must be written back to the
405 target when appropriate. */
406
39f77062 407/* The thread/process associated with the current set of registers. */
32178cab 408
39f77062 409static ptid_t registers_ptid;
32178cab
MS
410
411/*
412 * FUNCTIONS:
413 */
414
415/* REGISTER_CACHED()
416
417 Returns 0 if the value is not in the cache (needs fetch).
418 >0 if the value is in the cache.
419 <0 if the value is permanently unavailable (don't ask again). */
420
421int
422register_cached (int regnum)
423{
8851ec7a 424 return current_regcache->register_valid_p[regnum];
32178cab
MS
425}
426
7302a204
ND
427/* Record that REGNUM's value is cached if STATE is >0, uncached but
428 fetchable if STATE is 0, and uncached and unfetchable if STATE is <0. */
429
430void
431set_register_cached (int regnum, int state)
432{
53826de9
AC
433 gdb_assert (regnum >= 0);
434 gdb_assert (regnum < current_regcache->descr->nr_raw_registers);
51b1fe4e 435 current_regcache->register_valid_p[regnum] = state;
7302a204
ND
436}
437
f4c5303c
OF
438/* Observer for the target_changed event. */
439
440void
441regcache_observer_target_changed (struct target_ops *target)
442{
443 registers_changed ();
444}
445
32178cab
MS
446/* Low level examining and depositing of registers.
447
448 The caller is responsible for making sure that the inferior is
449 stopped before calling the fetching routines, or it will get
450 garbage. (a change from GDB version 3, in which the caller got the
451 value from the last stop). */
452
453/* REGISTERS_CHANGED ()
454
455 Indicate that registers may have changed, so invalidate the cache. */
456
457void
458registers_changed (void)
459{
460 int i;
32178cab 461
39f77062 462 registers_ptid = pid_to_ptid (-1);
32178cab
MS
463
464 /* Force cleanup of any alloca areas if using C alloca instead of
465 a builtin alloca. This particular call is used to clean up
466 areas allocated by low level target code which may build up
467 during lengthy interactions between gdb and the target before
468 gdb gives control to the user (ie watchpoints). */
469 alloca (0);
470
53826de9 471 for (i = 0; i < current_regcache->descr->nr_raw_registers; i++)
7302a204 472 set_register_cached (i, 0);
32178cab 473
9a4105ab
AC
474 if (deprecated_registers_changed_hook)
475 deprecated_registers_changed_hook ();
32178cab
MS
476}
477
2b9e5f3f 478/* DEPRECATED_REGISTERS_FETCHED ()
32178cab
MS
479
480 Indicate that all registers have been fetched, so mark them all valid. */
481
31e9866e
AC
482/* FIXME: cagney/2001-12-04: This function is DEPRECATED. The target
483 code was blatting the registers[] array and then calling this.
23a6d369 484 Since targets should only be using regcache_raw_supply() the need for
31e9866e 485 this function/hack is eliminated. */
32178cab
MS
486
487void
2b9e5f3f 488deprecated_registers_fetched (void)
32178cab
MS
489{
490 int i;
32178cab 491
a728f042 492 for (i = 0; i < NUM_REGS; i++)
7302a204 493 set_register_cached (i, 1);
fcdc5976 494 /* Do not assume that the pseudo-regs have also been fetched.
31e9866e 495 Fetching all real regs NEVER accounts for pseudo-regs. */
32178cab
MS
496}
497
73937e03
AC
498/* deprecated_read_register_bytes and deprecated_write_register_bytes
499 are generally a *BAD* idea. They are inefficient because they need
500 to check for partial updates, which can only be done by scanning
501 through all of the registers and seeing if the bytes that are being
502 read/written fall inside of an invalid register. [The main reason
503 this is necessary is that register sizes can vary, so a simple
504 index won't suffice.] It is far better to call read_register_gen
505 and write_register_gen if you want to get at the raw register
506 contents, as it only takes a regnum as an argument, and therefore
507 can't do a partial register update.
32178cab
MS
508
509 Prior to the recent fixes to check for partial updates, both read
73937e03
AC
510 and deprecated_write_register_bytes always checked to see if any
511 registers were stale, and then called target_fetch_registers (-1)
512 to update the whole set. This caused really slowed things down for
513 remote targets. */
32178cab
MS
514
515/* Copy INLEN bytes of consecutive data from registers
516 starting with the INREGBYTE'th byte of register data
517 into memory at MYADDR. */
518
519void
2d522557 520deprecated_read_register_bytes (int in_start, gdb_byte *in_buf, int in_len)
32178cab 521{
61a0eb5b 522 int in_end = in_start + in_len;
5ebd2499 523 int regnum;
2d522557 524 gdb_byte reg_buf[MAX_REGISTER_SIZE];
32178cab
MS
525
526 /* See if we are trying to read bytes from out-of-date registers. If so,
527 update just those registers. */
528
5ebd2499 529 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
32178cab 530 {
61a0eb5b
AC
531 int reg_start;
532 int reg_end;
533 int reg_len;
534 int start;
535 int end;
536 int byte;
32178cab 537
62700349 538 reg_start = DEPRECATED_REGISTER_BYTE (regnum);
3acba339 539 reg_len = register_size (current_gdbarch, regnum);
61a0eb5b 540 reg_end = reg_start + reg_len;
32178cab 541
61a0eb5b 542 if (reg_end <= in_start || in_end <= reg_start)
5ebd2499 543 /* The range the user wants to read doesn't overlap with regnum. */
32178cab
MS
544 continue;
545
275f450c
AC
546 if (REGISTER_NAME (regnum) != NULL && *REGISTER_NAME (regnum) != '\0')
547 /* Force the cache to fetch the entire register. */
4caf0990 548 deprecated_read_register_gen (regnum, reg_buf);
32178cab 549
61a0eb5b
AC
550 /* Legacy note: This function, for some reason, allows a NULL
551 input buffer. If the buffer is NULL, the registers are still
552 fetched, just the final transfer is skipped. */
553 if (in_buf == NULL)
554 continue;
555
556 /* start = max (reg_start, in_start) */
557 if (reg_start > in_start)
558 start = reg_start;
559 else
560 start = in_start;
561
562 /* end = min (reg_end, in_end) */
563 if (reg_end < in_end)
564 end = reg_end;
565 else
566 end = in_end;
567
568 /* Transfer just the bytes common to both IN_BUF and REG_BUF */
569 for (byte = start; byte < end; byte++)
165cd47f 570 {
61a0eb5b 571 in_buf[byte - in_start] = reg_buf[byte - reg_start];
165cd47f 572 }
32178cab 573 }
32178cab
MS
574}
575
61a0eb5b 576void
2d522557 577regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)
61a0eb5b 578{
3fadccb3
AC
579 gdb_assert (regcache != NULL && buf != NULL);
580 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
3fadccb3
AC
581 /* Make certain that the register cache is up-to-date with respect
582 to the current thread. This switching shouldn't be necessary
583 only there is still only one target side register cache. Sigh!
584 On the bright side, at least there is a regcache object. */
2d28509a 585 if (!regcache->readonly_p)
3fadccb3
AC
586 {
587 gdb_assert (regcache == current_regcache);
588 if (! ptid_equal (registers_ptid, inferior_ptid))
589 {
590 registers_changed ();
591 registers_ptid = inferior_ptid;
592 }
593 if (!register_cached (regnum))
5c27f28a 594 target_fetch_registers (regnum);
0a8146bf
AC
595#if 0
596 /* FIXME: cagney/2004-08-07: At present a number of targets
04c663e3
DA
597 forget (or didn't know that they needed) to set this leading to
598 panics. Also is the problem that targets need to indicate
0a8146bf
AC
599 that a register is in one of the possible states: valid,
600 undefined, unknown. The last of which isn't yet
601 possible. */
7ab3286f 602 gdb_assert (register_cached (regnum));
0a8146bf 603#endif
3fadccb3
AC
604 }
605 /* Copy the value directly into the register cache. */
51b1fe4e 606 memcpy (buf, register_buffer (regcache, regnum),
3fadccb3 607 regcache->descr->sizeof_register[regnum]);
61a0eb5b
AC
608}
609
28fc6740
AC
610void
611regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
612{
2d522557 613 gdb_byte *buf;
28fc6740
AC
614 gdb_assert (regcache != NULL);
615 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
616 buf = alloca (regcache->descr->sizeof_register[regnum]);
617 regcache_raw_read (regcache, regnum, buf);
618 (*val) = extract_signed_integer (buf,
619 regcache->descr->sizeof_register[regnum]);
620}
621
622void
623regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
624 ULONGEST *val)
625{
2d522557 626 gdb_byte *buf;
28fc6740
AC
627 gdb_assert (regcache != NULL);
628 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
629 buf = alloca (regcache->descr->sizeof_register[regnum]);
630 regcache_raw_read (regcache, regnum, buf);
631 (*val) = extract_unsigned_integer (buf,
632 regcache->descr->sizeof_register[regnum]);
633}
634
c00dcbe9
MK
635void
636regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
637{
638 void *buf;
639 gdb_assert (regcache != NULL);
640 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_raw_registers);
641 buf = alloca (regcache->descr->sizeof_register[regnum]);
642 store_signed_integer (buf, regcache->descr->sizeof_register[regnum], val);
643 regcache_raw_write (regcache, regnum, buf);
644}
645
646void
647regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
648 ULONGEST val)
649{
650 void *buf;
651 gdb_assert (regcache != NULL);
652 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_raw_registers);
653 buf = alloca (regcache->descr->sizeof_register[regnum]);
654 store_unsigned_integer (buf, regcache->descr->sizeof_register[regnum], val);
655 regcache_raw_write (regcache, regnum, buf);
656}
657
61a0eb5b 658void
2d522557 659deprecated_read_register_gen (int regnum, gdb_byte *buf)
61a0eb5b 660{
3fadccb3
AC
661 gdb_assert (current_regcache != NULL);
662 gdb_assert (current_regcache->descr->gdbarch == current_gdbarch);
68365089
AC
663 regcache_cooked_read (current_regcache, regnum, buf);
664}
665
666void
2d522557 667regcache_cooked_read (struct regcache *regcache, int regnum, gdb_byte *buf)
68365089 668{
d138e37a 669 gdb_assert (regnum >= 0);
68365089
AC
670 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
671 if (regnum < regcache->descr->nr_raw_registers)
672 regcache_raw_read (regcache, regnum, buf);
2d28509a
AC
673 else if (regcache->readonly_p
674 && regnum < regcache->descr->nr_cooked_registers
675 && regcache->register_valid_p[regnum])
b2fa5097 676 /* Read-only register cache, perhaps the cooked value was cached? */
2d28509a
AC
677 memcpy (buf, register_buffer (regcache, regnum),
678 regcache->descr->sizeof_register[regnum]);
d138e37a 679 else
68365089
AC
680 gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
681 regnum, buf);
61a0eb5b
AC
682}
683
a378f419
AC
684void
685regcache_cooked_read_signed (struct regcache *regcache, int regnum,
686 LONGEST *val)
687{
2d522557 688 gdb_byte *buf;
a378f419 689 gdb_assert (regcache != NULL);
a66a9c23 690 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_cooked_registers);
a378f419
AC
691 buf = alloca (regcache->descr->sizeof_register[regnum]);
692 regcache_cooked_read (regcache, regnum, buf);
693 (*val) = extract_signed_integer (buf,
694 regcache->descr->sizeof_register[regnum]);
695}
696
697void
698regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
699 ULONGEST *val)
700{
2d522557 701 gdb_byte *buf;
a378f419 702 gdb_assert (regcache != NULL);
a66a9c23 703 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_cooked_registers);
a378f419
AC
704 buf = alloca (regcache->descr->sizeof_register[regnum]);
705 regcache_cooked_read (regcache, regnum, buf);
706 (*val) = extract_unsigned_integer (buf,
707 regcache->descr->sizeof_register[regnum]);
708}
709
a66a9c23
AC
710void
711regcache_cooked_write_signed (struct regcache *regcache, int regnum,
712 LONGEST val)
713{
714 void *buf;
715 gdb_assert (regcache != NULL);
716 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_cooked_registers);
717 buf = alloca (regcache->descr->sizeof_register[regnum]);
718 store_signed_integer (buf, regcache->descr->sizeof_register[regnum], val);
719 regcache_cooked_write (regcache, regnum, buf);
720}
721
722void
723regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
724 ULONGEST val)
725{
726 void *buf;
727 gdb_assert (regcache != NULL);
728 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_cooked_registers);
729 buf = alloca (regcache->descr->sizeof_register[regnum]);
730 store_unsigned_integer (buf, regcache->descr->sizeof_register[regnum], val);
731 regcache_cooked_write (regcache, regnum, buf);
732}
733
61a0eb5b 734void
2d522557
AC
735regcache_raw_write (struct regcache *regcache, int regnum,
736 const gdb_byte *buf)
61a0eb5b 737{
3fadccb3
AC
738 gdb_assert (regcache != NULL && buf != NULL);
739 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
2d28509a 740 gdb_assert (!regcache->readonly_p);
3fadccb3 741
3fadccb3
AC
742 /* On the sparc, writing %g0 is a no-op, so we don't even want to
743 change the registers array if something writes to this register. */
744 if (CANNOT_STORE_REGISTER (regnum))
745 return;
746
3fadccb3
AC
747 /* Make certain that the correct cache is selected. */
748 gdb_assert (regcache == current_regcache);
749 if (! ptid_equal (registers_ptid, inferior_ptid))
750 {
751 registers_changed ();
752 registers_ptid = inferior_ptid;
753 }
754
755 /* If we have a valid copy of the register, and new value == old
756 value, then don't bother doing the actual store. */
757 if (regcache_valid_p (regcache, regnum)
758 && (memcmp (register_buffer (regcache, regnum), buf,
759 regcache->descr->sizeof_register[regnum]) == 0))
760 return;
761
762 target_prepare_to_store ();
763 memcpy (register_buffer (regcache, regnum), buf,
764 regcache->descr->sizeof_register[regnum]);
51b1fe4e 765 regcache->register_valid_p[regnum] = 1;
5c27f28a 766 target_store_registers (regnum);
61a0eb5b
AC
767}
768
769void
2d522557 770deprecated_write_register_gen (int regnum, gdb_byte *buf)
61a0eb5b 771{
3fadccb3
AC
772 gdb_assert (current_regcache != NULL);
773 gdb_assert (current_regcache->descr->gdbarch == current_gdbarch);
68365089
AC
774 regcache_cooked_write (current_regcache, regnum, buf);
775}
776
777void
2d522557
AC
778regcache_cooked_write (struct regcache *regcache, int regnum,
779 const gdb_byte *buf)
68365089 780{
d138e37a 781 gdb_assert (regnum >= 0);
68365089
AC
782 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
783 if (regnum < regcache->descr->nr_raw_registers)
784 regcache_raw_write (regcache, regnum, buf);
d138e37a 785 else
68365089 786 gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
d8124050 787 regnum, buf);
61a0eb5b
AC
788}
789
32178cab
MS
790/* Copy INLEN bytes of consecutive data from memory at MYADDR
791 into registers starting with the MYREGSTART'th byte of register data. */
792
793void
2d522557 794deprecated_write_register_bytes (int myregstart, gdb_byte *myaddr, int inlen)
32178cab
MS
795{
796 int myregend = myregstart + inlen;
5ebd2499 797 int regnum;
32178cab
MS
798
799 target_prepare_to_store ();
800
801 /* Scan through the registers updating any that are covered by the
802 range myregstart<=>myregend using write_register_gen, which does
803 nice things like handling threads, and avoiding updates when the
804 new and old contents are the same. */
805
5ebd2499 806 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
32178cab
MS
807 {
808 int regstart, regend;
809
62700349 810 regstart = DEPRECATED_REGISTER_BYTE (regnum);
3acba339 811 regend = regstart + register_size (current_gdbarch, regnum);
32178cab
MS
812
813 /* Is this register completely outside the range the user is writing? */
814 if (myregend <= regstart || regend <= myregstart)
815 /* do nothing */ ;
816
817 /* Is this register completely within the range the user is writing? */
818 else if (myregstart <= regstart && regend <= myregend)
4caf0990 819 deprecated_write_register_gen (regnum, myaddr + (regstart - myregstart));
32178cab
MS
820
821 /* The register partially overlaps the range being written. */
822 else
823 {
2d522557 824 gdb_byte regbuf[MAX_REGISTER_SIZE];
32178cab
MS
825 /* What's the overlap between this register's bytes and
826 those the caller wants to write? */
827 int overlapstart = max (regstart, myregstart);
828 int overlapend = min (regend, myregend);
829
830 /* We may be doing a partial update of an invalid register.
831 Update it from the target before scribbling on it. */
4caf0990 832 deprecated_read_register_gen (regnum, regbuf);
32178cab 833
5c27f28a 834 target_store_registers (regnum);
32178cab
MS
835 }
836 }
837}
838
06c0b04e
AC
839/* Perform a partial register transfer using a read, modify, write
840 operation. */
841
842typedef void (regcache_read_ftype) (struct regcache *regcache, int regnum,
843 void *buf);
844typedef void (regcache_write_ftype) (struct regcache *regcache, int regnum,
845 const void *buf);
846
b9362cc7 847static void
06c0b04e
AC
848regcache_xfer_part (struct regcache *regcache, int regnum,
849 int offset, int len, void *in, const void *out,
2d522557
AC
850 void (*read) (struct regcache *regcache, int regnum,
851 gdb_byte *buf),
852 void (*write) (struct regcache *regcache, int regnum,
853 const gdb_byte *buf))
06c0b04e
AC
854{
855 struct regcache_descr *descr = regcache->descr;
fc1a4b47 856 gdb_byte reg[MAX_REGISTER_SIZE];
06c0b04e
AC
857 gdb_assert (offset >= 0 && offset <= descr->sizeof_register[regnum]);
858 gdb_assert (len >= 0 && offset + len <= descr->sizeof_register[regnum]);
859 /* Something to do? */
860 if (offset + len == 0)
861 return;
862 /* Read (when needed) ... */
863 if (in != NULL
864 || offset > 0
865 || offset + len < descr->sizeof_register[regnum])
866 {
867 gdb_assert (read != NULL);
868 read (regcache, regnum, reg);
869 }
870 /* ... modify ... */
871 if (in != NULL)
872 memcpy (in, reg + offset, len);
873 if (out != NULL)
874 memcpy (reg + offset, out, len);
875 /* ... write (when needed). */
876 if (out != NULL)
877 {
878 gdb_assert (write != NULL);
879 write (regcache, regnum, reg);
880 }
881}
882
883void
884regcache_raw_read_part (struct regcache *regcache, int regnum,
2d522557 885 int offset, int len, gdb_byte *buf)
06c0b04e
AC
886{
887 struct regcache_descr *descr = regcache->descr;
888 gdb_assert (regnum >= 0 && regnum < descr->nr_raw_registers);
889 regcache_xfer_part (regcache, regnum, offset, len, buf, NULL,
890 regcache_raw_read, regcache_raw_write);
891}
892
893void
894regcache_raw_write_part (struct regcache *regcache, int regnum,
2d522557 895 int offset, int len, const gdb_byte *buf)
06c0b04e
AC
896{
897 struct regcache_descr *descr = regcache->descr;
898 gdb_assert (regnum >= 0 && regnum < descr->nr_raw_registers);
899 regcache_xfer_part (regcache, regnum, offset, len, NULL, buf,
900 regcache_raw_read, regcache_raw_write);
901}
902
903void
904regcache_cooked_read_part (struct regcache *regcache, int regnum,
2d522557 905 int offset, int len, gdb_byte *buf)
06c0b04e
AC
906{
907 struct regcache_descr *descr = regcache->descr;
908 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
909 regcache_xfer_part (regcache, regnum, offset, len, buf, NULL,
910 regcache_cooked_read, regcache_cooked_write);
911}
912
913void
914regcache_cooked_write_part (struct regcache *regcache, int regnum,
2d522557 915 int offset, int len, const gdb_byte *buf)
06c0b04e
AC
916{
917 struct regcache_descr *descr = regcache->descr;
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
d3b22ed5
AC
923/* Hack to keep code that view the register buffer as raw bytes
924 working. */
925
926int
927register_offset_hack (struct gdbarch *gdbarch, int regnum)
928{
929 struct regcache_descr *descr = regcache_descr (gdbarch);
930 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
931 return descr->register_offset[regnum];
932}
933
f42accbe
AC
934/* Hack to keep code using register_bytes working. */
935
936int
937deprecated_register_bytes (void)
938{
939 return current_regcache->descr->sizeof_raw_registers;
940}
941
5ebd2499 942/* Return the contents of register REGNUM as an unsigned integer. */
32178cab 943
173155e8 944ULONGEST
5ebd2499 945read_register (int regnum)
32178cab 946{
2d522557 947 gdb_byte *buf = alloca (register_size (current_gdbarch, regnum));
4caf0990 948 deprecated_read_register_gen (regnum, buf);
3acba339 949 return (extract_unsigned_integer (buf, register_size (current_gdbarch, regnum)));
32178cab
MS
950}
951
173155e8 952ULONGEST
39f77062 953read_register_pid (int regnum, ptid_t ptid)
32178cab 954{
39f77062 955 ptid_t save_ptid;
32178cab
MS
956 int save_pid;
957 CORE_ADDR retval;
958
39f77062 959 if (ptid_equal (ptid, inferior_ptid))
5ebd2499 960 return read_register (regnum);
32178cab 961
39f77062 962 save_ptid = inferior_ptid;
32178cab 963
39f77062 964 inferior_ptid = ptid;
32178cab 965
5ebd2499 966 retval = read_register (regnum);
32178cab 967
39f77062 968 inferior_ptid = save_ptid;
32178cab
MS
969
970 return retval;
971}
972
5ebd2499 973/* Store VALUE into the raw contents of register number REGNUM. */
32178cab
MS
974
975void
5ebd2499 976write_register (int regnum, LONGEST val)
32178cab 977{
61a0eb5b 978 void *buf;
32178cab 979 int size;
3acba339 980 size = register_size (current_gdbarch, regnum);
32178cab
MS
981 buf = alloca (size);
982 store_signed_integer (buf, size, (LONGEST) val);
4caf0990 983 deprecated_write_register_gen (regnum, buf);
32178cab
MS
984}
985
986void
39f77062 987write_register_pid (int regnum, CORE_ADDR val, ptid_t ptid)
32178cab 988{
39f77062 989 ptid_t save_ptid;
32178cab 990
39f77062 991 if (ptid_equal (ptid, inferior_ptid))
32178cab 992 {
5ebd2499 993 write_register (regnum, val);
32178cab
MS
994 return;
995 }
996
39f77062 997 save_ptid = inferior_ptid;
32178cab 998
39f77062 999 inferior_ptid = ptid;
32178cab 1000
5ebd2499 1001 write_register (regnum, val);
32178cab 1002
39f77062 1003 inferior_ptid = save_ptid;
32178cab
MS
1004}
1005
a16d75cc 1006/* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */
9a661b68
MK
1007
1008void
6618125d 1009regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
9a661b68
MK
1010{
1011 void *regbuf;
1012 size_t size;
1013
a16d75cc 1014 gdb_assert (regcache != NULL);
9a661b68
MK
1015 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
1016 gdb_assert (!regcache->readonly_p);
1017
1018 /* FIXME: kettenis/20030828: It shouldn't be necessary to handle
1019 CURRENT_REGCACHE specially here. */
1020 if (regcache == current_regcache
1021 && !ptid_equal (registers_ptid, inferior_ptid))
1022 {
1023 registers_changed ();
1024 registers_ptid = inferior_ptid;
1025 }
1026
1027 regbuf = register_buffer (regcache, regnum);
1028 size = regcache->descr->sizeof_register[regnum];
1029
1030 if (buf)
1031 memcpy (regbuf, buf, size);
1032 else
1033 memset (regbuf, 0, size);
1034
1035 /* Mark the register as cached. */
1036 regcache->register_valid_p[regnum] = 1;
1037}
1038
1039/* Collect register REGNUM from REGCACHE and store its contents in BUF. */
1040
1041void
6618125d 1042regcache_raw_collect (const struct regcache *regcache, int regnum, void *buf)
9a661b68
MK
1043{
1044 const void *regbuf;
1045 size_t size;
1046
1047 gdb_assert (regcache != NULL && buf != NULL);
1048 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
1049
1050 regbuf = register_buffer (regcache, regnum);
1051 size = regcache->descr->sizeof_register[regnum];
1052 memcpy (buf, regbuf, size);
1053}
1054
193cb69f 1055
9c8dbfa9
AC
1056/* read_pc, write_pc, read_sp, etc. Special handling for registers
1057 PC, SP, and FP. */
32178cab 1058
9c8dbfa9
AC
1059/* NOTE: cagney/2001-02-18: The functions read_pc_pid(), read_pc() and
1060 read_sp(), will eventually be replaced by per-frame methods.
1061 Instead of relying on the global INFERIOR_PTID, they will use the
1062 contextual information provided by the FRAME. These functions do
1063 not belong in the register cache. */
32178cab 1064
cde9ea48 1065/* NOTE: cagney/2003-06-07: The functions generic_target_write_pc(),
9c8dbfa9
AC
1066 write_pc_pid() and write_pc(), all need to be replaced by something
1067 that does not rely on global state. But what? */
32178cab
MS
1068
1069CORE_ADDR
39f77062 1070read_pc_pid (ptid_t ptid)
32178cab 1071{
39f77062 1072 ptid_t saved_inferior_ptid;
32178cab
MS
1073 CORE_ADDR pc_val;
1074
39f77062
KB
1075 /* In case ptid != inferior_ptid. */
1076 saved_inferior_ptid = inferior_ptid;
1077 inferior_ptid = ptid;
32178cab 1078
cde9ea48
AC
1079 if (TARGET_READ_PC_P ())
1080 pc_val = TARGET_READ_PC (ptid);
1081 /* Else use per-frame method on get_current_frame. */
1082 else if (PC_REGNUM >= 0)
1083 {
1084 CORE_ADDR raw_val = read_register_pid (PC_REGNUM, ptid);
6ba34a8d 1085 pc_val = ADDR_BITS_REMOVE (raw_val);
cde9ea48
AC
1086 }
1087 else
e2e0b3e5 1088 internal_error (__FILE__, __LINE__, _("read_pc_pid: Unable to find PC"));
32178cab 1089
39f77062 1090 inferior_ptid = saved_inferior_ptid;
32178cab
MS
1091 return pc_val;
1092}
1093
1094CORE_ADDR
1095read_pc (void)
1096{
39f77062 1097 return read_pc_pid (inferior_ptid);
32178cab
MS
1098}
1099
32178cab 1100void
39f77062 1101generic_target_write_pc (CORE_ADDR pc, ptid_t ptid)
32178cab 1102{
32178cab 1103 if (PC_REGNUM >= 0)
39f77062 1104 write_register_pid (PC_REGNUM, pc, ptid);
afb18d0f
AC
1105 else
1106 internal_error (__FILE__, __LINE__,
e2e0b3e5 1107 _("generic_target_write_pc"));
32178cab
MS
1108}
1109
1110void
39f77062 1111write_pc_pid (CORE_ADDR pc, ptid_t ptid)
32178cab 1112{
39f77062 1113 ptid_t saved_inferior_ptid;
32178cab 1114
39f77062
KB
1115 /* In case ptid != inferior_ptid. */
1116 saved_inferior_ptid = inferior_ptid;
1117 inferior_ptid = ptid;
32178cab 1118
39f77062 1119 TARGET_WRITE_PC (pc, ptid);
32178cab 1120
39f77062 1121 inferior_ptid = saved_inferior_ptid;
32178cab
MS
1122}
1123
1124void
1125write_pc (CORE_ADDR pc)
1126{
39f77062 1127 write_pc_pid (pc, inferior_ptid);
32178cab
MS
1128}
1129
1130/* Cope with strage ways of getting to the stack and frame pointers */
1131
32178cab
MS
1132CORE_ADDR
1133read_sp (void)
1134{
bd1ce8ba
AC
1135 if (TARGET_READ_SP_P ())
1136 return TARGET_READ_SP ();
a9e5fdc2
AC
1137 else if (gdbarch_unwind_sp_p (current_gdbarch))
1138 return get_frame_sp (get_current_frame ());
bd1ce8ba 1139 else if (SP_REGNUM >= 0)
a9e5fdc2
AC
1140 /* Try SP_REGNUM last: this makes all sorts of [wrong] assumptions
1141 about the architecture so put it at the end. */
bd1ce8ba 1142 return read_register (SP_REGNUM);
e2e0b3e5 1143 internal_error (__FILE__, __LINE__, _("read_sp: Unable to find SP"));
32178cab
MS
1144}
1145
705152c5
MS
1146static void
1147reg_flush_command (char *command, int from_tty)
1148{
1149 /* Force-flush the register cache. */
1150 registers_changed ();
1151 if (from_tty)
a3f17187 1152 printf_filtered (_("Register cache flushed.\n"));
705152c5
MS
1153}
1154
32178cab
MS
1155static void
1156build_regcache (void)
3fadccb3
AC
1157{
1158 current_regcache = regcache_xmalloc (current_gdbarch);
2d28509a 1159 current_regcache->readonly_p = 0;
3fadccb3
AC
1160}
1161
af030b9a
AC
1162static void
1163dump_endian_bytes (struct ui_file *file, enum bfd_endian endian,
1164 const unsigned char *buf, long len)
1165{
1166 int i;
1167 switch (endian)
1168 {
1169 case BFD_ENDIAN_BIG:
1170 for (i = 0; i < len; i++)
1171 fprintf_unfiltered (file, "%02x", buf[i]);
1172 break;
1173 case BFD_ENDIAN_LITTLE:
1174 for (i = len - 1; i >= 0; i--)
1175 fprintf_unfiltered (file, "%02x", buf[i]);
1176 break;
1177 default:
e2e0b3e5 1178 internal_error (__FILE__, __LINE__, _("Bad switch"));
af030b9a
AC
1179 }
1180}
1181
1182enum regcache_dump_what
1183{
b59ff9d5 1184 regcache_dump_none, regcache_dump_raw, regcache_dump_cooked, regcache_dump_groups
af030b9a
AC
1185};
1186
1187static void
1188regcache_dump (struct regcache *regcache, struct ui_file *file,
1189 enum regcache_dump_what what_to_dump)
1190{
1191 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
b59ff9d5 1192 struct gdbarch *gdbarch = regcache->descr->gdbarch;
af030b9a
AC
1193 int regnum;
1194 int footnote_nr = 0;
1195 int footnote_register_size = 0;
1196 int footnote_register_offset = 0;
1197 int footnote_register_type_name_null = 0;
1198 long register_offset = 0;
123a958e 1199 unsigned char buf[MAX_REGISTER_SIZE];
af030b9a
AC
1200
1201#if 0
af030b9a
AC
1202 fprintf_unfiltered (file, "nr_raw_registers %d\n",
1203 regcache->descr->nr_raw_registers);
1204 fprintf_unfiltered (file, "nr_cooked_registers %d\n",
1205 regcache->descr->nr_cooked_registers);
1206 fprintf_unfiltered (file, "sizeof_raw_registers %ld\n",
1207 regcache->descr->sizeof_raw_registers);
1208 fprintf_unfiltered (file, "sizeof_raw_register_valid_p %ld\n",
1209 regcache->descr->sizeof_raw_register_valid_p);
af030b9a
AC
1210 fprintf_unfiltered (file, "NUM_REGS %d\n", NUM_REGS);
1211 fprintf_unfiltered (file, "NUM_PSEUDO_REGS %d\n", NUM_PSEUDO_REGS);
1212#endif
1213
1214 gdb_assert (regcache->descr->nr_cooked_registers
1215 == (NUM_REGS + NUM_PSEUDO_REGS));
1216
1217 for (regnum = -1; regnum < regcache->descr->nr_cooked_registers; regnum++)
1218 {
1219 /* Name. */
1220 if (regnum < 0)
1221 fprintf_unfiltered (file, " %-10s", "Name");
1222 else
1223 {
1224 const char *p = REGISTER_NAME (regnum);
1225 if (p == NULL)
1226 p = "";
1227 else if (p[0] == '\0')
1228 p = "''";
1229 fprintf_unfiltered (file, " %-10s", p);
1230 }
1231
1232 /* Number. */
1233 if (regnum < 0)
1234 fprintf_unfiltered (file, " %4s", "Nr");
1235 else
1236 fprintf_unfiltered (file, " %4d", regnum);
1237
1238 /* Relative number. */
1239 if (regnum < 0)
1240 fprintf_unfiltered (file, " %4s", "Rel");
1241 else if (regnum < NUM_REGS)
1242 fprintf_unfiltered (file, " %4d", regnum);
1243 else
1244 fprintf_unfiltered (file, " %4d", (regnum - NUM_REGS));
1245
1246 /* Offset. */
1247 if (regnum < 0)
1248 fprintf_unfiltered (file, " %6s ", "Offset");
1249 else
1250 {
1251 fprintf_unfiltered (file, " %6ld",
1252 regcache->descr->register_offset[regnum]);
a7e3c2ad 1253 if (register_offset != regcache->descr->register_offset[regnum]
62700349 1254 || register_offset != DEPRECATED_REGISTER_BYTE (regnum)
d3b22ed5
AC
1255 || (regnum > 0
1256 && (regcache->descr->register_offset[regnum]
1257 != (regcache->descr->register_offset[regnum - 1]
1258 + regcache->descr->sizeof_register[regnum - 1])))
1259 )
af030b9a
AC
1260 {
1261 if (!footnote_register_offset)
1262 footnote_register_offset = ++footnote_nr;
1263 fprintf_unfiltered (file, "*%d", footnote_register_offset);
1264 }
1265 else
1266 fprintf_unfiltered (file, " ");
1267 register_offset = (regcache->descr->register_offset[regnum]
1268 + regcache->descr->sizeof_register[regnum]);
1269 }
1270
1271 /* Size. */
1272 if (regnum < 0)
1273 fprintf_unfiltered (file, " %5s ", "Size");
1274 else
01e1877c
AC
1275 fprintf_unfiltered (file, " %5ld",
1276 regcache->descr->sizeof_register[regnum]);
af030b9a
AC
1277
1278 /* Type. */
b59ff9d5
AC
1279 {
1280 const char *t;
1281 if (regnum < 0)
1282 t = "Type";
1283 else
1284 {
1285 static const char blt[] = "builtin_type";
1286 t = TYPE_NAME (register_type (regcache->descr->gdbarch, regnum));
1287 if (t == NULL)
1288 {
1289 char *n;
1290 if (!footnote_register_type_name_null)
1291 footnote_register_type_name_null = ++footnote_nr;
b435e160 1292 n = xstrprintf ("*%d", footnote_register_type_name_null);
b59ff9d5
AC
1293 make_cleanup (xfree, n);
1294 t = n;
1295 }
1296 /* Chop a leading builtin_type. */
1297 if (strncmp (t, blt, strlen (blt)) == 0)
1298 t += strlen (blt);
1299 }
1300 fprintf_unfiltered (file, " %-15s", t);
1301 }
1302
1303 /* Leading space always present. */
1304 fprintf_unfiltered (file, " ");
af030b9a
AC
1305
1306 /* Value, raw. */
1307 if (what_to_dump == regcache_dump_raw)
1308 {
1309 if (regnum < 0)
1310 fprintf_unfiltered (file, "Raw value");
1311 else if (regnum >= regcache->descr->nr_raw_registers)
1312 fprintf_unfiltered (file, "<cooked>");
1313 else if (!regcache_valid_p (regcache, regnum))
1314 fprintf_unfiltered (file, "<invalid>");
1315 else
1316 {
1317 regcache_raw_read (regcache, regnum, buf);
1318 fprintf_unfiltered (file, "0x");
1319 dump_endian_bytes (file, TARGET_BYTE_ORDER, buf,
01e1877c 1320 regcache->descr->sizeof_register[regnum]);
af030b9a
AC
1321 }
1322 }
1323
1324 /* Value, cooked. */
1325 if (what_to_dump == regcache_dump_cooked)
1326 {
1327 if (regnum < 0)
1328 fprintf_unfiltered (file, "Cooked value");
1329 else
1330 {
1331 regcache_cooked_read (regcache, regnum, buf);
1332 fprintf_unfiltered (file, "0x");
1333 dump_endian_bytes (file, TARGET_BYTE_ORDER, buf,
01e1877c 1334 regcache->descr->sizeof_register[regnum]);
af030b9a
AC
1335 }
1336 }
1337
b59ff9d5
AC
1338 /* Group members. */
1339 if (what_to_dump == regcache_dump_groups)
1340 {
1341 if (regnum < 0)
1342 fprintf_unfiltered (file, "Groups");
1343 else
1344 {
b59ff9d5 1345 const char *sep = "";
6c7d17ba
AC
1346 struct reggroup *group;
1347 for (group = reggroup_next (gdbarch, NULL);
1348 group != NULL;
1349 group = reggroup_next (gdbarch, group))
b59ff9d5 1350 {
6c7d17ba 1351 if (gdbarch_register_reggroup_p (gdbarch, regnum, group))
b59ff9d5 1352 {
6c7d17ba 1353 fprintf_unfiltered (file, "%s%s", sep, reggroup_name (group));
b59ff9d5
AC
1354 sep = ",";
1355 }
1356 }
1357 }
1358 }
1359
af030b9a
AC
1360 fprintf_unfiltered (file, "\n");
1361 }
1362
1363 if (footnote_register_size)
1364 fprintf_unfiltered (file, "*%d: Inconsistent register sizes.\n",
1365 footnote_register_size);
1366 if (footnote_register_offset)
1367 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1368 footnote_register_offset);
1369 if (footnote_register_type_name_null)
1370 fprintf_unfiltered (file,
1371 "*%d: Register type's name NULL.\n",
1372 footnote_register_type_name_null);
1373 do_cleanups (cleanups);
1374}
1375
1376static void
1377regcache_print (char *args, enum regcache_dump_what what_to_dump)
1378{
1379 if (args == NULL)
1380 regcache_dump (current_regcache, gdb_stdout, what_to_dump);
1381 else
1382 {
1383 struct ui_file *file = gdb_fopen (args, "w");
1384 if (file == NULL)
e2e0b3e5 1385 perror_with_name (_("maintenance print architecture"));
af030b9a
AC
1386 regcache_dump (current_regcache, file, what_to_dump);
1387 ui_file_delete (file);
1388 }
1389}
1390
1391static void
1392maintenance_print_registers (char *args, int from_tty)
1393{
1394 regcache_print (args, regcache_dump_none);
1395}
1396
1397static void
1398maintenance_print_raw_registers (char *args, int from_tty)
1399{
1400 regcache_print (args, regcache_dump_raw);
1401}
1402
1403static void
1404maintenance_print_cooked_registers (char *args, int from_tty)
1405{
1406 regcache_print (args, regcache_dump_cooked);
1407}
1408
b59ff9d5
AC
1409static void
1410maintenance_print_register_groups (char *args, int from_tty)
1411{
1412 regcache_print (args, regcache_dump_groups);
1413}
1414
b9362cc7
AC
1415extern initialize_file_ftype _initialize_regcache; /* -Wmissing-prototype */
1416
32178cab
MS
1417void
1418_initialize_regcache (void)
1419{
030f20e1 1420 regcache_descr_handle = gdbarch_data_register_post_init (init_regcache_descr);
046a4708 1421 DEPRECATED_REGISTER_GDBARCH_SWAP (current_regcache);
046a4708 1422 deprecated_register_gdbarch_swap (NULL, 0, build_regcache);
705152c5 1423
f4c5303c
OF
1424 observer_attach_target_changed (regcache_observer_target_changed);
1425
705152c5 1426 add_com ("flushregs", class_maintenance, reg_flush_command,
1bedd215 1427 _("Force gdb to flush its register cache (maintainer command)"));
39f77062
KB
1428
1429 /* Initialize the thread/process associated with the current set of
1430 registers. For now, -1 is special, and means `no current process'. */
1431 registers_ptid = pid_to_ptid (-1);
af030b9a 1432
1a966eab
AC
1433 add_cmd ("registers", class_maintenance, maintenance_print_registers, _("\
1434Print the internal register configuration.\n\
1435Takes an optional file parameter."), &maintenanceprintlist);
af030b9a 1436 add_cmd ("raw-registers", class_maintenance,
1a966eab
AC
1437 maintenance_print_raw_registers, _("\
1438Print the internal register configuration including raw values.\n\
1439Takes an optional file parameter."), &maintenanceprintlist);
af030b9a 1440 add_cmd ("cooked-registers", class_maintenance,
1a966eab
AC
1441 maintenance_print_cooked_registers, _("\
1442Print the internal register configuration including cooked values.\n\
1443Takes an optional file parameter."), &maintenanceprintlist);
b59ff9d5 1444 add_cmd ("register-groups", class_maintenance,
1a966eab
AC
1445 maintenance_print_register_groups, _("\
1446Print the internal register configuration including each register's group.\n\
1447Takes an optional file parameter."),
af030b9a
AC
1448 &maintenanceprintlist);
1449
32178cab 1450}