1 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger. 2 Copyright 1993, 1994, 1995, 1996 Free Software Foundation, Inc. 3 4 This file is part of GDB. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 19 20 #include "defs.h" 21 #include "frame.h" 22 #include "inferior.h" 23 #include "symtab.h" 24 #include "value.h" 25 #include "gdbcmd.h" 26 #include "gdbcore.h" 27 #include "dis-asm.h" 28 #include "symfile.h" 29 #include "objfiles.h" 30 #include "gdb_string.h" 31 32 /* FIXME: Some of this code should perhaps be merged with mips-tdep.c. */ 33 34 /* FIXME: Put this declaration in frame.h. */ 35 extern struct obstack frame_cache_obstack; 36 37 38 /* Forward declarations. */ 39 40 static alpha_extra_func_info_t push_sigtramp_desc PARAMS ((CORE_ADDR low_addr)); 41 42 static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int)); 43 44 static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR)); 45 46 static alpha_extra_func_info_t heuristic_proc_desc PARAMS ((CORE_ADDR, 47 CORE_ADDR, 48 struct frame_info *)); 49 50 static alpha_extra_func_info_t find_proc_desc PARAMS ((CORE_ADDR, 51 struct frame_info *)); 52 53 #if 0 54 static int alpha_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR)); 55 #endif 56 57 static void reinit_frame_cache_sfunc PARAMS ((char *, int, 58 struct cmd_list_element *)); 59 60 static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc, 61 alpha_extra_func_info_t proc_desc)); 62 63 static int alpha_in_prologue PARAMS ((CORE_ADDR pc, 64 alpha_extra_func_info_t proc_desc)); 65 66 /* Heuristic_proc_start may hunt through the text section for a long 67 time across a 2400 baud serial line. Allows the user to limit this 68 search. */ 69 static unsigned int heuristic_fence_post = 0; 70 71 /* Layout of a stack frame on the alpha: 72 73 | | 74 pdr members: | 7th ... nth arg, | 75 | `pushed' by caller. | 76 | | 77 ----------------|-------------------------------|<-- old_sp == vfp 78 ^ ^ ^ ^ | | 79 | | | | | | 80 | |localoff | Copies of 1st .. 6th | 81 | | | | | argument if necessary. | 82 | | | v | | 83 | | | --- |-------------------------------|<-- FRAME_LOCALS_ADDRESS 84 | | | | | 85 | | | | Locals and temporaries. | 86 | | | | | 87 | | | |-------------------------------| 88 | | | | | 89 |-fregoffset | Saved float registers. | 90 | | | | F9 | 91 | | | | . | 92 | | | | . | 93 | | | | F2 | 94 | | v | | 95 | | -------|-------------------------------| 96 | | | | 97 | | | Saved registers. | 98 | | | S6 | 99 |-regoffset | . | 100 | | | . | 101 | | | S0 | 102 | | | pdr.pcreg | 103 | v | | 104 | ----------|-------------------------------| 105 | | | 106 frameoffset | Argument build area, gets | 107 | | 7th ... nth arg for any | 108 | | called procedure. | 109 v | | 110 -------------|-------------------------------|<-- sp 111 | | 112 */ 113 114 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */ 115 #define PROC_HIGH_ADDR(proc) ((proc)->pdr.iline) /* upper address bound */ 116 #define PROC_DUMMY_FRAME(proc) ((proc)->pdr.iopt) /* frame for CALL_DUMMY */ 117 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset) 118 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg) 119 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask) 120 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask) 121 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset) 122 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset) 123 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg) 124 #define PROC_LOCALOFF(proc) ((proc)->pdr.localoff) 125 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym) 126 #define _PROC_MAGIC_ 0x0F0F0F0F 127 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_) 128 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_) 129 130 struct linked_proc_info 131 { 132 struct alpha_extra_func_info info; 133 struct linked_proc_info *next; 134 } *linked_proc_desc_table = NULL; 135 136 137 /* Under Linux, signal handler invocations can be identified by the 138 designated code sequence that is used to return from a signal 139 handler. In particular, the return address of a signal handler 140 points to the following sequence (the first instruction is quadword 141 aligned): 142 143 bis $30,$30,$16 144 addq $31,0x67,$0 145 call_pal callsys 146 147 Each instruction has a unique encoding, so we simply attempt to 148 match the instruction the pc is pointing to with any of the above 149 instructions. If there is a hit, we know the offset to the start 150 of the designated sequence and can then check whether we really are 151 executing in a designated sequence. If not, -1 is returned, 152 otherwise the offset from the start of the desingated sequence is 153 returned. 154 155 There is a slight chance of false hits: code could jump into the 156 middle of the designated sequence, in which case there is no 157 guarantee that we are in the middle of a sigreturn syscall. Don't 158 think this will be a problem in praxis, though. 159 */ 160 161 long 162 alpha_linux_sigtramp_offset (CORE_ADDR pc) 163 { 164 unsigned int i[3], w; 165 long off; 166 167 if (read_memory_nobpt(pc, (char *) &w, 4) != 0) 168 return -1; 169 170 off = -1; 171 switch (w) 172 { 173 case 0x47de0410: off = 0; break; /* bis $30,$30,$16 */ 174 case 0x43ecf400: off = 4; break; /* addq $31,0x67,$0 */ 175 case 0x00000083: off = 8; break; /* call_pal callsys */ 176 default: return -1; 177 } 178 pc -= off; 179 if (pc & 0x7) 180 { 181 /* designated sequence is not quadword aligned */ 182 return -1; 183 } 184 185 if (read_memory_nobpt(pc, (char *) i, sizeof(i)) != 0) 186 return -1; 187 188 if (i[0] == 0x47de0410 && i[1] == 0x43ecf400 && i[2] == 0x00000083) 189 return off; 190 191 return -1; 192 } 193 194 195 /* Under OSF/1, the __sigtramp routine is frameless and has a frame 196 size of zero, but we are able to backtrace through it. */ 197 CORE_ADDR 198 alpha_osf_skip_sigtramp_frame (frame, pc) 199 struct frame_info *frame; 200 CORE_ADDR pc; 201 { 202 char *name; 203 find_pc_partial_function (pc, &name, (CORE_ADDR *)NULL, (CORE_ADDR *)NULL); 204 if (IN_SIGTRAMP (pc, name)) 205 return frame->frame; 206 else 207 return 0; 208 } 209 210 211 /* Dynamically create a signal-handler caller procedure descriptor for 212 the signal-handler return code starting at address LOW_ADDR. The 213 descriptor is added to the linked_proc_desc_table. */ 214 215 static alpha_extra_func_info_t 216 push_sigtramp_desc (low_addr) 217 CORE_ADDR low_addr; 218 { 219 struct linked_proc_info *link; 220 alpha_extra_func_info_t proc_desc; 221 222 link = (struct linked_proc_info *) 223 xmalloc (sizeof (struct linked_proc_info)); 224 link->next = linked_proc_desc_table; 225 linked_proc_desc_table = link; 226 227 proc_desc = &link->info; 228 229 proc_desc->numargs = 0; 230 PROC_LOW_ADDR (proc_desc) = low_addr; 231 PROC_HIGH_ADDR (proc_desc) = low_addr + 3 * 4; 232 PROC_DUMMY_FRAME (proc_desc) = 0; 233 PROC_FRAME_OFFSET (proc_desc) = 0x298; /* sizeof(struct sigcontext_struct) */ 234 PROC_FRAME_REG (proc_desc) = SP_REGNUM; 235 PROC_REG_MASK (proc_desc) = 0xffff; 236 PROC_FREG_MASK (proc_desc) = 0xffff; 237 PROC_PC_REG (proc_desc) = 26; 238 PROC_LOCALOFF (proc_desc) = 0; 239 SET_PROC_DESC_IS_DYN_SIGTRAMP (proc_desc); 240 return (proc_desc); 241 } 242 243 244 /* Guaranteed to set frame->saved_regs to some values (it never leaves it 245 NULL). */ 246 247 void 248 alpha_find_saved_regs (frame) 249 struct frame_info *frame; 250 { 251 int ireg; 252 CORE_ADDR reg_position; 253 unsigned long mask; 254 alpha_extra_func_info_t proc_desc; 255 int returnreg; 256 257 frame->saved_regs = (struct frame_saved_regs *) 258 obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs)); 259 memset (frame->saved_regs, 0, sizeof (struct frame_saved_regs)); 260 261 /* If it is the frame for __sigtramp, the saved registers are located 262 in a sigcontext structure somewhere on the stack. __sigtramp 263 passes a pointer to the sigcontext structure on the stack. 264 If the stack layout for __sigtramp changes, or if sigcontext offsets 265 change, we might have to update this code. */ 266 #ifndef SIGFRAME_PC_OFF 267 #define SIGFRAME_PC_OFF (2 * 8) 268 #define SIGFRAME_REGSAVE_OFF (4 * 8) 269 #define SIGFRAME_FPREGSAVE_OFF (SIGFRAME_REGSAVE_OFF + 32 * 8 + 8) 270 #endif 271 if (frame->signal_handler_caller) 272 { 273 CORE_ADDR sigcontext_addr; 274 275 sigcontext_addr = SIGCONTEXT_ADDR (frame); 276 for (ireg = 0; ireg < 32; ireg++) 277 { 278 reg_position = sigcontext_addr + SIGFRAME_REGSAVE_OFF + ireg * 8; 279 frame->saved_regs->regs[ireg] = reg_position; 280 } 281 for (ireg = 0; ireg < 32; ireg++) 282 { 283 reg_position = sigcontext_addr + SIGFRAME_FPREGSAVE_OFF + ireg * 8; 284 frame->saved_regs->regs[FP0_REGNUM + ireg] = reg_position; 285 } 286 frame->saved_regs->regs[PC_REGNUM] = sigcontext_addr + SIGFRAME_PC_OFF; 287 return; 288 } 289 290 proc_desc = frame->proc_desc; 291 if (proc_desc == NULL) 292 /* I'm not sure how/whether this can happen. Normally when we can't 293 find a proc_desc, we "synthesize" one using heuristic_proc_desc 294 and set the saved_regs right away. */ 295 return; 296 297 /* Fill in the offsets for the registers which gen_mask says 298 were saved. */ 299 300 reg_position = frame->frame + PROC_REG_OFFSET (proc_desc); 301 mask = PROC_REG_MASK (proc_desc); 302 303 returnreg = PROC_PC_REG (proc_desc); 304 305 /* Note that RA is always saved first, regardless of its actual 306 register number. */ 307 if (mask & (1 << returnreg)) 308 { 309 frame->saved_regs->regs[returnreg] = reg_position; 310 reg_position += 8; 311 mask &= ~(1 << returnreg); /* Clear bit for RA so we 312 don't save again later. */ 313 } 314 315 for (ireg = 0; ireg <= 31 ; ++ireg) 316 if (mask & (1 << ireg)) 317 { 318 frame->saved_regs->regs[ireg] = reg_position; 319 reg_position += 8; 320 } 321 322 /* Fill in the offsets for the registers which float_mask says 323 were saved. */ 324 325 reg_position = frame->frame + PROC_FREG_OFFSET (proc_desc); 326 mask = PROC_FREG_MASK (proc_desc); 327 328 for (ireg = 0; ireg <= 31 ; ++ireg) 329 if (mask & (1 << ireg)) 330 { 331 frame->saved_regs->regs[FP0_REGNUM+ireg] = reg_position; 332 reg_position += 8; 333 } 334 335 frame->saved_regs->regs[PC_REGNUM] = frame->saved_regs->regs[returnreg]; 336 } 337 338 static CORE_ADDR 339 read_next_frame_reg(fi, regno) 340 struct frame_info *fi; 341 int regno; 342 { 343 for (; fi; fi = fi->next) 344 { 345 /* We have to get the saved sp from the sigcontext 346 if it is a signal handler frame. */ 347 if (regno == SP_REGNUM && !fi->signal_handler_caller) 348 return fi->frame; 349 else 350 { 351 if (fi->saved_regs == NULL) 352 alpha_find_saved_regs (fi); 353 if (fi->saved_regs->regs[regno]) 354 return read_memory_integer(fi->saved_regs->regs[regno], 8); 355 } 356 } 357 return read_register(regno); 358 } 359 360 CORE_ADDR 361 alpha_frame_saved_pc(frame) 362 struct frame_info *frame; 363 { 364 alpha_extra_func_info_t proc_desc = frame->proc_desc; 365 /* We have to get the saved pc from the sigcontext 366 if it is a signal handler frame. */ 367 int pcreg = frame->signal_handler_caller ? PC_REGNUM : frame->pc_reg; 368 369 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc)) 370 return read_memory_integer(frame->frame - 8, 8); 371 372 return read_next_frame_reg(frame, pcreg); 373 } 374 375 CORE_ADDR 376 alpha_saved_pc_after_call (frame) 377 struct frame_info *frame; 378 { 379 CORE_ADDR pc = frame->pc; 380 CORE_ADDR tmp; 381 alpha_extra_func_info_t proc_desc; 382 int pcreg; 383 384 /* Skip over shared library trampoline if necessary. */ 385 tmp = SKIP_TRAMPOLINE_CODE (pc); 386 if (tmp != 0) 387 pc = tmp; 388 389 proc_desc = find_proc_desc (pc, frame->next); 390 pcreg = proc_desc ? PROC_PC_REG (proc_desc) : RA_REGNUM; 391 392 if (frame->signal_handler_caller) 393 return alpha_frame_saved_pc (frame); 394 else 395 return read_register (pcreg); 396 } 397 398 399 static struct alpha_extra_func_info temp_proc_desc; 400 static struct frame_saved_regs temp_saved_regs; 401 402 /* This fencepost looks highly suspicious to me. Removing it also 403 seems suspicious as it could affect remote debugging across serial 404 lines. */ 405 406 static CORE_ADDR 407 heuristic_proc_start(pc) 408 CORE_ADDR pc; 409 { 410 CORE_ADDR start_pc = pc; 411 CORE_ADDR fence = start_pc - heuristic_fence_post; 412 413 if (start_pc == 0) return 0; 414 415 if (heuristic_fence_post == UINT_MAX 416 || fence < VM_MIN_ADDRESS) 417 fence = VM_MIN_ADDRESS; 418 419 /* search back for previous return */ 420 for (start_pc -= 4; ; start_pc -= 4) 421 if (start_pc < fence) 422 { 423 /* It's not clear to me why we reach this point when 424 stop_soon_quietly, but with this test, at least we 425 don't print out warnings for every child forked (eg, on 426 decstation). 22apr93 rich@cygnus.com. */ 427 if (!stop_soon_quietly) 428 { 429 static int blurb_printed = 0; 430 431 if (fence == VM_MIN_ADDRESS) 432 warning("Hit beginning of text section without finding"); 433 else 434 warning("Hit heuristic-fence-post without finding"); 435 436 warning("enclosing function for address 0x%lx", pc); 437 if (!blurb_printed) 438 { 439 printf_filtered ("\ 440 This warning occurs if you are debugging a function without any symbols\n\ 441 (for example, in a stripped executable). In that case, you may wish to\n\ 442 increase the size of the search with the `set heuristic-fence-post' command.\n\ 443 \n\ 444 Otherwise, you told GDB there was a function where there isn't one, or\n\ 445 (more likely) you have encountered a bug in GDB.\n"); 446 blurb_printed = 1; 447 } 448 } 449 450 return 0; 451 } 452 else if (ABOUT_TO_RETURN(start_pc)) 453 break; 454 455 start_pc += 4; /* skip return */ 456 return start_pc; 457 } 458 459 static alpha_extra_func_info_t 460 heuristic_proc_desc(start_pc, limit_pc, next_frame) 461 CORE_ADDR start_pc, limit_pc; 462 struct frame_info *next_frame; 463 { 464 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM); 465 CORE_ADDR cur_pc; 466 int frame_size; 467 int has_frame_reg = 0; 468 unsigned long reg_mask = 0; 469 int pcreg = -1; 470 471 if (start_pc == 0) 472 return NULL; 473 memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc)); 474 memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs)); 475 PROC_LOW_ADDR (&temp_proc_desc) = start_pc; 476 477 if (start_pc + 200 < limit_pc) 478 limit_pc = start_pc + 200; 479 frame_size = 0; 480 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += 4) 481 { 482 char buf[4]; 483 unsigned long word; 484 int status; 485 486 status = read_memory_nobpt (cur_pc, buf, 4); 487 if (status) 488 memory_error (status, cur_pc); 489 word = extract_unsigned_integer (buf, 4); 490 491 if ((word & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */ 492 { 493 if (word & 0x8000) 494 frame_size += (-word) & 0xffff; 495 else 496 /* Exit loop if a positive stack adjustment is found, which 497 usually means that the stack cleanup code in the function 498 epilogue is reached. */ 499 break; 500 } 501 else if ((word & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */ 502 && (word & 0xffff0000) != 0xb7fe0000) /* reg != $zero */ 503 { 504 int reg = (word & 0x03e00000) >> 21; 505 reg_mask |= 1 << reg; 506 temp_saved_regs.regs[reg] = sp + (short)word; 507 508 /* Starting with OSF/1-3.2C, the system libraries are shipped 509 without local symbols, but they still contain procedure 510 descriptors without a symbol reference. GDB is currently 511 unable to find these procedure descriptors and uses 512 heuristic_proc_desc instead. 513 As some low level compiler support routines (__div*, __add*) 514 use a non-standard return address register, we have to 515 add some heuristics to determine the return address register, 516 or stepping over these routines will fail. 517 Usually the return address register is the first register 518 saved on the stack, but assembler optimization might 519 rearrange the register saves. 520 So we recognize only a few registers (t7, t9, ra) within 521 the procedure prologue as valid return address registers. 522 523 FIXME: Rewriting GDB to access the procedure descriptors, 524 e.g. via the minimal symbol table, might obviate this hack. */ 525 if (pcreg == -1 526 && cur_pc < (start_pc + 20) 527 && (reg == T7_REGNUM || reg == T9_REGNUM || reg == RA_REGNUM)) 528 pcreg = reg; 529 } 530 else if (word == 0x47de040f) /* bis sp,sp fp */ 531 has_frame_reg = 1; 532 } 533 if (pcreg == -1) 534 { 535 /* If we haven't found a valid return address register yet, 536 keep searching in the procedure prologue. */ 537 while (cur_pc < (limit_pc + 20) && cur_pc < (start_pc + 20)) 538 { 539 char buf[4]; 540 unsigned long word; 541 int status; 542 543 status = read_memory_nobpt (cur_pc, buf, 4); 544 if (status) 545 memory_error (status, cur_pc); 546 cur_pc += 4; 547 word = extract_unsigned_integer (buf, 4); 548 549 if ((word & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */ 550 && (word & 0xffff0000) != 0xb7fe0000) /* reg != $zero */ 551 { 552 int reg = (word & 0x03e00000) >> 21; 553 if (reg == T7_REGNUM || reg == T9_REGNUM || reg == RA_REGNUM) 554 { 555 pcreg = reg; 556 break; 557 } 558 } 559 } 560 } 561 562 if (has_frame_reg) 563 PROC_FRAME_REG(&temp_proc_desc) = GCC_FP_REGNUM; 564 else 565 PROC_FRAME_REG(&temp_proc_desc) = SP_REGNUM; 566 PROC_FRAME_OFFSET(&temp_proc_desc) = frame_size; 567 PROC_REG_MASK(&temp_proc_desc) = reg_mask; 568 PROC_PC_REG(&temp_proc_desc) = (pcreg == -1) ? RA_REGNUM : pcreg; 569 PROC_LOCALOFF(&temp_proc_desc) = 0; /* XXX - bogus */ 570 return &temp_proc_desc; 571 } 572 573 /* This returns the PC of the first inst after the prologue. If we can't 574 find the prologue, then return 0. */ 575 576 static CORE_ADDR 577 after_prologue (pc, proc_desc) 578 CORE_ADDR pc; 579 alpha_extra_func_info_t proc_desc; 580 { 581 struct symtab_and_line sal; 582 CORE_ADDR func_addr, func_end; 583 584 if (!proc_desc) 585 proc_desc = find_proc_desc (pc, NULL); 586 587 if (proc_desc) 588 { 589 if (PROC_DESC_IS_DYN_SIGTRAMP (proc_desc)) 590 return PROC_LOW_ADDR (proc_desc); /* "prologue" is in kernel */ 591 592 /* If function is frameless, then we need to do it the hard way. I 593 strongly suspect that frameless always means prologueless... */ 594 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM 595 && PROC_FRAME_OFFSET (proc_desc) == 0) 596 return 0; 597 } 598 599 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end)) 600 return 0; /* Unknown */ 601 602 sal = find_pc_line (func_addr, 0); 603 604 if (sal.end < func_end) 605 return sal.end; 606 607 /* The line after the prologue is after the end of the function. In this 608 case, tell the caller to find the prologue the hard way. */ 609 610 return 0; 611 } 612 613 /* Return non-zero if we *might* be in a function prologue. Return zero if we 614 are definitively *not* in a function prologue. */ 615 616 static int 617 alpha_in_prologue (pc, proc_desc) 618 CORE_ADDR pc; 619 alpha_extra_func_info_t proc_desc; 620 { 621 CORE_ADDR after_prologue_pc; 622 623 after_prologue_pc = after_prologue (pc, proc_desc); 624 625 if (after_prologue_pc == 0 626 || pc < after_prologue_pc) 627 return 1; 628 else 629 return 0; 630 } 631 632 static alpha_extra_func_info_t 633 find_proc_desc (pc, next_frame) 634 CORE_ADDR pc; 635 struct frame_info *next_frame; 636 { 637 alpha_extra_func_info_t proc_desc; 638 struct block *b; 639 struct symbol *sym; 640 CORE_ADDR startaddr; 641 642 /* Try to get the proc_desc from the linked call dummy proc_descs 643 if the pc is in the call dummy. 644 This is hairy. In the case of nested dummy calls we have to find the 645 right proc_desc, but we might not yet know the frame for the dummy 646 as it will be contained in the proc_desc we are searching for. 647 So we have to find the proc_desc whose frame is closest to the current 648 stack pointer. */ 649 650 if (PC_IN_CALL_DUMMY (pc, 0, 0)) 651 { 652 struct linked_proc_info *link; 653 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM); 654 alpha_extra_func_info_t found_proc_desc = NULL; 655 long min_distance = LONG_MAX; 656 657 for (link = linked_proc_desc_table; link; link = link->next) 658 { 659 long distance = (CORE_ADDR) PROC_DUMMY_FRAME (&link->info) - sp; 660 if (distance > 0 && distance < min_distance) 661 { 662 min_distance = distance; 663 found_proc_desc = &link->info; 664 } 665 } 666 if (found_proc_desc != NULL) 667 return found_proc_desc; 668 } 669 670 b = block_for_pc(pc); 671 672 find_pc_partial_function (pc, NULL, &startaddr, NULL); 673 if (b == NULL) 674 sym = NULL; 675 else 676 { 677 if (startaddr > BLOCK_START (b)) 678 /* This is the "pathological" case referred to in a comment in 679 print_frame_info. It might be better to move this check into 680 symbol reading. */ 681 sym = NULL; 682 else 683 sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, 684 0, NULL); 685 } 686 687 /* If we never found a PDR for this function in symbol reading, then 688 examine prologues to find the information. */ 689 if (sym && ((mips_extra_func_info_t) SYMBOL_VALUE (sym))->pdr.framereg == -1) 690 sym = NULL; 691 692 if (sym) 693 { 694 /* IF this is the topmost frame AND 695 * (this proc does not have debugging information OR 696 * the PC is in the procedure prologue) 697 * THEN create a "heuristic" proc_desc (by analyzing 698 * the actual code) to replace the "official" proc_desc. 699 */ 700 proc_desc = (alpha_extra_func_info_t)SYMBOL_VALUE(sym); 701 if (next_frame == NULL) 702 { 703 if (PROC_DESC_IS_DUMMY (proc_desc) || alpha_in_prologue (pc, proc_desc)) 704 { 705 alpha_extra_func_info_t found_heuristic = 706 heuristic_proc_desc (PROC_LOW_ADDR (proc_desc), 707 pc, next_frame); 708 if (found_heuristic) 709 { 710 PROC_LOCALOFF (found_heuristic) = 711 PROC_LOCALOFF (proc_desc); 712 PROC_PC_REG (found_heuristic) = PROC_PC_REG (proc_desc); 713 proc_desc = found_heuristic; 714 } 715 } 716 } 717 } 718 else 719 { 720 long offset; 721 722 /* Is linked_proc_desc_table really necessary? It only seems to be used 723 by procedure call dummys. However, the procedures being called ought 724 to have their own proc_descs, and even if they don't, 725 heuristic_proc_desc knows how to create them! */ 726 727 register struct linked_proc_info *link; 728 for (link = linked_proc_desc_table; link; link = link->next) 729 if (PROC_LOW_ADDR(&link->info) <= pc 730 && PROC_HIGH_ADDR(&link->info) > pc) 731 return &link->info; 732 733 /* If PC is inside a dynamically generated sigtramp handler, 734 create and push a procedure descriptor for that code: */ 735 offset = DYNAMIC_SIGTRAMP_OFFSET (pc); 736 if (offset >= 0) 737 return push_sigtramp_desc (pc - offset); 738 739 /* If heuristic_fence_post is non-zero, determine the procedure 740 start address by examining the instructions. 741 This allows us to find the start address of static functions which 742 have no symbolic information, as startaddr would have been set to 743 the preceding global function start address by the 744 find_pc_partial_function call above. */ 745 if (startaddr == 0 || heuristic_fence_post != 0) 746 startaddr = heuristic_proc_start (pc); 747 748 proc_desc = 749 heuristic_proc_desc (startaddr, pc, next_frame); 750 } 751 return proc_desc; 752 } 753 754 alpha_extra_func_info_t cached_proc_desc; 755 756 CORE_ADDR 757 alpha_frame_chain(frame) 758 struct frame_info *frame; 759 { 760 alpha_extra_func_info_t proc_desc; 761 CORE_ADDR saved_pc = FRAME_SAVED_PC(frame); 762 763 if (saved_pc == 0 || inside_entry_file (saved_pc)) 764 return 0; 765 766 proc_desc = find_proc_desc(saved_pc, frame); 767 if (!proc_desc) 768 return 0; 769 770 cached_proc_desc = proc_desc; 771 772 /* Fetch the frame pointer for a dummy frame from the procedure 773 descriptor. */ 774 if (PROC_DESC_IS_DUMMY(proc_desc)) 775 return (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc); 776 777 /* If no frame pointer and frame size is zero, we must be at end 778 of stack (or otherwise hosed). If we don't check frame size, 779 we loop forever if we see a zero size frame. */ 780 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM 781 && PROC_FRAME_OFFSET (proc_desc) == 0 782 /* The previous frame from a sigtramp frame might be frameless 783 and have frame size zero. */ 784 && !frame->signal_handler_caller) 785 return FRAME_PAST_SIGTRAMP_FRAME (frame, saved_pc); 786 else 787 return read_next_frame_reg(frame, PROC_FRAME_REG(proc_desc)) 788 + PROC_FRAME_OFFSET(proc_desc); 789 } 790 791 void 792 init_extra_frame_info (frame) 793 struct frame_info *frame; 794 { 795 /* Use proc_desc calculated in frame_chain */ 796 alpha_extra_func_info_t proc_desc = 797 frame->next ? cached_proc_desc : find_proc_desc(frame->pc, frame->next); 798 799 frame->saved_regs = NULL; 800 frame->localoff = 0; 801 frame->pc_reg = RA_REGNUM; 802 frame->proc_desc = proc_desc == &temp_proc_desc ? 0 : proc_desc; 803 if (proc_desc) 804 { 805 /* Get the locals offset and the saved pc register from the 806 procedure descriptor, they are valid even if we are in the 807 middle of the prologue. */ 808 frame->localoff = PROC_LOCALOFF(proc_desc); 809 frame->pc_reg = PROC_PC_REG(proc_desc); 810 811 /* Fixup frame-pointer - only needed for top frame */ 812 813 /* Fetch the frame pointer for a dummy frame from the procedure 814 descriptor. */ 815 if (PROC_DESC_IS_DUMMY(proc_desc)) 816 frame->frame = (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc); 817 818 /* This may not be quite right, if proc has a real frame register. 819 Get the value of the frame relative sp, procedure might have been 820 interrupted by a signal at it's very start. */ 821 else if (frame->pc == PROC_LOW_ADDR (proc_desc) 822 && !PROC_DESC_IS_DYN_SIGTRAMP (proc_desc)) 823 frame->frame = read_next_frame_reg (frame->next, SP_REGNUM); 824 else 825 frame->frame = read_next_frame_reg (frame->next, PROC_FRAME_REG (proc_desc)) 826 + PROC_FRAME_OFFSET (proc_desc); 827 828 if (proc_desc == &temp_proc_desc) 829 { 830 char *name; 831 832 /* Do not set the saved registers for a sigtramp frame, 833 alpha_find_saved_registers will do that for us. 834 We can't use frame->signal_handler_caller, it is not yet set. */ 835 find_pc_partial_function (frame->pc, &name, 836 (CORE_ADDR *)NULL,(CORE_ADDR *)NULL); 837 if (!IN_SIGTRAMP (frame->pc, name)) 838 { 839 frame->saved_regs = (struct frame_saved_regs*) 840 obstack_alloc (&frame_cache_obstack, 841 sizeof (struct frame_saved_regs)); 842 *frame->saved_regs = temp_saved_regs; 843 frame->saved_regs->regs[PC_REGNUM] 844 = frame->saved_regs->regs[RA_REGNUM]; 845 } 846 } 847 } 848 } 849 850 /* ALPHA stack frames are almost impenetrable. When execution stops, 851 we basically have to look at symbol information for the function 852 that we stopped in, which tells us *which* register (if any) is 853 the base of the frame pointer, and what offset from that register 854 the frame itself is at. 855 856 This presents a problem when trying to examine a stack in memory 857 (that isn't executing at the moment), using the "frame" command. We 858 don't have a PC, nor do we have any registers except SP. 859 860 This routine takes two arguments, SP and PC, and tries to make the 861 cached frames look as if these two arguments defined a frame on the 862 cache. This allows the rest of info frame to extract the important 863 arguments without difficulty. */ 864 865 struct frame_info * 866 setup_arbitrary_frame (argc, argv) 867 int argc; 868 CORE_ADDR *argv; 869 { 870 if (argc != 2) 871 error ("ALPHA frame specifications require two arguments: sp and pc"); 872 873 return create_new_frame (argv[0], argv[1]); 874 } 875 876 /* The alpha passes the first six arguments in the registers, the rest on 877 the stack. The register arguments are eventually transferred to the 878 argument transfer area immediately below the stack by the called function 879 anyway. So we `push' at least six arguments on the stack, `reload' the 880 argument registers and then adjust the stack pointer to point past the 881 sixth argument. This algorithm simplifies the passing of a large struct 882 which extends from the registers to the stack. 883 If the called function is returning a structure, the address of the 884 structure to be returned is passed as a hidden first argument. */ 885 886 CORE_ADDR 887 alpha_push_arguments (nargs, args, sp, struct_return, struct_addr) 888 int nargs; 889 value_ptr *args; 890 CORE_ADDR sp; 891 int struct_return; 892 CORE_ADDR struct_addr; 893 { 894 register i; 895 int accumulate_size = struct_return ? 8 : 0; 896 int arg_regs_size = ALPHA_NUM_ARG_REGS * 8; 897 struct alpha_arg { char *contents; int len; int offset; }; 898 struct alpha_arg *alpha_args = 899 (struct alpha_arg*)alloca (nargs * sizeof (struct alpha_arg)); 900 register struct alpha_arg *m_arg; 901 char raw_buffer[sizeof (CORE_ADDR)]; 902 int required_arg_regs; 903 904 for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++) 905 { 906 value_ptr arg = args[i]; 907 struct type *arg_type = check_typedef (VALUE_TYPE (arg)); 908 /* Cast argument to long if necessary as the compiler does it too. */ 909 switch (TYPE_CODE (arg_type)) 910 { 911 case TYPE_CODE_INT: 912 case TYPE_CODE_BOOL: 913 case TYPE_CODE_CHAR: 914 case TYPE_CODE_RANGE: 915 case TYPE_CODE_ENUM: 916 if (TYPE_LENGTH (arg_type) < TYPE_LENGTH (builtin_type_long)) 917 { 918 arg_type = builtin_type_long; 919 arg = value_cast (arg_type, arg); 920 } 921 break; 922 default: 923 break; 924 } 925 m_arg->len = TYPE_LENGTH (arg_type); 926 m_arg->offset = accumulate_size; 927 accumulate_size = (accumulate_size + m_arg->len + 7) & ~7; 928 m_arg->contents = VALUE_CONTENTS(arg); 929 } 930 931 /* Determine required argument register loads, loading an argument register 932 is expensive as it uses three ptrace calls. */ 933 required_arg_regs = accumulate_size / 8; 934 if (required_arg_regs > ALPHA_NUM_ARG_REGS) 935 required_arg_regs = ALPHA_NUM_ARG_REGS; 936 937 /* Make room for the arguments on the stack. */ 938 if (accumulate_size < arg_regs_size) 939 accumulate_size = arg_regs_size; 940 sp -= accumulate_size; 941 942 /* Keep sp aligned to a multiple of 16 as the compiler does it too. */ 943 sp &= ~15; 944 945 /* `Push' arguments on the stack. */ 946 for (i = nargs; m_arg--, --i >= 0; ) 947 write_memory(sp + m_arg->offset, m_arg->contents, m_arg->len); 948 if (struct_return) 949 { 950 store_address (raw_buffer, sizeof (CORE_ADDR), struct_addr); 951 write_memory (sp, raw_buffer, sizeof (CORE_ADDR)); 952 } 953 954 /* Load the argument registers. */ 955 for (i = 0; i < required_arg_regs; i++) 956 { 957 LONGEST val; 958 959 val = read_memory_integer (sp + i * 8, 8); 960 write_register (A0_REGNUM + i, val); 961 write_register (FPA0_REGNUM + i, val); 962 } 963 964 return sp + arg_regs_size; 965 } 966 967 void 968 alpha_push_dummy_frame() 969 { 970 int ireg; 971 struct linked_proc_info *link; 972 alpha_extra_func_info_t proc_desc; 973 CORE_ADDR sp = read_register (SP_REGNUM); 974 CORE_ADDR save_address; 975 char raw_buffer[MAX_REGISTER_RAW_SIZE]; 976 unsigned long mask; 977 978 link = (struct linked_proc_info *) xmalloc(sizeof (struct linked_proc_info)); 979 link->next = linked_proc_desc_table; 980 linked_proc_desc_table = link; 981 982 proc_desc = &link->info; 983 984 /* 985 * The registers we must save are all those not preserved across 986 * procedure calls. 987 * In addition, we must save the PC and RA. 988 * 989 * Dummy frame layout: 990 * (high memory) 991 * Saved PC 992 * Saved F30 993 * ... 994 * Saved F0 995 * Saved R29 996 * ... 997 * Saved R0 998 * Saved R26 (RA) 999 * Parameter build area 1000 * (low memory) 1001 */ 1002 1003 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<31. */ 1004 #define MASK(i,j) (((1L << ((j)+1)) - 1) ^ ((1L << (i)) - 1)) 1005 #define GEN_REG_SAVE_MASK (MASK(0,8) | MASK(16,29)) 1006 #define GEN_REG_SAVE_COUNT 24 1007 #define FLOAT_REG_SAVE_MASK (MASK(0,1) | MASK(10,30)) 1008 #define FLOAT_REG_SAVE_COUNT 23 1009 /* The special register is the PC as we have no bit for it in the save masks. 1010 alpha_frame_saved_pc knows where the pc is saved in a dummy frame. */ 1011 #define SPECIAL_REG_SAVE_COUNT 1 1012 1013 PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK; 1014 PROC_FREG_MASK(proc_desc) = FLOAT_REG_SAVE_MASK; 1015 /* PROC_REG_OFFSET is the offset from the dummy frame to the saved RA, 1016 but keep SP aligned to a multiple of 16. */ 1017 PROC_REG_OFFSET(proc_desc) = 1018 - ((8 * (SPECIAL_REG_SAVE_COUNT 1019 + GEN_REG_SAVE_COUNT 1020 + FLOAT_REG_SAVE_COUNT) 1021 + 15) & ~15); 1022 PROC_FREG_OFFSET(proc_desc) = 1023 PROC_REG_OFFSET(proc_desc) + 8 * GEN_REG_SAVE_COUNT; 1024 1025 /* Save general registers. 1026 The return address register is the first saved register, all other 1027 registers follow in ascending order. 1028 The PC is saved immediately below the SP. */ 1029 save_address = sp + PROC_REG_OFFSET(proc_desc); 1030 store_address (raw_buffer, 8, read_register (RA_REGNUM)); 1031 write_memory (save_address, raw_buffer, 8); 1032 save_address += 8; 1033 mask = PROC_REG_MASK(proc_desc) & 0xffffffffL; 1034 for (ireg = 0; mask; ireg++, mask >>= 1) 1035 if (mask & 1) 1036 { 1037 if (ireg == RA_REGNUM) 1038 continue; 1039 store_address (raw_buffer, 8, read_register (ireg)); 1040 write_memory (save_address, raw_buffer, 8); 1041 save_address += 8; 1042 } 1043 1044 store_address (raw_buffer, 8, read_register (PC_REGNUM)); 1045 write_memory (sp - 8, raw_buffer, 8); 1046 1047 /* Save floating point registers. */ 1048 save_address = sp + PROC_FREG_OFFSET(proc_desc); 1049 mask = PROC_FREG_MASK(proc_desc) & 0xffffffffL; 1050 for (ireg = 0; mask; ireg++, mask >>= 1) 1051 if (mask & 1) 1052 { 1053 store_address (raw_buffer, 8, read_register (ireg + FP0_REGNUM)); 1054 write_memory (save_address, raw_buffer, 8); 1055 save_address += 8; 1056 } 1057 1058 /* Set and save the frame address for the dummy. 1059 This is tricky. The only registers that are suitable for a frame save 1060 are those that are preserved across procedure calls (s0-s6). But if 1061 a read system call is interrupted and then a dummy call is made 1062 (see testsuite/gdb.t17/interrupt.exp) the dummy call hangs till the read 1063 is satisfied. Then it returns with the s0-s6 registers set to the values 1064 on entry to the read system call and our dummy frame pointer would be 1065 destroyed. So we save the dummy frame in the proc_desc and handle the 1066 retrieval of the frame pointer of a dummy specifically. The frame register 1067 is set to the virtual frame (pseudo) register, it's value will always 1068 be read as zero and will help us to catch any errors in the dummy frame 1069 retrieval code. */ 1070 PROC_DUMMY_FRAME(proc_desc) = sp; 1071 PROC_FRAME_REG(proc_desc) = FP_REGNUM; 1072 PROC_FRAME_OFFSET(proc_desc) = 0; 1073 sp += PROC_REG_OFFSET(proc_desc); 1074 write_register (SP_REGNUM, sp); 1075 1076 PROC_LOW_ADDR(proc_desc) = CALL_DUMMY_ADDRESS (); 1077 PROC_HIGH_ADDR(proc_desc) = PROC_LOW_ADDR(proc_desc) + 4; 1078 1079 SET_PROC_DESC_IS_DUMMY(proc_desc); 1080 PROC_PC_REG(proc_desc) = RA_REGNUM; 1081 } 1082 1083 void 1084 alpha_pop_frame() 1085 { 1086 register int regnum; 1087 struct frame_info *frame = get_current_frame (); 1088 CORE_ADDR new_sp = frame->frame; 1089 1090 alpha_extra_func_info_t proc_desc = frame->proc_desc; 1091 1092 write_register (PC_REGNUM, FRAME_SAVED_PC(frame)); 1093 if (frame->saved_regs == NULL) 1094 alpha_find_saved_regs (frame); 1095 if (proc_desc) 1096 { 1097 for (regnum = 32; --regnum >= 0; ) 1098 if (PROC_REG_MASK(proc_desc) & (1 << regnum)) 1099 write_register (regnum, 1100 read_memory_integer (frame->saved_regs->regs[regnum], 1101 8)); 1102 for (regnum = 32; --regnum >= 0; ) 1103 if (PROC_FREG_MASK(proc_desc) & (1 << regnum)) 1104 write_register (regnum + FP0_REGNUM, 1105 read_memory_integer (frame->saved_regs->regs[regnum + FP0_REGNUM], 8)); 1106 } 1107 write_register (SP_REGNUM, new_sp); 1108 flush_cached_frames (); 1109 1110 if (proc_desc && (PROC_DESC_IS_DUMMY(proc_desc) 1111 || PROC_DESC_IS_DYN_SIGTRAMP (proc_desc))) 1112 { 1113 struct linked_proc_info *pi_ptr, *prev_ptr; 1114 1115 for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL; 1116 pi_ptr != NULL; 1117 prev_ptr = pi_ptr, pi_ptr = pi_ptr->next) 1118 { 1119 if (&pi_ptr->info == proc_desc) 1120 break; 1121 } 1122 1123 if (pi_ptr == NULL) 1124 error ("Can't locate dummy extra frame info\n"); 1125 1126 if (prev_ptr != NULL) 1127 prev_ptr->next = pi_ptr->next; 1128 else 1129 linked_proc_desc_table = pi_ptr->next; 1130 1131 free (pi_ptr); 1132 } 1133 } 1134 1135 /* To skip prologues, I use this predicate. Returns either PC itself 1136 if the code at PC does not look like a function prologue; otherwise 1137 returns an address that (if we're lucky) follows the prologue. If 1138 LENIENT, then we must skip everything which is involved in setting 1139 up the frame (it's OK to skip more, just so long as we don't skip 1140 anything which might clobber the registers which are being saved. 1141 Currently we must not skip more on the alpha, but we might the lenient 1142 stuff some day. */ 1143 1144 CORE_ADDR 1145 alpha_skip_prologue (pc, lenient) 1146 CORE_ADDR pc; 1147 int lenient; 1148 { 1149 unsigned long inst; 1150 int offset; 1151 CORE_ADDR post_prologue_pc; 1152 char buf[4]; 1153 1154 #ifdef GDB_TARGET_HAS_SHARED_LIBS 1155 /* Silently return the unaltered pc upon memory errors. 1156 This could happen on OSF/1 if decode_line_1 tries to skip the 1157 prologue for quickstarted shared library functions when the 1158 shared library is not yet mapped in. 1159 Reading target memory is slow over serial lines, so we perform 1160 this check only if the target has shared libraries. */ 1161 if (target_read_memory (pc, buf, 4)) 1162 return pc; 1163 #endif 1164 1165 /* See if we can determine the end of the prologue via the symbol table. 1166 If so, then return either PC, or the PC after the prologue, whichever 1167 is greater. */ 1168 1169 post_prologue_pc = after_prologue (pc, NULL); 1170 1171 if (post_prologue_pc != 0) 1172 return max (pc, post_prologue_pc); 1173 1174 /* Can't determine prologue from the symbol table, need to examine 1175 instructions. */ 1176 1177 /* Skip the typical prologue instructions. These are the stack adjustment 1178 instruction and the instructions that save registers on the stack 1179 or in the gcc frame. */ 1180 for (offset = 0; offset < 100; offset += 4) 1181 { 1182 int status; 1183 1184 status = read_memory_nobpt (pc + offset, buf, 4); 1185 if (status) 1186 memory_error (status, pc + offset); 1187 inst = extract_unsigned_integer (buf, 4); 1188 1189 /* The alpha has no delay slots. But let's keep the lenient stuff, 1190 we might need it for something else in the future. */ 1191 if (lenient && 0) 1192 continue; 1193 1194 if ((inst & 0xffff0000) == 0x27bb0000) /* ldah $gp,n($t12) */ 1195 continue; 1196 if ((inst & 0xffff0000) == 0x23bd0000) /* lda $gp,n($gp) */ 1197 continue; 1198 if ((inst & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */ 1199 continue; 1200 else if ((inst & 0xfc1f0000) == 0xb41e0000 1201 && (inst & 0xffff0000) != 0xb7fe0000) 1202 continue; /* stq reg,n($sp) */ 1203 /* reg != $zero */ 1204 else if ((inst & 0xfc1f0000) == 0x9c1e0000 1205 && (inst & 0xffff0000) != 0x9ffe0000) 1206 continue; /* stt reg,n($sp) */ 1207 /* reg != $zero */ 1208 else if (inst == 0x47de040f) /* bis sp,sp,fp */ 1209 continue; 1210 else 1211 break; 1212 } 1213 return pc + offset; 1214 } 1215 1216 #if 0 1217 /* Is address PC in the prologue (loosely defined) for function at 1218 STARTADDR? */ 1219 1220 static int 1221 alpha_in_lenient_prologue (startaddr, pc) 1222 CORE_ADDR startaddr; 1223 CORE_ADDR pc; 1224 { 1225 CORE_ADDR end_prologue = alpha_skip_prologue (startaddr, 1); 1226 return pc >= startaddr && pc < end_prologue; 1227 } 1228 #endif 1229 1230 /* The alpha needs a conversion between register and memory format if 1231 the register is a floating point register and 1232 memory format is float, as the register format must be double 1233 or 1234 memory format is an integer with 4 bytes or less, as the representation 1235 of integers in floating point registers is different. */ 1236 void 1237 alpha_register_convert_to_virtual (regnum, valtype, raw_buffer, virtual_buffer) 1238 int regnum; 1239 struct type *valtype; 1240 char *raw_buffer; 1241 char *virtual_buffer; 1242 { 1243 if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum)) 1244 { 1245 memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (regnum)); 1246 return; 1247 } 1248 1249 if (TYPE_CODE (valtype) == TYPE_CODE_FLT) 1250 { 1251 double d = extract_floating (raw_buffer, REGISTER_RAW_SIZE (regnum)); 1252 store_floating (virtual_buffer, TYPE_LENGTH (valtype), d); 1253 } 1254 else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4) 1255 { 1256 unsigned LONGEST l; 1257 l = extract_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum)); 1258 l = ((l >> 32) & 0xc0000000) | ((l >> 29) & 0x3fffffff); 1259 store_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype), l); 1260 } 1261 else 1262 error ("Cannot retrieve value from floating point register"); 1263 } 1264 1265 void 1266 alpha_register_convert_to_raw (valtype, regnum, virtual_buffer, raw_buffer) 1267 struct type *valtype; 1268 int regnum; 1269 char *virtual_buffer; 1270 char *raw_buffer; 1271 { 1272 if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum)) 1273 { 1274 memcpy (raw_buffer, virtual_buffer, REGISTER_RAW_SIZE (regnum)); 1275 return; 1276 } 1277 1278 if (TYPE_CODE (valtype) == TYPE_CODE_FLT) 1279 { 1280 double d = extract_floating (virtual_buffer, TYPE_LENGTH (valtype)); 1281 store_floating (raw_buffer, REGISTER_RAW_SIZE (regnum), d); 1282 } 1283 else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4) 1284 { 1285 unsigned LONGEST l; 1286 if (TYPE_UNSIGNED (valtype)) 1287 l = extract_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype)); 1288 else 1289 l = extract_signed_integer (virtual_buffer, TYPE_LENGTH (valtype)); 1290 l = ((l & 0xc0000000) << 32) | ((l & 0x3fffffff) << 29); 1291 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), l); 1292 } 1293 else 1294 error ("Cannot store value in floating point register"); 1295 } 1296 1297 /* Given a return value in `regbuf' with a type `valtype', 1298 extract and copy its value into `valbuf'. */ 1299 1300 void 1301 alpha_extract_return_value (valtype, regbuf, valbuf) 1302 struct type *valtype; 1303 char regbuf[REGISTER_BYTES]; 1304 char *valbuf; 1305 { 1306 if (TYPE_CODE (valtype) == TYPE_CODE_FLT) 1307 alpha_register_convert_to_virtual (FP0_REGNUM, valtype, 1308 regbuf + REGISTER_BYTE (FP0_REGNUM), 1309 valbuf); 1310 else 1311 memcpy (valbuf, regbuf + REGISTER_BYTE (V0_REGNUM), TYPE_LENGTH (valtype)); 1312 } 1313 1314 /* Given a return value in `regbuf' with a type `valtype', 1315 write its value into the appropriate register. */ 1316 1317 void 1318 alpha_store_return_value (valtype, valbuf) 1319 struct type *valtype; 1320 char *valbuf; 1321 { 1322 char raw_buffer[MAX_REGISTER_RAW_SIZE]; 1323 int regnum = V0_REGNUM; 1324 int length = TYPE_LENGTH (valtype); 1325 1326 if (TYPE_CODE (valtype) == TYPE_CODE_FLT) 1327 { 1328 regnum = FP0_REGNUM; 1329 length = REGISTER_RAW_SIZE (regnum); 1330 alpha_register_convert_to_raw (valtype, regnum, valbuf, raw_buffer); 1331 } 1332 else 1333 memcpy (raw_buffer, valbuf, length); 1334 1335 write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, length); 1336 } 1337 1338 /* Just like reinit_frame_cache, but with the right arguments to be 1339 callable as an sfunc. */ 1340 1341 static void 1342 reinit_frame_cache_sfunc (args, from_tty, c) 1343 char *args; 1344 int from_tty; 1345 struct cmd_list_element *c; 1346 { 1347 reinit_frame_cache (); 1348 } 1349 1350 /* This is the definition of CALL_DUMMY_ADDRESS. It's a heuristic that is used 1351 to find a convenient place in the text segment to stick a breakpoint to 1352 detect the completion of a target function call (ala call_function_by_hand). 1353 */ 1354 1355 CORE_ADDR 1356 alpha_call_dummy_address () 1357 { 1358 CORE_ADDR entry; 1359 struct minimal_symbol *sym; 1360 1361 entry = entry_point_address (); 1362 1363 if (entry != 0) 1364 return entry; 1365 1366 sym = lookup_minimal_symbol ("_Prelude", NULL, symfile_objfile); 1367 1368 if (!sym || MSYMBOL_TYPE (sym) != mst_text) 1369 return 0; 1370 else 1371 return SYMBOL_VALUE_ADDRESS (sym) + 4; 1372 } 1373 1374 void 1375 _initialize_alpha_tdep () 1376 { 1377 struct cmd_list_element *c; 1378 1379 tm_print_insn = print_insn_alpha; 1380 1381 /* Let the user set the fence post for heuristic_proc_start. */ 1382 1383 /* We really would like to have both "0" and "unlimited" work, but 1384 command.c doesn't deal with that. So make it a var_zinteger 1385 because the user can always use "999999" or some such for unlimited. */ 1386 c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger, 1387 (char *) &heuristic_fence_post, 1388 "\ 1389 Set the distance searched for the start of a function.\n\ 1390 If you are debugging a stripped executable, GDB needs to search through the\n\ 1391 program for the start of a function. This command sets the distance of the\n\ 1392 search. The only need to set it is when debugging a stripped executable.", 1393 &setlist); 1394 /* We need to throw away the frame cache when we set this, since it 1395 might change our ability to get backtraces. */ 1396 c->function.sfunc = reinit_frame_cache_sfunc; 1397 add_show_from_set (c, &showlist); 1398 } 1399 1400 #ifdef NO_SINGLE_STEP 1401 /* 1402 * If NO_SINGLE_STEP defined, we're simulating single step with 1403 * breakpoints, either because the kernel doesn't provide it or 1404 * Just Because We Want To. 1405 */ 1406 1407 /* 1408 * Branch types. Only two types are distinguished: 1409 * conditional and unconditional. 1410 * 1411 * We don't bother to set breakpoint after an unconditional 1412 * branch, as it's (supposedly 8-) unconditional! 1413 */ 1414 1415 typedef enum { 1416 Error, not_branch, 1417 branch_conditional, branch_unconditional, 1418 } branch_type; 1419 1420 /* 1421 * Information about the various breakpoints we may have set: 1422 * (1) their addresses, (2) whether or not we actually set them, 1423 * and (3) the previous contents of the memory. 1424 */ 1425 1426 static CORE_ADDR next_pc, target; 1427 static int brk_next_pc, brk_target; 1428 typedef char binsn_quantum[BREAKPOINT_MAX]; 1429 static binsn_quantum brkmem_next_pc, brkmem_target; 1430 1431 /* 1432 * Non-zero if we just simulated a single-step ptrace call. This is 1433 * needed because we cannot remove the breakpoints in the inferior 1434 * process until after the `wait' in `wait_for_inferior'. 1435 */ 1436 1437 int one_stepped; 1438 1439 /* 1440 * single_step() is called just before we want to resume the inferior, 1441 * if we want to single-step it but there is no hardware or kernel 1442 * single-step support (as in NetBSD, on the Alpha). We find all the 1443 * possible targets of the coming instruction and breakpoint them. 1444 * 1445 * single_step() is also called just after the inferior stops. IF we 1446 * had set up a simulated single-step, we undo our damage. 1447 */ 1448 1449 void 1450 single_step(ignore) 1451 enum target_signal ignore; /* pid, but we don't need it. */ 1452 { 1453 branch_type br, isbranch(); 1454 CORE_ADDR pc; 1455 unsigned int pc_instruction; 1456 1457 pc = read_register(PC_REGNUM); 1458 1459 if (one_stepped) { 1460 /* 1461 * The inferior has stopped. Adjust the PC to 1462 * deal with the breakpoint we just took and 1463 * clean up the breakpoints we set. 1464 */ 1465 1466 write_pc(pc - DECR_PC_AFTER_BREAK); 1467 1468 /* If no breakpoints set, we have a problem. */ 1469 if (!brk_next_pc && !brk_target) 1470 abort(); 1471 1472 if (brk_next_pc) 1473 target_remove_breakpoint(next_pc, brkmem_next_pc); 1474 1475 if (brk_target) 1476 target_remove_breakpoint(target, brkmem_target); 1477 1478 one_stepped = 0; 1479 return; 1480 } 1481 1482 pc_instruction = read_memory_integer(pc, sizeof(pc_instruction)); 1483 br = isbranch(pc_instruction, pc, &target); 1484 1485 switch (br) { 1486 default: 1487 case Error: 1488 abort(); 1489 1490 case not_branch: 1491 next_pc = pc + 4; 1492 brk_next_pc = 1; 1493 brk_target = 0; 1494 break; 1495 1496 case branch_unconditional: 1497 brk_next_pc = 0; 1498 brk_target = 1; 1499 break; 1500 1501 case branch_conditional: 1502 next_pc = pc + 4; 1503 brk_next_pc = brk_target = 1; 1504 break; 1505 } 1506 1507 if (brk_next_pc) 1508 target_insert_breakpoint(next_pc, brkmem_next_pc); 1509 if (brk_target) 1510 target_insert_breakpoint(target, brkmem_target); 1511 1512 /* Let it go. */ 1513 one_stepped = 1; 1514 } 1515 1516 /* 1517 * Check instruction at ADDR to see if it is a branch or other 1518 * instruction whose target isn't pc+4. All other instructions 1519 * will go to NPC or will trap. Set *TARGET if we find a 1520 * candidate branch. 1521 */ 1522 1523 branch_type 1524 isbranch(instruction, addr, target) 1525 unsigned int instruction; 1526 CORE_ADDR addr, *target; 1527 { 1528 branch_type val; 1529 long offset; /* Must be signed for sign-extend. */ 1530 union { 1531 unsigned int code; /* raw bits */ 1532 struct { /* common bits */ 1533 unsigned int unk:26; 1534 unsigned int op:6; 1535 } common; 1536 struct { /* memory format */ 1537 int disp:16; 1538 unsigned int rb:5; 1539 unsigned int ra:5; 1540 unsigned int op:6; 1541 } m; 1542 struct { /* branch format */ 1543 int disp:21; 1544 unsigned int ra:5; 1545 unsigned int op:6; 1546 } b; 1547 } insn; 1548 1549 insn.code = instruction; 1550 switch (insn.common.op) { 1551 /* 1552 * memory-format branches. all unconditional. 1553 */ 1554 case 0x1a: /* JMP/RET/JSR/JSR_C; memory format */ 1555 val = branch_unconditional; 1556 1557 /* 1558 * Target PC is (contents of instruction's "RB") & ~3. 1559 */ 1560 *target = read_register(insn.m.rb) & ~3; 1561 break; 1562 1563 /* 1564 * branch-format branches. conditional unless otherwise noted. 1565 */ 1566 case 0x30: /* BR; unconditional*/ 1567 case 0x31: /* FBEQ */ 1568 case 0x32: /* FBLT */ 1569 case 0x33: /* FBLE */ 1570 case 0x34: /* BSR; unconditional */ 1571 case 0x35: /* FBNE */ 1572 case 0x36: /* FBGE */ 1573 case 0x37: /* FBGT */ 1574 case 0x38: /* BLBC */ 1575 case 0x39: /* BEQ */ 1576 case 0x3a: /* BLT */ 1577 case 0x3b: /* BLE */ 1578 case 0x3c: /* BLBS */ 1579 case 0x3d: /* BNE */ 1580 case 0x3e: /* BGE */ 1581 case 0x3f: /* BGT */ 1582 1583 if (insn.b.op == 0x30 || insn.b.op == 0x34) 1584 val = branch_unconditional; 1585 else 1586 val = branch_conditional; 1587 1588 /* 1589 * Branch format is easy. 1590 * Target PC is (new PC) + (4 * sign-ext(displacement)). 1591 */ 1592 offset = 4 + (4 * insn.b.disp); 1593 *target = addr + offset; 1594 break; 1595 1596 1597 default: 1598 val = not_branch; 1599 break; 1600 } 1601 1602 return val; 1603 } 1604 #endif 1605