1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000, 2001
3 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
29 #include "gdb_assert.h"
34 * Here is the actual register cache.
37 /* NOTE: this is a write-through cache. There is no "dirty" bit for
38 recording if the register values have been changed (eg. by the
39 user). Therefore all registers must be written back to the
40 target when appropriate. */
42 /* REGISTERS contains the cached register values (in target byte order). */
46 /* REGISTER_VALID is 0 if the register needs to be fetched,
47 1 if it has been fetched, and
48 -1 if the register value was not available.
49 "Not available" means don't try to fetch it again. */
51 signed char *register_valid
;
53 /* The thread/process associated with the current set of registers.
54 For now, -1 is special, and means `no current process'. */
56 static int registers_pid
= -1;
64 Returns 0 if the value is not in the cache (needs fetch).
65 >0 if the value is in the cache.
66 <0 if the value is permanently unavailable (don't ask again). */
69 register_cached (int regnum
)
71 return register_valid
[regnum
];
74 /* Record that REGNUM's value is cached if STATE is >0, uncached but
75 fetchable if STATE is 0, and uncached and unfetchable if STATE is <0. */
78 set_register_cached (int regnum
, int state
)
80 register_valid
[regnum
] = state
;
85 invalidate a single register REGNUM in the cache */
87 register_changed (int regnum
)
89 set_register_cached (regnum
, 0);
92 /* If REGNUM >= 0, return a pointer to register REGNUM's cache buffer area,
93 else return a pointer to the start of the cache buffer. */
96 register_buffer (int regnum
)
101 return ®isters
[REGISTER_BYTE (regnum
)];
104 /* Return whether register REGNUM is a real register. */
107 real_register (int regnum
)
109 return regnum
>= 0 && regnum
< NUM_REGS
;
112 /* Return whether register REGNUM is a pseudo register. */
115 pseudo_register (int regnum
)
117 return regnum
>= NUM_REGS
&& regnum
< NUM_REGS
+ NUM_PSEUDO_REGS
;
120 /* Fetch register REGNUM into the cache. */
123 fetch_register (int regnum
)
125 if (real_register (regnum
))
126 target_fetch_registers (regnum
);
127 else if (pseudo_register (regnum
))
128 FETCH_PSEUDO_REGISTER (regnum
);
131 /* Write register REGNUM cached value to the target. */
134 store_register (int regnum
)
136 if (real_register (regnum
))
137 target_store_registers (regnum
);
138 else if (pseudo_register (regnum
))
139 STORE_PSEUDO_REGISTER (regnum
);
142 /* Low level examining and depositing of registers.
144 The caller is responsible for making sure that the inferior is
145 stopped before calling the fetching routines, or it will get
146 garbage. (a change from GDB version 3, in which the caller got the
147 value from the last stop). */
149 /* REGISTERS_CHANGED ()
151 Indicate that registers may have changed, so invalidate the cache. */
154 registers_changed (void)
160 /* Force cleanup of any alloca areas if using C alloca instead of
161 a builtin alloca. This particular call is used to clean up
162 areas allocated by low level target code which may build up
163 during lengthy interactions between gdb and the target before
164 gdb gives control to the user (ie watchpoints). */
167 for (i
= 0; i
< NUM_REGS
; i
++)
168 set_register_cached (i
, 0);
170 /* Assume that if all the hardware regs have changed,
171 then so have the pseudo-registers. */
172 for (i
= NUM_REGS
; i
< NUM_REGS
+ NUM_PSEUDO_REGS
; i
++)
173 set_register_cached (i
, 0);
175 if (registers_changed_hook
)
176 registers_changed_hook ();
179 /* REGISTERS_FETCHED ()
181 Indicate that all registers have been fetched, so mark them all valid. */
185 registers_fetched (void)
189 for (i
= 0; i
< NUM_REGS
; i
++)
190 set_register_cached (i
, 1);
191 /* Do not assume that the pseudo-regs have also been fetched.
192 Fetching all real regs might not account for all pseudo-regs. */
195 /* read_register_bytes and write_register_bytes are generally a *BAD*
196 idea. They are inefficient because they need to check for partial
197 updates, which can only be done by scanning through all of the
198 registers and seeing if the bytes that are being read/written fall
199 inside of an invalid register. [The main reason this is necessary
200 is that register sizes can vary, so a simple index won't suffice.]
201 It is far better to call read_register_gen and write_register_gen
202 if you want to get at the raw register contents, as it only takes a
203 regnum as an argument, and therefore can't do a partial register
206 Prior to the recent fixes to check for partial updates, both read
207 and write_register_bytes always checked to see if any registers
208 were stale, and then called target_fetch_registers (-1) to update
209 the whole set. This caused really slowed things down for remote
212 /* Copy INLEN bytes of consecutive data from registers
213 starting with the INREGBYTE'th byte of register data
214 into memory at MYADDR. */
217 read_register_bytes (int in_start
, char *in_buf
, int in_len
)
219 int in_end
= in_start
+ in_len
;
221 char *reg_buf
= alloca (MAX_REGISTER_RAW_SIZE
);
223 /* See if we are trying to read bytes from out-of-date registers. If so,
224 update just those registers. */
226 for (regnum
= 0; regnum
< NUM_REGS
+ NUM_PSEUDO_REGS
; regnum
++)
235 if (REGISTER_NAME (regnum
) == NULL
|| *REGISTER_NAME (regnum
) == '\0')
238 reg_start
= REGISTER_BYTE (regnum
);
239 reg_len
= REGISTER_RAW_SIZE (regnum
);
240 reg_end
= reg_start
+ reg_len
;
242 if (reg_end
<= in_start
|| in_end
<= reg_start
)
243 /* The range the user wants to read doesn't overlap with regnum. */
246 /* Force the cache to fetch the entire register. */
247 read_register_gen (regnum
, reg_buf
);
249 /* Legacy note: This function, for some reason, allows a NULL
250 input buffer. If the buffer is NULL, the registers are still
251 fetched, just the final transfer is skipped. */
255 /* start = max (reg_start, in_start) */
256 if (reg_start
> in_start
)
261 /* end = min (reg_end, in_end) */
262 if (reg_end
< in_end
)
267 /* Transfer just the bytes common to both IN_BUF and REG_BUF */
268 for (byte
= start
; byte
< end
; byte
++)
270 in_buf
[byte
- in_start
] = reg_buf
[byte
- reg_start
];
275 /* Read register REGNUM into memory at MYADDR, which must be large
276 enough for REGISTER_RAW_BYTES (REGNUM). Target byte-order. If the
277 register is known to be the size of a CORE_ADDR or smaller,
278 read_register can be used instead. */
281 legacy_read_register_gen (int regnum
, char *myaddr
)
283 gdb_assert (regnum
>= 0 && regnum
< (NUM_REGS
+ NUM_PSEUDO_REGS
));
284 if (registers_pid
!= inferior_pid
)
286 registers_changed ();
287 registers_pid
= inferior_pid
;
290 if (!register_cached (regnum
))
291 fetch_register (regnum
);
293 memcpy (myaddr
, register_buffer (regnum
),
294 REGISTER_RAW_SIZE (regnum
));
298 regcache_read (int rawnum
, char *buf
)
300 gdb_assert (rawnum
>= 0 && rawnum
< NUM_REGS
);
301 /* For moment, just use underlying legacy code. Ulgh!!! */
302 legacy_read_register_gen (rawnum
, buf
);
306 read_register_gen (int regnum
, char *buf
)
308 if (! gdbarch_register_read_p (current_gdbarch
))
310 legacy_read_register_gen (regnum
, buf
);
313 gdbarch_register_read (current_gdbarch
, regnum
, buf
);
317 /* Write register REGNUM at MYADDR to the target. MYADDR points at
318 REGISTER_RAW_BYTES(REGNUM), which must be in target byte-order. */
320 /* Registers we shouldn't try to store. */
321 #if !defined (CANNOT_STORE_REGISTER)
322 #define CANNOT_STORE_REGISTER(regnum) 0
326 legacy_write_register_gen (int regnum
, char *myaddr
)
329 gdb_assert (regnum
>= 0 && regnum
< (NUM_REGS
+ NUM_PSEUDO_REGS
));
331 /* On the sparc, writing %g0 is a no-op, so we don't even want to
332 change the registers array if something writes to this register. */
333 if (CANNOT_STORE_REGISTER (regnum
))
336 if (registers_pid
!= inferior_pid
)
338 registers_changed ();
339 registers_pid
= inferior_pid
;
342 size
= REGISTER_RAW_SIZE (regnum
);
344 /* If we have a valid copy of the register, and new value == old value,
345 then don't bother doing the actual store. */
347 if (register_cached (regnum
)
348 && memcmp (register_buffer (regnum
), myaddr
, size
) == 0)
351 if (real_register (regnum
))
352 target_prepare_to_store ();
354 memcpy (register_buffer (regnum
), myaddr
, size
);
356 set_register_cached (regnum
, 1);
357 store_register (regnum
);
361 regcache_write (int rawnum
, char *buf
)
363 gdb_assert (rawnum
>= 0 && rawnum
< NUM_REGS
);
364 /* For moment, just use underlying legacy code. Ulgh!!! */
365 legacy_write_register_gen (rawnum
, buf
);
369 write_register_gen (int regnum
, char *buf
)
371 if (! gdbarch_register_write_p (current_gdbarch
))
373 legacy_write_register_gen (regnum
, buf
);
376 gdbarch_register_write (current_gdbarch
, regnum
, buf
);
379 /* Copy INLEN bytes of consecutive data from memory at MYADDR
380 into registers starting with the MYREGSTART'th byte of register data. */
383 write_register_bytes (int myregstart
, char *myaddr
, int inlen
)
385 int myregend
= myregstart
+ inlen
;
388 target_prepare_to_store ();
390 /* Scan through the registers updating any that are covered by the
391 range myregstart<=>myregend using write_register_gen, which does
392 nice things like handling threads, and avoiding updates when the
393 new and old contents are the same. */
395 for (regnum
= 0; regnum
< NUM_REGS
+ NUM_PSEUDO_REGS
; regnum
++)
397 int regstart
, regend
;
399 regstart
= REGISTER_BYTE (regnum
);
400 regend
= regstart
+ REGISTER_RAW_SIZE (regnum
);
402 /* Is this register completely outside the range the user is writing? */
403 if (myregend
<= regstart
|| regend
<= myregstart
)
406 /* Is this register completely within the range the user is writing? */
407 else if (myregstart
<= regstart
&& regend
<= myregend
)
408 write_register_gen (regnum
, myaddr
+ (regstart
- myregstart
));
410 /* The register partially overlaps the range being written. */
413 char *regbuf
= (char*) alloca (MAX_REGISTER_RAW_SIZE
);
414 /* What's the overlap between this register's bytes and
415 those the caller wants to write? */
416 int overlapstart
= max (regstart
, myregstart
);
417 int overlapend
= min (regend
, myregend
);
419 /* We may be doing a partial update of an invalid register.
420 Update it from the target before scribbling on it. */
421 read_register_gen (regnum
, regbuf
);
423 memcpy (registers
+ overlapstart
,
424 myaddr
+ (overlapstart
- myregstart
),
425 overlapend
- overlapstart
);
427 store_register (regnum
);
433 /* Return the contents of register REGNUM as an unsigned integer. */
436 read_register (int regnum
)
438 char *buf
= alloca (REGISTER_RAW_SIZE (regnum
));
439 read_register_gen (regnum
, buf
);
440 return (extract_unsigned_integer (buf
, REGISTER_RAW_SIZE (regnum
)));
444 read_register_pid (int regnum
, int pid
)
449 if (pid
== inferior_pid
)
450 return read_register (regnum
);
452 save_pid
= inferior_pid
;
456 retval
= read_register (regnum
);
458 inferior_pid
= save_pid
;
463 /* Return the contents of register REGNUM as a signed integer. */
466 read_signed_register (int regnum
)
468 void *buf
= alloca (REGISTER_RAW_SIZE (regnum
));
469 read_register_gen (regnum
, buf
);
470 return (extract_signed_integer (buf
, REGISTER_RAW_SIZE (regnum
)));
474 read_signed_register_pid (int regnum
, int pid
)
479 if (pid
== inferior_pid
)
480 return read_signed_register (regnum
);
482 save_pid
= inferior_pid
;
486 retval
= read_signed_register (regnum
);
488 inferior_pid
= save_pid
;
493 /* Store VALUE into the raw contents of register number REGNUM. */
496 write_register (int regnum
, LONGEST val
)
500 size
= REGISTER_RAW_SIZE (regnum
);
502 store_signed_integer (buf
, size
, (LONGEST
) val
);
503 write_register_gen (regnum
, buf
);
507 write_register_pid (int regnum
, CORE_ADDR val
, int pid
)
511 if (pid
== inferior_pid
)
513 write_register (regnum
, val
);
517 save_pid
= inferior_pid
;
521 write_register (regnum
, val
);
523 inferior_pid
= save_pid
;
528 Record that register REGNUM contains VAL. This is used when the
529 value is obtained from the inferior or core dump, so there is no
530 need to store the value there.
532 If VAL is a NULL pointer, then it's probably an unsupported register.
533 We just set its value to all zeros. We might want to record this
534 fact, and report it to the users of read_register and friends. */
537 supply_register (int regnum
, char *val
)
540 if (registers_pid
!= inferior_pid
)
542 registers_changed ();
543 registers_pid
= inferior_pid
;
547 set_register_cached (regnum
, 1);
549 memcpy (register_buffer (regnum
), val
,
550 REGISTER_RAW_SIZE (regnum
));
552 memset (register_buffer (regnum
), '\000',
553 REGISTER_RAW_SIZE (regnum
));
555 /* On some architectures, e.g. HPPA, there are a few stray bits in
556 some registers, that the rest of the code would like to ignore. */
558 /* NOTE: cagney/2001-03-16: The macro CLEAN_UP_REGISTER_VALUE is
559 going to be deprecated. Instead architectures will leave the raw
560 register value as is and instead clean things up as they pass
561 through the method gdbarch_register_read() clean up the
564 #ifdef CLEAN_UP_REGISTER_VALUE
565 CLEAN_UP_REGISTER_VALUE (regnum
, register_buffer (regnum
));
569 /* read_pc, write_pc, read_sp, write_sp, read_fp, write_fp, etc.
570 Special handling for registers PC, SP, and FP. */
572 /* NOTE: cagney/2001-02-18: The functions generic_target_read_pc(),
573 read_pc_pid(), read_pc(), generic_target_write_pc(),
574 write_pc_pid(), write_pc(), generic_target_read_sp(), read_sp(),
575 generic_target_write_sp(), write_sp(), generic_target_read_fp(),
576 read_fp(), generic_target_write_fp(), write_fp will eventually be
577 moved out of the reg-cache into either frame.[hc] or to the
578 multi-arch framework. The are not part of the raw register cache. */
580 /* This routine is getting awfully cluttered with #if's. It's probably
581 time to turn this into READ_PC and define it in the tm.h file.
584 1999-06-08: The following were re-written so that it assumes the
585 existence of a TARGET_READ_PC et.al. macro. A default generic
586 version of that macro is made available where needed.
588 Since the ``TARGET_READ_PC'' et.al. macro is going to be controlled
589 by the multi-arch framework, it will eventually be possible to
590 eliminate the intermediate read_pc_pid(). The client would call
591 TARGET_READ_PC directly. (cagney). */
594 generic_target_read_pc (int pid
)
599 CORE_ADDR pc_val
= ADDR_BITS_REMOVE ((CORE_ADDR
) read_register_pid (PC_REGNUM
, pid
));
603 internal_error (__FILE__
, __LINE__
,
604 "generic_target_read_pc");
609 read_pc_pid (int pid
)
611 int saved_inferior_pid
;
614 /* In case pid != inferior_pid. */
615 saved_inferior_pid
= inferior_pid
;
618 pc_val
= TARGET_READ_PC (pid
);
620 inferior_pid
= saved_inferior_pid
;
627 return read_pc_pid (inferior_pid
);
631 generic_target_write_pc (CORE_ADDR pc
, int pid
)
635 write_register_pid (PC_REGNUM
, pc
, pid
);
637 write_register_pid (NPC_REGNUM
, pc
+ 4, pid
);
638 if (NNPC_REGNUM
>= 0)
639 write_register_pid (NNPC_REGNUM
, pc
+ 8, pid
);
641 internal_error (__FILE__
, __LINE__
,
642 "generic_target_write_pc");
647 write_pc_pid (CORE_ADDR pc
, int pid
)
649 int saved_inferior_pid
;
651 /* In case pid != inferior_pid. */
652 saved_inferior_pid
= inferior_pid
;
655 TARGET_WRITE_PC (pc
, pid
);
657 inferior_pid
= saved_inferior_pid
;
661 write_pc (CORE_ADDR pc
)
663 write_pc_pid (pc
, inferior_pid
);
666 /* Cope with strage ways of getting to the stack and frame pointers */
669 generic_target_read_sp (void)
673 return read_register (SP_REGNUM
);
675 internal_error (__FILE__
, __LINE__
,
676 "generic_target_read_sp");
682 return TARGET_READ_SP ();
686 generic_target_write_sp (CORE_ADDR val
)
691 write_register (SP_REGNUM
, val
);
695 internal_error (__FILE__
, __LINE__
,
696 "generic_target_write_sp");
700 write_sp (CORE_ADDR val
)
702 TARGET_WRITE_SP (val
);
706 generic_target_read_fp (void)
710 return read_register (FP_REGNUM
);
712 internal_error (__FILE__
, __LINE__
,
713 "generic_target_read_fp");
719 return TARGET_READ_FP ();
723 generic_target_write_fp (CORE_ADDR val
)
728 write_register (FP_REGNUM
, val
);
732 internal_error (__FILE__
, __LINE__
,
733 "generic_target_write_fp");
737 write_fp (CORE_ADDR val
)
739 TARGET_WRITE_FP (val
);
744 reg_flush_command (char *command
, int from_tty
)
746 /* Force-flush the register cache. */
747 registers_changed ();
749 printf_filtered ("Register cache flushed.\n");
754 build_regcache (void)
756 /* We allocate some extra slop since we do a lot of memcpy's around
757 `registers', and failing-soft is better than failing hard. */
758 int sizeof_registers
= REGISTER_BYTES
+ /* SLOP */ 256;
759 int sizeof_register_valid
=
760 (NUM_REGS
+ NUM_PSEUDO_REGS
) * sizeof (*register_valid
);
761 registers
= xmalloc (sizeof_registers
);
762 memset (registers
, 0, sizeof_registers
);
763 register_valid
= xmalloc (sizeof_register_valid
);
764 memset (register_valid
, 0, sizeof_register_valid
);
768 _initialize_regcache (void)
772 register_gdbarch_swap (®isters
, sizeof (registers
), NULL
);
773 register_gdbarch_swap (®ister_valid
, sizeof (register_valid
), NULL
);
774 register_gdbarch_swap (NULL
, 0, build_regcache
);
776 add_com ("flushregs", class_maintenance
, reg_flush_command
,
777 "Force gdb to flush its register cache (maintainer command)");
This page took 0.0604 seconds and 4 git commands to generate.