2002-08-12 Andrew Cagney <cagney@redhat.com>
[binutils-gdb.git] / gdb / regcache.c
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2
3 Copyright 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000,
4 2001, 2002 Free Software Foundation, Inc.
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
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23 #include "defs.h"
24 #include "inferior.h"
25 #include "target.h"
26 #include "gdbarch.h"
27 #include "gdbcmd.h"
28 #include "regcache.h"
29 #include "gdb_assert.h"
30 #include "gdb_string.h"
31 #include "gdbcmd.h" /* For maintenanceprintlist. */
32
33 /*
34 * DATA STRUCTURE
35 *
36 * Here is the actual register cache.
37 */
38
39 /* Per-architecture object describing the layout of a register cache.
40 Computed once when the architecture is created */
41
42 struct gdbarch_data *regcache_descr_handle;
43
44 struct regcache_descr
45 {
46 /* The architecture this descriptor belongs to. */
47 struct gdbarch *gdbarch;
48
49 /* Is this a ``legacy'' register cache? Such caches reserve space
50 for raw and pseudo registers and allow access to both. */
51 int legacy_p;
52
53 /* The raw register cache. This should contain just [0
54 .. NUM_RAW_REGISTERS). However, for older targets, it contains
55 space for the full [0 .. NUM_RAW_REGISTERS +
56 NUM_PSEUDO_REGISTERS). */
57 int nr_raw_registers;
58 long sizeof_raw_registers;
59 long sizeof_raw_register_valid_p;
60
61 /* The cooked register space. Each cooked register in the range
62 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
63 register. The remaining [NR_RAW_REGISTERS
64 .. NR_COOKED_REGISTERS) (a.k.a. pseudo regiters) are mapped onto
65 both raw registers and memory by the architecture methods
66 gdbarch_register_read and gdbarch_register_write. */
67 int nr_cooked_registers;
68
69 /* Offset and size (in 8 bit bytes), of reach register in the
70 register cache. All registers (including those in the range
71 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an offset.
72 Assigning all registers an offset makes it possible to keep
73 legacy code, such as that found in read_register_bytes() and
74 write_register_bytes() working. */
75 long *register_offset;
76 long *sizeof_register;
77
78 /* Useful constant. Largest of all the registers. */
79 long max_register_size;
80 };
81
82 static void *
83 init_legacy_regcache_descr (struct gdbarch *gdbarch)
84 {
85 int i;
86 struct regcache_descr *descr;
87 /* FIXME: cagney/2002-05-11: gdbarch_data() should take that
88 ``gdbarch'' as a parameter. */
89 gdb_assert (gdbarch != NULL);
90
91 descr = XMALLOC (struct regcache_descr);
92 descr->gdbarch = gdbarch;
93 descr->legacy_p = 1;
94
95 /* FIXME: cagney/2002-05-11: Shouldn't be including pseudo-registers
96 in the register buffer. Unfortunatly some architectures do. */
97 descr->nr_cooked_registers = NUM_REGS + NUM_PSEUDO_REGS;
98 descr->nr_raw_registers = descr->nr_cooked_registers;
99 descr->sizeof_raw_register_valid_p = descr->nr_cooked_registers;
100
101 /* FIXME: cagney/2002-05-11: Instead of using REGISTER_BYTE() this
102 code should compute the offets et.al. at runtime. This currently
103 isn't possible because some targets overlap register locations -
104 see the mess in read_register_bytes() and write_register_bytes()
105 registers. */
106 descr->sizeof_register = XCALLOC (descr->nr_cooked_registers, long);
107 descr->register_offset = XCALLOC (descr->nr_cooked_registers, long);
108 descr->max_register_size = 0;
109 for (i = 0; i < descr->nr_cooked_registers; i++)
110 {
111 descr->register_offset[i] = REGISTER_BYTE (i);
112 descr->sizeof_register[i] = REGISTER_RAW_SIZE (i);
113 if (descr->max_register_size < REGISTER_RAW_SIZE (i))
114 descr->max_register_size = REGISTER_RAW_SIZE (i);
115 }
116
117 /* Come up with the real size of the registers buffer. */
118 descr->sizeof_raw_registers = REGISTER_BYTES; /* OK use. */
119 for (i = 0; i < descr->nr_cooked_registers; i++)
120 {
121 long regend;
122 /* Keep extending the buffer so that there is always enough
123 space for all registers. The comparison is necessary since
124 legacy code is free to put registers in random places in the
125 buffer separated by holes. Once REGISTER_BYTE() is killed
126 this can be greatly simplified. */
127 /* FIXME: cagney/2001-12-04: This code shouldn't need to use
128 REGISTER_BYTE(). Unfortunatly, legacy code likes to lay the
129 buffer out so that certain registers just happen to overlap.
130 Ulgh! New targets use gdbarch's register read/write and
131 entirely avoid this uglyness. */
132 regend = descr->register_offset[i] + descr->sizeof_register[i];
133 if (descr->sizeof_raw_registers < regend)
134 descr->sizeof_raw_registers = regend;
135 }
136 return descr;
137 }
138
139 static void *
140 init_regcache_descr (struct gdbarch *gdbarch)
141 {
142 int i;
143 struct regcache_descr *descr;
144 gdb_assert (gdbarch != NULL);
145
146 /* If an old style architecture, construct the register cache
147 description using all the register macros. */
148 if (!gdbarch_pseudo_register_read_p (gdbarch)
149 && !gdbarch_pseudo_register_write_p (gdbarch))
150 return init_legacy_regcache_descr (gdbarch);
151
152 descr = XMALLOC (struct regcache_descr);
153 descr->gdbarch = gdbarch;
154 descr->legacy_p = 0;
155
156 /* Total size of the register space. The raw registers are mapped
157 directly onto the raw register cache while the pseudo's are
158 either mapped onto raw-registers or memory. */
159 descr->nr_cooked_registers = NUM_REGS + NUM_PSEUDO_REGS;
160
161 /* Construct a strictly RAW register cache. Don't allow pseudo's
162 into the register cache. */
163 descr->nr_raw_registers = NUM_REGS;
164 descr->sizeof_raw_register_valid_p = NUM_REGS;
165
166 /* Lay out the register cache. The pseud-registers are included in
167 the layout even though their value isn't stored in the register
168 cache. Some code, via read_register_bytes() access a register
169 using an offset/length rather than a register number.
170
171 NOTE: cagney/2002-05-22: Only REGISTER_VIRTUAL_TYPE() needs to be
172 used when constructing the register cache. It is assumed that
173 register raw size, virtual size and type length of the type are
174 all the same. */
175
176 {
177 long offset = 0;
178 descr->sizeof_register = XCALLOC (descr->nr_cooked_registers, long);
179 descr->register_offset = XCALLOC (descr->nr_cooked_registers, long);
180 descr->max_register_size = 0;
181 for (i = 0; i < descr->nr_cooked_registers; i++)
182 {
183 descr->sizeof_register[i] = TYPE_LENGTH (REGISTER_VIRTUAL_TYPE (i));
184 descr->register_offset[i] = offset;
185 offset += descr->sizeof_register[i];
186 if (descr->max_register_size < descr->sizeof_register[i])
187 descr->max_register_size = descr->sizeof_register[i];
188 }
189 /* Set the real size of the register cache buffer. */
190 /* FIXME: cagney/2002-05-22: Should only need to allocate space
191 for the raw registers. Unfortunatly some code still accesses
192 the register array directly using the global registers[].
193 Until that code has been purged, play safe and over allocating
194 the register buffer. Ulgh! */
195 descr->sizeof_raw_registers = offset;
196 /* = descr->register_offset[descr->nr_raw_registers]; */
197 }
198
199 #if 0
200 /* Sanity check. Confirm that the assumptions about gdbarch are
201 true. The REGCACHE_DESCR_HANDLE is set before doing the checks
202 so that targets using the generic methods supplied by regcache
203 don't go into infinite recursion trying to, again, create the
204 regcache. */
205 set_gdbarch_data (gdbarch, regcache_descr_handle, descr);
206 for (i = 0; i < descr->nr_cooked_registers; i++)
207 {
208 gdb_assert (descr->sizeof_register[i] == REGISTER_RAW_SIZE (i));
209 gdb_assert (descr->sizeof_register[i] == REGISTER_VIRTUAL_SIZE (i));
210 gdb_assert (descr->register_offset[i] == REGISTER_BYTE (i));
211 }
212 /* gdb_assert (descr->sizeof_raw_registers == REGISTER_BYTES (i)); */
213 #endif
214
215 return descr;
216 }
217
218 static struct regcache_descr *
219 regcache_descr (struct gdbarch *gdbarch)
220 {
221 return gdbarch_data (gdbarch, regcache_descr_handle);
222 }
223
224 static void
225 xfree_regcache_descr (struct gdbarch *gdbarch, void *ptr)
226 {
227 struct regcache_descr *descr = ptr;
228 if (descr == NULL)
229 return;
230 xfree (descr->register_offset);
231 xfree (descr->sizeof_register);
232 descr->register_offset = NULL;
233 descr->sizeof_register = NULL;
234 xfree (descr);
235 }
236
237 /* The register cache for storing raw register values. */
238
239 struct regcache
240 {
241 struct regcache_descr *descr;
242 char *raw_registers;
243 char *raw_register_valid_p;
244 /* If a value isn't in the cache should the corresponding target be
245 queried for a value. */
246 int passthrough_p;
247 };
248
249 struct regcache *
250 regcache_xmalloc (struct gdbarch *gdbarch)
251 {
252 struct regcache_descr *descr;
253 struct regcache *regcache;
254 gdb_assert (gdbarch != NULL);
255 descr = regcache_descr (gdbarch);
256 regcache = XMALLOC (struct regcache);
257 regcache->descr = descr;
258 regcache->raw_registers
259 = XCALLOC (descr->sizeof_raw_registers, char);
260 regcache->raw_register_valid_p
261 = XCALLOC (descr->sizeof_raw_register_valid_p, char);
262 regcache->passthrough_p = 0;
263 return regcache;
264 }
265
266 void
267 regcache_xfree (struct regcache *regcache)
268 {
269 if (regcache == NULL)
270 return;
271 xfree (regcache->raw_registers);
272 xfree (regcache->raw_register_valid_p);
273 xfree (regcache);
274 }
275
276 void
277 do_regcache_xfree (void *data)
278 {
279 regcache_xfree (data);
280 }
281
282 struct cleanup *
283 make_cleanup_regcache_xfree (struct regcache *regcache)
284 {
285 return make_cleanup (do_regcache_xfree, regcache);
286 }
287
288 void
289 regcache_cpy (struct regcache *dst, struct regcache *src)
290 {
291 int i;
292 char *buf;
293 gdb_assert (src != NULL && dst != NULL);
294 gdb_assert (src->descr->gdbarch == dst->descr->gdbarch);
295 gdb_assert (src != dst);
296 /* FIXME: cagney/2002-05-17: To say this bit is bad is being polite.
297 It keeps the existing code working where things rely on going
298 through to the register cache. */
299 if (src == current_regcache && src->descr->legacy_p)
300 {
301 /* ULGH!!!! Old way. Use REGISTER bytes and let code below
302 untangle fetch. */
303 read_register_bytes (0, dst->raw_registers, REGISTER_BYTES);
304 return;
305 }
306 /* FIXME: cagney/2002-05-17: To say this bit is bad is being polite.
307 It keeps the existing code working where things rely on going
308 through to the register cache. */
309 if (dst == current_regcache && dst->descr->legacy_p)
310 {
311 /* ULGH!!!! Old way. Use REGISTER bytes and let code below
312 untangle fetch. */
313 write_register_bytes (0, src->raw_registers, REGISTER_BYTES);
314 return;
315 }
316 buf = alloca (src->descr->max_register_size);
317 for (i = 0; i < src->descr->nr_raw_registers; i++)
318 {
319 /* Should we worry about the valid bit here? */
320 regcache_raw_read (src, i, buf);
321 regcache_raw_write (dst, i, buf);
322 }
323 }
324
325 void
326 regcache_cpy_no_passthrough (struct regcache *dst, struct regcache *src)
327 {
328 int i;
329 gdb_assert (src != NULL && dst != NULL);
330 gdb_assert (src->descr->gdbarch == dst->descr->gdbarch);
331 /* NOTE: cagney/2002-05-17: Don't let the caller do a no-passthrough
332 move of data into the current_regcache(). Doing this would be
333 silly - it would mean that valid_p would be completly invalid. */
334 gdb_assert (dst != current_regcache);
335 memcpy (dst->raw_registers, src->raw_registers,
336 dst->descr->sizeof_raw_registers);
337 memcpy (dst->raw_register_valid_p, src->raw_register_valid_p,
338 dst->descr->sizeof_raw_register_valid_p);
339 }
340
341 struct regcache *
342 regcache_dup (struct regcache *src)
343 {
344 struct regcache *newbuf;
345 gdb_assert (current_regcache != NULL);
346 newbuf = regcache_xmalloc (src->descr->gdbarch);
347 regcache_cpy (newbuf, src);
348 return newbuf;
349 }
350
351 struct regcache *
352 regcache_dup_no_passthrough (struct regcache *src)
353 {
354 struct regcache *newbuf;
355 gdb_assert (current_regcache != NULL);
356 newbuf = regcache_xmalloc (src->descr->gdbarch);
357 regcache_cpy_no_passthrough (newbuf, src);
358 return newbuf;
359 }
360
361 int
362 regcache_valid_p (struct regcache *regcache, int regnum)
363 {
364 gdb_assert (regcache != NULL);
365 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
366 return regcache->raw_register_valid_p[regnum];
367 }
368
369 char *
370 deprecated_grub_regcache_for_registers (struct regcache *regcache)
371 {
372 return regcache->raw_registers;
373 }
374
375 char *
376 deprecated_grub_regcache_for_register_valid (struct regcache *regcache)
377 {
378 return regcache->raw_register_valid_p;
379 }
380
381 /* Global structure containing the current regcache. */
382 /* FIXME: cagney/2002-05-11: The two global arrays registers[] and
383 register_valid[] currently point into this structure. */
384 struct regcache *current_regcache;
385
386 /* NOTE: this is a write-through cache. There is no "dirty" bit for
387 recording if the register values have been changed (eg. by the
388 user). Therefore all registers must be written back to the
389 target when appropriate. */
390
391 /* REGISTERS contains the cached register values (in target byte order). */
392
393 char *registers;
394
395 /* REGISTER_VALID is 0 if the register needs to be fetched,
396 1 if it has been fetched, and
397 -1 if the register value was not available.
398
399 "Not available" indicates that the target is not not able to supply
400 the register at this state. The register may become available at a
401 later time (after the next resume). This often occures when GDB is
402 manipulating a target that contains only a snapshot of the entire
403 system being debugged - some of the registers in such a system may
404 not have been saved. */
405
406 signed char *register_valid;
407
408 /* The thread/process associated with the current set of registers. */
409
410 static ptid_t registers_ptid;
411
412 /*
413 * FUNCTIONS:
414 */
415
416 /* REGISTER_CACHED()
417
418 Returns 0 if the value is not in the cache (needs fetch).
419 >0 if the value is in the cache.
420 <0 if the value is permanently unavailable (don't ask again). */
421
422 int
423 register_cached (int regnum)
424 {
425 return register_valid[regnum];
426 }
427
428 /* Record that REGNUM's value is cached if STATE is >0, uncached but
429 fetchable if STATE is 0, and uncached and unfetchable if STATE is <0. */
430
431 void
432 set_register_cached (int regnum, int state)
433 {
434 register_valid[regnum] = state;
435 }
436
437 /* REGISTER_CHANGED
438
439 invalidate a single register REGNUM in the cache */
440 void
441 register_changed (int regnum)
442 {
443 set_register_cached (regnum, 0);
444 }
445
446 /* If REGNUM >= 0, return a pointer to register REGNUM's cache buffer area,
447 else return a pointer to the start of the cache buffer. */
448
449 static char *
450 register_buffer (struct regcache *regcache, int regnum)
451 {
452 return regcache->raw_registers + regcache->descr->register_offset[regnum];
453 }
454
455 /* Return whether register REGNUM is a real register. */
456
457 static int
458 real_register (int regnum)
459 {
460 return regnum >= 0 && regnum < NUM_REGS;
461 }
462
463 /* Low level examining and depositing of registers.
464
465 The caller is responsible for making sure that the inferior is
466 stopped before calling the fetching routines, or it will get
467 garbage. (a change from GDB version 3, in which the caller got the
468 value from the last stop). */
469
470 /* REGISTERS_CHANGED ()
471
472 Indicate that registers may have changed, so invalidate the cache. */
473
474 void
475 registers_changed (void)
476 {
477 int i;
478
479 registers_ptid = pid_to_ptid (-1);
480
481 /* Force cleanup of any alloca areas if using C alloca instead of
482 a builtin alloca. This particular call is used to clean up
483 areas allocated by low level target code which may build up
484 during lengthy interactions between gdb and the target before
485 gdb gives control to the user (ie watchpoints). */
486 alloca (0);
487
488 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
489 set_register_cached (i, 0);
490
491 if (registers_changed_hook)
492 registers_changed_hook ();
493 }
494
495 /* REGISTERS_FETCHED ()
496
497 Indicate that all registers have been fetched, so mark them all valid. */
498
499 /* NOTE: cagney/2001-12-04: This function does not set valid on the
500 pseudo-register range since pseudo registers are always supplied
501 using supply_register(). */
502 /* FIXME: cagney/2001-12-04: This function is DEPRECATED. The target
503 code was blatting the registers[] array and then calling this.
504 Since targets should only be using supply_register() the need for
505 this function/hack is eliminated. */
506
507 void
508 registers_fetched (void)
509 {
510 int i;
511
512 for (i = 0; i < NUM_REGS; i++)
513 set_register_cached (i, 1);
514 /* Do not assume that the pseudo-regs have also been fetched.
515 Fetching all real regs NEVER accounts for pseudo-regs. */
516 }
517
518 /* read_register_bytes and write_register_bytes are generally a *BAD*
519 idea. They are inefficient because they need to check for partial
520 updates, which can only be done by scanning through all of the
521 registers and seeing if the bytes that are being read/written fall
522 inside of an invalid register. [The main reason this is necessary
523 is that register sizes can vary, so a simple index won't suffice.]
524 It is far better to call read_register_gen and write_register_gen
525 if you want to get at the raw register contents, as it only takes a
526 regnum as an argument, and therefore can't do a partial register
527 update.
528
529 Prior to the recent fixes to check for partial updates, both read
530 and write_register_bytes always checked to see if any registers
531 were stale, and then called target_fetch_registers (-1) to update
532 the whole set. This caused really slowed things down for remote
533 targets. */
534
535 /* Copy INLEN bytes of consecutive data from registers
536 starting with the INREGBYTE'th byte of register data
537 into memory at MYADDR. */
538
539 void
540 read_register_bytes (int in_start, char *in_buf, int in_len)
541 {
542 int in_end = in_start + in_len;
543 int regnum;
544 char *reg_buf = alloca (MAX_REGISTER_RAW_SIZE);
545
546 /* See if we are trying to read bytes from out-of-date registers. If so,
547 update just those registers. */
548
549 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
550 {
551 int reg_start;
552 int reg_end;
553 int reg_len;
554 int start;
555 int end;
556 int byte;
557
558 reg_start = REGISTER_BYTE (regnum);
559 reg_len = REGISTER_RAW_SIZE (regnum);
560 reg_end = reg_start + reg_len;
561
562 if (reg_end <= in_start || in_end <= reg_start)
563 /* The range the user wants to read doesn't overlap with regnum. */
564 continue;
565
566 if (REGISTER_NAME (regnum) != NULL && *REGISTER_NAME (regnum) != '\0')
567 /* Force the cache to fetch the entire register. */
568 read_register_gen (regnum, reg_buf);
569 else
570 /* Legacy note: even though this register is ``invalid'' we
571 still need to return something. It would appear that some
572 code relies on apparent gaps in the register array also
573 being returned. */
574 /* FIXME: cagney/2001-08-18: This is just silly. It defeats
575 the entire register read/write flow of control. Must
576 resist temptation to return 0xdeadbeef. */
577 memcpy (reg_buf, registers + reg_start, reg_len);
578
579 /* Legacy note: This function, for some reason, allows a NULL
580 input buffer. If the buffer is NULL, the registers are still
581 fetched, just the final transfer is skipped. */
582 if (in_buf == NULL)
583 continue;
584
585 /* start = max (reg_start, in_start) */
586 if (reg_start > in_start)
587 start = reg_start;
588 else
589 start = in_start;
590
591 /* end = min (reg_end, in_end) */
592 if (reg_end < in_end)
593 end = reg_end;
594 else
595 end = in_end;
596
597 /* Transfer just the bytes common to both IN_BUF and REG_BUF */
598 for (byte = start; byte < end; byte++)
599 {
600 in_buf[byte - in_start] = reg_buf[byte - reg_start];
601 }
602 }
603 }
604
605 /* Read register REGNUM into memory at MYADDR, which must be large
606 enough for REGISTER_RAW_BYTES (REGNUM). Target byte-order. If the
607 register is known to be the size of a CORE_ADDR or smaller,
608 read_register can be used instead. */
609
610 static void
611 legacy_read_register_gen (int regnum, char *myaddr)
612 {
613 gdb_assert (regnum >= 0 && regnum < (NUM_REGS + NUM_PSEUDO_REGS));
614 if (! ptid_equal (registers_ptid, inferior_ptid))
615 {
616 registers_changed ();
617 registers_ptid = inferior_ptid;
618 }
619
620 if (!register_cached (regnum))
621 target_fetch_registers (regnum);
622
623 memcpy (myaddr, register_buffer (current_regcache, regnum),
624 REGISTER_RAW_SIZE (regnum));
625 }
626
627 void
628 regcache_raw_read (struct regcache *regcache, int regnum, void *buf)
629 {
630 gdb_assert (regcache != NULL && buf != NULL);
631 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
632 if (regcache->descr->legacy_p
633 && regcache->passthrough_p)
634 {
635 gdb_assert (regcache == current_regcache);
636 /* For moment, just use underlying legacy code. Ulgh!!! This
637 silently and very indirectly updates the regcache's regcache
638 via the global register_valid[]. */
639 legacy_read_register_gen (regnum, buf);
640 return;
641 }
642 /* Make certain that the register cache is up-to-date with respect
643 to the current thread. This switching shouldn't be necessary
644 only there is still only one target side register cache. Sigh!
645 On the bright side, at least there is a regcache object. */
646 if (regcache->passthrough_p)
647 {
648 gdb_assert (regcache == current_regcache);
649 if (! ptid_equal (registers_ptid, inferior_ptid))
650 {
651 registers_changed ();
652 registers_ptid = inferior_ptid;
653 }
654 if (!register_cached (regnum))
655 target_fetch_registers (regnum);
656 }
657 /* Copy the value directly into the register cache. */
658 memcpy (buf, (regcache->raw_registers
659 + regcache->descr->register_offset[regnum]),
660 regcache->descr->sizeof_register[regnum]);
661 }
662
663 void
664 read_register_gen (int regnum, char *buf)
665 {
666 gdb_assert (current_regcache != NULL);
667 gdb_assert (current_regcache->descr->gdbarch == current_gdbarch);
668 if (current_regcache->descr->legacy_p)
669 {
670 legacy_read_register_gen (regnum, buf);
671 return;
672 }
673 regcache_cooked_read (current_regcache, regnum, buf);
674 }
675
676 void
677 regcache_cooked_read (struct regcache *regcache, int regnum, void *buf)
678 {
679 gdb_assert (regnum >= 0);
680 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
681 if (regnum < regcache->descr->nr_raw_registers)
682 regcache_raw_read (regcache, regnum, buf);
683 else
684 gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
685 regnum, buf);
686 }
687
688 void
689 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
690 LONGEST *val)
691 {
692 char *buf;
693 gdb_assert (regcache != NULL);
694 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
695 buf = alloca (regcache->descr->sizeof_register[regnum]);
696 regcache_cooked_read (regcache, regnum, buf);
697 (*val) = extract_signed_integer (buf,
698 regcache->descr->sizeof_register[regnum]);
699 }
700
701 void
702 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
703 ULONGEST *val)
704 {
705 char *buf;
706 gdb_assert (regcache != NULL);
707 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
708 buf = alloca (regcache->descr->sizeof_register[regnum]);
709 regcache_cooked_read (regcache, regnum, buf);
710 (*val) = extract_unsigned_integer (buf,
711 regcache->descr->sizeof_register[regnum]);
712 }
713
714 /* Write register REGNUM at MYADDR to the target. MYADDR points at
715 REGISTER_RAW_BYTES(REGNUM), which must be in target byte-order. */
716
717 static void
718 legacy_write_register_gen (int regnum, const void *myaddr)
719 {
720 int size;
721 gdb_assert (regnum >= 0 && regnum < (NUM_REGS + NUM_PSEUDO_REGS));
722
723 /* On the sparc, writing %g0 is a no-op, so we don't even want to
724 change the registers array if something writes to this register. */
725 if (CANNOT_STORE_REGISTER (regnum))
726 return;
727
728 if (! ptid_equal (registers_ptid, inferior_ptid))
729 {
730 registers_changed ();
731 registers_ptid = inferior_ptid;
732 }
733
734 size = REGISTER_RAW_SIZE (regnum);
735
736 if (real_register (regnum))
737 {
738 /* If we have a valid copy of the register, and new value == old
739 value, then don't bother doing the actual store. */
740 if (register_cached (regnum)
741 && (memcmp (register_buffer (current_regcache, regnum), myaddr, size)
742 == 0))
743 return;
744 else
745 target_prepare_to_store ();
746 }
747
748 memcpy (register_buffer (current_regcache, regnum), myaddr, size);
749
750 set_register_cached (regnum, 1);
751 target_store_registers (regnum);
752 }
753
754 void
755 regcache_raw_write (struct regcache *regcache, int regnum, const void *buf)
756 {
757 gdb_assert (regcache != NULL && buf != NULL);
758 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
759
760 if (regcache->passthrough_p
761 && regcache->descr->legacy_p)
762 {
763 /* For moment, just use underlying legacy code. Ulgh!!! This
764 silently and very indirectly updates the regcache's buffers
765 via the globals register_valid[] and registers[]. */
766 gdb_assert (regcache == current_regcache);
767 legacy_write_register_gen (regnum, buf);
768 return;
769 }
770
771 /* On the sparc, writing %g0 is a no-op, so we don't even want to
772 change the registers array if something writes to this register. */
773 if (CANNOT_STORE_REGISTER (regnum))
774 return;
775
776 /* Handle the simple case first -> not write through so just store
777 value in cache. */
778 if (!regcache->passthrough_p)
779 {
780 memcpy ((regcache->raw_registers
781 + regcache->descr->register_offset[regnum]), buf,
782 regcache->descr->sizeof_register[regnum]);
783 regcache->raw_register_valid_p[regnum] = 1;
784 return;
785 }
786
787 /* Make certain that the correct cache is selected. */
788 gdb_assert (regcache == current_regcache);
789 if (! ptid_equal (registers_ptid, inferior_ptid))
790 {
791 registers_changed ();
792 registers_ptid = inferior_ptid;
793 }
794
795 /* If we have a valid copy of the register, and new value == old
796 value, then don't bother doing the actual store. */
797 if (regcache_valid_p (regcache, regnum)
798 && (memcmp (register_buffer (regcache, regnum), buf,
799 regcache->descr->sizeof_register[regnum]) == 0))
800 return;
801
802 target_prepare_to_store ();
803 memcpy (register_buffer (regcache, regnum), buf,
804 regcache->descr->sizeof_register[regnum]);
805 regcache->raw_register_valid_p[regnum] = 1;
806 target_store_registers (regnum);
807 }
808
809 void
810 write_register_gen (int regnum, char *buf)
811 {
812 gdb_assert (current_regcache != NULL);
813 gdb_assert (current_regcache->descr->gdbarch == current_gdbarch);
814 if (current_regcache->descr->legacy_p)
815 {
816 legacy_write_register_gen (regnum, buf);
817 return;
818 }
819 regcache_cooked_write (current_regcache, regnum, buf);
820 }
821
822 void
823 regcache_cooked_write (struct regcache *regcache, int regnum, const void *buf)
824 {
825 gdb_assert (regnum >= 0);
826 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
827 if (regnum < regcache->descr->nr_raw_registers)
828 regcache_raw_write (regcache, regnum, buf);
829 else
830 gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
831 regnum, buf);
832 }
833
834 /* Copy INLEN bytes of consecutive data from memory at MYADDR
835 into registers starting with the MYREGSTART'th byte of register data. */
836
837 void
838 write_register_bytes (int myregstart, char *myaddr, int inlen)
839 {
840 int myregend = myregstart + inlen;
841 int regnum;
842
843 target_prepare_to_store ();
844
845 /* Scan through the registers updating any that are covered by the
846 range myregstart<=>myregend using write_register_gen, which does
847 nice things like handling threads, and avoiding updates when the
848 new and old contents are the same. */
849
850 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
851 {
852 int regstart, regend;
853
854 regstart = REGISTER_BYTE (regnum);
855 regend = regstart + REGISTER_RAW_SIZE (regnum);
856
857 /* Is this register completely outside the range the user is writing? */
858 if (myregend <= regstart || regend <= myregstart)
859 /* do nothing */ ;
860
861 /* Is this register completely within the range the user is writing? */
862 else if (myregstart <= regstart && regend <= myregend)
863 write_register_gen (regnum, myaddr + (regstart - myregstart));
864
865 /* The register partially overlaps the range being written. */
866 else
867 {
868 char *regbuf = (char*) alloca (MAX_REGISTER_RAW_SIZE);
869 /* What's the overlap between this register's bytes and
870 those the caller wants to write? */
871 int overlapstart = max (regstart, myregstart);
872 int overlapend = min (regend, myregend);
873
874 /* We may be doing a partial update of an invalid register.
875 Update it from the target before scribbling on it. */
876 read_register_gen (regnum, regbuf);
877
878 memcpy (registers + overlapstart,
879 myaddr + (overlapstart - myregstart),
880 overlapend - overlapstart);
881
882 target_store_registers (regnum);
883 }
884 }
885 }
886
887
888 /* Return the contents of register REGNUM as an unsigned integer. */
889
890 ULONGEST
891 read_register (int regnum)
892 {
893 char *buf = alloca (REGISTER_RAW_SIZE (regnum));
894 read_register_gen (regnum, buf);
895 return (extract_unsigned_integer (buf, REGISTER_RAW_SIZE (regnum)));
896 }
897
898 ULONGEST
899 read_register_pid (int regnum, ptid_t ptid)
900 {
901 ptid_t save_ptid;
902 int save_pid;
903 CORE_ADDR retval;
904
905 if (ptid_equal (ptid, inferior_ptid))
906 return read_register (regnum);
907
908 save_ptid = inferior_ptid;
909
910 inferior_ptid = ptid;
911
912 retval = read_register (regnum);
913
914 inferior_ptid = save_ptid;
915
916 return retval;
917 }
918
919 /* Return the contents of register REGNUM as a signed integer. */
920
921 LONGEST
922 read_signed_register (int regnum)
923 {
924 void *buf = alloca (REGISTER_RAW_SIZE (regnum));
925 read_register_gen (regnum, buf);
926 return (extract_signed_integer (buf, REGISTER_RAW_SIZE (regnum)));
927 }
928
929 LONGEST
930 read_signed_register_pid (int regnum, ptid_t ptid)
931 {
932 ptid_t save_ptid;
933 LONGEST retval;
934
935 if (ptid_equal (ptid, inferior_ptid))
936 return read_signed_register (regnum);
937
938 save_ptid = inferior_ptid;
939
940 inferior_ptid = ptid;
941
942 retval = read_signed_register (regnum);
943
944 inferior_ptid = save_ptid;
945
946 return retval;
947 }
948
949 /* Store VALUE into the raw contents of register number REGNUM. */
950
951 void
952 write_register (int regnum, LONGEST val)
953 {
954 void *buf;
955 int size;
956 size = REGISTER_RAW_SIZE (regnum);
957 buf = alloca (size);
958 store_signed_integer (buf, size, (LONGEST) val);
959 write_register_gen (regnum, buf);
960 }
961
962 void
963 write_register_pid (int regnum, CORE_ADDR val, ptid_t ptid)
964 {
965 ptid_t save_ptid;
966
967 if (ptid_equal (ptid, inferior_ptid))
968 {
969 write_register (regnum, val);
970 return;
971 }
972
973 save_ptid = inferior_ptid;
974
975 inferior_ptid = ptid;
976
977 write_register (regnum, val);
978
979 inferior_ptid = save_ptid;
980 }
981
982 /* SUPPLY_REGISTER()
983
984 Record that register REGNUM contains VAL. This is used when the
985 value is obtained from the inferior or core dump, so there is no
986 need to store the value there.
987
988 If VAL is a NULL pointer, then it's probably an unsupported register.
989 We just set its value to all zeros. We might want to record this
990 fact, and report it to the users of read_register and friends. */
991
992 void
993 supply_register (int regnum, const void *val)
994 {
995 #if 1
996 if (! ptid_equal (registers_ptid, inferior_ptid))
997 {
998 registers_changed ();
999 registers_ptid = inferior_ptid;
1000 }
1001 #endif
1002
1003 set_register_cached (regnum, 1);
1004 if (val)
1005 memcpy (register_buffer (current_regcache, regnum), val,
1006 REGISTER_RAW_SIZE (regnum));
1007 else
1008 memset (register_buffer (current_regcache, regnum), '\000',
1009 REGISTER_RAW_SIZE (regnum));
1010
1011 /* On some architectures, e.g. HPPA, there are a few stray bits in
1012 some registers, that the rest of the code would like to ignore. */
1013
1014 /* NOTE: cagney/2001-03-16: The macro CLEAN_UP_REGISTER_VALUE is
1015 going to be deprecated. Instead architectures will leave the raw
1016 register value as is and instead clean things up as they pass
1017 through the method gdbarch_pseudo_register_read() clean up the
1018 values. */
1019
1020 #ifdef DEPRECATED_CLEAN_UP_REGISTER_VALUE
1021 DEPRECATED_CLEAN_UP_REGISTER_VALUE \
1022 (regnum, register_buffer (current_regcache, regnum));
1023 #endif
1024 }
1025
1026 void
1027 regcache_collect (int regnum, void *buf)
1028 {
1029 memcpy (buf, register_buffer (current_regcache, regnum),
1030 REGISTER_RAW_SIZE (regnum));
1031 }
1032
1033
1034 /* read_pc, write_pc, read_sp, write_sp, read_fp, etc. Special
1035 handling for registers PC, SP, and FP. */
1036
1037 /* NOTE: cagney/2001-02-18: The functions generic_target_read_pc(),
1038 read_pc_pid(), read_pc(), generic_target_write_pc(),
1039 write_pc_pid(), write_pc(), generic_target_read_sp(), read_sp(),
1040 generic_target_write_sp(), write_sp(), generic_target_read_fp() and
1041 read_fp(), will eventually be moved out of the reg-cache into
1042 either frame.[hc] or to the multi-arch framework. The are not part
1043 of the raw register cache. */
1044
1045 /* This routine is getting awfully cluttered with #if's. It's probably
1046 time to turn this into READ_PC and define it in the tm.h file.
1047 Ditto for write_pc.
1048
1049 1999-06-08: The following were re-written so that it assumes the
1050 existence of a TARGET_READ_PC et.al. macro. A default generic
1051 version of that macro is made available where needed.
1052
1053 Since the ``TARGET_READ_PC'' et.al. macro is going to be controlled
1054 by the multi-arch framework, it will eventually be possible to
1055 eliminate the intermediate read_pc_pid(). The client would call
1056 TARGET_READ_PC directly. (cagney). */
1057
1058 CORE_ADDR
1059 generic_target_read_pc (ptid_t ptid)
1060 {
1061 #ifdef PC_REGNUM
1062 if (PC_REGNUM >= 0)
1063 {
1064 CORE_ADDR pc_val = ADDR_BITS_REMOVE ((CORE_ADDR) read_register_pid (PC_REGNUM, ptid));
1065 return pc_val;
1066 }
1067 #endif
1068 internal_error (__FILE__, __LINE__,
1069 "generic_target_read_pc");
1070 return 0;
1071 }
1072
1073 CORE_ADDR
1074 read_pc_pid (ptid_t ptid)
1075 {
1076 ptid_t saved_inferior_ptid;
1077 CORE_ADDR pc_val;
1078
1079 /* In case ptid != inferior_ptid. */
1080 saved_inferior_ptid = inferior_ptid;
1081 inferior_ptid = ptid;
1082
1083 pc_val = TARGET_READ_PC (ptid);
1084
1085 inferior_ptid = saved_inferior_ptid;
1086 return pc_val;
1087 }
1088
1089 CORE_ADDR
1090 read_pc (void)
1091 {
1092 return read_pc_pid (inferior_ptid);
1093 }
1094
1095 void
1096 generic_target_write_pc (CORE_ADDR pc, ptid_t ptid)
1097 {
1098 #ifdef PC_REGNUM
1099 if (PC_REGNUM >= 0)
1100 write_register_pid (PC_REGNUM, pc, ptid);
1101 if (NPC_REGNUM >= 0)
1102 write_register_pid (NPC_REGNUM, pc + 4, ptid);
1103 #else
1104 internal_error (__FILE__, __LINE__,
1105 "generic_target_write_pc");
1106 #endif
1107 }
1108
1109 void
1110 write_pc_pid (CORE_ADDR pc, ptid_t ptid)
1111 {
1112 ptid_t saved_inferior_ptid;
1113
1114 /* In case ptid != inferior_ptid. */
1115 saved_inferior_ptid = inferior_ptid;
1116 inferior_ptid = ptid;
1117
1118 TARGET_WRITE_PC (pc, ptid);
1119
1120 inferior_ptid = saved_inferior_ptid;
1121 }
1122
1123 void
1124 write_pc (CORE_ADDR pc)
1125 {
1126 write_pc_pid (pc, inferior_ptid);
1127 }
1128
1129 /* Cope with strage ways of getting to the stack and frame pointers */
1130
1131 CORE_ADDR
1132 generic_target_read_sp (void)
1133 {
1134 #ifdef SP_REGNUM
1135 if (SP_REGNUM >= 0)
1136 return read_register (SP_REGNUM);
1137 #endif
1138 internal_error (__FILE__, __LINE__,
1139 "generic_target_read_sp");
1140 }
1141
1142 CORE_ADDR
1143 read_sp (void)
1144 {
1145 return TARGET_READ_SP ();
1146 }
1147
1148 void
1149 generic_target_write_sp (CORE_ADDR val)
1150 {
1151 #ifdef SP_REGNUM
1152 if (SP_REGNUM >= 0)
1153 {
1154 write_register (SP_REGNUM, val);
1155 return;
1156 }
1157 #endif
1158 internal_error (__FILE__, __LINE__,
1159 "generic_target_write_sp");
1160 }
1161
1162 void
1163 write_sp (CORE_ADDR val)
1164 {
1165 TARGET_WRITE_SP (val);
1166 }
1167
1168 CORE_ADDR
1169 generic_target_read_fp (void)
1170 {
1171 #ifdef FP_REGNUM
1172 if (FP_REGNUM >= 0)
1173 return read_register (FP_REGNUM);
1174 #endif
1175 internal_error (__FILE__, __LINE__,
1176 "generic_target_read_fp");
1177 }
1178
1179 CORE_ADDR
1180 read_fp (void)
1181 {
1182 return TARGET_READ_FP ();
1183 }
1184
1185 /* ARGSUSED */
1186 static void
1187 reg_flush_command (char *command, int from_tty)
1188 {
1189 /* Force-flush the register cache. */
1190 registers_changed ();
1191 if (from_tty)
1192 printf_filtered ("Register cache flushed.\n");
1193 }
1194
1195 static void
1196 build_regcache (void)
1197 {
1198 current_regcache = regcache_xmalloc (current_gdbarch);
1199 current_regcache->passthrough_p = 1;
1200 registers = deprecated_grub_regcache_for_registers (current_regcache);
1201 register_valid = deprecated_grub_regcache_for_register_valid (current_regcache);
1202 }
1203
1204 static void
1205 dump_endian_bytes (struct ui_file *file, enum bfd_endian endian,
1206 const unsigned char *buf, long len)
1207 {
1208 int i;
1209 switch (endian)
1210 {
1211 case BFD_ENDIAN_BIG:
1212 for (i = 0; i < len; i++)
1213 fprintf_unfiltered (file, "%02x", buf[i]);
1214 break;
1215 case BFD_ENDIAN_LITTLE:
1216 for (i = len - 1; i >= 0; i--)
1217 fprintf_unfiltered (file, "%02x", buf[i]);
1218 break;
1219 default:
1220 internal_error (__FILE__, __LINE__, "Bad switch");
1221 }
1222 }
1223
1224 enum regcache_dump_what
1225 {
1226 regcache_dump_none, regcache_dump_raw, regcache_dump_cooked
1227 };
1228
1229 static void
1230 regcache_dump (struct regcache *regcache, struct ui_file *file,
1231 enum regcache_dump_what what_to_dump)
1232 {
1233 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
1234 int regnum;
1235 int footnote_nr = 0;
1236 int footnote_register_size = 0;
1237 int footnote_register_offset = 0;
1238 int footnote_register_type_name_null = 0;
1239 long register_offset = 0;
1240 unsigned char *buf = alloca (regcache->descr->max_register_size);
1241
1242 #if 0
1243 fprintf_unfiltered (file, "legacy_p %d\n", regcache->descr->legacy_p);
1244 fprintf_unfiltered (file, "nr_raw_registers %d\n",
1245 regcache->descr->nr_raw_registers);
1246 fprintf_unfiltered (file, "nr_cooked_registers %d\n",
1247 regcache->descr->nr_cooked_registers);
1248 fprintf_unfiltered (file, "sizeof_raw_registers %ld\n",
1249 regcache->descr->sizeof_raw_registers);
1250 fprintf_unfiltered (file, "sizeof_raw_register_valid_p %ld\n",
1251 regcache->descr->sizeof_raw_register_valid_p);
1252 fprintf_unfiltered (file, "max_register_size %ld\n",
1253 regcache->descr->max_register_size);
1254 fprintf_unfiltered (file, "NUM_REGS %d\n", NUM_REGS);
1255 fprintf_unfiltered (file, "NUM_PSEUDO_REGS %d\n", NUM_PSEUDO_REGS);
1256 #endif
1257
1258 gdb_assert (regcache->descr->nr_cooked_registers
1259 == (NUM_REGS + NUM_PSEUDO_REGS));
1260
1261 for (regnum = -1; regnum < regcache->descr->nr_cooked_registers; regnum++)
1262 {
1263 /* Name. */
1264 if (regnum < 0)
1265 fprintf_unfiltered (file, " %-10s", "Name");
1266 else
1267 {
1268 const char *p = REGISTER_NAME (regnum);
1269 if (p == NULL)
1270 p = "";
1271 else if (p[0] == '\0')
1272 p = "''";
1273 fprintf_unfiltered (file, " %-10s", p);
1274 }
1275
1276 /* Number. */
1277 if (regnum < 0)
1278 fprintf_unfiltered (file, " %4s", "Nr");
1279 else
1280 fprintf_unfiltered (file, " %4d", regnum);
1281
1282 /* Relative number. */
1283 if (regnum < 0)
1284 fprintf_unfiltered (file, " %4s", "Rel");
1285 else if (regnum < NUM_REGS)
1286 fprintf_unfiltered (file, " %4d", regnum);
1287 else
1288 fprintf_unfiltered (file, " %4d", (regnum - NUM_REGS));
1289
1290 /* Offset. */
1291 if (regnum < 0)
1292 fprintf_unfiltered (file, " %6s ", "Offset");
1293 else
1294 {
1295 fprintf_unfiltered (file, " %6ld",
1296 regcache->descr->register_offset[regnum]);
1297 if (register_offset != regcache->descr->register_offset[regnum]
1298 || register_offset != REGISTER_BYTE (regnum))
1299 {
1300 if (!footnote_register_offset)
1301 footnote_register_offset = ++footnote_nr;
1302 fprintf_unfiltered (file, "*%d", footnote_register_offset);
1303 }
1304 else
1305 fprintf_unfiltered (file, " ");
1306 register_offset = (regcache->descr->register_offset[regnum]
1307 + regcache->descr->sizeof_register[regnum]);
1308 }
1309
1310 /* Size. */
1311 if (regnum < 0)
1312 fprintf_unfiltered (file, " %5s ", "Size");
1313 else
1314 {
1315 fprintf_unfiltered (file, " %5ld",
1316 regcache->descr->sizeof_register[regnum]);
1317 if ((regcache->descr->sizeof_register[regnum]
1318 != REGISTER_RAW_SIZE (regnum))
1319 || (regcache->descr->sizeof_register[regnum]
1320 != REGISTER_VIRTUAL_SIZE (regnum))
1321 || (regcache->descr->sizeof_register[regnum]
1322 != TYPE_LENGTH (REGISTER_VIRTUAL_TYPE (regnum)))
1323 )
1324 {
1325 if (!footnote_register_size)
1326 footnote_register_size = ++footnote_nr;
1327 fprintf_unfiltered (file, "*%d", footnote_register_size);
1328 }
1329 else
1330 fprintf_unfiltered (file, " ");
1331 }
1332
1333 /* Type. */
1334 if (regnum < 0)
1335 fprintf_unfiltered (file, " %-20s", "Type");
1336 else
1337 {
1338 static const char blt[] = "builtin_type";
1339 const char *t = TYPE_NAME (REGISTER_VIRTUAL_TYPE (regnum));
1340 if (t == NULL)
1341 {
1342 char *n;
1343 if (!footnote_register_type_name_null)
1344 footnote_register_type_name_null = ++footnote_nr;
1345 xasprintf (&n, "*%d", footnote_register_type_name_null);
1346 make_cleanup (xfree, n);
1347 t = n;
1348 }
1349 /* Chop a leading builtin_type. */
1350 if (strncmp (t, blt, strlen (blt)) == 0)
1351 t += strlen (blt);
1352 fprintf_unfiltered (file, " %-20s", t);
1353 }
1354
1355 /* Value, raw. */
1356 if (what_to_dump == regcache_dump_raw)
1357 {
1358 if (regnum < 0)
1359 fprintf_unfiltered (file, "Raw value");
1360 else if (regnum >= regcache->descr->nr_raw_registers)
1361 fprintf_unfiltered (file, "<cooked>");
1362 else if (!regcache_valid_p (regcache, regnum))
1363 fprintf_unfiltered (file, "<invalid>");
1364 else
1365 {
1366 regcache_raw_read (regcache, regnum, buf);
1367 fprintf_unfiltered (file, "0x");
1368 dump_endian_bytes (file, TARGET_BYTE_ORDER, buf,
1369 REGISTER_RAW_SIZE (regnum));
1370 }
1371 }
1372
1373 /* Value, cooked. */
1374 if (what_to_dump == regcache_dump_cooked)
1375 {
1376 if (regnum < 0)
1377 fprintf_unfiltered (file, "Cooked value");
1378 else
1379 {
1380 regcache_cooked_read (regcache, regnum, buf);
1381 fprintf_unfiltered (file, "0x");
1382 dump_endian_bytes (file, TARGET_BYTE_ORDER, buf,
1383 REGISTER_VIRTUAL_SIZE (regnum));
1384 }
1385 }
1386
1387 fprintf_unfiltered (file, "\n");
1388 }
1389
1390 if (footnote_register_size)
1391 fprintf_unfiltered (file, "*%d: Inconsistent register sizes.\n",
1392 footnote_register_size);
1393 if (footnote_register_offset)
1394 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1395 footnote_register_offset);
1396 if (footnote_register_type_name_null)
1397 fprintf_unfiltered (file,
1398 "*%d: Register type's name NULL.\n",
1399 footnote_register_type_name_null);
1400 do_cleanups (cleanups);
1401 }
1402
1403 static void
1404 regcache_print (char *args, enum regcache_dump_what what_to_dump)
1405 {
1406 if (args == NULL)
1407 regcache_dump (current_regcache, gdb_stdout, what_to_dump);
1408 else
1409 {
1410 struct ui_file *file = gdb_fopen (args, "w");
1411 if (file == NULL)
1412 perror_with_name ("maintenance print architecture");
1413 regcache_dump (current_regcache, file, what_to_dump);
1414 ui_file_delete (file);
1415 }
1416 }
1417
1418 static void
1419 maintenance_print_registers (char *args, int from_tty)
1420 {
1421 regcache_print (args, regcache_dump_none);
1422 }
1423
1424 static void
1425 maintenance_print_raw_registers (char *args, int from_tty)
1426 {
1427 regcache_print (args, regcache_dump_raw);
1428 }
1429
1430 static void
1431 maintenance_print_cooked_registers (char *args, int from_tty)
1432 {
1433 regcache_print (args, regcache_dump_cooked);
1434 }
1435
1436 void
1437 _initialize_regcache (void)
1438 {
1439 regcache_descr_handle = register_gdbarch_data (init_regcache_descr,
1440 xfree_regcache_descr);
1441 REGISTER_GDBARCH_SWAP (current_regcache);
1442 register_gdbarch_swap (&registers, sizeof (registers), NULL);
1443 register_gdbarch_swap (&register_valid, sizeof (register_valid), NULL);
1444 register_gdbarch_swap (NULL, 0, build_regcache);
1445
1446 add_com ("flushregs", class_maintenance, reg_flush_command,
1447 "Force gdb to flush its register cache (maintainer command)");
1448
1449 /* Initialize the thread/process associated with the current set of
1450 registers. For now, -1 is special, and means `no current process'. */
1451 registers_ptid = pid_to_ptid (-1);
1452
1453 add_cmd ("registers", class_maintenance,
1454 maintenance_print_registers,
1455 "Print the internal register configuration.\
1456 Takes an optional file parameter.",
1457 &maintenanceprintlist);
1458 add_cmd ("raw-registers", class_maintenance,
1459 maintenance_print_raw_registers,
1460 "Print the internal register configuration including raw values.\
1461 Takes an optional file parameter.",
1462 &maintenanceprintlist);
1463 add_cmd ("cooked-registers", class_maintenance,
1464 maintenance_print_cooked_registers,
1465 "Print the internal register configuration including cooked values.\
1466 Takes an optional file parameter.",
1467 &maintenanceprintlist);
1468
1469 }