*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / regcache.c
1 /* Cache and manage the values of registers for GDB, the GNU debugger.
2
3 Copyright (C) 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000, 2001,
4 2002, 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22 #include "inferior.h"
23 #include "target.h"
24 #include "gdbarch.h"
25 #include "gdbcmd.h"
26 #include "regcache.h"
27 #include "reggroups.h"
28 #include "gdb_assert.h"
29 #include "gdb_string.h"
30 #include "gdbcmd.h" /* For maintenanceprintlist. */
31 #include "observer.h"
32
33 /*
34 * DATA STRUCTURE
35 *
36 * Here is the actual register cache.
37 */
38
39 /* Per-architecture object describing the layout of a register cache.
40 Computed once when the architecture is created */
41
42 struct gdbarch_data *regcache_descr_handle;
43
44 struct regcache_descr
45 {
46 /* The architecture this descriptor belongs to. */
47 struct gdbarch *gdbarch;
48
49 /* The raw register cache. Each raw (or hard) register is supplied
50 by the target interface. The raw cache should not contain
51 redundant information - if the PC is constructed from two
52 registers then those registers and not the PC lives in the raw
53 cache. */
54 int nr_raw_registers;
55 long sizeof_raw_registers;
56 long sizeof_raw_register_valid_p;
57
58 /* The cooked register space. Each cooked register in the range
59 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
60 register. The remaining [NR_RAW_REGISTERS
61 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
62 both raw registers and memory by the architecture methods
63 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */
64 int nr_cooked_registers;
65 long sizeof_cooked_registers;
66 long sizeof_cooked_register_valid_p;
67
68 /* Offset and size (in 8 bit bytes), of reach register in the
69 register cache. All registers (including those in the range
70 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an offset.
71 Assigning all registers an offset makes it possible to keep
72 legacy code, such as that found in read_register_bytes() and
73 write_register_bytes() working. */
74 long *register_offset;
75 long *sizeof_register;
76
77 /* Cached table containing the type of each register. */
78 struct type **register_type;
79 };
80
81 static void *
82 init_regcache_descr (struct gdbarch *gdbarch)
83 {
84 int i;
85 struct regcache_descr *descr;
86 gdb_assert (gdbarch != NULL);
87
88 /* Create an initial, zero filled, table. */
89 descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr);
90 descr->gdbarch = gdbarch;
91
92 /* Total size of the register space. The raw registers are mapped
93 directly onto the raw register cache while the pseudo's are
94 either mapped onto raw-registers or memory. */
95 descr->nr_cooked_registers = gdbarch_num_regs (gdbarch)
96 + gdbarch_num_pseudo_regs (gdbarch);
97 descr->sizeof_cooked_register_valid_p = gdbarch_num_regs (gdbarch)
98 + gdbarch_num_pseudo_regs
99 (gdbarch);
100
101 /* Fill in a table of register types. */
102 descr->register_type
103 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, struct type *);
104 for (i = 0; i < descr->nr_cooked_registers; i++)
105 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
106
107 /* Construct a strictly RAW register cache. Don't allow pseudo's
108 into the register cache. */
109 descr->nr_raw_registers = gdbarch_num_regs (gdbarch);
110
111 /* FIXME: cagney/2002-08-13: Overallocate the register_valid_p
112 array. This pretects GDB from erant code that accesses elements
113 of the global register_valid_p[] array in the range
114 [gdbarch_num_regs .. gdbarch_num_regs + gdbarch_num_pseudo_regs). */
115 descr->sizeof_raw_register_valid_p = descr->sizeof_cooked_register_valid_p;
116
117 /* Lay out the register cache.
118
119 NOTE: cagney/2002-05-22: Only register_type() is used when
120 constructing the register cache. It is assumed that the
121 register's raw size, virtual size and type length are all the
122 same. */
123
124 {
125 long offset = 0;
126
127 descr->sizeof_register
128 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
129 descr->register_offset
130 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
131 for (i = 0; i < descr->nr_cooked_registers; i++)
132 {
133 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
134 descr->register_offset[i] = offset;
135 offset += descr->sizeof_register[i];
136 gdb_assert (MAX_REGISTER_SIZE >= descr->sizeof_register[i]);
137 }
138 /* Set the real size of the register cache buffer. */
139 descr->sizeof_cooked_registers = offset;
140 }
141
142 /* FIXME: cagney/2002-05-22: Should only need to allocate space for
143 the raw registers. Unfortunately some code still accesses the
144 register array directly using the global registers[]. Until that
145 code has been purged, play safe and over allocating the register
146 buffer. Ulgh! */
147 descr->sizeof_raw_registers = descr->sizeof_cooked_registers;
148
149 return descr;
150 }
151
152 static struct regcache_descr *
153 regcache_descr (struct gdbarch *gdbarch)
154 {
155 return gdbarch_data (gdbarch, regcache_descr_handle);
156 }
157
158 /* Utility functions returning useful register attributes stored in
159 the regcache descr. */
160
161 struct type *
162 register_type (struct gdbarch *gdbarch, int regnum)
163 {
164 struct regcache_descr *descr = regcache_descr (gdbarch);
165
166 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
167 return descr->register_type[regnum];
168 }
169
170 /* Utility functions returning useful register attributes stored in
171 the regcache descr. */
172
173 int
174 register_size (struct gdbarch *gdbarch, int regnum)
175 {
176 struct regcache_descr *descr = regcache_descr (gdbarch);
177 int size;
178
179 gdb_assert (regnum >= 0
180 && regnum < (gdbarch_num_regs (gdbarch)
181 + gdbarch_num_pseudo_regs (gdbarch)));
182 size = descr->sizeof_register[regnum];
183 return size;
184 }
185
186 /* The register cache for storing raw register values. */
187
188 struct regcache
189 {
190 struct regcache_descr *descr;
191
192 /* The address space of this register cache (for registers where it
193 makes sense, like PC or SP). */
194 struct address_space *aspace;
195
196 /* The register buffers. A read-only register cache can hold the
197 full [0 .. gdbarch_num_regs + gdbarch_num_pseudo_regs) while a read/write
198 register cache can only hold [0 .. gdbarch_num_regs). */
199 gdb_byte *registers;
200 /* Register cache status:
201 register_valid_p[REG] == 0 if REG value is not in the cache
202 > 0 if REG value is in the cache
203 < 0 if REG value is permanently unavailable */
204 signed char *register_valid_p;
205 /* Is this a read-only cache? A read-only cache is used for saving
206 the target's register state (e.g, across an inferior function
207 call or just before forcing a function return). A read-only
208 cache can only be updated via the methods regcache_dup() and
209 regcache_cpy(). The actual contents are determined by the
210 reggroup_save and reggroup_restore methods. */
211 int readonly_p;
212 /* If this is a read-write cache, which thread's registers is
213 it connected to? */
214 ptid_t ptid;
215 };
216
217 struct regcache *
218 regcache_xmalloc (struct gdbarch *gdbarch, struct address_space *aspace)
219 {
220 struct regcache_descr *descr;
221 struct regcache *regcache;
222
223 gdb_assert (gdbarch != NULL);
224 descr = regcache_descr (gdbarch);
225 regcache = XMALLOC (struct regcache);
226 regcache->descr = descr;
227 regcache->registers
228 = XCALLOC (descr->sizeof_raw_registers, gdb_byte);
229 regcache->register_valid_p
230 = XCALLOC (descr->sizeof_raw_register_valid_p, gdb_byte);
231 regcache->aspace = aspace;
232 regcache->readonly_p = 1;
233 regcache->ptid = minus_one_ptid;
234 return regcache;
235 }
236
237 void
238 regcache_xfree (struct regcache *regcache)
239 {
240 if (regcache == NULL)
241 return;
242 xfree (regcache->registers);
243 xfree (regcache->register_valid_p);
244 xfree (regcache);
245 }
246
247 static void
248 do_regcache_xfree (void *data)
249 {
250 regcache_xfree (data);
251 }
252
253 struct cleanup *
254 make_cleanup_regcache_xfree (struct regcache *regcache)
255 {
256 return make_cleanup (do_regcache_xfree, regcache);
257 }
258
259 /* Return REGCACHE's architecture. */
260
261 struct gdbarch *
262 get_regcache_arch (const struct regcache *regcache)
263 {
264 return regcache->descr->gdbarch;
265 }
266
267 struct address_space *
268 get_regcache_aspace (const struct regcache *regcache)
269 {
270 return regcache->aspace;
271 }
272
273 /* Return a pointer to register REGNUM's buffer cache. */
274
275 static gdb_byte *
276 register_buffer (const struct regcache *regcache, int regnum)
277 {
278 return regcache->registers + regcache->descr->register_offset[regnum];
279 }
280
281 void
282 regcache_save (struct regcache *dst, regcache_cooked_read_ftype *cooked_read,
283 void *src)
284 {
285 struct gdbarch *gdbarch = dst->descr->gdbarch;
286 gdb_byte buf[MAX_REGISTER_SIZE];
287 int regnum;
288
289 /* The DST should be `read-only', if it wasn't then the save would
290 end up trying to write the register values back out to the
291 target. */
292 gdb_assert (dst->readonly_p);
293 /* Clear the dest. */
294 memset (dst->registers, 0, dst->descr->sizeof_cooked_registers);
295 memset (dst->register_valid_p, 0, dst->descr->sizeof_cooked_register_valid_p);
296 /* Copy over any registers (identified by their membership in the
297 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
298 gdbarch_num_pseudo_regs) range is checked since some architectures need
299 to save/restore `cooked' registers that live in memory. */
300 for (regnum = 0; regnum < dst->descr->nr_cooked_registers; regnum++)
301 {
302 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
303 {
304 int valid = cooked_read (src, regnum, buf);
305
306 if (valid)
307 {
308 memcpy (register_buffer (dst, regnum), buf,
309 register_size (gdbarch, regnum));
310 dst->register_valid_p[regnum] = 1;
311 }
312 }
313 }
314 }
315
316 void
317 regcache_restore (struct regcache *dst,
318 regcache_cooked_read_ftype *cooked_read,
319 void *cooked_read_context)
320 {
321 struct gdbarch *gdbarch = dst->descr->gdbarch;
322 gdb_byte buf[MAX_REGISTER_SIZE];
323 int regnum;
324
325 /* The dst had better not be read-only. If it is, the `restore'
326 doesn't make much sense. */
327 gdb_assert (!dst->readonly_p);
328 /* Copy over any registers, being careful to only restore those that
329 were both saved and need to be restored. The full [0 .. gdbarch_num_regs
330 + gdbarch_num_pseudo_regs) range is checked since some architectures need
331 to save/restore `cooked' registers that live in memory. */
332 for (regnum = 0; regnum < dst->descr->nr_cooked_registers; regnum++)
333 {
334 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
335 {
336 int valid = cooked_read (cooked_read_context, regnum, buf);
337
338 if (valid)
339 regcache_cooked_write (dst, regnum, buf);
340 }
341 }
342 }
343
344 static int
345 do_cooked_read (void *src, int regnum, gdb_byte *buf)
346 {
347 struct regcache *regcache = src;
348
349 if (!regcache->register_valid_p[regnum] && regcache->readonly_p)
350 /* Don't even think about fetching a register from a read-only
351 cache when the register isn't yet valid. There isn't a target
352 from which the register value can be fetched. */
353 return 0;
354 regcache_cooked_read (regcache, regnum, buf);
355 return 1;
356 }
357
358
359 void
360 regcache_cpy (struct regcache *dst, struct regcache *src)
361 {
362 gdb_assert (src != NULL && dst != NULL);
363 gdb_assert (src->descr->gdbarch == dst->descr->gdbarch);
364 gdb_assert (src != dst);
365 gdb_assert (src->readonly_p || dst->readonly_p);
366
367 if (!src->readonly_p)
368 regcache_save (dst, do_cooked_read, src);
369 else if (!dst->readonly_p)
370 regcache_restore (dst, do_cooked_read, src);
371 else
372 regcache_cpy_no_passthrough (dst, src);
373 }
374
375 void
376 regcache_cpy_no_passthrough (struct regcache *dst, struct regcache *src)
377 {
378 gdb_assert (src != NULL && dst != NULL);
379 gdb_assert (src->descr->gdbarch == dst->descr->gdbarch);
380 /* NOTE: cagney/2002-05-17: Don't let the caller do a no-passthrough
381 move of data into the current regcache. Doing this would be
382 silly - it would mean that valid_p would be completely invalid. */
383 gdb_assert (dst->readonly_p);
384
385 memcpy (dst->registers, src->registers, dst->descr->sizeof_raw_registers);
386 memcpy (dst->register_valid_p, src->register_valid_p,
387 dst->descr->sizeof_raw_register_valid_p);
388 }
389
390 struct regcache *
391 regcache_dup (struct regcache *src)
392 {
393 struct regcache *newbuf;
394
395 newbuf = regcache_xmalloc (src->descr->gdbarch, get_regcache_aspace (src));
396 regcache_cpy (newbuf, src);
397 return newbuf;
398 }
399
400 struct regcache *
401 regcache_dup_no_passthrough (struct regcache *src)
402 {
403 struct regcache *newbuf;
404
405 newbuf = regcache_xmalloc (src->descr->gdbarch, get_regcache_aspace (src));
406 regcache_cpy_no_passthrough (newbuf, src);
407 return newbuf;
408 }
409
410 int
411 regcache_valid_p (const struct regcache *regcache, int regnum)
412 {
413 gdb_assert (regcache != NULL);
414 gdb_assert (regnum >= 0);
415 if (regcache->readonly_p)
416 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
417 else
418 gdb_assert (regnum < regcache->descr->nr_raw_registers);
419
420 return regcache->register_valid_p[regnum];
421 }
422
423 void
424 regcache_invalidate (struct regcache *regcache, int regnum)
425 {
426 gdb_assert (regcache != NULL);
427 gdb_assert (regnum >= 0);
428 gdb_assert (!regcache->readonly_p);
429 gdb_assert (regnum < regcache->descr->nr_raw_registers);
430 regcache->register_valid_p[regnum] = 0;
431 }
432
433
434 /* Global structure containing the current regcache. */
435
436 /* NOTE: this is a write-through cache. There is no "dirty" bit for
437 recording if the register values have been changed (eg. by the
438 user). Therefore all registers must be written back to the
439 target when appropriate. */
440
441 struct regcache_list
442 {
443 struct regcache *regcache;
444 struct regcache_list *next;
445 };
446
447 static struct regcache_list *current_regcache;
448
449 struct regcache *
450 get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch)
451 {
452 struct regcache_list *list;
453 struct regcache *new_regcache;
454
455 for (list = current_regcache; list; list = list->next)
456 if (ptid_equal (list->regcache->ptid, ptid)
457 && get_regcache_arch (list->regcache) == gdbarch)
458 return list->regcache;
459
460 new_regcache = regcache_xmalloc (gdbarch,
461 target_thread_address_space (ptid));
462 new_regcache->readonly_p = 0;
463 new_regcache->ptid = ptid;
464 gdb_assert (new_regcache->aspace != NULL);
465
466 list = xmalloc (sizeof (struct regcache_list));
467 list->regcache = new_regcache;
468 list->next = current_regcache;
469 current_regcache = list;
470
471 return new_regcache;
472 }
473
474 static ptid_t current_thread_ptid;
475 static struct gdbarch *current_thread_arch;
476
477 struct regcache *
478 get_thread_regcache (ptid_t ptid)
479 {
480 if (!current_thread_arch || !ptid_equal (current_thread_ptid, ptid))
481 {
482 current_thread_ptid = ptid;
483 current_thread_arch = target_thread_architecture (ptid);
484 }
485
486 return get_thread_arch_regcache (ptid, current_thread_arch);
487 }
488
489 struct regcache *
490 get_current_regcache (void)
491 {
492 return get_thread_regcache (inferior_ptid);
493 }
494
495
496 /* Observer for the target_changed event. */
497
498 static void
499 regcache_observer_target_changed (struct target_ops *target)
500 {
501 registers_changed ();
502 }
503
504 /* Update global variables old ptids to hold NEW_PTID if they were
505 holding OLD_PTID. */
506 static void
507 regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
508 {
509 struct regcache_list *list;
510
511 for (list = current_regcache; list; list = list->next)
512 if (ptid_equal (list->regcache->ptid, old_ptid))
513 list->regcache->ptid = new_ptid;
514 }
515
516 /* Low level examining and depositing of registers.
517
518 The caller is responsible for making sure that the inferior is
519 stopped before calling the fetching routines, or it will get
520 garbage. (a change from GDB version 3, in which the caller got the
521 value from the last stop). */
522
523 /* REGISTERS_CHANGED ()
524
525 Indicate that registers may have changed, so invalidate the cache. */
526
527 void
528 registers_changed_ptid (ptid_t ptid)
529 {
530 struct regcache_list *list, **list_link;
531
532 list = current_regcache;
533 list_link = &current_regcache;
534 while (list)
535 {
536 if (ptid_match (list->regcache->ptid, ptid))
537 {
538 struct regcache_list *dead = list;
539
540 *list_link = list->next;
541 regcache_xfree (list->regcache);
542 list = *list_link;
543 xfree (dead);
544 continue;
545 }
546
547 list_link = &list->next;
548 list = *list_link;
549 }
550
551 current_regcache = NULL;
552
553 current_thread_ptid = null_ptid;
554 current_thread_arch = NULL;
555
556 /* Need to forget about any frames we have cached, too. */
557 reinit_frame_cache ();
558
559 /* Force cleanup of any alloca areas if using C alloca instead of
560 a builtin alloca. This particular call is used to clean up
561 areas allocated by low level target code which may build up
562 during lengthy interactions between gdb and the target before
563 gdb gives control to the user (ie watchpoints). */
564 alloca (0);
565 }
566
567 void
568 registers_changed (void)
569 {
570 registers_changed_ptid (minus_one_ptid);
571 }
572
573 void
574 regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)
575 {
576 gdb_assert (regcache != NULL && buf != NULL);
577 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
578 /* Make certain that the register cache is up-to-date with respect
579 to the current thread. This switching shouldn't be necessary
580 only there is still only one target side register cache. Sigh!
581 On the bright side, at least there is a regcache object. */
582 if (!regcache->readonly_p)
583 {
584 if (!regcache_valid_p (regcache, regnum))
585 {
586 struct cleanup *old_chain = save_inferior_ptid ();
587
588 inferior_ptid = regcache->ptid;
589 target_fetch_registers (regcache, regnum);
590 do_cleanups (old_chain);
591 }
592 #if 0
593 /* FIXME: cagney/2004-08-07: At present a number of targets
594 forget (or didn't know that they needed) to set this leading to
595 panics. Also is the problem that targets need to indicate
596 that a register is in one of the possible states: valid,
597 undefined, unknown. The last of which isn't yet
598 possible. */
599 gdb_assert (regcache_valid_p (regcache, regnum));
600 #endif
601 }
602 /* Copy the value directly into the register cache. */
603 memcpy (buf, register_buffer (regcache, regnum),
604 regcache->descr->sizeof_register[regnum]);
605 }
606
607 void
608 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
609 {
610 gdb_byte *buf;
611
612 gdb_assert (regcache != NULL);
613 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
614 buf = alloca (regcache->descr->sizeof_register[regnum]);
615 regcache_raw_read (regcache, regnum, buf);
616 (*val) = extract_signed_integer
617 (buf, regcache->descr->sizeof_register[regnum],
618 gdbarch_byte_order (regcache->descr->gdbarch));
619 }
620
621 void
622 regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
623 ULONGEST *val)
624 {
625 gdb_byte *buf;
626
627 gdb_assert (regcache != NULL);
628 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
629 buf = alloca (regcache->descr->sizeof_register[regnum]);
630 regcache_raw_read (regcache, regnum, buf);
631 (*val) = extract_unsigned_integer
632 (buf, regcache->descr->sizeof_register[regnum],
633 gdbarch_byte_order (regcache->descr->gdbarch));
634 }
635
636 void
637 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
638 {
639 void *buf;
640
641 gdb_assert (regcache != NULL);
642 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_raw_registers);
643 buf = alloca (regcache->descr->sizeof_register[regnum]);
644 store_signed_integer (buf, regcache->descr->sizeof_register[regnum],
645 gdbarch_byte_order (regcache->descr->gdbarch), val);
646 regcache_raw_write (regcache, regnum, buf);
647 }
648
649 void
650 regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
651 ULONGEST val)
652 {
653 void *buf;
654
655 gdb_assert (regcache != NULL);
656 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_raw_registers);
657 buf = alloca (regcache->descr->sizeof_register[regnum]);
658 store_unsigned_integer (buf, regcache->descr->sizeof_register[regnum],
659 gdbarch_byte_order (regcache->descr->gdbarch), val);
660 regcache_raw_write (regcache, regnum, buf);
661 }
662
663 void
664 regcache_cooked_read (struct regcache *regcache, int regnum, gdb_byte *buf)
665 {
666 gdb_assert (regnum >= 0);
667 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
668 if (regnum < regcache->descr->nr_raw_registers)
669 regcache_raw_read (regcache, regnum, buf);
670 else if (regcache->readonly_p
671 && regnum < regcache->descr->nr_cooked_registers
672 && regcache->register_valid_p[regnum])
673 /* Read-only register cache, perhaps the cooked value was cached? */
674 memcpy (buf, register_buffer (regcache, regnum),
675 regcache->descr->sizeof_register[regnum]);
676 else
677 gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
678 regnum, buf);
679 }
680
681 void
682 regcache_cooked_read_signed (struct regcache *regcache, int regnum,
683 LONGEST *val)
684 {
685 gdb_byte *buf;
686
687 gdb_assert (regcache != NULL);
688 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_cooked_registers);
689 buf = alloca (regcache->descr->sizeof_register[regnum]);
690 regcache_cooked_read (regcache, regnum, buf);
691 (*val) = extract_signed_integer
692 (buf, regcache->descr->sizeof_register[regnum],
693 gdbarch_byte_order (regcache->descr->gdbarch));
694 }
695
696 void
697 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
698 ULONGEST *val)
699 {
700 gdb_byte *buf;
701
702 gdb_assert (regcache != NULL);
703 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_cooked_registers);
704 buf = alloca (regcache->descr->sizeof_register[regnum]);
705 regcache_cooked_read (regcache, regnum, buf);
706 (*val) = extract_unsigned_integer
707 (buf, regcache->descr->sizeof_register[regnum],
708 gdbarch_byte_order (regcache->descr->gdbarch));
709 }
710
711 void
712 regcache_cooked_write_signed (struct regcache *regcache, int regnum,
713 LONGEST val)
714 {
715 void *buf;
716
717 gdb_assert (regcache != NULL);
718 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_cooked_registers);
719 buf = alloca (regcache->descr->sizeof_register[regnum]);
720 store_signed_integer (buf, regcache->descr->sizeof_register[regnum],
721 gdbarch_byte_order (regcache->descr->gdbarch), val);
722 regcache_cooked_write (regcache, regnum, buf);
723 }
724
725 void
726 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
727 ULONGEST val)
728 {
729 void *buf;
730
731 gdb_assert (regcache != NULL);
732 gdb_assert (regnum >=0 && regnum < regcache->descr->nr_cooked_registers);
733 buf = alloca (regcache->descr->sizeof_register[regnum]);
734 store_unsigned_integer (buf, regcache->descr->sizeof_register[regnum],
735 gdbarch_byte_order (regcache->descr->gdbarch), val);
736 regcache_cooked_write (regcache, regnum, buf);
737 }
738
739 void
740 regcache_raw_write (struct regcache *regcache, int regnum,
741 const gdb_byte *buf)
742 {
743 struct cleanup *old_chain;
744
745 gdb_assert (regcache != NULL && buf != NULL);
746 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
747 gdb_assert (!regcache->readonly_p);
748
749 /* On the sparc, writing %g0 is a no-op, so we don't even want to
750 change the registers array if something writes to this register. */
751 if (gdbarch_cannot_store_register (get_regcache_arch (regcache), regnum))
752 return;
753
754 /* If we have a valid copy of the register, and new value == old
755 value, then don't bother doing the actual store. */
756 if (regcache_valid_p (regcache, regnum)
757 && (memcmp (register_buffer (regcache, regnum), buf,
758 regcache->descr->sizeof_register[regnum]) == 0))
759 return;
760
761 old_chain = save_inferior_ptid ();
762 inferior_ptid = regcache->ptid;
763
764 target_prepare_to_store (regcache);
765 memcpy (register_buffer (regcache, regnum), buf,
766 regcache->descr->sizeof_register[regnum]);
767 regcache->register_valid_p[regnum] = 1;
768 target_store_registers (regcache, regnum);
769
770 do_cleanups (old_chain);
771 }
772
773 void
774 regcache_cooked_write (struct regcache *regcache, int regnum,
775 const gdb_byte *buf)
776 {
777 gdb_assert (regnum >= 0);
778 gdb_assert (regnum < regcache->descr->nr_cooked_registers);
779 if (regnum < regcache->descr->nr_raw_registers)
780 regcache_raw_write (regcache, regnum, buf);
781 else
782 gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
783 regnum, buf);
784 }
785
786 /* Perform a partial register transfer using a read, modify, write
787 operation. */
788
789 typedef void (regcache_read_ftype) (struct regcache *regcache, int regnum,
790 void *buf);
791 typedef void (regcache_write_ftype) (struct regcache *regcache, int regnum,
792 const void *buf);
793
794 static void
795 regcache_xfer_part (struct regcache *regcache, int regnum,
796 int offset, int len, void *in, const void *out,
797 void (*read) (struct regcache *regcache, int regnum,
798 gdb_byte *buf),
799 void (*write) (struct regcache *regcache, int regnum,
800 const gdb_byte *buf))
801 {
802 struct regcache_descr *descr = regcache->descr;
803 gdb_byte reg[MAX_REGISTER_SIZE];
804
805 gdb_assert (offset >= 0 && offset <= descr->sizeof_register[regnum]);
806 gdb_assert (len >= 0 && offset + len <= descr->sizeof_register[regnum]);
807 /* Something to do? */
808 if (offset + len == 0)
809 return;
810 /* Read (when needed) ... */
811 if (in != NULL
812 || offset > 0
813 || offset + len < descr->sizeof_register[regnum])
814 {
815 gdb_assert (read != NULL);
816 read (regcache, regnum, reg);
817 }
818 /* ... modify ... */
819 if (in != NULL)
820 memcpy (in, reg + offset, len);
821 if (out != NULL)
822 memcpy (reg + offset, out, len);
823 /* ... write (when needed). */
824 if (out != NULL)
825 {
826 gdb_assert (write != NULL);
827 write (regcache, regnum, reg);
828 }
829 }
830
831 void
832 regcache_raw_read_part (struct regcache *regcache, int regnum,
833 int offset, int len, gdb_byte *buf)
834 {
835 struct regcache_descr *descr = regcache->descr;
836
837 gdb_assert (regnum >= 0 && regnum < descr->nr_raw_registers);
838 regcache_xfer_part (regcache, regnum, offset, len, buf, NULL,
839 regcache_raw_read, regcache_raw_write);
840 }
841
842 void
843 regcache_raw_write_part (struct regcache *regcache, int regnum,
844 int offset, int len, const gdb_byte *buf)
845 {
846 struct regcache_descr *descr = regcache->descr;
847
848 gdb_assert (regnum >= 0 && regnum < descr->nr_raw_registers);
849 regcache_xfer_part (regcache, regnum, offset, len, NULL, buf,
850 regcache_raw_read, regcache_raw_write);
851 }
852
853 void
854 regcache_cooked_read_part (struct regcache *regcache, int regnum,
855 int offset, int len, gdb_byte *buf)
856 {
857 struct regcache_descr *descr = regcache->descr;
858
859 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
860 regcache_xfer_part (regcache, regnum, offset, len, buf, NULL,
861 regcache_cooked_read, regcache_cooked_write);
862 }
863
864 void
865 regcache_cooked_write_part (struct regcache *regcache, int regnum,
866 int offset, int len, const gdb_byte *buf)
867 {
868 struct regcache_descr *descr = regcache->descr;
869
870 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
871 regcache_xfer_part (regcache, regnum, offset, len, NULL, buf,
872 regcache_cooked_read, regcache_cooked_write);
873 }
874
875 /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */
876
877 void
878 regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
879 {
880 void *regbuf;
881 size_t size;
882
883 gdb_assert (regcache != NULL);
884 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
885 gdb_assert (!regcache->readonly_p);
886
887 regbuf = register_buffer (regcache, regnum);
888 size = regcache->descr->sizeof_register[regnum];
889
890 if (buf)
891 memcpy (regbuf, buf, size);
892 else
893 memset (regbuf, 0, size);
894
895 /* Mark the register as cached. */
896 regcache->register_valid_p[regnum] = 1;
897 }
898
899 /* Collect register REGNUM from REGCACHE and store its contents in BUF. */
900
901 void
902 regcache_raw_collect (const struct regcache *regcache, int regnum, void *buf)
903 {
904 const void *regbuf;
905 size_t size;
906
907 gdb_assert (regcache != NULL && buf != NULL);
908 gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
909
910 regbuf = register_buffer (regcache, regnum);
911 size = regcache->descr->sizeof_register[regnum];
912 memcpy (buf, regbuf, size);
913 }
914
915
916 /* Special handling for register PC. */
917
918 CORE_ADDR
919 regcache_read_pc (struct regcache *regcache)
920 {
921 struct gdbarch *gdbarch = get_regcache_arch (regcache);
922
923 CORE_ADDR pc_val;
924
925 if (gdbarch_read_pc_p (gdbarch))
926 pc_val = gdbarch_read_pc (gdbarch, regcache);
927 /* Else use per-frame method on get_current_frame. */
928 else if (gdbarch_pc_regnum (gdbarch) >= 0)
929 {
930 ULONGEST raw_val;
931
932 regcache_cooked_read_unsigned (regcache,
933 gdbarch_pc_regnum (gdbarch),
934 &raw_val);
935 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
936 }
937 else
938 internal_error (__FILE__, __LINE__,
939 _("regcache_read_pc: Unable to find PC"));
940 return pc_val;
941 }
942
943 void
944 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
945 {
946 struct gdbarch *gdbarch = get_regcache_arch (regcache);
947
948 if (gdbarch_write_pc_p (gdbarch))
949 gdbarch_write_pc (gdbarch, regcache, pc);
950 else if (gdbarch_pc_regnum (gdbarch) >= 0)
951 regcache_cooked_write_unsigned (regcache,
952 gdbarch_pc_regnum (gdbarch), pc);
953 else
954 internal_error (__FILE__, __LINE__,
955 _("regcache_write_pc: Unable to update PC"));
956
957 /* Writing the PC (for instance, from "load") invalidates the
958 current frame. */
959 reinit_frame_cache ();
960 }
961
962
963 static void
964 reg_flush_command (char *command, int from_tty)
965 {
966 /* Force-flush the register cache. */
967 registers_changed ();
968 if (from_tty)
969 printf_filtered (_("Register cache flushed.\n"));
970 }
971
972 static void
973 dump_endian_bytes (struct ui_file *file, enum bfd_endian endian,
974 const unsigned char *buf, long len)
975 {
976 int i;
977
978 switch (endian)
979 {
980 case BFD_ENDIAN_BIG:
981 for (i = 0; i < len; i++)
982 fprintf_unfiltered (file, "%02x", buf[i]);
983 break;
984 case BFD_ENDIAN_LITTLE:
985 for (i = len - 1; i >= 0; i--)
986 fprintf_unfiltered (file, "%02x", buf[i]);
987 break;
988 default:
989 internal_error (__FILE__, __LINE__, _("Bad switch"));
990 }
991 }
992
993 enum regcache_dump_what
994 {
995 regcache_dump_none, regcache_dump_raw, regcache_dump_cooked, regcache_dump_groups
996 };
997
998 static void
999 regcache_dump (struct regcache *regcache, struct ui_file *file,
1000 enum regcache_dump_what what_to_dump)
1001 {
1002 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
1003 struct gdbarch *gdbarch = regcache->descr->gdbarch;
1004 int regnum;
1005 int footnote_nr = 0;
1006 int footnote_register_size = 0;
1007 int footnote_register_offset = 0;
1008 int footnote_register_type_name_null = 0;
1009 long register_offset = 0;
1010 unsigned char buf[MAX_REGISTER_SIZE];
1011
1012 #if 0
1013 fprintf_unfiltered (file, "nr_raw_registers %d\n",
1014 regcache->descr->nr_raw_registers);
1015 fprintf_unfiltered (file, "nr_cooked_registers %d\n",
1016 regcache->descr->nr_cooked_registers);
1017 fprintf_unfiltered (file, "sizeof_raw_registers %ld\n",
1018 regcache->descr->sizeof_raw_registers);
1019 fprintf_unfiltered (file, "sizeof_raw_register_valid_p %ld\n",
1020 regcache->descr->sizeof_raw_register_valid_p);
1021 fprintf_unfiltered (file, "gdbarch_num_regs %d\n",
1022 gdbarch_num_regs (gdbarch));
1023 fprintf_unfiltered (file, "gdbarch_num_pseudo_regs %d\n",
1024 gdbarch_num_pseudo_regs (gdbarch));
1025 #endif
1026
1027 gdb_assert (regcache->descr->nr_cooked_registers
1028 == (gdbarch_num_regs (gdbarch)
1029 + gdbarch_num_pseudo_regs (gdbarch)));
1030
1031 for (regnum = -1; regnum < regcache->descr->nr_cooked_registers; regnum++)
1032 {
1033 /* Name. */
1034 if (regnum < 0)
1035 fprintf_unfiltered (file, " %-10s", "Name");
1036 else
1037 {
1038 const char *p = gdbarch_register_name (gdbarch, regnum);
1039
1040 if (p == NULL)
1041 p = "";
1042 else if (p[0] == '\0')
1043 p = "''";
1044 fprintf_unfiltered (file, " %-10s", p);
1045 }
1046
1047 /* Number. */
1048 if (regnum < 0)
1049 fprintf_unfiltered (file, " %4s", "Nr");
1050 else
1051 fprintf_unfiltered (file, " %4d", regnum);
1052
1053 /* Relative number. */
1054 if (regnum < 0)
1055 fprintf_unfiltered (file, " %4s", "Rel");
1056 else if (regnum < gdbarch_num_regs (gdbarch))
1057 fprintf_unfiltered (file, " %4d", regnum);
1058 else
1059 fprintf_unfiltered (file, " %4d",
1060 (regnum - gdbarch_num_regs (gdbarch)));
1061
1062 /* Offset. */
1063 if (regnum < 0)
1064 fprintf_unfiltered (file, " %6s ", "Offset");
1065 else
1066 {
1067 fprintf_unfiltered (file, " %6ld",
1068 regcache->descr->register_offset[regnum]);
1069 if (register_offset != regcache->descr->register_offset[regnum]
1070 || (regnum > 0
1071 && (regcache->descr->register_offset[regnum]
1072 != (regcache->descr->register_offset[regnum - 1]
1073 + regcache->descr->sizeof_register[regnum - 1])))
1074 )
1075 {
1076 if (!footnote_register_offset)
1077 footnote_register_offset = ++footnote_nr;
1078 fprintf_unfiltered (file, "*%d", footnote_register_offset);
1079 }
1080 else
1081 fprintf_unfiltered (file, " ");
1082 register_offset = (regcache->descr->register_offset[regnum]
1083 + regcache->descr->sizeof_register[regnum]);
1084 }
1085
1086 /* Size. */
1087 if (regnum < 0)
1088 fprintf_unfiltered (file, " %5s ", "Size");
1089 else
1090 fprintf_unfiltered (file, " %5ld",
1091 regcache->descr->sizeof_register[regnum]);
1092
1093 /* Type. */
1094 {
1095 const char *t;
1096
1097 if (regnum < 0)
1098 t = "Type";
1099 else
1100 {
1101 static const char blt[] = "builtin_type";
1102
1103 t = TYPE_NAME (register_type (regcache->descr->gdbarch, regnum));
1104 if (t == NULL)
1105 {
1106 char *n;
1107
1108 if (!footnote_register_type_name_null)
1109 footnote_register_type_name_null = ++footnote_nr;
1110 n = xstrprintf ("*%d", footnote_register_type_name_null);
1111 make_cleanup (xfree, n);
1112 t = n;
1113 }
1114 /* Chop a leading builtin_type. */
1115 if (strncmp (t, blt, strlen (blt)) == 0)
1116 t += strlen (blt);
1117 }
1118 fprintf_unfiltered (file, " %-15s", t);
1119 }
1120
1121 /* Leading space always present. */
1122 fprintf_unfiltered (file, " ");
1123
1124 /* Value, raw. */
1125 if (what_to_dump == regcache_dump_raw)
1126 {
1127 if (regnum < 0)
1128 fprintf_unfiltered (file, "Raw value");
1129 else if (regnum >= regcache->descr->nr_raw_registers)
1130 fprintf_unfiltered (file, "<cooked>");
1131 else if (!regcache_valid_p (regcache, regnum))
1132 fprintf_unfiltered (file, "<invalid>");
1133 else
1134 {
1135 regcache_raw_read (regcache, regnum, buf);
1136 fprintf_unfiltered (file, "0x");
1137 dump_endian_bytes (file,
1138 gdbarch_byte_order (gdbarch), buf,
1139 regcache->descr->sizeof_register[regnum]);
1140 }
1141 }
1142
1143 /* Value, cooked. */
1144 if (what_to_dump == regcache_dump_cooked)
1145 {
1146 if (regnum < 0)
1147 fprintf_unfiltered (file, "Cooked value");
1148 else
1149 {
1150 regcache_cooked_read (regcache, regnum, buf);
1151 fprintf_unfiltered (file, "0x");
1152 dump_endian_bytes (file,
1153 gdbarch_byte_order (gdbarch), buf,
1154 regcache->descr->sizeof_register[regnum]);
1155 }
1156 }
1157
1158 /* Group members. */
1159 if (what_to_dump == regcache_dump_groups)
1160 {
1161 if (regnum < 0)
1162 fprintf_unfiltered (file, "Groups");
1163 else
1164 {
1165 const char *sep = "";
1166 struct reggroup *group;
1167
1168 for (group = reggroup_next (gdbarch, NULL);
1169 group != NULL;
1170 group = reggroup_next (gdbarch, group))
1171 {
1172 if (gdbarch_register_reggroup_p (gdbarch, regnum, group))
1173 {
1174 fprintf_unfiltered (file, "%s%s", sep, reggroup_name (group));
1175 sep = ",";
1176 }
1177 }
1178 }
1179 }
1180
1181 fprintf_unfiltered (file, "\n");
1182 }
1183
1184 if (footnote_register_size)
1185 fprintf_unfiltered (file, "*%d: Inconsistent register sizes.\n",
1186 footnote_register_size);
1187 if (footnote_register_offset)
1188 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1189 footnote_register_offset);
1190 if (footnote_register_type_name_null)
1191 fprintf_unfiltered (file,
1192 "*%d: Register type's name NULL.\n",
1193 footnote_register_type_name_null);
1194 do_cleanups (cleanups);
1195 }
1196
1197 static void
1198 regcache_print (char *args, enum regcache_dump_what what_to_dump)
1199 {
1200 if (args == NULL)
1201 regcache_dump (get_current_regcache (), gdb_stdout, what_to_dump);
1202 else
1203 {
1204 struct cleanup *cleanups;
1205 struct ui_file *file = gdb_fopen (args, "w");
1206
1207 if (file == NULL)
1208 perror_with_name (_("maintenance print architecture"));
1209 cleanups = make_cleanup_ui_file_delete (file);
1210 regcache_dump (get_current_regcache (), file, what_to_dump);
1211 do_cleanups (cleanups);
1212 }
1213 }
1214
1215 static void
1216 maintenance_print_registers (char *args, int from_tty)
1217 {
1218 regcache_print (args, regcache_dump_none);
1219 }
1220
1221 static void
1222 maintenance_print_raw_registers (char *args, int from_tty)
1223 {
1224 regcache_print (args, regcache_dump_raw);
1225 }
1226
1227 static void
1228 maintenance_print_cooked_registers (char *args, int from_tty)
1229 {
1230 regcache_print (args, regcache_dump_cooked);
1231 }
1232
1233 static void
1234 maintenance_print_register_groups (char *args, int from_tty)
1235 {
1236 regcache_print (args, regcache_dump_groups);
1237 }
1238
1239 extern initialize_file_ftype _initialize_regcache; /* -Wmissing-prototype */
1240
1241 void
1242 _initialize_regcache (void)
1243 {
1244 regcache_descr_handle = gdbarch_data_register_post_init (init_regcache_descr);
1245
1246 observer_attach_target_changed (regcache_observer_target_changed);
1247 observer_attach_thread_ptid_changed (regcache_thread_ptid_changed);
1248
1249 add_com ("flushregs", class_maintenance, reg_flush_command,
1250 _("Force gdb to flush its register cache (maintainer command)"));
1251
1252 add_cmd ("registers", class_maintenance, maintenance_print_registers, _("\
1253 Print the internal register configuration.\n\
1254 Takes an optional file parameter."), &maintenanceprintlist);
1255 add_cmd ("raw-registers", class_maintenance,
1256 maintenance_print_raw_registers, _("\
1257 Print the internal register configuration including raw values.\n\
1258 Takes an optional file parameter."), &maintenanceprintlist);
1259 add_cmd ("cooked-registers", class_maintenance,
1260 maintenance_print_cooked_registers, _("\
1261 Print the internal register configuration including cooked values.\n\
1262 Takes an optional file parameter."), &maintenanceprintlist);
1263 add_cmd ("register-groups", class_maintenance,
1264 maintenance_print_register_groups, _("\
1265 Print the internal register configuration including each register's group.\n\
1266 Takes an optional file parameter."),
1267 &maintenanceprintlist);
1268
1269 }
This page took 0.069235 seconds and 4 git commands to generate.