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