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