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 #ifndef REGCACHE_H 24 #define REGCACHE_H 25 26 struct regcache; 27 struct gdbarch; 28 29 extern struct regcache *current_regcache; 30 31 void regcache_xfree (struct regcache *regcache); 32 struct cleanup *make_cleanup_regcache_xfree (struct regcache *regcache); 33 struct regcache *regcache_xmalloc (struct gdbarch *gdbarch); 34 35 /* Return REGCACHE's architecture. */ 36 37 extern struct gdbarch *get_regcache_arch (const struct regcache *regcache); 38 39 /* Transfer a raw register [0..NUM_REGS) between core-gdb and the 40 regcache. */ 41 42 void regcache_raw_read (struct regcache *regcache, int rawnum, void *buf); 43 void regcache_raw_write (struct regcache *regcache, int rawnum, 44 const void *buf); 45 extern void regcache_raw_read_signed (struct regcache *regcache, 46 int regnum, LONGEST *val); 47 extern void regcache_raw_read_unsigned (struct regcache *regcache, 48 int regnum, ULONGEST *val); 49 extern void regcache_raw_write_signed (struct regcache *regcache, 50 int regnum, LONGEST val); 51 extern void regcache_raw_write_unsigned (struct regcache *regcache, 52 int regnum, ULONGEST val); 53 54 /* Partial transfer of a raw registers. These perform read, modify, 55 write style operations. */ 56 57 void regcache_raw_read_part (struct regcache *regcache, int regnum, 58 int offset, int len, void *buf); 59 void regcache_raw_write_part (struct regcache *regcache, int regnum, 60 int offset, int len, const void *buf); 61 62 int regcache_valid_p (struct regcache *regcache, int regnum); 63 64 /* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS). */ 65 void regcache_cooked_read (struct regcache *regcache, int rawnum, void *buf); 66 void regcache_cooked_write (struct regcache *regcache, int rawnum, 67 const void *buf); 68 69 /* NOTE: cagney/2002-08-13: At present GDB has no reliable mechanism 70 for indicating when a ``cooked'' register was constructed from 71 invalid or unavailable ``raw'' registers. One fairly easy way of 72 adding such a mechanism would be for the cooked functions to return 73 a register valid indication. Given the possibility of such a 74 change, the extract functions below use a reference parameter, 75 rather than a function result. */ 76 77 /* Read a register as a signed/unsigned quantity. */ 78 extern void regcache_cooked_read_signed (struct regcache *regcache, 79 int regnum, LONGEST *val); 80 extern void regcache_cooked_read_unsigned (struct regcache *regcache, 81 int regnum, ULONGEST *val); 82 extern void regcache_cooked_write_signed (struct regcache *regcache, 83 int regnum, LONGEST val); 84 extern void regcache_cooked_write_unsigned (struct regcache *regcache, 85 int regnum, ULONGEST val); 86 87 /* Partial transfer of a cooked register. These perform read, modify, 88 write style operations. */ 89 90 void regcache_cooked_read_part (struct regcache *regcache, int regnum, 91 int offset, int len, void *buf); 92 void regcache_cooked_write_part (struct regcache *regcache, int regnum, 93 int offset, int len, const void *buf); 94 95 /* Transfer a raw register [0..NUM_REGS) between the regcache and the 96 target. These functions are called by the target in response to a 97 target_fetch_registers() or target_store_registers(). */ 98 99 extern void supply_register (int regnum, const void *val); 100 extern void regcache_collect (int regnum, void *buf); 101 extern void regcache_raw_supply (struct regcache *regcache, 102 int regnum, const void *buf); 103 extern void regcache_raw_collect (const struct regcache *regcache, 104 int regnum, void *buf); 105 106 107 /* The register's ``offset''. 108 109 FIXME: cagney/2002-11-07: The frame_register() function, when 110 specifying the real location of a register, does so using that 111 registers offset in the register cache. That offset is then used 112 by valops.c to determine the location of the register. The code 113 should instead use the register's number and a location expression 114 to describe a value spread across multiple registers or memory. */ 115 116 extern int register_offset_hack (struct gdbarch *gdbarch, int regnum); 117 118 119 /* The type of a register. This function is slightly more efficient 120 then its gdbarch vector counterpart since it returns a precomputed 121 value stored in a table. 122 123 NOTE: cagney/2002-08-17: The original macro was called 124 DEPRECATED_REGISTER_VIRTUAL_TYPE. This was because the register 125 could have different raw and cooked (nee virtual) representations. 126 The CONVERTABLE methods being used to convert between the two 127 representations. Current code does not do this. Instead, the 128 first [0..NUM_REGS) registers are 1:1 raw:cooked, and the type 129 exactly describes the register's representation. Consequently, the 130 ``virtual'' has been dropped. 131 132 FIXME: cagney/2002-08-17: A number of architectures, including the 133 MIPS, are currently broken in this regard. */ 134 135 extern struct type *register_type (struct gdbarch *gdbarch, int regnum); 136 137 138 /* Return the size of register REGNUM. All registers should have only 139 one size. 140 141 FIXME: cagney/2003-02-28: 142 143 Unfortunately, thanks to some legacy architectures, this doesn't 144 hold. A register's cooked (nee virtual) and raw size can differ 145 (see MIPS). Such architectures should be using different register 146 numbers for the different sized views of identical registers. 147 148 Anyway, the up-shot is that, until that mess is fixed, core code 149 can end up being very confused - should the RAW or VIRTUAL size be 150 used? As a rule of thumb, use DEPRECATED_REGISTER_VIRTUAL_SIZE in 151 cooked code, but with the comment: 152 153 OK: REGISTER_VIRTUAL_SIZE 154 155 or just 156 157 OK 158 159 appended to the end of the line. */ 160 161 extern int register_size (struct gdbarch *gdbarch, int regnum); 162 163 164 /* Save/restore a register cache. The set of registers saved / 165 restored into the DST regcache determined by the save_reggroup / 166 restore_reggroup respectively. COOKED_READ returns zero iff the 167 register's value can't be returned. */ 168 169 typedef int (regcache_cooked_read_ftype) (void *src, int regnum, void *buf); 170 171 extern void regcache_save (struct regcache *dst, 172 regcache_cooked_read_ftype *cooked_read, 173 void *src); 174 extern void regcache_restore (struct regcache *dst, 175 regcache_cooked_read_ftype *cooked_read, 176 void *src); 177 178 /* Copy/duplicate the contents of a register cache. By default, the 179 operation is pass-through. Writes to DST and reads from SRC will 180 go through to the target. 181 182 The ``cpy'' functions can not have overlapping SRC and DST buffers. 183 184 ``no passthrough'' versions do not go through to the target. They 185 only transfer values already in the cache. */ 186 187 extern struct regcache *regcache_dup (struct regcache *regcache); 188 extern struct regcache *regcache_dup_no_passthrough (struct regcache *regcache); 189 extern void regcache_cpy (struct regcache *dest, struct regcache *src); 190 extern void regcache_cpy_no_passthrough (struct regcache *dest, struct regcache *src); 191 192 /* NOTE: cagney/2002-11-02: The below have been superseded by the 193 regcache_cooked_*() functions found above, and the frame_*() 194 functions found in "frame.h". Take care though, often more than a 195 simple substitution is required when updating the code. The 196 change, as far as practical, should avoid adding references to 197 global variables (e.g., current_regcache, current_frame, 198 current_gdbarch or deprecated_selected_frame) and instead refer to 199 the FRAME or REGCACHE that has been passed into the containing 200 function as parameters. Consequently, the change typically 201 involves modifying the containing function so that it takes a FRAME 202 or REGCACHE parameter. In the case of an architecture vector 203 method, there should already be a non-deprecated variant that is 204 parameterized with FRAME or REGCACHE. */ 205 206 extern char *deprecated_grub_regcache_for_registers (struct regcache *); 207 extern void deprecated_read_register_gen (int regnum, char *myaddr); 208 extern void deprecated_write_register_gen (int regnum, char *myaddr); 209 extern void deprecated_read_register_bytes (int regbyte, char *myaddr, 210 int len); 211 extern void deprecated_write_register_bytes (int regbyte, char *myaddr, 212 int len); 213 214 /* Character array containing the current state of each register 215 (unavailable<0, invalid=0, valid>0) for the most recently 216 referenced thread. This global is often found in close proximity 217 to code that is directly manipulating the deprecated_registers[] 218 array. In such cases, it should be possible to replace the lot 219 with a call to supply_register(). If you find yourself in dire 220 straits, still needing access to the cache status bit, the 221 regcache_valid_p() and set_register_cached() functions are 222 available. */ 223 extern signed char *deprecated_register_valid; 224 225 /* Character array containing an image of the inferior programs' 226 registers for the most recently referenced thread. 227 228 NOTE: cagney/2002-11-14: Target side code should be using 229 supply_register() and/or regcache_collect() while architecture side 230 code should use the more generic regcache methods. */ 231 232 extern char *deprecated_registers; 233 234 /* NOTE: cagney/2002-11-05: This function, and its co-conspirator 235 deprecated_registers[], have been superseeded by supply_register(). */ 236 extern void deprecated_registers_fetched (void); 237 238 extern int register_cached (int regnum); 239 240 extern void set_register_cached (int regnum, int state); 241 242 extern void registers_changed (void); 243 244 245 /* Rename to read_unsigned_register()? */ 246 extern ULONGEST read_register (int regnum); 247 248 /* Rename to read_unsigned_register_pid()? */ 249 extern ULONGEST read_register_pid (int regnum, ptid_t ptid); 250 251 extern void write_register (int regnum, LONGEST val); 252 253 extern void write_register_pid (int regnum, CORE_ADDR val, ptid_t ptid); 254 255 #endif /* REGCACHE_H */ 256