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