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