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