1 /* Cache and manage the values of registers for GDB, the GNU debugger. 2 3 Copyright (C) 1986-2019 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 "gdbthread.h" 23 #include "target.h" 24 #include "test-target.h" 25 #include "gdbarch.h" 26 #include "gdbcmd.h" 27 #include "regcache.h" 28 #include "reggroups.h" 29 #include "observable.h" 30 #include "regset.h" 31 #include <forward_list> 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 long sizeof_raw_registers; 55 56 /* The cooked register space. Each cooked register in the range 57 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw 58 register. The remaining [NR_RAW_REGISTERS 59 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto 60 both raw registers and memory by the architecture methods 61 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */ 62 int nr_cooked_registers; 63 long sizeof_cooked_registers; 64 65 /* Offset and size (in 8 bit bytes), of each register in the 66 register cache. All registers (including those in the range 67 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an 68 offset. */ 69 long *register_offset; 70 long *sizeof_register; 71 72 /* Cached table containing the type of each register. */ 73 struct type **register_type; 74 }; 75 76 static void * 77 init_regcache_descr (struct gdbarch *gdbarch) 78 { 79 int i; 80 struct regcache_descr *descr; 81 gdb_assert (gdbarch != NULL); 82 83 /* Create an initial, zero filled, table. */ 84 descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr); 85 descr->gdbarch = gdbarch; 86 87 /* Total size of the register space. The raw registers are mapped 88 directly onto the raw register cache while the pseudo's are 89 either mapped onto raw-registers or memory. */ 90 descr->nr_cooked_registers = gdbarch_num_cooked_regs (gdbarch); 91 92 /* Fill in a table of register types. */ 93 descr->register_type 94 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, 95 struct type *); 96 for (i = 0; i < descr->nr_cooked_registers; i++) 97 descr->register_type[i] = gdbarch_register_type (gdbarch, i); 98 99 /* Construct a strictly RAW register cache. Don't allow pseudo's 100 into the register cache. */ 101 102 /* Lay out the register cache. 103 104 NOTE: cagney/2002-05-22: Only register_type() is used when 105 constructing the register cache. It is assumed that the 106 register's raw size, virtual size and type length are all the 107 same. */ 108 109 { 110 long offset = 0; 111 112 descr->sizeof_register 113 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long); 114 descr->register_offset 115 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long); 116 for (i = 0; i < gdbarch_num_regs (gdbarch); i++) 117 { 118 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]); 119 descr->register_offset[i] = offset; 120 offset += descr->sizeof_register[i]; 121 } 122 /* Set the real size of the raw register cache buffer. */ 123 descr->sizeof_raw_registers = offset; 124 125 for (; i < descr->nr_cooked_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 } 131 /* Set the real size of the readonly register cache buffer. */ 132 descr->sizeof_cooked_registers = offset; 133 } 134 135 return descr; 136 } 137 138 static struct regcache_descr * 139 regcache_descr (struct gdbarch *gdbarch) 140 { 141 return (struct regcache_descr *) gdbarch_data (gdbarch, 142 regcache_descr_handle); 143 } 144 145 /* Utility functions returning useful register attributes stored in 146 the regcache descr. */ 147 148 struct type * 149 register_type (struct gdbarch *gdbarch, int regnum) 150 { 151 struct regcache_descr *descr = regcache_descr (gdbarch); 152 153 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers); 154 return descr->register_type[regnum]; 155 } 156 157 /* Utility functions returning useful register attributes stored in 158 the regcache descr. */ 159 160 int 161 register_size (struct gdbarch *gdbarch, int regnum) 162 { 163 struct regcache_descr *descr = regcache_descr (gdbarch); 164 int size; 165 166 gdb_assert (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch)); 167 size = descr->sizeof_register[regnum]; 168 return size; 169 } 170 171 /* See common/common-regcache.h. */ 172 173 int 174 regcache_register_size (const struct regcache *regcache, int n) 175 { 176 return register_size (regcache->arch (), n); 177 } 178 179 reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo) 180 : m_has_pseudo (has_pseudo) 181 { 182 gdb_assert (gdbarch != NULL); 183 m_descr = regcache_descr (gdbarch); 184 185 if (has_pseudo) 186 { 187 m_registers.reset (new gdb_byte[m_descr->sizeof_cooked_registers] ()); 188 m_register_status.reset 189 (new register_status[m_descr->nr_cooked_registers] ()); 190 } 191 else 192 { 193 m_registers.reset (new gdb_byte[m_descr->sizeof_raw_registers] ()); 194 m_register_status.reset 195 (new register_status[gdbarch_num_regs (gdbarch)] ()); 196 } 197 } 198 199 regcache::regcache (gdbarch *gdbarch, const address_space *aspace_) 200 /* The register buffers. A read/write register cache can only hold 201 [0 .. gdbarch_num_regs). */ 202 : detached_regcache (gdbarch, false), m_aspace (aspace_) 203 { 204 m_ptid = minus_one_ptid; 205 } 206 207 readonly_detached_regcache::readonly_detached_regcache (regcache &src) 208 : readonly_detached_regcache (src.arch (), 209 [&src] (int regnum, gdb_byte *buf) 210 { 211 return src.cooked_read (regnum, buf); 212 }) 213 { 214 } 215 216 gdbarch * 217 reg_buffer::arch () const 218 { 219 return m_descr->gdbarch; 220 } 221 222 /* Return a pointer to register REGNUM's buffer cache. */ 223 224 gdb_byte * 225 reg_buffer::register_buffer (int regnum) const 226 { 227 return m_registers.get () + m_descr->register_offset[regnum]; 228 } 229 230 void 231 reg_buffer::save (register_read_ftype cooked_read) 232 { 233 struct gdbarch *gdbarch = m_descr->gdbarch; 234 int regnum; 235 236 /* It should have pseudo registers. */ 237 gdb_assert (m_has_pseudo); 238 /* Clear the dest. */ 239 memset (m_registers.get (), 0, m_descr->sizeof_cooked_registers); 240 memset (m_register_status.get (), REG_UNKNOWN, m_descr->nr_cooked_registers); 241 /* Copy over any registers (identified by their membership in the 242 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs + 243 gdbarch_num_pseudo_regs) range is checked since some architectures need 244 to save/restore `cooked' registers that live in memory. */ 245 for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++) 246 { 247 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup)) 248 { 249 gdb_byte *dst_buf = register_buffer (regnum); 250 enum register_status status = cooked_read (regnum, dst_buf); 251 252 gdb_assert (status != REG_UNKNOWN); 253 254 if (status != REG_VALID) 255 memset (dst_buf, 0, register_size (gdbarch, regnum)); 256 257 m_register_status[regnum] = status; 258 } 259 } 260 } 261 262 void 263 regcache::restore (readonly_detached_regcache *src) 264 { 265 struct gdbarch *gdbarch = m_descr->gdbarch; 266 int regnum; 267 268 gdb_assert (src != NULL); 269 gdb_assert (src->m_has_pseudo); 270 271 gdb_assert (gdbarch == src->arch ()); 272 273 /* Copy over any registers, being careful to only restore those that 274 were both saved and need to be restored. The full [0 .. gdbarch_num_regs 275 + gdbarch_num_pseudo_regs) range is checked since some architectures need 276 to save/restore `cooked' registers that live in memory. */ 277 for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++) 278 { 279 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup)) 280 { 281 if (src->m_register_status[regnum] == REG_VALID) 282 cooked_write (regnum, src->register_buffer (regnum)); 283 } 284 } 285 } 286 287 /* See common/common-regcache.h. */ 288 289 enum register_status 290 reg_buffer::get_register_status (int regnum) const 291 { 292 assert_regnum (regnum); 293 294 return m_register_status[regnum]; 295 } 296 297 void 298 reg_buffer::invalidate (int regnum) 299 { 300 assert_regnum (regnum); 301 m_register_status[regnum] = REG_UNKNOWN; 302 } 303 304 void 305 reg_buffer::assert_regnum (int regnum) const 306 { 307 gdb_assert (regnum >= 0); 308 if (m_has_pseudo) 309 gdb_assert (regnum < m_descr->nr_cooked_registers); 310 else 311 gdb_assert (regnum < gdbarch_num_regs (arch ())); 312 } 313 314 /* Global structure containing the current regcache. */ 315 316 /* NOTE: this is a write-through cache. There is no "dirty" bit for 317 recording if the register values have been changed (eg. by the 318 user). Therefore all registers must be written back to the 319 target when appropriate. */ 320 std::forward_list<regcache *> regcache::current_regcache; 321 322 struct regcache * 323 get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch, 324 struct address_space *aspace) 325 { 326 for (const auto ®cache : regcache::current_regcache) 327 if (regcache->ptid () == ptid && regcache->arch () == gdbarch) 328 return regcache; 329 330 regcache *new_regcache = new regcache (gdbarch, aspace); 331 332 regcache::current_regcache.push_front (new_regcache); 333 new_regcache->set_ptid (ptid); 334 335 return new_regcache; 336 } 337 338 struct regcache * 339 get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch) 340 { 341 address_space *aspace = target_thread_address_space (ptid); 342 343 return get_thread_arch_aspace_regcache (ptid, gdbarch, aspace); 344 } 345 346 static ptid_t current_thread_ptid; 347 static struct gdbarch *current_thread_arch; 348 349 struct regcache * 350 get_thread_regcache (ptid_t ptid) 351 { 352 if (!current_thread_arch || current_thread_ptid != ptid) 353 { 354 current_thread_ptid = ptid; 355 current_thread_arch = target_thread_architecture (ptid); 356 } 357 358 return get_thread_arch_regcache (ptid, current_thread_arch); 359 } 360 361 /* See regcache.h. */ 362 363 struct regcache * 364 get_thread_regcache (thread_info *thread) 365 { 366 return get_thread_regcache (thread->ptid); 367 } 368 369 struct regcache * 370 get_current_regcache (void) 371 { 372 return get_thread_regcache (inferior_thread ()); 373 } 374 375 /* See common/common-regcache.h. */ 376 377 struct regcache * 378 get_thread_regcache_for_ptid (ptid_t ptid) 379 { 380 return get_thread_regcache (ptid); 381 } 382 383 /* Observer for the target_changed event. */ 384 385 static void 386 regcache_observer_target_changed (struct target_ops *target) 387 { 388 registers_changed (); 389 } 390 391 /* Update global variables old ptids to hold NEW_PTID if they were 392 holding OLD_PTID. */ 393 void 394 regcache::regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid) 395 { 396 for (auto ®cache : regcache::current_regcache) 397 { 398 if (regcache->ptid () == old_ptid) 399 regcache->set_ptid (new_ptid); 400 } 401 } 402 403 /* Low level examining and depositing of registers. 404 405 The caller is responsible for making sure that the inferior is 406 stopped before calling the fetching routines, or it will get 407 garbage. (a change from GDB version 3, in which the caller got the 408 value from the last stop). */ 409 410 /* REGISTERS_CHANGED () 411 412 Indicate that registers may have changed, so invalidate the cache. */ 413 414 void 415 registers_changed_ptid (ptid_t ptid) 416 { 417 for (auto oit = regcache::current_regcache.before_begin (), 418 it = std::next (oit); 419 it != regcache::current_regcache.end (); 420 ) 421 { 422 if ((*it)->ptid ().matches (ptid)) 423 { 424 delete *it; 425 it = regcache::current_regcache.erase_after (oit); 426 } 427 else 428 oit = it++; 429 } 430 431 if (current_thread_ptid.matches (ptid)) 432 { 433 current_thread_ptid = null_ptid; 434 current_thread_arch = NULL; 435 } 436 437 if (inferior_ptid.matches (ptid)) 438 { 439 /* We just deleted the regcache of the current thread. Need to 440 forget about any frames we have cached, too. */ 441 reinit_frame_cache (); 442 } 443 } 444 445 /* See regcache.h. */ 446 447 void 448 registers_changed_thread (thread_info *thread) 449 { 450 registers_changed_ptid (thread->ptid); 451 } 452 453 void 454 registers_changed (void) 455 { 456 registers_changed_ptid (minus_one_ptid); 457 458 /* Force cleanup of any alloca areas if using C alloca instead of 459 a builtin alloca. This particular call is used to clean up 460 areas allocated by low level target code which may build up 461 during lengthy interactions between gdb and the target before 462 gdb gives control to the user (ie watchpoints). */ 463 alloca (0); 464 } 465 466 void 467 regcache::raw_update (int regnum) 468 { 469 assert_regnum (regnum); 470 471 /* Make certain that the register cache is up-to-date with respect 472 to the current thread. This switching shouldn't be necessary 473 only there is still only one target side register cache. Sigh! 474 On the bright side, at least there is a regcache object. */ 475 476 if (get_register_status (regnum) == REG_UNKNOWN) 477 { 478 target_fetch_registers (this, regnum); 479 480 /* A number of targets can't access the whole set of raw 481 registers (because the debug API provides no means to get at 482 them). */ 483 if (m_register_status[regnum] == REG_UNKNOWN) 484 m_register_status[regnum] = REG_UNAVAILABLE; 485 } 486 } 487 488 enum register_status 489 readable_regcache::raw_read (int regnum, gdb_byte *buf) 490 { 491 gdb_assert (buf != NULL); 492 raw_update (regnum); 493 494 if (m_register_status[regnum] != REG_VALID) 495 memset (buf, 0, m_descr->sizeof_register[regnum]); 496 else 497 memcpy (buf, register_buffer (regnum), 498 m_descr->sizeof_register[regnum]); 499 500 return m_register_status[regnum]; 501 } 502 503 enum register_status 504 regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val) 505 { 506 gdb_assert (regcache != NULL); 507 return regcache->raw_read (regnum, val); 508 } 509 510 template<typename T, typename> 511 enum register_status 512 readable_regcache::raw_read (int regnum, T *val) 513 { 514 gdb_byte *buf; 515 enum register_status status; 516 517 assert_regnum (regnum); 518 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]); 519 status = raw_read (regnum, buf); 520 if (status == REG_VALID) 521 *val = extract_integer<T> (buf, 522 m_descr->sizeof_register[regnum], 523 gdbarch_byte_order (m_descr->gdbarch)); 524 else 525 *val = 0; 526 return status; 527 } 528 529 enum register_status 530 regcache_raw_read_unsigned (struct regcache *regcache, int regnum, 531 ULONGEST *val) 532 { 533 gdb_assert (regcache != NULL); 534 return regcache->raw_read (regnum, val); 535 } 536 537 void 538 regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val) 539 { 540 gdb_assert (regcache != NULL); 541 regcache->raw_write (regnum, val); 542 } 543 544 template<typename T, typename> 545 void 546 regcache::raw_write (int regnum, T val) 547 { 548 gdb_byte *buf; 549 550 assert_regnum (regnum); 551 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]); 552 store_integer (buf, m_descr->sizeof_register[regnum], 553 gdbarch_byte_order (m_descr->gdbarch), val); 554 raw_write (regnum, buf); 555 } 556 557 void 558 regcache_raw_write_unsigned (struct regcache *regcache, int regnum, 559 ULONGEST val) 560 { 561 gdb_assert (regcache != NULL); 562 regcache->raw_write (regnum, val); 563 } 564 565 LONGEST 566 regcache_raw_get_signed (struct regcache *regcache, int regnum) 567 { 568 LONGEST value; 569 enum register_status status; 570 571 status = regcache_raw_read_signed (regcache, regnum, &value); 572 if (status == REG_UNAVAILABLE) 573 throw_error (NOT_AVAILABLE_ERROR, 574 _("Register %d is not available"), regnum); 575 return value; 576 } 577 578 enum register_status 579 readable_regcache::cooked_read (int regnum, gdb_byte *buf) 580 { 581 gdb_assert (regnum >= 0); 582 gdb_assert (regnum < m_descr->nr_cooked_registers); 583 if (regnum < num_raw_registers ()) 584 return raw_read (regnum, buf); 585 else if (m_has_pseudo 586 && m_register_status[regnum] != REG_UNKNOWN) 587 { 588 if (m_register_status[regnum] == REG_VALID) 589 memcpy (buf, register_buffer (regnum), 590 m_descr->sizeof_register[regnum]); 591 else 592 memset (buf, 0, m_descr->sizeof_register[regnum]); 593 594 return m_register_status[regnum]; 595 } 596 else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch)) 597 { 598 struct value *mark, *computed; 599 enum register_status result = REG_VALID; 600 601 mark = value_mark (); 602 603 computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch, 604 this, regnum); 605 if (value_entirely_available (computed)) 606 memcpy (buf, value_contents_raw (computed), 607 m_descr->sizeof_register[regnum]); 608 else 609 { 610 memset (buf, 0, m_descr->sizeof_register[regnum]); 611 result = REG_UNAVAILABLE; 612 } 613 614 value_free_to_mark (mark); 615 616 return result; 617 } 618 else 619 return gdbarch_pseudo_register_read (m_descr->gdbarch, this, 620 regnum, buf); 621 } 622 623 struct value * 624 readable_regcache::cooked_read_value (int regnum) 625 { 626 gdb_assert (regnum >= 0); 627 gdb_assert (regnum < m_descr->nr_cooked_registers); 628 629 if (regnum < num_raw_registers () 630 || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN) 631 || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch)) 632 { 633 struct value *result; 634 635 result = allocate_value (register_type (m_descr->gdbarch, regnum)); 636 VALUE_LVAL (result) = lval_register; 637 VALUE_REGNUM (result) = regnum; 638 639 /* It is more efficient in general to do this delegation in this 640 direction than in the other one, even though the value-based 641 API is preferred. */ 642 if (cooked_read (regnum, 643 value_contents_raw (result)) == REG_UNAVAILABLE) 644 mark_value_bytes_unavailable (result, 0, 645 TYPE_LENGTH (value_type (result))); 646 647 return result; 648 } 649 else 650 return gdbarch_pseudo_register_read_value (m_descr->gdbarch, 651 this, regnum); 652 } 653 654 enum register_status 655 regcache_cooked_read_signed (struct regcache *regcache, int regnum, 656 LONGEST *val) 657 { 658 gdb_assert (regcache != NULL); 659 return regcache->cooked_read (regnum, val); 660 } 661 662 template<typename T, typename> 663 enum register_status 664 readable_regcache::cooked_read (int regnum, T *val) 665 { 666 enum register_status status; 667 gdb_byte *buf; 668 669 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers); 670 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]); 671 status = cooked_read (regnum, buf); 672 if (status == REG_VALID) 673 *val = extract_integer<T> (buf, m_descr->sizeof_register[regnum], 674 gdbarch_byte_order (m_descr->gdbarch)); 675 else 676 *val = 0; 677 return status; 678 } 679 680 enum register_status 681 regcache_cooked_read_unsigned (struct regcache *regcache, int regnum, 682 ULONGEST *val) 683 { 684 gdb_assert (regcache != NULL); 685 return regcache->cooked_read (regnum, val); 686 } 687 688 void 689 regcache_cooked_write_signed (struct regcache *regcache, int regnum, 690 LONGEST val) 691 { 692 gdb_assert (regcache != NULL); 693 regcache->cooked_write (regnum, val); 694 } 695 696 template<typename T, typename> 697 void 698 regcache::cooked_write (int regnum, T val) 699 { 700 gdb_byte *buf; 701 702 gdb_assert (regnum >=0 && regnum < m_descr->nr_cooked_registers); 703 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]); 704 store_integer (buf, m_descr->sizeof_register[regnum], 705 gdbarch_byte_order (m_descr->gdbarch), val); 706 cooked_write (regnum, buf); 707 } 708 709 void 710 regcache_cooked_write_unsigned (struct regcache *regcache, int regnum, 711 ULONGEST val) 712 { 713 gdb_assert (regcache != NULL); 714 regcache->cooked_write (regnum, val); 715 } 716 717 void 718 regcache::raw_write (int regnum, const gdb_byte *buf) 719 { 720 721 gdb_assert (buf != NULL); 722 assert_regnum (regnum); 723 724 /* On the sparc, writing %g0 is a no-op, so we don't even want to 725 change the registers array if something writes to this register. */ 726 if (gdbarch_cannot_store_register (arch (), regnum)) 727 return; 728 729 /* If we have a valid copy of the register, and new value == old 730 value, then don't bother doing the actual store. */ 731 if (get_register_status (regnum) == REG_VALID 732 && (memcmp (register_buffer (regnum), buf, 733 m_descr->sizeof_register[regnum]) == 0)) 734 return; 735 736 target_prepare_to_store (this); 737 raw_supply (regnum, buf); 738 739 /* Invalidate the register after it is written, in case of a 740 failure. */ 741 auto invalidator 742 = make_scope_exit ([&] { this->invalidate (regnum); }); 743 744 target_store_registers (this, regnum); 745 746 /* The target did not throw an error so we can discard invalidating 747 the register. */ 748 invalidator.release (); 749 } 750 751 void 752 regcache::cooked_write (int regnum, const gdb_byte *buf) 753 { 754 gdb_assert (regnum >= 0); 755 gdb_assert (regnum < m_descr->nr_cooked_registers); 756 if (regnum < num_raw_registers ()) 757 raw_write (regnum, buf); 758 else 759 gdbarch_pseudo_register_write (m_descr->gdbarch, this, 760 regnum, buf); 761 } 762 763 /* See regcache.h. */ 764 765 enum register_status 766 readable_regcache::read_part (int regnum, int offset, int len, 767 gdb_byte *out, bool is_raw) 768 { 769 int reg_size = register_size (arch (), regnum); 770 771 gdb_assert (out != NULL); 772 gdb_assert (offset >= 0 && offset <= reg_size); 773 gdb_assert (len >= 0 && offset + len <= reg_size); 774 775 if (offset == 0 && len == 0) 776 { 777 /* Nothing to do. */ 778 return REG_VALID; 779 } 780 781 if (offset == 0 && len == reg_size) 782 { 783 /* Read the full register. */ 784 return (is_raw) ? raw_read (regnum, out) : cooked_read (regnum, out); 785 } 786 787 enum register_status status; 788 gdb_byte *reg = (gdb_byte *) alloca (reg_size); 789 790 /* Read full register to buffer. */ 791 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg); 792 if (status != REG_VALID) 793 return status; 794 795 /* Copy out. */ 796 memcpy (out, reg + offset, len); 797 return REG_VALID; 798 } 799 800 /* See regcache.h. */ 801 802 void 803 reg_buffer::raw_collect_part (int regnum, int offset, int len, 804 gdb_byte *out) const 805 { 806 int reg_size = register_size (arch (), regnum); 807 808 gdb_assert (out != nullptr); 809 gdb_assert (offset >= 0 && offset <= reg_size); 810 gdb_assert (len >= 0 && offset + len <= reg_size); 811 812 if (offset == 0 && len == 0) 813 { 814 /* Nothing to do. */ 815 return; 816 } 817 818 if (offset == 0 && len == reg_size) 819 { 820 /* Collect the full register. */ 821 return raw_collect (regnum, out); 822 } 823 824 /* Read to buffer, then write out. */ 825 gdb_byte *reg = (gdb_byte *) alloca (reg_size); 826 raw_collect (regnum, reg); 827 memcpy (out, reg + offset, len); 828 } 829 830 /* See regcache.h. */ 831 832 enum register_status 833 regcache::write_part (int regnum, int offset, int len, 834 const gdb_byte *in, bool is_raw) 835 { 836 int reg_size = register_size (arch (), regnum); 837 838 gdb_assert (in != NULL); 839 gdb_assert (offset >= 0 && offset <= reg_size); 840 gdb_assert (len >= 0 && offset + len <= reg_size); 841 842 if (offset == 0 && len == 0) 843 { 844 /* Nothing to do. */ 845 return REG_VALID; 846 } 847 848 if (offset == 0 && len == reg_size) 849 { 850 /* Write the full register. */ 851 (is_raw) ? raw_write (regnum, in) : cooked_write (regnum, in); 852 return REG_VALID; 853 } 854 855 enum register_status status; 856 gdb_byte *reg = (gdb_byte *) alloca (reg_size); 857 858 /* Read existing register to buffer. */ 859 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg); 860 if (status != REG_VALID) 861 return status; 862 863 /* Update buffer, then write back to regcache. */ 864 memcpy (reg + offset, in, len); 865 is_raw ? raw_write (regnum, reg) : cooked_write (regnum, reg); 866 return REG_VALID; 867 } 868 869 /* See regcache.h. */ 870 871 void 872 reg_buffer::raw_supply_part (int regnum, int offset, int len, 873 const gdb_byte *in) 874 { 875 int reg_size = register_size (arch (), regnum); 876 877 gdb_assert (in != nullptr); 878 gdb_assert (offset >= 0 && offset <= reg_size); 879 gdb_assert (len >= 0 && offset + len <= reg_size); 880 881 if (offset == 0 && len == 0) 882 { 883 /* Nothing to do. */ 884 return; 885 } 886 887 if (offset == 0 && len == reg_size) 888 { 889 /* Supply the full register. */ 890 return raw_supply (regnum, in); 891 } 892 893 gdb_byte *reg = (gdb_byte *) alloca (reg_size); 894 895 /* Read existing value to buffer. */ 896 raw_collect (regnum, reg); 897 898 /* Write to buffer, then write out. */ 899 memcpy (reg + offset, in, len); 900 raw_supply (regnum, reg); 901 } 902 903 enum register_status 904 readable_regcache::raw_read_part (int regnum, int offset, int len, 905 gdb_byte *buf) 906 { 907 assert_regnum (regnum); 908 return read_part (regnum, offset, len, buf, true); 909 } 910 911 /* See regcache.h. */ 912 913 void 914 regcache::raw_write_part (int regnum, int offset, int len, 915 const gdb_byte *buf) 916 { 917 assert_regnum (regnum); 918 write_part (regnum, offset, len, buf, true); 919 } 920 921 /* See regcache.h. */ 922 923 enum register_status 924 readable_regcache::cooked_read_part (int regnum, int offset, int len, 925 gdb_byte *buf) 926 { 927 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers); 928 return read_part (regnum, offset, len, buf, false); 929 } 930 931 /* See regcache.h. */ 932 933 void 934 regcache::cooked_write_part (int regnum, int offset, int len, 935 const gdb_byte *buf) 936 { 937 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers); 938 write_part (regnum, offset, len, buf, false); 939 } 940 941 /* See common/common-regcache.h. */ 942 943 void 944 reg_buffer::raw_supply (int regnum, const void *buf) 945 { 946 void *regbuf; 947 size_t size; 948 949 assert_regnum (regnum); 950 951 regbuf = register_buffer (regnum); 952 size = m_descr->sizeof_register[regnum]; 953 954 if (buf) 955 { 956 memcpy (regbuf, buf, size); 957 m_register_status[regnum] = REG_VALID; 958 } 959 else 960 { 961 /* This memset not strictly necessary, but better than garbage 962 in case the register value manages to escape somewhere (due 963 to a bug, no less). */ 964 memset (regbuf, 0, size); 965 m_register_status[regnum] = REG_UNAVAILABLE; 966 } 967 } 968 969 /* See regcache.h. */ 970 971 void 972 reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr, 973 int addr_len, bool is_signed) 974 { 975 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch); 976 gdb_byte *regbuf; 977 size_t regsize; 978 979 assert_regnum (regnum); 980 981 regbuf = register_buffer (regnum); 982 regsize = m_descr->sizeof_register[regnum]; 983 984 copy_integer_to_size (regbuf, regsize, addr, addr_len, is_signed, 985 byte_order); 986 m_register_status[regnum] = REG_VALID; 987 } 988 989 /* See regcache.h. */ 990 991 void 992 reg_buffer::raw_supply_zeroed (int regnum) 993 { 994 void *regbuf; 995 size_t size; 996 997 assert_regnum (regnum); 998 999 regbuf = register_buffer (regnum); 1000 size = m_descr->sizeof_register[regnum]; 1001 1002 memset (regbuf, 0, size); 1003 m_register_status[regnum] = REG_VALID; 1004 } 1005 1006 /* See common/common-regcache.h. */ 1007 1008 void 1009 reg_buffer::raw_collect (int regnum, void *buf) const 1010 { 1011 const void *regbuf; 1012 size_t size; 1013 1014 gdb_assert (buf != NULL); 1015 assert_regnum (regnum); 1016 1017 regbuf = register_buffer (regnum); 1018 size = m_descr->sizeof_register[regnum]; 1019 memcpy (buf, regbuf, size); 1020 } 1021 1022 /* See regcache.h. */ 1023 1024 void 1025 reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len, 1026 bool is_signed) const 1027 { 1028 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch); 1029 const gdb_byte *regbuf; 1030 size_t regsize; 1031 1032 assert_regnum (regnum); 1033 1034 regbuf = register_buffer (regnum); 1035 regsize = m_descr->sizeof_register[regnum]; 1036 1037 copy_integer_to_size (addr, addr_len, regbuf, regsize, is_signed, 1038 byte_order); 1039 } 1040 1041 /* See regcache.h. */ 1042 1043 void 1044 regcache::transfer_regset_register (struct regcache *out_regcache, int regnum, 1045 const gdb_byte *in_buf, gdb_byte *out_buf, 1046 int slot_size, int offs) const 1047 { 1048 struct gdbarch *gdbarch = arch (); 1049 int reg_size = std::min (register_size (gdbarch, regnum), slot_size); 1050 1051 /* Use part versions and reg_size to prevent possible buffer overflows when 1052 accessing the regcache. */ 1053 1054 if (out_buf != nullptr) 1055 { 1056 raw_collect_part (regnum, 0, reg_size, out_buf + offs); 1057 1058 /* Ensure any additional space is cleared. */ 1059 if (slot_size > reg_size) 1060 memset (out_buf + offs + reg_size, 0, slot_size - reg_size); 1061 } 1062 else if (in_buf != nullptr) 1063 out_regcache->raw_supply_part (regnum, 0, reg_size, in_buf + offs); 1064 else 1065 { 1066 /* Invalidate the register. */ 1067 out_regcache->raw_supply (regnum, nullptr); 1068 } 1069 } 1070 1071 /* See regcache.h. */ 1072 1073 void 1074 regcache::transfer_regset (const struct regset *regset, 1075 struct regcache *out_regcache, 1076 int regnum, const gdb_byte *in_buf, 1077 gdb_byte *out_buf, size_t size) const 1078 { 1079 const struct regcache_map_entry *map; 1080 int offs = 0, count; 1081 1082 for (map = (const struct regcache_map_entry *) regset->regmap; 1083 (count = map->count) != 0; 1084 map++) 1085 { 1086 int regno = map->regno; 1087 int slot_size = map->size; 1088 1089 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP) 1090 slot_size = m_descr->sizeof_register[regno]; 1091 1092 if (regno == REGCACHE_MAP_SKIP 1093 || (regnum != -1 1094 && (regnum < regno || regnum >= regno + count))) 1095 offs += count * slot_size; 1096 1097 else if (regnum == -1) 1098 for (; count--; regno++, offs += slot_size) 1099 { 1100 if (offs + slot_size > size) 1101 break; 1102 1103 transfer_regset_register (out_regcache, regno, in_buf, out_buf, 1104 slot_size, offs); 1105 } 1106 else 1107 { 1108 /* Transfer a single register and return. */ 1109 offs += (regnum - regno) * slot_size; 1110 if (offs + slot_size > size) 1111 return; 1112 1113 transfer_regset_register (out_regcache, regnum, in_buf, out_buf, 1114 slot_size, offs); 1115 return; 1116 } 1117 } 1118 } 1119 1120 /* Supply register REGNUM from BUF to REGCACHE, using the register map 1121 in REGSET. If REGNUM is -1, do this for all registers in REGSET. 1122 If BUF is NULL, set the register(s) to "unavailable" status. */ 1123 1124 void 1125 regcache_supply_regset (const struct regset *regset, 1126 struct regcache *regcache, 1127 int regnum, const void *buf, size_t size) 1128 { 1129 regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size); 1130 } 1131 1132 void 1133 regcache::supply_regset (const struct regset *regset, 1134 int regnum, const void *buf, size_t size) 1135 { 1136 transfer_regset (regset, this, regnum, (const gdb_byte *) buf, nullptr, size); 1137 } 1138 1139 /* Collect register REGNUM from REGCACHE to BUF, using the register 1140 map in REGSET. If REGNUM is -1, do this for all registers in 1141 REGSET. */ 1142 1143 void 1144 regcache_collect_regset (const struct regset *regset, 1145 const struct regcache *regcache, 1146 int regnum, void *buf, size_t size) 1147 { 1148 regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size); 1149 } 1150 1151 void 1152 regcache::collect_regset (const struct regset *regset, 1153 int regnum, void *buf, size_t size) const 1154 { 1155 transfer_regset (regset, nullptr, regnum, nullptr, (gdb_byte *) buf, size); 1156 } 1157 1158 /* See common/common-regcache.h. */ 1159 1160 bool 1161 reg_buffer::raw_compare (int regnum, const void *buf, int offset) const 1162 { 1163 gdb_assert (buf != NULL); 1164 assert_regnum (regnum); 1165 1166 const char *regbuf = (const char *) register_buffer (regnum); 1167 size_t size = m_descr->sizeof_register[regnum]; 1168 gdb_assert (size >= offset); 1169 1170 return (memcmp (buf, regbuf + offset, size - offset) == 0); 1171 } 1172 1173 /* Special handling for register PC. */ 1174 1175 CORE_ADDR 1176 regcache_read_pc (struct regcache *regcache) 1177 { 1178 struct gdbarch *gdbarch = regcache->arch (); 1179 1180 CORE_ADDR pc_val; 1181 1182 if (gdbarch_read_pc_p (gdbarch)) 1183 pc_val = gdbarch_read_pc (gdbarch, regcache); 1184 /* Else use per-frame method on get_current_frame. */ 1185 else if (gdbarch_pc_regnum (gdbarch) >= 0) 1186 { 1187 ULONGEST raw_val; 1188 1189 if (regcache_cooked_read_unsigned (regcache, 1190 gdbarch_pc_regnum (gdbarch), 1191 &raw_val) == REG_UNAVAILABLE) 1192 throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available")); 1193 1194 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val); 1195 } 1196 else 1197 internal_error (__FILE__, __LINE__, 1198 _("regcache_read_pc: Unable to find PC")); 1199 return pc_val; 1200 } 1201 1202 void 1203 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc) 1204 { 1205 struct gdbarch *gdbarch = regcache->arch (); 1206 1207 if (gdbarch_write_pc_p (gdbarch)) 1208 gdbarch_write_pc (gdbarch, regcache, pc); 1209 else if (gdbarch_pc_regnum (gdbarch) >= 0) 1210 regcache_cooked_write_unsigned (regcache, 1211 gdbarch_pc_regnum (gdbarch), pc); 1212 else 1213 internal_error (__FILE__, __LINE__, 1214 _("regcache_write_pc: Unable to update PC")); 1215 1216 /* Writing the PC (for instance, from "load") invalidates the 1217 current frame. */ 1218 reinit_frame_cache (); 1219 } 1220 1221 int 1222 reg_buffer::num_raw_registers () const 1223 { 1224 return gdbarch_num_regs (arch ()); 1225 } 1226 1227 void 1228 regcache::debug_print_register (const char *func, int regno) 1229 { 1230 struct gdbarch *gdbarch = arch (); 1231 1232 fprintf_unfiltered (gdb_stdlog, "%s ", func); 1233 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch) 1234 && gdbarch_register_name (gdbarch, regno) != NULL 1235 && gdbarch_register_name (gdbarch, regno)[0] != '\0') 1236 fprintf_unfiltered (gdb_stdlog, "(%s)", 1237 gdbarch_register_name (gdbarch, regno)); 1238 else 1239 fprintf_unfiltered (gdb_stdlog, "(%d)", regno); 1240 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)) 1241 { 1242 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 1243 int size = register_size (gdbarch, regno); 1244 gdb_byte *buf = register_buffer (regno); 1245 1246 fprintf_unfiltered (gdb_stdlog, " = "); 1247 for (int i = 0; i < size; i++) 1248 { 1249 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]); 1250 } 1251 if (size <= sizeof (LONGEST)) 1252 { 1253 ULONGEST val = extract_unsigned_integer (buf, size, byte_order); 1254 1255 fprintf_unfiltered (gdb_stdlog, " %s %s", 1256 core_addr_to_string_nz (val), plongest (val)); 1257 } 1258 } 1259 fprintf_unfiltered (gdb_stdlog, "\n"); 1260 } 1261 1262 static void 1263 reg_flush_command (const char *command, int from_tty) 1264 { 1265 /* Force-flush the register cache. */ 1266 registers_changed (); 1267 if (from_tty) 1268 printf_filtered (_("Register cache flushed.\n")); 1269 } 1270 1271 void 1272 register_dump::dump (ui_file *file) 1273 { 1274 auto descr = regcache_descr (m_gdbarch); 1275 int regnum; 1276 int footnote_nr = 0; 1277 int footnote_register_offset = 0; 1278 int footnote_register_type_name_null = 0; 1279 long register_offset = 0; 1280 1281 gdb_assert (descr->nr_cooked_registers 1282 == gdbarch_num_cooked_regs (m_gdbarch)); 1283 1284 for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++) 1285 { 1286 /* Name. */ 1287 if (regnum < 0) 1288 fprintf_unfiltered (file, " %-10s", "Name"); 1289 else 1290 { 1291 const char *p = gdbarch_register_name (m_gdbarch, regnum); 1292 1293 if (p == NULL) 1294 p = ""; 1295 else if (p[0] == '\0') 1296 p = "''"; 1297 fprintf_unfiltered (file, " %-10s", p); 1298 } 1299 1300 /* Number. */ 1301 if (regnum < 0) 1302 fprintf_unfiltered (file, " %4s", "Nr"); 1303 else 1304 fprintf_unfiltered (file, " %4d", regnum); 1305 1306 /* Relative number. */ 1307 if (regnum < 0) 1308 fprintf_unfiltered (file, " %4s", "Rel"); 1309 else if (regnum < gdbarch_num_regs (m_gdbarch)) 1310 fprintf_unfiltered (file, " %4d", regnum); 1311 else 1312 fprintf_unfiltered (file, " %4d", 1313 (regnum - gdbarch_num_regs (m_gdbarch))); 1314 1315 /* Offset. */ 1316 if (regnum < 0) 1317 fprintf_unfiltered (file, " %6s ", "Offset"); 1318 else 1319 { 1320 fprintf_unfiltered (file, " %6ld", 1321 descr->register_offset[regnum]); 1322 if (register_offset != descr->register_offset[regnum] 1323 || (regnum > 0 1324 && (descr->register_offset[regnum] 1325 != (descr->register_offset[regnum - 1] 1326 + descr->sizeof_register[regnum - 1]))) 1327 ) 1328 { 1329 if (!footnote_register_offset) 1330 footnote_register_offset = ++footnote_nr; 1331 fprintf_unfiltered (file, "*%d", footnote_register_offset); 1332 } 1333 else 1334 fprintf_unfiltered (file, " "); 1335 register_offset = (descr->register_offset[regnum] 1336 + descr->sizeof_register[regnum]); 1337 } 1338 1339 /* Size. */ 1340 if (regnum < 0) 1341 fprintf_unfiltered (file, " %5s ", "Size"); 1342 else 1343 fprintf_unfiltered (file, " %5ld", descr->sizeof_register[regnum]); 1344 1345 /* Type. */ 1346 { 1347 const char *t; 1348 std::string name_holder; 1349 1350 if (regnum < 0) 1351 t = "Type"; 1352 else 1353 { 1354 static const char blt[] = "builtin_type"; 1355 1356 t = TYPE_NAME (register_type (m_gdbarch, regnum)); 1357 if (t == NULL) 1358 { 1359 if (!footnote_register_type_name_null) 1360 footnote_register_type_name_null = ++footnote_nr; 1361 name_holder = string_printf ("*%d", 1362 footnote_register_type_name_null); 1363 t = name_holder.c_str (); 1364 } 1365 /* Chop a leading builtin_type. */ 1366 if (startswith (t, blt)) 1367 t += strlen (blt); 1368 } 1369 fprintf_unfiltered (file, " %-15s", t); 1370 } 1371 1372 /* Leading space always present. */ 1373 fprintf_unfiltered (file, " "); 1374 1375 dump_reg (file, regnum); 1376 1377 fprintf_unfiltered (file, "\n"); 1378 } 1379 1380 if (footnote_register_offset) 1381 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n", 1382 footnote_register_offset); 1383 if (footnote_register_type_name_null) 1384 fprintf_unfiltered (file, 1385 "*%d: Register type's name NULL.\n", 1386 footnote_register_type_name_null); 1387 } 1388 1389 #if GDB_SELF_TEST 1390 #include "common/selftest.h" 1391 #include "selftest-arch.h" 1392 #include "target-float.h" 1393 1394 namespace selftests { 1395 1396 class regcache_access : public regcache 1397 { 1398 public: 1399 1400 /* Return the number of elements in current_regcache. */ 1401 1402 static size_t 1403 current_regcache_size () 1404 { 1405 return std::distance (regcache::current_regcache.begin (), 1406 regcache::current_regcache.end ()); 1407 } 1408 }; 1409 1410 static void 1411 current_regcache_test (void) 1412 { 1413 /* It is empty at the start. */ 1414 SELF_CHECK (regcache_access::current_regcache_size () == 0); 1415 1416 ptid_t ptid1 (1), ptid2 (2), ptid3 (3); 1417 1418 /* Get regcache from ptid1, a new regcache is added to 1419 current_regcache. */ 1420 regcache *regcache = get_thread_arch_aspace_regcache (ptid1, 1421 target_gdbarch (), 1422 NULL); 1423 1424 SELF_CHECK (regcache != NULL); 1425 SELF_CHECK (regcache->ptid () == ptid1); 1426 SELF_CHECK (regcache_access::current_regcache_size () == 1); 1427 1428 /* Get regcache from ptid2, a new regcache is added to 1429 current_regcache. */ 1430 regcache = get_thread_arch_aspace_regcache (ptid2, 1431 target_gdbarch (), 1432 NULL); 1433 SELF_CHECK (regcache != NULL); 1434 SELF_CHECK (regcache->ptid () == ptid2); 1435 SELF_CHECK (regcache_access::current_regcache_size () == 2); 1436 1437 /* Get regcache from ptid3, a new regcache is added to 1438 current_regcache. */ 1439 regcache = get_thread_arch_aspace_regcache (ptid3, 1440 target_gdbarch (), 1441 NULL); 1442 SELF_CHECK (regcache != NULL); 1443 SELF_CHECK (regcache->ptid () == ptid3); 1444 SELF_CHECK (regcache_access::current_regcache_size () == 3); 1445 1446 /* Get regcache from ptid2 again, nothing is added to 1447 current_regcache. */ 1448 regcache = get_thread_arch_aspace_regcache (ptid2, 1449 target_gdbarch (), 1450 NULL); 1451 SELF_CHECK (regcache != NULL); 1452 SELF_CHECK (regcache->ptid () == ptid2); 1453 SELF_CHECK (regcache_access::current_regcache_size () == 3); 1454 1455 /* Mark ptid2 is changed, so regcache of ptid2 should be removed from 1456 current_regcache. */ 1457 registers_changed_ptid (ptid2); 1458 SELF_CHECK (regcache_access::current_regcache_size () == 2); 1459 } 1460 1461 class target_ops_no_register : public test_target_ops 1462 { 1463 public: 1464 target_ops_no_register () 1465 : test_target_ops {} 1466 {} 1467 1468 void reset () 1469 { 1470 fetch_registers_called = 0; 1471 store_registers_called = 0; 1472 xfer_partial_called = 0; 1473 } 1474 1475 void fetch_registers (regcache *regs, int regno) override; 1476 void store_registers (regcache *regs, int regno) override; 1477 1478 enum target_xfer_status xfer_partial (enum target_object object, 1479 const char *annex, gdb_byte *readbuf, 1480 const gdb_byte *writebuf, 1481 ULONGEST offset, ULONGEST len, 1482 ULONGEST *xfered_len) override; 1483 1484 unsigned int fetch_registers_called = 0; 1485 unsigned int store_registers_called = 0; 1486 unsigned int xfer_partial_called = 0; 1487 }; 1488 1489 void 1490 target_ops_no_register::fetch_registers (regcache *regs, int regno) 1491 { 1492 /* Mark register available. */ 1493 regs->raw_supply_zeroed (regno); 1494 this->fetch_registers_called++; 1495 } 1496 1497 void 1498 target_ops_no_register::store_registers (regcache *regs, int regno) 1499 { 1500 this->store_registers_called++; 1501 } 1502 1503 enum target_xfer_status 1504 target_ops_no_register::xfer_partial (enum target_object object, 1505 const char *annex, gdb_byte *readbuf, 1506 const gdb_byte *writebuf, 1507 ULONGEST offset, ULONGEST len, 1508 ULONGEST *xfered_len) 1509 { 1510 this->xfer_partial_called++; 1511 1512 *xfered_len = len; 1513 return TARGET_XFER_OK; 1514 } 1515 1516 class readwrite_regcache : public regcache 1517 { 1518 public: 1519 readwrite_regcache (struct gdbarch *gdbarch) 1520 : regcache (gdbarch, nullptr) 1521 {} 1522 }; 1523 1524 /* Test regcache::cooked_read gets registers from raw registers and 1525 memory instead of target to_{fetch,store}_registers. */ 1526 1527 static void 1528 cooked_read_test (struct gdbarch *gdbarch) 1529 { 1530 /* Error out if debugging something, because we're going to push the 1531 test target, which would pop any existing target. */ 1532 if (current_top_target ()->stratum () >= process_stratum) 1533 error (_("target already pushed")); 1534 1535 /* Create a mock environment. An inferior with a thread, with a 1536 process_stratum target pushed. */ 1537 1538 target_ops_no_register mock_target; 1539 ptid_t mock_ptid (1, 1); 1540 inferior mock_inferior (mock_ptid.pid ()); 1541 address_space mock_aspace {}; 1542 mock_inferior.gdbarch = gdbarch; 1543 mock_inferior.aspace = &mock_aspace; 1544 thread_info mock_thread (&mock_inferior, mock_ptid); 1545 1546 /* Add the mock inferior to the inferior list so that look ups by 1547 target+ptid can find it. */ 1548 scoped_restore restore_inferior_list 1549 = make_scoped_restore (&inferior_list); 1550 inferior_list = &mock_inferior; 1551 1552 /* Switch to the mock inferior. */ 1553 scoped_restore_current_inferior restore_current_inferior; 1554 set_current_inferior (&mock_inferior); 1555 1556 /* Push the process_stratum target so we can mock accessing 1557 registers. */ 1558 push_target (&mock_target); 1559 1560 /* Pop it again on exit (return/exception). */ 1561 struct on_exit 1562 { 1563 ~on_exit () 1564 { 1565 pop_all_targets_at_and_above (process_stratum); 1566 } 1567 } pop_targets; 1568 1569 /* Switch to the mock thread. */ 1570 scoped_restore restore_inferior_ptid 1571 = make_scoped_restore (&inferior_ptid, mock_ptid); 1572 1573 /* Test that read one raw register from regcache_no_target will go 1574 to the target layer. */ 1575 1576 /* Find a raw register which size isn't zero. */ 1577 int nonzero_regnum; 1578 for (nonzero_regnum = 0; 1579 nonzero_regnum < gdbarch_num_regs (gdbarch); 1580 nonzero_regnum++) 1581 { 1582 if (register_size (gdbarch, nonzero_regnum) != 0) 1583 break; 1584 } 1585 1586 readwrite_regcache readwrite (gdbarch); 1587 gdb::def_vector<gdb_byte> buf (register_size (gdbarch, nonzero_regnum)); 1588 1589 readwrite.raw_read (nonzero_regnum, buf.data ()); 1590 1591 /* raw_read calls target_fetch_registers. */ 1592 SELF_CHECK (mock_target.fetch_registers_called > 0); 1593 mock_target.reset (); 1594 1595 /* Mark all raw registers valid, so the following raw registers 1596 accesses won't go to target. */ 1597 for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++) 1598 readwrite.raw_update (i); 1599 1600 mock_target.reset (); 1601 /* Then, read all raw and pseudo registers, and don't expect calling 1602 to_{fetch,store}_registers. */ 1603 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++) 1604 { 1605 if (register_size (gdbarch, regnum) == 0) 1606 continue; 1607 1608 gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum)); 1609 1610 SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum, 1611 inner_buf.data ())); 1612 1613 SELF_CHECK (mock_target.fetch_registers_called == 0); 1614 SELF_CHECK (mock_target.store_registers_called == 0); 1615 1616 /* Some SPU pseudo registers are got via TARGET_OBJECT_SPU. */ 1617 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) 1618 SELF_CHECK (mock_target.xfer_partial_called == 0); 1619 1620 mock_target.reset (); 1621 } 1622 1623 readonly_detached_regcache readonly (readwrite); 1624 1625 /* GDB may go to target layer to fetch all registers and memory for 1626 readonly regcache. */ 1627 mock_target.reset (); 1628 1629 for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++) 1630 { 1631 if (register_size (gdbarch, regnum) == 0) 1632 continue; 1633 1634 gdb::def_vector<gdb_byte> inner_buf (register_size (gdbarch, regnum)); 1635 enum register_status status = readonly.cooked_read (regnum, 1636 inner_buf.data ()); 1637 1638 if (regnum < gdbarch_num_regs (gdbarch)) 1639 { 1640 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch; 1641 1642 if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300 1643 || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh 1644 || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850 1645 || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep 1646 || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850 1647 || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300 1648 || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score 1649 || bfd_arch == bfd_arch_riscv || bfd_arch == bfd_arch_csky) 1650 { 1651 /* Raw registers. If raw registers are not in save_reggroup, 1652 their status are unknown. */ 1653 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup)) 1654 SELF_CHECK (status == REG_VALID); 1655 else 1656 SELF_CHECK (status == REG_UNKNOWN); 1657 } 1658 else 1659 SELF_CHECK (status == REG_VALID); 1660 } 1661 else 1662 { 1663 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup)) 1664 SELF_CHECK (status == REG_VALID); 1665 else 1666 { 1667 /* If pseudo registers are not in save_reggroup, some of 1668 them can be computed from saved raw registers, but some 1669 of them are unknown. */ 1670 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch; 1671 1672 if (bfd_arch == bfd_arch_frv 1673 || bfd_arch == bfd_arch_m32c 1674 || bfd_arch == bfd_arch_mep 1675 || bfd_arch == bfd_arch_sh) 1676 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN); 1677 else if (bfd_arch == bfd_arch_mips 1678 || bfd_arch == bfd_arch_h8300) 1679 SELF_CHECK (status == REG_UNKNOWN); 1680 else 1681 SELF_CHECK (status == REG_VALID); 1682 } 1683 } 1684 1685 SELF_CHECK (mock_target.fetch_registers_called == 0); 1686 SELF_CHECK (mock_target.store_registers_called == 0); 1687 SELF_CHECK (mock_target.xfer_partial_called == 0); 1688 1689 mock_target.reset (); 1690 } 1691 } 1692 1693 /* Test regcache::cooked_write by writing some expected contents to 1694 registers, and checking that contents read from registers and the 1695 expected contents are the same. */ 1696 1697 static void 1698 cooked_write_test (struct gdbarch *gdbarch) 1699 { 1700 /* Error out if debugging something, because we're going to push the 1701 test target, which would pop any existing target. */ 1702 if (current_top_target ()->stratum () >= process_stratum) 1703 error (_("target already pushed")); 1704 1705 /* Create a mock environment. A process_stratum target pushed. */ 1706 1707 target_ops_no_register mock_target; 1708 1709 /* Push the process_stratum target so we can mock accessing 1710 registers. */ 1711 push_target (&mock_target); 1712 1713 /* Pop it again on exit (return/exception). */ 1714 struct on_exit 1715 { 1716 ~on_exit () 1717 { 1718 pop_all_targets_at_and_above (process_stratum); 1719 } 1720 } pop_targets; 1721 1722 readwrite_regcache readwrite (gdbarch); 1723 1724 const int num_regs = gdbarch_num_cooked_regs (gdbarch); 1725 1726 for (auto regnum = 0; regnum < num_regs; regnum++) 1727 { 1728 if (register_size (gdbarch, regnum) == 0 1729 || gdbarch_cannot_store_register (gdbarch, regnum)) 1730 continue; 1731 1732 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch; 1733 1734 if ((bfd_arch == bfd_arch_sparc 1735 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM, 1736 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */ 1737 && gdbarch_ptr_bit (gdbarch) == 64 1738 && (regnum >= gdbarch_num_regs (gdbarch) 1739 && regnum <= gdbarch_num_regs (gdbarch) + 4)) 1740 || (bfd_arch == bfd_arch_spu 1741 /* SPU pseudo registers except SPU_SP_REGNUM are got by 1742 TARGET_OBJECT_SPU. */ 1743 && regnum >= gdbarch_num_regs (gdbarch) && regnum != 130)) 1744 continue; 1745 1746 std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0); 1747 std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0); 1748 const auto type = register_type (gdbarch, regnum); 1749 1750 if (TYPE_CODE (type) == TYPE_CODE_FLT 1751 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT) 1752 { 1753 /* Generate valid float format. */ 1754 target_float_from_string (expected.data (), type, "1.25"); 1755 } 1756 else if (TYPE_CODE (type) == TYPE_CODE_INT 1757 || TYPE_CODE (type) == TYPE_CODE_ARRAY 1758 || TYPE_CODE (type) == TYPE_CODE_PTR 1759 || TYPE_CODE (type) == TYPE_CODE_UNION 1760 || TYPE_CODE (type) == TYPE_CODE_STRUCT) 1761 { 1762 if (bfd_arch == bfd_arch_ia64 1763 || (regnum >= gdbarch_num_regs (gdbarch) 1764 && (bfd_arch == bfd_arch_xtensa 1765 || bfd_arch == bfd_arch_bfin 1766 || bfd_arch == bfd_arch_m32c 1767 /* m68hc11 pseudo registers are in memory. */ 1768 || bfd_arch == bfd_arch_m68hc11 1769 || bfd_arch == bfd_arch_m68hc12 1770 || bfd_arch == bfd_arch_s390)) 1771 || (bfd_arch == bfd_arch_frv 1772 /* FRV pseudo registers except iacc0. */ 1773 && regnum > gdbarch_num_regs (gdbarch))) 1774 { 1775 /* Skip setting the expected values for some architecture 1776 registers. */ 1777 } 1778 else if (bfd_arch == bfd_arch_rl78 && regnum == 40) 1779 { 1780 /* RL78_PC_REGNUM */ 1781 for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++) 1782 expected[j] = j; 1783 } 1784 else 1785 { 1786 for (auto j = 0; j < register_size (gdbarch, regnum); j++) 1787 expected[j] = j; 1788 } 1789 } 1790 else if (TYPE_CODE (type) == TYPE_CODE_FLAGS) 1791 { 1792 /* No idea how to test flags. */ 1793 continue; 1794 } 1795 else 1796 { 1797 /* If we don't know how to create the expected value for the 1798 this type, make it fail. */ 1799 SELF_CHECK (0); 1800 } 1801 1802 readwrite.cooked_write (regnum, expected.data ()); 1803 1804 SELF_CHECK (readwrite.cooked_read (regnum, buf.data ()) == REG_VALID); 1805 SELF_CHECK (expected == buf); 1806 } 1807 } 1808 1809 } // namespace selftests 1810 #endif /* GDB_SELF_TEST */ 1811 1812 void 1813 _initialize_regcache (void) 1814 { 1815 regcache_descr_handle 1816 = gdbarch_data_register_post_init (init_regcache_descr); 1817 1818 gdb::observers::target_changed.attach (regcache_observer_target_changed); 1819 gdb::observers::thread_ptid_changed.attach 1820 (regcache::regcache_thread_ptid_changed); 1821 1822 add_com ("flushregs", class_maintenance, reg_flush_command, 1823 _("Force gdb to flush its register cache (maintainer command)")); 1824 1825 #if GDB_SELF_TEST 1826 selftests::register_test ("current_regcache", selftests::current_regcache_test); 1827 1828 selftests::register_test_foreach_arch ("regcache::cooked_read_test", 1829 selftests::cooked_read_test); 1830 selftests::register_test_foreach_arch ("regcache::cooked_write_test", 1831 selftests::cooked_write_test); 1832 #endif 1833 } 1834