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