1 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger. 2 3 Copyright (C) 1993-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 "frame.h" 22 #include "frame-unwind.h" 23 #include "frame-base.h" 24 #include "dwarf2-frame.h" 25 #include "inferior.h" 26 #include "symtab.h" 27 #include "value.h" 28 #include "gdbcmd.h" 29 #include "gdbcore.h" 30 #include "dis-asm.h" 31 #include "symfile.h" 32 #include "objfiles.h" 33 #include "linespec.h" 34 #include "regcache.h" 35 #include "reggroups.h" 36 #include "arch-utils.h" 37 #include "osabi.h" 38 #include "block.h" 39 #include "infcall.h" 40 #include "trad-frame.h" 41 42 #include "elf-bfd.h" 43 44 #include "alpha-tdep.h" 45 #include <algorithm> 46 47 /* Instruction decoding. The notations for registers, immediates and 48 opcodes are the same as the one used in Compaq's Alpha architecture 49 handbook. */ 50 51 #define INSN_OPCODE(insn) ((insn & 0xfc000000) >> 26) 52 53 /* Memory instruction format */ 54 #define MEM_RA(insn) ((insn & 0x03e00000) >> 21) 55 #define MEM_RB(insn) ((insn & 0x001f0000) >> 16) 56 #define MEM_DISP(insn) \ 57 (((insn & 0x8000) == 0) ? (insn & 0xffff) : -((-insn) & 0xffff)) 58 59 static const int lda_opcode = 0x08; 60 static const int stq_opcode = 0x2d; 61 62 /* Branch instruction format */ 63 #define BR_RA(insn) MEM_RA(insn) 64 65 static const int br_opcode = 0x30; 66 static const int bne_opcode = 0x3d; 67 68 /* Operate instruction format */ 69 #define OPR_FUNCTION(insn) ((insn & 0xfe0) >> 5) 70 #define OPR_HAS_IMMEDIATE(insn) ((insn & 0x1000) == 0x1000) 71 #define OPR_RA(insn) MEM_RA(insn) 72 #define OPR_RC(insn) ((insn & 0x1f)) 73 #define OPR_LIT(insn) ((insn & 0x1fe000) >> 13) 74 75 static const int subq_opcode = 0x10; 76 static const int subq_function = 0x29; 77 78 79 /* Return the name of the REGNO register. 80 81 An empty name corresponds to a register number that used to 82 be used for a virtual register. That virtual register has 83 been removed, but the index is still reserved to maintain 84 compatibility with existing remote alpha targets. */ 85 86 static const char * 87 alpha_register_name (struct gdbarch *gdbarch, int regno) 88 { 89 static const char * const register_names[] = 90 { 91 "v0", "t0", "t1", "t2", "t3", "t4", "t5", "t6", 92 "t7", "s0", "s1", "s2", "s3", "s4", "s5", "fp", 93 "a0", "a1", "a2", "a3", "a4", "a5", "t8", "t9", 94 "t10", "t11", "ra", "t12", "at", "gp", "sp", "zero", 95 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", 96 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", 97 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", 98 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "fpcr", 99 "pc", "", "unique" 100 }; 101 102 if (regno < 0) 103 return NULL; 104 if (regno >= ARRAY_SIZE(register_names)) 105 return NULL; 106 return register_names[regno]; 107 } 108 109 static int 110 alpha_cannot_fetch_register (struct gdbarch *gdbarch, int regno) 111 { 112 return (strlen (alpha_register_name (gdbarch, regno)) == 0); 113 } 114 115 static int 116 alpha_cannot_store_register (struct gdbarch *gdbarch, int regno) 117 { 118 return (regno == ALPHA_ZERO_REGNUM 119 || strlen (alpha_register_name (gdbarch, regno)) == 0); 120 } 121 122 static struct type * 123 alpha_register_type (struct gdbarch *gdbarch, int regno) 124 { 125 if (regno == ALPHA_SP_REGNUM || regno == ALPHA_GP_REGNUM) 126 return builtin_type (gdbarch)->builtin_data_ptr; 127 if (regno == ALPHA_PC_REGNUM) 128 return builtin_type (gdbarch)->builtin_func_ptr; 129 130 /* Don't need to worry about little vs big endian until 131 some jerk tries to port to alpha-unicosmk. */ 132 if (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31) 133 return builtin_type (gdbarch)->builtin_double; 134 135 return builtin_type (gdbarch)->builtin_int64; 136 } 137 138 /* Is REGNUM a member of REGGROUP? */ 139 140 static int 141 alpha_register_reggroup_p (struct gdbarch *gdbarch, int regnum, 142 struct reggroup *group) 143 { 144 /* Filter out any registers eliminated, but whose regnum is 145 reserved for backward compatibility, e.g. the vfp. */ 146 if (gdbarch_register_name (gdbarch, regnum) == NULL 147 || *gdbarch_register_name (gdbarch, regnum) == '\0') 148 return 0; 149 150 if (group == all_reggroup) 151 return 1; 152 153 /* Zero should not be saved or restored. Technically it is a general 154 register (just as $f31 would be a float if we represented it), but 155 there's no point displaying it during "info regs", so leave it out 156 of all groups except for "all". */ 157 if (regnum == ALPHA_ZERO_REGNUM) 158 return 0; 159 160 /* All other registers are saved and restored. */ 161 if (group == save_reggroup || group == restore_reggroup) 162 return 1; 163 164 /* All other groups are non-overlapping. */ 165 166 /* Since this is really a PALcode memory slot... */ 167 if (regnum == ALPHA_UNIQUE_REGNUM) 168 return group == system_reggroup; 169 170 /* Force the FPCR to be considered part of the floating point state. */ 171 if (regnum == ALPHA_FPCR_REGNUM) 172 return group == float_reggroup; 173 174 if (regnum >= ALPHA_FP0_REGNUM && regnum < ALPHA_FP0_REGNUM + 31) 175 return group == float_reggroup; 176 else 177 return group == general_reggroup; 178 } 179 180 /* The following represents exactly the conversion performed by 181 the LDS instruction. This applies to both single-precision 182 floating point and 32-bit integers. */ 183 184 static void 185 alpha_lds (struct gdbarch *gdbarch, void *out, const void *in) 186 { 187 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 188 ULONGEST mem 189 = extract_unsigned_integer ((const gdb_byte *) in, 4, byte_order); 190 ULONGEST frac = (mem >> 0) & 0x7fffff; 191 ULONGEST sign = (mem >> 31) & 1; 192 ULONGEST exp_msb = (mem >> 30) & 1; 193 ULONGEST exp_low = (mem >> 23) & 0x7f; 194 ULONGEST exp, reg; 195 196 exp = (exp_msb << 10) | exp_low; 197 if (exp_msb) 198 { 199 if (exp_low == 0x7f) 200 exp = 0x7ff; 201 } 202 else 203 { 204 if (exp_low != 0x00) 205 exp |= 0x380; 206 } 207 208 reg = (sign << 63) | (exp << 52) | (frac << 29); 209 store_unsigned_integer ((gdb_byte *) out, 8, byte_order, reg); 210 } 211 212 /* Similarly, this represents exactly the conversion performed by 213 the STS instruction. */ 214 215 static void 216 alpha_sts (struct gdbarch *gdbarch, void *out, const void *in) 217 { 218 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 219 ULONGEST reg, mem; 220 221 reg = extract_unsigned_integer ((const gdb_byte *) in, 8, byte_order); 222 mem = ((reg >> 32) & 0xc0000000) | ((reg >> 29) & 0x3fffffff); 223 store_unsigned_integer ((gdb_byte *) out, 4, byte_order, mem); 224 } 225 226 /* The alpha needs a conversion between register and memory format if the 227 register is a floating point register and memory format is float, as the 228 register format must be double or memory format is an integer with 4 229 bytes, as the representation of integers in floating point 230 registers is different. */ 231 232 static int 233 alpha_convert_register_p (struct gdbarch *gdbarch, int regno, 234 struct type *type) 235 { 236 return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31 237 && TYPE_LENGTH (type) == 4); 238 } 239 240 static int 241 alpha_register_to_value (struct frame_info *frame, int regnum, 242 struct type *valtype, gdb_byte *out, 243 int *optimizedp, int *unavailablep) 244 { 245 struct gdbarch *gdbarch = get_frame_arch (frame); 246 struct value *value = get_frame_register_value (frame, regnum); 247 248 gdb_assert (value != NULL); 249 *optimizedp = value_optimized_out (value); 250 *unavailablep = !value_entirely_available (value); 251 252 if (*optimizedp || *unavailablep) 253 { 254 release_value (value); 255 return 0; 256 } 257 258 /* Convert to VALTYPE. */ 259 260 gdb_assert (TYPE_LENGTH (valtype) == 4); 261 alpha_sts (gdbarch, out, value_contents_all (value)); 262 263 release_value (value); 264 return 1; 265 } 266 267 static void 268 alpha_value_to_register (struct frame_info *frame, int regnum, 269 struct type *valtype, const gdb_byte *in) 270 { 271 gdb_byte out[ALPHA_REGISTER_SIZE]; 272 273 gdb_assert (TYPE_LENGTH (valtype) == 4); 274 gdb_assert (register_size (get_frame_arch (frame), regnum) 275 <= ALPHA_REGISTER_SIZE); 276 alpha_lds (get_frame_arch (frame), out, in); 277 278 put_frame_register (frame, regnum, out); 279 } 280 281 282 /* The alpha passes the first six arguments in the registers, the rest on 283 the stack. The register arguments are stored in ARG_REG_BUFFER, and 284 then moved into the register file; this simplifies the passing of a 285 large struct which extends from the registers to the stack, plus avoids 286 three ptrace invocations per word. 287 288 We don't bother tracking which register values should go in integer 289 regs or fp regs; we load the same values into both. 290 291 If the called function is returning a structure, the address of the 292 structure to be returned is passed as a hidden first argument. */ 293 294 static CORE_ADDR 295 alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function, 296 struct regcache *regcache, CORE_ADDR bp_addr, 297 int nargs, struct value **args, CORE_ADDR sp, 298 function_call_return_method return_method, 299 CORE_ADDR struct_addr) 300 { 301 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 302 int i; 303 int accumulate_size = (return_method == return_method_struct) ? 8 : 0; 304 struct alpha_arg 305 { 306 const gdb_byte *contents; 307 int len; 308 int offset; 309 }; 310 struct alpha_arg *alpha_args = XALLOCAVEC (struct alpha_arg, nargs); 311 struct alpha_arg *m_arg; 312 gdb_byte arg_reg_buffer[ALPHA_REGISTER_SIZE * ALPHA_NUM_ARG_REGS]; 313 int required_arg_regs; 314 CORE_ADDR func_addr = find_function_addr (function, NULL); 315 316 /* The ABI places the address of the called function in T12. */ 317 regcache_cooked_write_signed (regcache, ALPHA_T12_REGNUM, func_addr); 318 319 /* Set the return address register to point to the entry point 320 of the program, where a breakpoint lies in wait. */ 321 regcache_cooked_write_signed (regcache, ALPHA_RA_REGNUM, bp_addr); 322 323 /* Lay out the arguments in memory. */ 324 for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++) 325 { 326 struct value *arg = args[i]; 327 struct type *arg_type = check_typedef (value_type (arg)); 328 329 /* Cast argument to long if necessary as the compiler does it too. */ 330 switch (TYPE_CODE (arg_type)) 331 { 332 case TYPE_CODE_INT: 333 case TYPE_CODE_BOOL: 334 case TYPE_CODE_CHAR: 335 case TYPE_CODE_RANGE: 336 case TYPE_CODE_ENUM: 337 if (TYPE_LENGTH (arg_type) == 4) 338 { 339 /* 32-bit values must be sign-extended to 64 bits 340 even if the base data type is unsigned. */ 341 arg_type = builtin_type (gdbarch)->builtin_int32; 342 arg = value_cast (arg_type, arg); 343 } 344 if (TYPE_LENGTH (arg_type) < ALPHA_REGISTER_SIZE) 345 { 346 arg_type = builtin_type (gdbarch)->builtin_int64; 347 arg = value_cast (arg_type, arg); 348 } 349 break; 350 351 case TYPE_CODE_FLT: 352 /* "float" arguments loaded in registers must be passed in 353 register format, aka "double". */ 354 if (accumulate_size < sizeof (arg_reg_buffer) 355 && TYPE_LENGTH (arg_type) == 4) 356 { 357 arg_type = builtin_type (gdbarch)->builtin_double; 358 arg = value_cast (arg_type, arg); 359 } 360 /* Tru64 5.1 has a 128-bit long double, and passes this by 361 invisible reference. No one else uses this data type. */ 362 else if (TYPE_LENGTH (arg_type) == 16) 363 { 364 /* Allocate aligned storage. */ 365 sp = (sp & -16) - 16; 366 367 /* Write the real data into the stack. */ 368 write_memory (sp, value_contents (arg), 16); 369 370 /* Construct the indirection. */ 371 arg_type = lookup_pointer_type (arg_type); 372 arg = value_from_pointer (arg_type, sp); 373 } 374 break; 375 376 case TYPE_CODE_COMPLEX: 377 /* ??? The ABI says that complex values are passed as two 378 separate scalar values. This distinction only matters 379 for complex float. However, GCC does not implement this. */ 380 381 /* Tru64 5.1 has a 128-bit long double, and passes this by 382 invisible reference. */ 383 if (TYPE_LENGTH (arg_type) == 32) 384 { 385 /* Allocate aligned storage. */ 386 sp = (sp & -16) - 16; 387 388 /* Write the real data into the stack. */ 389 write_memory (sp, value_contents (arg), 32); 390 391 /* Construct the indirection. */ 392 arg_type = lookup_pointer_type (arg_type); 393 arg = value_from_pointer (arg_type, sp); 394 } 395 break; 396 397 default: 398 break; 399 } 400 m_arg->len = TYPE_LENGTH (arg_type); 401 m_arg->offset = accumulate_size; 402 accumulate_size = (accumulate_size + m_arg->len + 7) & ~7; 403 m_arg->contents = value_contents (arg); 404 } 405 406 /* Determine required argument register loads, loading an argument register 407 is expensive as it uses three ptrace calls. */ 408 required_arg_regs = accumulate_size / 8; 409 if (required_arg_regs > ALPHA_NUM_ARG_REGS) 410 required_arg_regs = ALPHA_NUM_ARG_REGS; 411 412 /* Make room for the arguments on the stack. */ 413 if (accumulate_size < sizeof(arg_reg_buffer)) 414 accumulate_size = 0; 415 else 416 accumulate_size -= sizeof(arg_reg_buffer); 417 sp -= accumulate_size; 418 419 /* Keep sp aligned to a multiple of 16 as the ABI requires. */ 420 sp &= ~15; 421 422 /* `Push' arguments on the stack. */ 423 for (i = nargs; m_arg--, --i >= 0;) 424 { 425 const gdb_byte *contents = m_arg->contents; 426 int offset = m_arg->offset; 427 int len = m_arg->len; 428 429 /* Copy the bytes destined for registers into arg_reg_buffer. */ 430 if (offset < sizeof(arg_reg_buffer)) 431 { 432 if (offset + len <= sizeof(arg_reg_buffer)) 433 { 434 memcpy (arg_reg_buffer + offset, contents, len); 435 continue; 436 } 437 else 438 { 439 int tlen = sizeof(arg_reg_buffer) - offset; 440 memcpy (arg_reg_buffer + offset, contents, tlen); 441 offset += tlen; 442 contents += tlen; 443 len -= tlen; 444 } 445 } 446 447 /* Everything else goes to the stack. */ 448 write_memory (sp + offset - sizeof(arg_reg_buffer), contents, len); 449 } 450 if (return_method == return_method_struct) 451 store_unsigned_integer (arg_reg_buffer, ALPHA_REGISTER_SIZE, 452 byte_order, struct_addr); 453 454 /* Load the argument registers. */ 455 for (i = 0; i < required_arg_regs; i++) 456 { 457 regcache->cooked_write (ALPHA_A0_REGNUM + i, 458 arg_reg_buffer + i * ALPHA_REGISTER_SIZE); 459 regcache->cooked_write (ALPHA_FPA0_REGNUM + i, 460 arg_reg_buffer + i * ALPHA_REGISTER_SIZE); 461 } 462 463 /* Finally, update the stack pointer. */ 464 regcache_cooked_write_signed (regcache, ALPHA_SP_REGNUM, sp); 465 466 return sp; 467 } 468 469 /* Extract from REGCACHE the value about to be returned from a function 470 and copy it into VALBUF. */ 471 472 static void 473 alpha_extract_return_value (struct type *valtype, struct regcache *regcache, 474 gdb_byte *valbuf) 475 { 476 struct gdbarch *gdbarch = regcache->arch (); 477 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 478 gdb_byte raw_buffer[ALPHA_REGISTER_SIZE]; 479 ULONGEST l; 480 481 switch (TYPE_CODE (valtype)) 482 { 483 case TYPE_CODE_FLT: 484 switch (TYPE_LENGTH (valtype)) 485 { 486 case 4: 487 regcache->cooked_read (ALPHA_FP0_REGNUM, raw_buffer); 488 alpha_sts (gdbarch, valbuf, raw_buffer); 489 break; 490 491 case 8: 492 regcache->cooked_read (ALPHA_FP0_REGNUM, valbuf); 493 break; 494 495 case 16: 496 regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l); 497 read_memory (l, valbuf, 16); 498 break; 499 500 default: 501 internal_error (__FILE__, __LINE__, 502 _("unknown floating point width")); 503 } 504 break; 505 506 case TYPE_CODE_COMPLEX: 507 switch (TYPE_LENGTH (valtype)) 508 { 509 case 8: 510 /* ??? This isn't correct wrt the ABI, but it's what GCC does. */ 511 regcache->cooked_read (ALPHA_FP0_REGNUM, valbuf); 512 break; 513 514 case 16: 515 regcache->cooked_read (ALPHA_FP0_REGNUM, valbuf); 516 regcache->cooked_read (ALPHA_FP0_REGNUM + 1, valbuf + 8); 517 break; 518 519 case 32: 520 regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l); 521 read_memory (l, valbuf, 32); 522 break; 523 524 default: 525 internal_error (__FILE__, __LINE__, 526 _("unknown floating point width")); 527 } 528 break; 529 530 default: 531 /* Assume everything else degenerates to an integer. */ 532 regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l); 533 store_unsigned_integer (valbuf, TYPE_LENGTH (valtype), byte_order, l); 534 break; 535 } 536 } 537 538 /* Insert the given value into REGCACHE as if it was being 539 returned by a function. */ 540 541 static void 542 alpha_store_return_value (struct type *valtype, struct regcache *regcache, 543 const gdb_byte *valbuf) 544 { 545 struct gdbarch *gdbarch = regcache->arch (); 546 gdb_byte raw_buffer[ALPHA_REGISTER_SIZE]; 547 ULONGEST l; 548 549 switch (TYPE_CODE (valtype)) 550 { 551 case TYPE_CODE_FLT: 552 switch (TYPE_LENGTH (valtype)) 553 { 554 case 4: 555 alpha_lds (gdbarch, raw_buffer, valbuf); 556 regcache->cooked_write (ALPHA_FP0_REGNUM, raw_buffer); 557 break; 558 559 case 8: 560 regcache->cooked_write (ALPHA_FP0_REGNUM, valbuf); 561 break; 562 563 case 16: 564 /* FIXME: 128-bit long doubles are returned like structures: 565 by writing into indirect storage provided by the caller 566 as the first argument. */ 567 error (_("Cannot set a 128-bit long double return value.")); 568 569 default: 570 internal_error (__FILE__, __LINE__, 571 _("unknown floating point width")); 572 } 573 break; 574 575 case TYPE_CODE_COMPLEX: 576 switch (TYPE_LENGTH (valtype)) 577 { 578 case 8: 579 /* ??? This isn't correct wrt the ABI, but it's what GCC does. */ 580 regcache->cooked_write (ALPHA_FP0_REGNUM, valbuf); 581 break; 582 583 case 16: 584 regcache->cooked_write (ALPHA_FP0_REGNUM, valbuf); 585 regcache->cooked_write (ALPHA_FP0_REGNUM + 1, valbuf + 8); 586 break; 587 588 case 32: 589 /* FIXME: 128-bit long doubles are returned like structures: 590 by writing into indirect storage provided by the caller 591 as the first argument. */ 592 error (_("Cannot set a 128-bit long double return value.")); 593 594 default: 595 internal_error (__FILE__, __LINE__, 596 _("unknown floating point width")); 597 } 598 break; 599 600 default: 601 /* Assume everything else degenerates to an integer. */ 602 /* 32-bit values must be sign-extended to 64 bits 603 even if the base data type is unsigned. */ 604 if (TYPE_LENGTH (valtype) == 4) 605 valtype = builtin_type (gdbarch)->builtin_int32; 606 l = unpack_long (valtype, valbuf); 607 regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l); 608 break; 609 } 610 } 611 612 static enum return_value_convention 613 alpha_return_value (struct gdbarch *gdbarch, struct value *function, 614 struct type *type, struct regcache *regcache, 615 gdb_byte *readbuf, const gdb_byte *writebuf) 616 { 617 enum type_code code = TYPE_CODE (type); 618 619 if ((code == TYPE_CODE_STRUCT 620 || code == TYPE_CODE_UNION 621 || code == TYPE_CODE_ARRAY) 622 && gdbarch_tdep (gdbarch)->return_in_memory (type)) 623 { 624 if (readbuf) 625 { 626 ULONGEST addr; 627 regcache_raw_read_unsigned (regcache, ALPHA_V0_REGNUM, &addr); 628 read_memory (addr, readbuf, TYPE_LENGTH (type)); 629 } 630 631 return RETURN_VALUE_ABI_RETURNS_ADDRESS; 632 } 633 634 if (readbuf) 635 alpha_extract_return_value (type, regcache, readbuf); 636 if (writebuf) 637 alpha_store_return_value (type, regcache, writebuf); 638 639 return RETURN_VALUE_REGISTER_CONVENTION; 640 } 641 642 static int 643 alpha_return_in_memory_always (struct type *type) 644 { 645 return 1; 646 } 647 648 649 constexpr gdb_byte alpha_break_insn[] = { 0x80, 0, 0, 0 }; /* call_pal bpt */ 650 651 typedef BP_MANIPULATION (alpha_break_insn) alpha_breakpoint; 652 653 654 /* This returns the PC of the first insn after the prologue. 655 If we can't find the prologue, then return 0. */ 656 657 CORE_ADDR 658 alpha_after_prologue (CORE_ADDR pc) 659 { 660 struct symtab_and_line sal; 661 CORE_ADDR func_addr, func_end; 662 663 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end)) 664 return 0; 665 666 sal = find_pc_line (func_addr, 0); 667 if (sal.end < func_end) 668 return sal.end; 669 670 /* The line after the prologue is after the end of the function. In this 671 case, tell the caller to find the prologue the hard way. */ 672 return 0; 673 } 674 675 /* Read an instruction from memory at PC, looking through breakpoints. */ 676 677 unsigned int 678 alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc) 679 { 680 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 681 gdb_byte buf[ALPHA_INSN_SIZE]; 682 int res; 683 684 res = target_read_memory (pc, buf, sizeof (buf)); 685 if (res != 0) 686 memory_error (TARGET_XFER_E_IO, pc); 687 return extract_unsigned_integer (buf, sizeof (buf), byte_order); 688 } 689 690 /* To skip prologues, I use this predicate. Returns either PC itself 691 if the code at PC does not look like a function prologue; otherwise 692 returns an address that (if we're lucky) follows the prologue. If 693 LENIENT, then we must skip everything which is involved in setting 694 up the frame (it's OK to skip more, just so long as we don't skip 695 anything which might clobber the registers which are being saved. */ 696 697 static CORE_ADDR 698 alpha_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) 699 { 700 unsigned long inst; 701 int offset; 702 CORE_ADDR post_prologue_pc; 703 gdb_byte buf[ALPHA_INSN_SIZE]; 704 705 /* Silently return the unaltered pc upon memory errors. 706 This could happen on OSF/1 if decode_line_1 tries to skip the 707 prologue for quickstarted shared library functions when the 708 shared library is not yet mapped in. 709 Reading target memory is slow over serial lines, so we perform 710 this check only if the target has shared libraries (which all 711 Alpha targets do). */ 712 if (target_read_memory (pc, buf, sizeof (buf))) 713 return pc; 714 715 /* See if we can determine the end of the prologue via the symbol table. 716 If so, then return either PC, or the PC after the prologue, whichever 717 is greater. */ 718 719 post_prologue_pc = alpha_after_prologue (pc); 720 if (post_prologue_pc != 0) 721 return std::max (pc, post_prologue_pc); 722 723 /* Can't determine prologue from the symbol table, need to examine 724 instructions. */ 725 726 /* Skip the typical prologue instructions. These are the stack adjustment 727 instruction and the instructions that save registers on the stack 728 or in the gcc frame. */ 729 for (offset = 0; offset < 100; offset += ALPHA_INSN_SIZE) 730 { 731 inst = alpha_read_insn (gdbarch, pc + offset); 732 733 if ((inst & 0xffff0000) == 0x27bb0000) /* ldah $gp,n($t12) */ 734 continue; 735 if ((inst & 0xffff0000) == 0x23bd0000) /* lda $gp,n($gp) */ 736 continue; 737 if ((inst & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */ 738 continue; 739 if ((inst & 0xffe01fff) == 0x43c0153e) /* subq $sp,n,$sp */ 740 continue; 741 742 if (((inst & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */ 743 || (inst & 0xfc1f0000) == 0x9c1e0000) /* stt reg,n($sp) */ 744 && (inst & 0x03e00000) != 0x03e00000) /* reg != $zero */ 745 continue; 746 747 if (inst == 0x47de040f) /* bis sp,sp,fp */ 748 continue; 749 if (inst == 0x47fe040f) /* bis zero,sp,fp */ 750 continue; 751 752 break; 753 } 754 return pc + offset; 755 } 756 757 /* GNU ld for alpha is so clever that the redundant GP load in function 758 entrypoint is skipped. We must therefore skip initial GP loads; otherwise 759 breakpoints in function entrypoints can also be skipped. */ 760 761 static CORE_ADDR 762 alpha_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR pc) 763 { 764 unsigned long inst; 765 gdb_byte buf[ALPHA_INSN_SIZE]; 766 767 /* Refer to the comment in alpha_skip_prologue above. */ 768 if (target_read_memory (pc, buf, sizeof (buf))) 769 return pc; 770 771 /* Skip a GP load in the first two words in the function entrypoint. */ 772 inst = alpha_read_insn (gdbarch, pc); 773 if ((inst & 0xffff0000) != 0x27bb0000) /* ldah $gp,n($t12) */ 774 return pc; 775 inst = alpha_read_insn (gdbarch, pc + ALPHA_INSN_SIZE); 776 if ((inst & 0xffff0000) != 0x23bd0000) /* lda $gp,n($gp) */ 777 return pc; 778 779 return pc + 2 * ALPHA_INSN_SIZE; 780 } 781 782 783 static const int ldl_l_opcode = 0x2a; 784 static const int ldq_l_opcode = 0x2b; 785 static const int stl_c_opcode = 0x2e; 786 static const int stq_c_opcode = 0x2f; 787 788 /* Checks for an atomic sequence of instructions beginning with a LDL_L/LDQ_L 789 instruction and ending with a STL_C/STQ_C instruction. If such a sequence 790 is found, attempt to step through it. A breakpoint is placed at the end of 791 the sequence. */ 792 793 static std::vector<CORE_ADDR> 794 alpha_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc) 795 { 796 CORE_ADDR breaks[2] = {CORE_ADDR_MAX, CORE_ADDR_MAX}; 797 CORE_ADDR loc = pc; 798 CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */ 799 unsigned int insn = alpha_read_insn (gdbarch, loc); 800 int insn_count; 801 int index; 802 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */ 803 const int atomic_sequence_length = 16; /* Instruction sequence length. */ 804 int bc_insn_count = 0; /* Conditional branch instruction count. */ 805 806 /* Assume all atomic sequences start with a LDL_L/LDQ_L instruction. */ 807 if (INSN_OPCODE (insn) != ldl_l_opcode 808 && INSN_OPCODE (insn) != ldq_l_opcode) 809 return {}; 810 811 /* Assume that no atomic sequence is longer than "atomic_sequence_length" 812 instructions. */ 813 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count) 814 { 815 loc += ALPHA_INSN_SIZE; 816 insn = alpha_read_insn (gdbarch, loc); 817 818 /* Assume that there is at most one branch in the atomic 819 sequence. If a branch is found, put a breakpoint in 820 its destination address. */ 821 if (INSN_OPCODE (insn) >= br_opcode) 822 { 823 int immediate = (insn & 0x001fffff) << 2; 824 825 immediate = (immediate ^ 0x400000) - 0x400000; 826 827 if (bc_insn_count >= 1) 828 return {}; /* More than one branch found, fallback 829 to the standard single-step code. */ 830 831 breaks[1] = loc + ALPHA_INSN_SIZE + immediate; 832 833 bc_insn_count++; 834 last_breakpoint++; 835 } 836 837 if (INSN_OPCODE (insn) == stl_c_opcode 838 || INSN_OPCODE (insn) == stq_c_opcode) 839 break; 840 } 841 842 /* Assume that the atomic sequence ends with a STL_C/STQ_C instruction. */ 843 if (INSN_OPCODE (insn) != stl_c_opcode 844 && INSN_OPCODE (insn) != stq_c_opcode) 845 return {}; 846 847 closing_insn = loc; 848 loc += ALPHA_INSN_SIZE; 849 850 /* Insert a breakpoint right after the end of the atomic sequence. */ 851 breaks[0] = loc; 852 853 /* Check for duplicated breakpoints. Check also for a breakpoint 854 placed (branch instruction's destination) anywhere in sequence. */ 855 if (last_breakpoint 856 && (breaks[1] == breaks[0] 857 || (breaks[1] >= pc && breaks[1] <= closing_insn))) 858 last_breakpoint = 0; 859 860 std::vector<CORE_ADDR> next_pcs; 861 862 for (index = 0; index <= last_breakpoint; index++) 863 next_pcs.push_back (breaks[index]); 864 865 return next_pcs; 866 } 867 868 869 /* Figure out where the longjmp will land. 870 We expect the first arg to be a pointer to the jmp_buf structure from 871 which we extract the PC (JB_PC) that we will land at. The PC is copied 872 into the "pc". This routine returns true on success. */ 873 874 static int 875 alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) 876 { 877 struct gdbarch *gdbarch = get_frame_arch (frame); 878 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 879 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 880 CORE_ADDR jb_addr; 881 gdb_byte raw_buffer[ALPHA_REGISTER_SIZE]; 882 883 jb_addr = get_frame_register_unsigned (frame, ALPHA_A0_REGNUM); 884 885 if (target_read_memory (jb_addr + (tdep->jb_pc * tdep->jb_elt_size), 886 raw_buffer, tdep->jb_elt_size)) 887 return 0; 888 889 *pc = extract_unsigned_integer (raw_buffer, tdep->jb_elt_size, byte_order); 890 return 1; 891 } 892 893 894 /* Frame unwinder for signal trampolines. We use alpha tdep bits that 895 describe the location and shape of the sigcontext structure. After 896 that, all registers are in memory, so it's easy. */ 897 /* ??? Shouldn't we be able to do this generically, rather than with 898 OSABI data specific to Alpha? */ 899 900 struct alpha_sigtramp_unwind_cache 901 { 902 CORE_ADDR sigcontext_addr; 903 }; 904 905 static struct alpha_sigtramp_unwind_cache * 906 alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame, 907 void **this_prologue_cache) 908 { 909 struct alpha_sigtramp_unwind_cache *info; 910 struct gdbarch_tdep *tdep; 911 912 if (*this_prologue_cache) 913 return (struct alpha_sigtramp_unwind_cache *) *this_prologue_cache; 914 915 info = FRAME_OBSTACK_ZALLOC (struct alpha_sigtramp_unwind_cache); 916 *this_prologue_cache = info; 917 918 tdep = gdbarch_tdep (get_frame_arch (this_frame)); 919 info->sigcontext_addr = tdep->sigcontext_addr (this_frame); 920 921 return info; 922 } 923 924 /* Return the address of REGNUM in a sigtramp frame. Since this is 925 all arithmetic, it doesn't seem worthwhile to cache it. */ 926 927 static CORE_ADDR 928 alpha_sigtramp_register_address (struct gdbarch *gdbarch, 929 CORE_ADDR sigcontext_addr, int regnum) 930 { 931 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 932 933 if (regnum >= 0 && regnum < 32) 934 return sigcontext_addr + tdep->sc_regs_offset + regnum * 8; 935 else if (regnum >= ALPHA_FP0_REGNUM && regnum < ALPHA_FP0_REGNUM + 32) 936 return sigcontext_addr + tdep->sc_fpregs_offset + regnum * 8; 937 else if (regnum == ALPHA_PC_REGNUM) 938 return sigcontext_addr + tdep->sc_pc_offset; 939 940 return 0; 941 } 942 943 /* Given a GDB frame, determine the address of the calling function's 944 frame. This will be used to create a new GDB frame struct. */ 945 946 static void 947 alpha_sigtramp_frame_this_id (struct frame_info *this_frame, 948 void **this_prologue_cache, 949 struct frame_id *this_id) 950 { 951 struct gdbarch *gdbarch = get_frame_arch (this_frame); 952 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 953 struct alpha_sigtramp_unwind_cache *info 954 = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache); 955 CORE_ADDR stack_addr, code_addr; 956 957 /* If the OSABI couldn't locate the sigcontext, give up. */ 958 if (info->sigcontext_addr == 0) 959 return; 960 961 /* If we have dynamic signal trampolines, find their start. 962 If we do not, then we must assume there is a symbol record 963 that can provide the start address. */ 964 if (tdep->dynamic_sigtramp_offset) 965 { 966 int offset; 967 code_addr = get_frame_pc (this_frame); 968 offset = tdep->dynamic_sigtramp_offset (gdbarch, code_addr); 969 if (offset >= 0) 970 code_addr -= offset; 971 else 972 code_addr = 0; 973 } 974 else 975 code_addr = get_frame_func (this_frame); 976 977 /* The stack address is trivially read from the sigcontext. */ 978 stack_addr = alpha_sigtramp_register_address (gdbarch, info->sigcontext_addr, 979 ALPHA_SP_REGNUM); 980 stack_addr = get_frame_memory_unsigned (this_frame, stack_addr, 981 ALPHA_REGISTER_SIZE); 982 983 *this_id = frame_id_build (stack_addr, code_addr); 984 } 985 986 /* Retrieve the value of REGNUM in FRAME. Don't give up! */ 987 988 static struct value * 989 alpha_sigtramp_frame_prev_register (struct frame_info *this_frame, 990 void **this_prologue_cache, int regnum) 991 { 992 struct alpha_sigtramp_unwind_cache *info 993 = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache); 994 CORE_ADDR addr; 995 996 if (info->sigcontext_addr != 0) 997 { 998 /* All integer and fp registers are stored in memory. */ 999 addr = alpha_sigtramp_register_address (get_frame_arch (this_frame), 1000 info->sigcontext_addr, regnum); 1001 if (addr != 0) 1002 return frame_unwind_got_memory (this_frame, regnum, addr); 1003 } 1004 1005 /* This extra register may actually be in the sigcontext, but our 1006 current description of it in alpha_sigtramp_frame_unwind_cache 1007 doesn't include it. Too bad. Fall back on whatever's in the 1008 outer frame. */ 1009 return frame_unwind_got_register (this_frame, regnum, regnum); 1010 } 1011 1012 static int 1013 alpha_sigtramp_frame_sniffer (const struct frame_unwind *self, 1014 struct frame_info *this_frame, 1015 void **this_prologue_cache) 1016 { 1017 struct gdbarch *gdbarch = get_frame_arch (this_frame); 1018 CORE_ADDR pc = get_frame_pc (this_frame); 1019 const char *name; 1020 1021 /* NOTE: cagney/2004-04-30: Do not copy/clone this code. Instead 1022 look at tramp-frame.h and other simplier per-architecture 1023 sigtramp unwinders. */ 1024 1025 /* We shouldn't even bother to try if the OSABI didn't register a 1026 sigcontext_addr handler or pc_in_sigtramp hander. */ 1027 if (gdbarch_tdep (gdbarch)->sigcontext_addr == NULL) 1028 return 0; 1029 if (gdbarch_tdep (gdbarch)->pc_in_sigtramp == NULL) 1030 return 0; 1031 1032 /* Otherwise we should be in a signal frame. */ 1033 find_pc_partial_function (pc, &name, NULL, NULL); 1034 if (gdbarch_tdep (gdbarch)->pc_in_sigtramp (gdbarch, pc, name)) 1035 return 1; 1036 1037 return 0; 1038 } 1039 1040 static const struct frame_unwind alpha_sigtramp_frame_unwind = { 1041 SIGTRAMP_FRAME, 1042 default_frame_unwind_stop_reason, 1043 alpha_sigtramp_frame_this_id, 1044 alpha_sigtramp_frame_prev_register, 1045 NULL, 1046 alpha_sigtramp_frame_sniffer 1047 }; 1048 1049 1050 1051 /* Heuristic_proc_start may hunt through the text section for a long 1052 time across a 2400 baud serial line. Allows the user to limit this 1053 search. */ 1054 static int heuristic_fence_post = 0; 1055 1056 /* Attempt to locate the start of the function containing PC. We assume that 1057 the previous function ends with an about_to_return insn. Not foolproof by 1058 any means, since gcc is happy to put the epilogue in the middle of a 1059 function. But we're guessing anyway... */ 1060 1061 static CORE_ADDR 1062 alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc) 1063 { 1064 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 1065 CORE_ADDR last_non_nop = pc; 1066 CORE_ADDR fence = pc - heuristic_fence_post; 1067 CORE_ADDR orig_pc = pc; 1068 CORE_ADDR func; 1069 struct inferior *inf; 1070 1071 if (pc == 0) 1072 return 0; 1073 1074 /* First see if we can find the start of the function from minimal 1075 symbol information. This can succeed with a binary that doesn't 1076 have debug info, but hasn't been stripped. */ 1077 func = get_pc_function_start (pc); 1078 if (func) 1079 return func; 1080 1081 if (heuristic_fence_post == -1 1082 || fence < tdep->vm_min_address) 1083 fence = tdep->vm_min_address; 1084 1085 /* Search back for previous return; also stop at a 0, which might be 1086 seen for instance before the start of a code section. Don't include 1087 nops, since this usually indicates padding between functions. */ 1088 for (pc -= ALPHA_INSN_SIZE; pc >= fence; pc -= ALPHA_INSN_SIZE) 1089 { 1090 unsigned int insn = alpha_read_insn (gdbarch, pc); 1091 switch (insn) 1092 { 1093 case 0: /* invalid insn */ 1094 case 0x6bfa8001: /* ret $31,($26),1 */ 1095 return last_non_nop; 1096 1097 case 0x2ffe0000: /* unop: ldq_u $31,0($30) */ 1098 case 0x47ff041f: /* nop: bis $31,$31,$31 */ 1099 break; 1100 1101 default: 1102 last_non_nop = pc; 1103 break; 1104 } 1105 } 1106 1107 inf = current_inferior (); 1108 1109 /* It's not clear to me why we reach this point when stopping quietly, 1110 but with this test, at least we don't print out warnings for every 1111 child forked (eg, on decstation). 22apr93 rich@cygnus.com. */ 1112 if (inf->control.stop_soon == NO_STOP_QUIETLY) 1113 { 1114 static int blurb_printed = 0; 1115 1116 if (fence == tdep->vm_min_address) 1117 warning (_("Hit beginning of text section without finding \ 1118 enclosing function for address %s"), paddress (gdbarch, orig_pc)); 1119 else 1120 warning (_("Hit heuristic-fence-post without finding \ 1121 enclosing function for address %s"), paddress (gdbarch, orig_pc)); 1122 1123 if (!blurb_printed) 1124 { 1125 printf_filtered (_("\ 1126 This warning occurs if you are debugging a function without any symbols\n\ 1127 (for example, in a stripped executable). In that case, you may wish to\n\ 1128 increase the size of the search with the `set heuristic-fence-post' command.\n\ 1129 \n\ 1130 Otherwise, you told GDB there was a function where there isn't one, or\n\ 1131 (more likely) you have encountered a bug in GDB.\n")); 1132 blurb_printed = 1; 1133 } 1134 } 1135 1136 return 0; 1137 } 1138 1139 /* Fallback alpha frame unwinder. Uses instruction scanning and knows 1140 something about the traditional layout of alpha stack frames. */ 1141 1142 struct alpha_heuristic_unwind_cache 1143 { 1144 CORE_ADDR vfp; 1145 CORE_ADDR start_pc; 1146 struct trad_frame_saved_reg *saved_regs; 1147 int return_reg; 1148 }; 1149 1150 /* If a probing loop sequence starts at PC, simulate it and compute 1151 FRAME_SIZE and PC after its execution. Otherwise, return with PC and 1152 FRAME_SIZE unchanged. */ 1153 1154 static void 1155 alpha_heuristic_analyze_probing_loop (struct gdbarch *gdbarch, CORE_ADDR *pc, 1156 int *frame_size) 1157 { 1158 CORE_ADDR cur_pc = *pc; 1159 int cur_frame_size = *frame_size; 1160 int nb_of_iterations, reg_index, reg_probe; 1161 unsigned int insn; 1162 1163 /* The following pattern is recognized as a probing loop: 1164 1165 lda REG_INDEX,NB_OF_ITERATIONS 1166 lda REG_PROBE,<immediate>(sp) 1167 1168 LOOP_START: 1169 stq zero,<immediate>(REG_PROBE) 1170 subq REG_INDEX,0x1,REG_INDEX 1171 lda REG_PROBE,<immediate>(REG_PROBE) 1172 bne REG_INDEX, LOOP_START 1173 1174 lda sp,<immediate>(REG_PROBE) 1175 1176 If anything different is found, the function returns without 1177 changing PC and FRAME_SIZE. Otherwise, PC will point immediately 1178 after this sequence, and FRAME_SIZE will be updated. */ 1179 1180 /* lda REG_INDEX,NB_OF_ITERATIONS */ 1181 1182 insn = alpha_read_insn (gdbarch, cur_pc); 1183 if (INSN_OPCODE (insn) != lda_opcode) 1184 return; 1185 reg_index = MEM_RA (insn); 1186 nb_of_iterations = MEM_DISP (insn); 1187 1188 /* lda REG_PROBE,<immediate>(sp) */ 1189 1190 cur_pc += ALPHA_INSN_SIZE; 1191 insn = alpha_read_insn (gdbarch, cur_pc); 1192 if (INSN_OPCODE (insn) != lda_opcode 1193 || MEM_RB (insn) != ALPHA_SP_REGNUM) 1194 return; 1195 reg_probe = MEM_RA (insn); 1196 cur_frame_size -= MEM_DISP (insn); 1197 1198 /* stq zero,<immediate>(REG_PROBE) */ 1199 1200 cur_pc += ALPHA_INSN_SIZE; 1201 insn = alpha_read_insn (gdbarch, cur_pc); 1202 if (INSN_OPCODE (insn) != stq_opcode 1203 || MEM_RA (insn) != 0x1f 1204 || MEM_RB (insn) != reg_probe) 1205 return; 1206 1207 /* subq REG_INDEX,0x1,REG_INDEX */ 1208 1209 cur_pc += ALPHA_INSN_SIZE; 1210 insn = alpha_read_insn (gdbarch, cur_pc); 1211 if (INSN_OPCODE (insn) != subq_opcode 1212 || !OPR_HAS_IMMEDIATE (insn) 1213 || OPR_FUNCTION (insn) != subq_function 1214 || OPR_LIT(insn) != 1 1215 || OPR_RA (insn) != reg_index 1216 || OPR_RC (insn) != reg_index) 1217 return; 1218 1219 /* lda REG_PROBE,<immediate>(REG_PROBE) */ 1220 1221 cur_pc += ALPHA_INSN_SIZE; 1222 insn = alpha_read_insn (gdbarch, cur_pc); 1223 if (INSN_OPCODE (insn) != lda_opcode 1224 || MEM_RA (insn) != reg_probe 1225 || MEM_RB (insn) != reg_probe) 1226 return; 1227 cur_frame_size -= MEM_DISP (insn) * nb_of_iterations; 1228 1229 /* bne REG_INDEX, LOOP_START */ 1230 1231 cur_pc += ALPHA_INSN_SIZE; 1232 insn = alpha_read_insn (gdbarch, cur_pc); 1233 if (INSN_OPCODE (insn) != bne_opcode 1234 || MEM_RA (insn) != reg_index) 1235 return; 1236 1237 /* lda sp,<immediate>(REG_PROBE) */ 1238 1239 cur_pc += ALPHA_INSN_SIZE; 1240 insn = alpha_read_insn (gdbarch, cur_pc); 1241 if (INSN_OPCODE (insn) != lda_opcode 1242 || MEM_RA (insn) != ALPHA_SP_REGNUM 1243 || MEM_RB (insn) != reg_probe) 1244 return; 1245 cur_frame_size -= MEM_DISP (insn); 1246 1247 *pc = cur_pc; 1248 *frame_size = cur_frame_size; 1249 } 1250 1251 static struct alpha_heuristic_unwind_cache * 1252 alpha_heuristic_frame_unwind_cache (struct frame_info *this_frame, 1253 void **this_prologue_cache, 1254 CORE_ADDR start_pc) 1255 { 1256 struct gdbarch *gdbarch = get_frame_arch (this_frame); 1257 struct alpha_heuristic_unwind_cache *info; 1258 ULONGEST val; 1259 CORE_ADDR limit_pc, cur_pc; 1260 int frame_reg, frame_size, return_reg, reg; 1261 1262 if (*this_prologue_cache) 1263 return (struct alpha_heuristic_unwind_cache *) *this_prologue_cache; 1264 1265 info = FRAME_OBSTACK_ZALLOC (struct alpha_heuristic_unwind_cache); 1266 *this_prologue_cache = info; 1267 info->saved_regs = trad_frame_alloc_saved_regs (this_frame); 1268 1269 limit_pc = get_frame_pc (this_frame); 1270 if (start_pc == 0) 1271 start_pc = alpha_heuristic_proc_start (gdbarch, limit_pc); 1272 info->start_pc = start_pc; 1273 1274 frame_reg = ALPHA_SP_REGNUM; 1275 frame_size = 0; 1276 return_reg = -1; 1277 1278 /* If we've identified a likely place to start, do code scanning. */ 1279 if (start_pc != 0) 1280 { 1281 /* Limit the forward search to 50 instructions. */ 1282 if (start_pc + 200 < limit_pc) 1283 limit_pc = start_pc + 200; 1284 1285 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += ALPHA_INSN_SIZE) 1286 { 1287 unsigned int word = alpha_read_insn (gdbarch, cur_pc); 1288 1289 if ((word & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */ 1290 { 1291 if (word & 0x8000) 1292 { 1293 /* Consider only the first stack allocation instruction 1294 to contain the static size of the frame. */ 1295 if (frame_size == 0) 1296 frame_size = (-word) & 0xffff; 1297 } 1298 else 1299 { 1300 /* Exit loop if a positive stack adjustment is found, which 1301 usually means that the stack cleanup code in the function 1302 epilogue is reached. */ 1303 break; 1304 } 1305 } 1306 else if ((word & 0xfc1f0000) == 0xb41e0000) /* stq reg,n($sp) */ 1307 { 1308 reg = (word & 0x03e00000) >> 21; 1309 1310 /* Ignore this instruction if we have already encountered 1311 an instruction saving the same register earlier in the 1312 function code. The current instruction does not tell 1313 us where the original value upon function entry is saved. 1314 All it says is that the function we are scanning reused 1315 that register for some computation of its own, and is now 1316 saving its result. */ 1317 if (trad_frame_addr_p(info->saved_regs, reg)) 1318 continue; 1319 1320 if (reg == 31) 1321 continue; 1322 1323 /* Do not compute the address where the register was saved yet, 1324 because we don't know yet if the offset will need to be 1325 relative to $sp or $fp (we can not compute the address 1326 relative to $sp if $sp is updated during the execution of 1327 the current subroutine, for instance when doing some alloca). 1328 So just store the offset for the moment, and compute the 1329 address later when we know whether this frame has a frame 1330 pointer or not. */ 1331 /* Hack: temporarily add one, so that the offset is non-zero 1332 and we can tell which registers have save offsets below. */ 1333 info->saved_regs[reg].addr = (word & 0xffff) + 1; 1334 1335 /* Starting with OSF/1-3.2C, the system libraries are shipped 1336 without local symbols, but they still contain procedure 1337 descriptors without a symbol reference. GDB is currently 1338 unable to find these procedure descriptors and uses 1339 heuristic_proc_desc instead. 1340 As some low level compiler support routines (__div*, __add*) 1341 use a non-standard return address register, we have to 1342 add some heuristics to determine the return address register, 1343 or stepping over these routines will fail. 1344 Usually the return address register is the first register 1345 saved on the stack, but assembler optimization might 1346 rearrange the register saves. 1347 So we recognize only a few registers (t7, t9, ra) within 1348 the procedure prologue as valid return address registers. 1349 If we encounter a return instruction, we extract the 1350 return address register from it. 1351 1352 FIXME: Rewriting GDB to access the procedure descriptors, 1353 e.g. via the minimal symbol table, might obviate this 1354 hack. */ 1355 if (return_reg == -1 1356 && cur_pc < (start_pc + 80) 1357 && (reg == ALPHA_T7_REGNUM 1358 || reg == ALPHA_T9_REGNUM 1359 || reg == ALPHA_RA_REGNUM)) 1360 return_reg = reg; 1361 } 1362 else if ((word & 0xffe0ffff) == 0x6be08001) /* ret zero,reg,1 */ 1363 return_reg = (word >> 16) & 0x1f; 1364 else if (word == 0x47de040f) /* bis sp,sp,fp */ 1365 frame_reg = ALPHA_GCC_FP_REGNUM; 1366 else if (word == 0x47fe040f) /* bis zero,sp,fp */ 1367 frame_reg = ALPHA_GCC_FP_REGNUM; 1368 1369 alpha_heuristic_analyze_probing_loop (gdbarch, &cur_pc, &frame_size); 1370 } 1371 1372 /* If we haven't found a valid return address register yet, keep 1373 searching in the procedure prologue. */ 1374 if (return_reg == -1) 1375 { 1376 while (cur_pc < (limit_pc + 80) && cur_pc < (start_pc + 80)) 1377 { 1378 unsigned int word = alpha_read_insn (gdbarch, cur_pc); 1379 1380 if ((word & 0xfc1f0000) == 0xb41e0000) /* stq reg,n($sp) */ 1381 { 1382 reg = (word & 0x03e00000) >> 21; 1383 if (reg == ALPHA_T7_REGNUM 1384 || reg == ALPHA_T9_REGNUM 1385 || reg == ALPHA_RA_REGNUM) 1386 { 1387 return_reg = reg; 1388 break; 1389 } 1390 } 1391 else if ((word & 0xffe0ffff) == 0x6be08001) /* ret zero,reg,1 */ 1392 { 1393 return_reg = (word >> 16) & 0x1f; 1394 break; 1395 } 1396 1397 cur_pc += ALPHA_INSN_SIZE; 1398 } 1399 } 1400 } 1401 1402 /* Failing that, do default to the customary RA. */ 1403 if (return_reg == -1) 1404 return_reg = ALPHA_RA_REGNUM; 1405 info->return_reg = return_reg; 1406 1407 val = get_frame_register_unsigned (this_frame, frame_reg); 1408 info->vfp = val + frame_size; 1409 1410 /* Convert offsets to absolute addresses. See above about adding 1411 one to the offsets to make all detected offsets non-zero. */ 1412 for (reg = 0; reg < ALPHA_NUM_REGS; ++reg) 1413 if (trad_frame_addr_p(info->saved_regs, reg)) 1414 info->saved_regs[reg].addr += val - 1; 1415 1416 /* The stack pointer of the previous frame is computed by popping 1417 the current stack frame. */ 1418 if (!trad_frame_addr_p (info->saved_regs, ALPHA_SP_REGNUM)) 1419 trad_frame_set_value (info->saved_regs, ALPHA_SP_REGNUM, info->vfp); 1420 1421 return info; 1422 } 1423 1424 /* Given a GDB frame, determine the address of the calling function's 1425 frame. This will be used to create a new GDB frame struct. */ 1426 1427 static void 1428 alpha_heuristic_frame_this_id (struct frame_info *this_frame, 1429 void **this_prologue_cache, 1430 struct frame_id *this_id) 1431 { 1432 struct alpha_heuristic_unwind_cache *info 1433 = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0); 1434 1435 *this_id = frame_id_build (info->vfp, info->start_pc); 1436 } 1437 1438 /* Retrieve the value of REGNUM in FRAME. Don't give up! */ 1439 1440 static struct value * 1441 alpha_heuristic_frame_prev_register (struct frame_info *this_frame, 1442 void **this_prologue_cache, int regnum) 1443 { 1444 struct alpha_heuristic_unwind_cache *info 1445 = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0); 1446 1447 /* The PC of the previous frame is stored in the link register of 1448 the current frame. Frob regnum so that we pull the value from 1449 the correct place. */ 1450 if (regnum == ALPHA_PC_REGNUM) 1451 regnum = info->return_reg; 1452 1453 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum); 1454 } 1455 1456 static const struct frame_unwind alpha_heuristic_frame_unwind = { 1457 NORMAL_FRAME, 1458 default_frame_unwind_stop_reason, 1459 alpha_heuristic_frame_this_id, 1460 alpha_heuristic_frame_prev_register, 1461 NULL, 1462 default_frame_sniffer 1463 }; 1464 1465 static CORE_ADDR 1466 alpha_heuristic_frame_base_address (struct frame_info *this_frame, 1467 void **this_prologue_cache) 1468 { 1469 struct alpha_heuristic_unwind_cache *info 1470 = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0); 1471 1472 return info->vfp; 1473 } 1474 1475 static const struct frame_base alpha_heuristic_frame_base = { 1476 &alpha_heuristic_frame_unwind, 1477 alpha_heuristic_frame_base_address, 1478 alpha_heuristic_frame_base_address, 1479 alpha_heuristic_frame_base_address 1480 }; 1481 1482 /* Just like reinit_frame_cache, but with the right arguments to be 1483 callable as an sfunc. Used by the "set heuristic-fence-post" command. */ 1484 1485 static void 1486 reinit_frame_cache_sfunc (const char *args, 1487 int from_tty, struct cmd_list_element *c) 1488 { 1489 reinit_frame_cache (); 1490 } 1491 1492 1493 /* Assuming NEXT_FRAME->prev is a dummy, return the frame ID of that 1494 dummy frame. The frame ID's base needs to match the TOS value 1495 saved by save_dummy_frame_tos(), and the PC match the dummy frame's 1496 breakpoint. */ 1497 1498 static struct frame_id 1499 alpha_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame) 1500 { 1501 ULONGEST base; 1502 base = get_frame_register_unsigned (this_frame, ALPHA_SP_REGNUM); 1503 return frame_id_build (base, get_frame_pc (this_frame)); 1504 } 1505 1506 static CORE_ADDR 1507 alpha_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) 1508 { 1509 ULONGEST pc; 1510 pc = frame_unwind_register_unsigned (next_frame, ALPHA_PC_REGNUM); 1511 return pc; 1512 } 1513 1514 1515 /* Helper routines for alpha*-nat.c files to move register sets to and 1516 from core files. The UNIQUE pointer is allowed to be NULL, as most 1517 targets don't supply this value in their core files. */ 1518 1519 void 1520 alpha_supply_int_regs (struct regcache *regcache, int regno, 1521 const void *r0_r30, const void *pc, const void *unique) 1522 { 1523 const gdb_byte *regs = (const gdb_byte *) r0_r30; 1524 int i; 1525 1526 for (i = 0; i < 31; ++i) 1527 if (regno == i || regno == -1) 1528 regcache->raw_supply (i, regs + i * 8); 1529 1530 if (regno == ALPHA_ZERO_REGNUM || regno == -1) 1531 { 1532 const gdb_byte zero[8] = { 0 }; 1533 1534 regcache->raw_supply (ALPHA_ZERO_REGNUM, zero); 1535 } 1536 1537 if (regno == ALPHA_PC_REGNUM || regno == -1) 1538 regcache->raw_supply (ALPHA_PC_REGNUM, pc); 1539 1540 if (regno == ALPHA_UNIQUE_REGNUM || regno == -1) 1541 regcache->raw_supply (ALPHA_UNIQUE_REGNUM, unique); 1542 } 1543 1544 void 1545 alpha_fill_int_regs (const struct regcache *regcache, 1546 int regno, void *r0_r30, void *pc, void *unique) 1547 { 1548 gdb_byte *regs = (gdb_byte *) r0_r30; 1549 int i; 1550 1551 for (i = 0; i < 31; ++i) 1552 if (regno == i || regno == -1) 1553 regcache->raw_collect (i, regs + i * 8); 1554 1555 if (regno == ALPHA_PC_REGNUM || regno == -1) 1556 regcache->raw_collect (ALPHA_PC_REGNUM, pc); 1557 1558 if (unique && (regno == ALPHA_UNIQUE_REGNUM || regno == -1)) 1559 regcache->raw_collect (ALPHA_UNIQUE_REGNUM, unique); 1560 } 1561 1562 void 1563 alpha_supply_fp_regs (struct regcache *regcache, int regno, 1564 const void *f0_f30, const void *fpcr) 1565 { 1566 const gdb_byte *regs = (const gdb_byte *) f0_f30; 1567 int i; 1568 1569 for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; ++i) 1570 if (regno == i || regno == -1) 1571 regcache->raw_supply (i, regs + (i - ALPHA_FP0_REGNUM) * 8); 1572 1573 if (regno == ALPHA_FPCR_REGNUM || regno == -1) 1574 regcache->raw_supply (ALPHA_FPCR_REGNUM, fpcr); 1575 } 1576 1577 void 1578 alpha_fill_fp_regs (const struct regcache *regcache, 1579 int regno, void *f0_f30, void *fpcr) 1580 { 1581 gdb_byte *regs = (gdb_byte *) f0_f30; 1582 int i; 1583 1584 for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; ++i) 1585 if (regno == i || regno == -1) 1586 regcache->raw_collect (i, regs + (i - ALPHA_FP0_REGNUM) * 8); 1587 1588 if (regno == ALPHA_FPCR_REGNUM || regno == -1) 1589 regcache->raw_collect (ALPHA_FPCR_REGNUM, fpcr); 1590 } 1591 1592 1593 1594 /* Return nonzero if the G_floating register value in REG is equal to 1595 zero for FP control instructions. */ 1596 1597 static int 1598 fp_register_zero_p (LONGEST reg) 1599 { 1600 /* Check that all bits except the sign bit are zero. */ 1601 const LONGEST zero_mask = ((LONGEST) 1 << 63) ^ -1; 1602 1603 return ((reg & zero_mask) == 0); 1604 } 1605 1606 /* Return the value of the sign bit for the G_floating register 1607 value held in REG. */ 1608 1609 static int 1610 fp_register_sign_bit (LONGEST reg) 1611 { 1612 const LONGEST sign_mask = (LONGEST) 1 << 63; 1613 1614 return ((reg & sign_mask) != 0); 1615 } 1616 1617 /* alpha_software_single_step() is called just before we want to resume 1618 the inferior, if we want to single-step it but there is no hardware 1619 or kernel single-step support (NetBSD on Alpha, for example). We find 1620 the target of the coming instruction and breakpoint it. */ 1621 1622 static CORE_ADDR 1623 alpha_next_pc (struct regcache *regcache, CORE_ADDR pc) 1624 { 1625 struct gdbarch *gdbarch = regcache->arch (); 1626 unsigned int insn; 1627 unsigned int op; 1628 int regno; 1629 int offset; 1630 LONGEST rav; 1631 1632 insn = alpha_read_insn (gdbarch, pc); 1633 1634 /* Opcode is top 6 bits. */ 1635 op = (insn >> 26) & 0x3f; 1636 1637 if (op == 0x1a) 1638 { 1639 /* Jump format: target PC is: 1640 RB & ~3 */ 1641 return (regcache_raw_get_unsigned (regcache, (insn >> 16) & 0x1f) & ~3); 1642 } 1643 1644 if ((op & 0x30) == 0x30) 1645 { 1646 /* Branch format: target PC is: 1647 (new PC) + (4 * sext(displacement)) */ 1648 if (op == 0x30 /* BR */ 1649 || op == 0x34) /* BSR */ 1650 { 1651 branch_taken: 1652 offset = (insn & 0x001fffff); 1653 if (offset & 0x00100000) 1654 offset |= 0xffe00000; 1655 offset *= ALPHA_INSN_SIZE; 1656 return (pc + ALPHA_INSN_SIZE + offset); 1657 } 1658 1659 /* Need to determine if branch is taken; read RA. */ 1660 regno = (insn >> 21) & 0x1f; 1661 switch (op) 1662 { 1663 case 0x31: /* FBEQ */ 1664 case 0x36: /* FBGE */ 1665 case 0x37: /* FBGT */ 1666 case 0x33: /* FBLE */ 1667 case 0x32: /* FBLT */ 1668 case 0x35: /* FBNE */ 1669 regno += gdbarch_fp0_regnum (gdbarch); 1670 } 1671 1672 rav = regcache_raw_get_signed (regcache, regno); 1673 1674 switch (op) 1675 { 1676 case 0x38: /* BLBC */ 1677 if ((rav & 1) == 0) 1678 goto branch_taken; 1679 break; 1680 case 0x3c: /* BLBS */ 1681 if (rav & 1) 1682 goto branch_taken; 1683 break; 1684 case 0x39: /* BEQ */ 1685 if (rav == 0) 1686 goto branch_taken; 1687 break; 1688 case 0x3d: /* BNE */ 1689 if (rav != 0) 1690 goto branch_taken; 1691 break; 1692 case 0x3a: /* BLT */ 1693 if (rav < 0) 1694 goto branch_taken; 1695 break; 1696 case 0x3b: /* BLE */ 1697 if (rav <= 0) 1698 goto branch_taken; 1699 break; 1700 case 0x3f: /* BGT */ 1701 if (rav > 0) 1702 goto branch_taken; 1703 break; 1704 case 0x3e: /* BGE */ 1705 if (rav >= 0) 1706 goto branch_taken; 1707 break; 1708 1709 /* Floating point branches. */ 1710 1711 case 0x31: /* FBEQ */ 1712 if (fp_register_zero_p (rav)) 1713 goto branch_taken; 1714 break; 1715 case 0x36: /* FBGE */ 1716 if (fp_register_sign_bit (rav) == 0 || fp_register_zero_p (rav)) 1717 goto branch_taken; 1718 break; 1719 case 0x37: /* FBGT */ 1720 if (fp_register_sign_bit (rav) == 0 && ! fp_register_zero_p (rav)) 1721 goto branch_taken; 1722 break; 1723 case 0x33: /* FBLE */ 1724 if (fp_register_sign_bit (rav) == 1 || fp_register_zero_p (rav)) 1725 goto branch_taken; 1726 break; 1727 case 0x32: /* FBLT */ 1728 if (fp_register_sign_bit (rav) == 1 && ! fp_register_zero_p (rav)) 1729 goto branch_taken; 1730 break; 1731 case 0x35: /* FBNE */ 1732 if (! fp_register_zero_p (rav)) 1733 goto branch_taken; 1734 break; 1735 } 1736 } 1737 1738 /* Not a branch or branch not taken; target PC is: 1739 pc + 4 */ 1740 return (pc + ALPHA_INSN_SIZE); 1741 } 1742 1743 std::vector<CORE_ADDR> 1744 alpha_software_single_step (struct regcache *regcache) 1745 { 1746 struct gdbarch *gdbarch = regcache->arch (); 1747 1748 CORE_ADDR pc = regcache_read_pc (regcache); 1749 1750 std::vector<CORE_ADDR> next_pcs 1751 = alpha_deal_with_atomic_sequence (gdbarch, pc); 1752 if (!next_pcs.empty ()) 1753 return next_pcs; 1754 1755 CORE_ADDR next_pc = alpha_next_pc (regcache, pc); 1756 return {next_pc}; 1757 } 1758 1759 1760 /* Initialize the current architecture based on INFO. If possible, re-use an 1761 architecture from ARCHES, which is a list of architectures already created 1762 during this debugging session. 1763 1764 Called e.g. at program startup, when reading a core file, and when reading 1765 a binary file. */ 1766 1767 static struct gdbarch * 1768 alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) 1769 { 1770 struct gdbarch_tdep *tdep; 1771 struct gdbarch *gdbarch; 1772 1773 /* Find a candidate among extant architectures. */ 1774 arches = gdbarch_list_lookup_by_info (arches, &info); 1775 if (arches != NULL) 1776 return arches->gdbarch; 1777 1778 tdep = XCNEW (struct gdbarch_tdep); 1779 gdbarch = gdbarch_alloc (&info, tdep); 1780 1781 /* Lowest text address. This is used by heuristic_proc_start() 1782 to decide when to stop looking. */ 1783 tdep->vm_min_address = (CORE_ADDR) 0x120000000LL; 1784 1785 tdep->dynamic_sigtramp_offset = NULL; 1786 tdep->sigcontext_addr = NULL; 1787 tdep->sc_pc_offset = 2 * 8; 1788 tdep->sc_regs_offset = 4 * 8; 1789 tdep->sc_fpregs_offset = tdep->sc_regs_offset + 32 * 8 + 8; 1790 1791 tdep->jb_pc = -1; /* longjmp support not enabled by default. */ 1792 1793 tdep->return_in_memory = alpha_return_in_memory_always; 1794 1795 /* Type sizes */ 1796 set_gdbarch_short_bit (gdbarch, 16); 1797 set_gdbarch_int_bit (gdbarch, 32); 1798 set_gdbarch_long_bit (gdbarch, 64); 1799 set_gdbarch_long_long_bit (gdbarch, 64); 1800 set_gdbarch_wchar_bit (gdbarch, 64); 1801 set_gdbarch_wchar_signed (gdbarch, 0); 1802 set_gdbarch_float_bit (gdbarch, 32); 1803 set_gdbarch_double_bit (gdbarch, 64); 1804 set_gdbarch_long_double_bit (gdbarch, 64); 1805 set_gdbarch_ptr_bit (gdbarch, 64); 1806 1807 /* Register info */ 1808 set_gdbarch_num_regs (gdbarch, ALPHA_NUM_REGS); 1809 set_gdbarch_sp_regnum (gdbarch, ALPHA_SP_REGNUM); 1810 set_gdbarch_pc_regnum (gdbarch, ALPHA_PC_REGNUM); 1811 set_gdbarch_fp0_regnum (gdbarch, ALPHA_FP0_REGNUM); 1812 1813 set_gdbarch_register_name (gdbarch, alpha_register_name); 1814 set_gdbarch_register_type (gdbarch, alpha_register_type); 1815 1816 set_gdbarch_cannot_fetch_register (gdbarch, alpha_cannot_fetch_register); 1817 set_gdbarch_cannot_store_register (gdbarch, alpha_cannot_store_register); 1818 1819 set_gdbarch_convert_register_p (gdbarch, alpha_convert_register_p); 1820 set_gdbarch_register_to_value (gdbarch, alpha_register_to_value); 1821 set_gdbarch_value_to_register (gdbarch, alpha_value_to_register); 1822 1823 set_gdbarch_register_reggroup_p (gdbarch, alpha_register_reggroup_p); 1824 1825 /* Prologue heuristics. */ 1826 set_gdbarch_skip_prologue (gdbarch, alpha_skip_prologue); 1827 1828 /* Entrypoint heuristics. */ 1829 set_gdbarch_skip_entrypoint (gdbarch, alpha_skip_entrypoint); 1830 1831 /* Call info. */ 1832 1833 set_gdbarch_return_value (gdbarch, alpha_return_value); 1834 1835 /* Settings for calling functions in the inferior. */ 1836 set_gdbarch_push_dummy_call (gdbarch, alpha_push_dummy_call); 1837 1838 /* Methods for saving / extracting a dummy frame's ID. */ 1839 set_gdbarch_dummy_id (gdbarch, alpha_dummy_id); 1840 1841 /* Return the unwound PC value. */ 1842 set_gdbarch_unwind_pc (gdbarch, alpha_unwind_pc); 1843 1844 set_gdbarch_inner_than (gdbarch, core_addr_lessthan); 1845 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); 1846 1847 set_gdbarch_breakpoint_kind_from_pc (gdbarch, 1848 alpha_breakpoint::kind_from_pc); 1849 set_gdbarch_sw_breakpoint_from_kind (gdbarch, 1850 alpha_breakpoint::bp_from_kind); 1851 set_gdbarch_decr_pc_after_break (gdbarch, ALPHA_INSN_SIZE); 1852 set_gdbarch_cannot_step_breakpoint (gdbarch, 1); 1853 1854 /* Handles single stepping of atomic sequences. */ 1855 set_gdbarch_software_single_step (gdbarch, alpha_software_single_step); 1856 1857 /* Hook in ABI-specific overrides, if they have been registered. */ 1858 gdbarch_init_osabi (info, gdbarch); 1859 1860 /* Now that we have tuned the configuration, set a few final things 1861 based on what the OS ABI has told us. */ 1862 1863 if (tdep->jb_pc >= 0) 1864 set_gdbarch_get_longjmp_target (gdbarch, alpha_get_longjmp_target); 1865 1866 frame_unwind_append_unwinder (gdbarch, &alpha_sigtramp_frame_unwind); 1867 frame_unwind_append_unwinder (gdbarch, &alpha_heuristic_frame_unwind); 1868 1869 frame_base_set_default (gdbarch, &alpha_heuristic_frame_base); 1870 1871 return gdbarch; 1872 } 1873 1874 void 1875 alpha_dwarf2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) 1876 { 1877 dwarf2_append_unwinders (gdbarch); 1878 frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer); 1879 } 1880 1881 void 1882 _initialize_alpha_tdep (void) 1883 { 1884 1885 gdbarch_register (bfd_arch_alpha, alpha_gdbarch_init, NULL); 1886 1887 /* Let the user set the fence post for heuristic_proc_start. */ 1888 1889 /* We really would like to have both "0" and "unlimited" work, but 1890 command.c doesn't deal with that. So make it a var_zinteger 1891 because the user can always use "999999" or some such for unlimited. */ 1892 /* We need to throw away the frame cache when we set this, since it 1893 might change our ability to get backtraces. */ 1894 add_setshow_zinteger_cmd ("heuristic-fence-post", class_support, 1895 &heuristic_fence_post, _("\ 1896 Set the distance searched for the start of a function."), _("\ 1897 Show the distance searched for the start of a function."), _("\ 1898 If you are debugging a stripped executable, GDB needs to search through the\n\ 1899 program for the start of a function. This command sets the distance of the\n\ 1900 search. The only need to set it is when debugging a stripped executable."), 1901 reinit_frame_cache_sfunc, 1902 NULL, /* FIXME: i18n: The distance searched for 1903 the start of a function is \"%d\". */ 1904 &setlist, &showlist); 1905 } 1906