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