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