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