1 /* Target-dependent code for GDB, the GNU debugger. 2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996 3 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 2 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, write to the Free Software 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20 21 #include "defs.h" 22 #include "frame.h" 23 #include "inferior.h" 24 #include "symtab.h" 25 #include "target.h" 26 #include "gdbcore.h" 27 #include "symfile.h" 28 #include "objfiles.h" 29 #include "xcoffsolib.h" 30 31 extern struct obstack frame_cache_obstack; 32 33 extern int errno; 34 35 /* Nonzero if we just simulated a single step break. */ 36 int one_stepped; 37 38 /* Breakpoint shadows for the single step instructions will be kept here. */ 39 40 static struct sstep_breaks { 41 /* Address, or 0 if this is not in use. */ 42 CORE_ADDR address; 43 /* Shadow contents. */ 44 char data[4]; 45 } stepBreaks[2]; 46 47 /* Static function prototypes */ 48 49 static CORE_ADDR find_toc_address PARAMS ((CORE_ADDR pc)); 50 51 static CORE_ADDR branch_dest PARAMS ((int opcode, int instr, CORE_ADDR pc, 52 CORE_ADDR safety)); 53 54 static void frame_get_cache_fsr PARAMS ((struct frame_info *fi, 55 struct rs6000_framedata *fdatap)); 56 57 static void pop_dummy_frame PARAMS ((void)); 58 59 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */ 60 61 static CORE_ADDR 62 branch_dest (opcode, instr, pc, safety) 63 int opcode; 64 int instr; 65 CORE_ADDR pc; 66 CORE_ADDR safety; 67 { 68 CORE_ADDR dest; 69 int immediate; 70 int absolute; 71 int ext_op; 72 73 absolute = (int) ((instr >> 1) & 1); 74 75 switch (opcode) { 76 case 18 : 77 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */ 78 if (absolute) 79 dest = immediate; 80 else 81 dest = pc + immediate; 82 break; 83 84 case 16 : 85 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */ 86 if (absolute) 87 dest = immediate; 88 else 89 dest = pc + immediate; 90 break; 91 92 case 19 : 93 ext_op = (instr>>1) & 0x3ff; 94 95 if (ext_op == 16) /* br conditional register */ 96 dest = read_register (LR_REGNUM) & ~3; 97 98 else if (ext_op == 528) /* br cond to count reg */ 99 { 100 dest = read_register (CTR_REGNUM) & ~3; 101 102 /* If we are about to execute a system call, dest is something 103 like 0x22fc or 0x3b00. Upon completion the system call 104 will return to the address in the link register. */ 105 if (dest < TEXT_SEGMENT_BASE) 106 dest = read_register (LR_REGNUM) & ~3; 107 } 108 else return -1; 109 break; 110 111 default: return -1; 112 } 113 return (dest < TEXT_SEGMENT_BASE) ? safety : dest; 114 } 115 116 117 118 /* AIX does not support PT_STEP. Simulate it. */ 119 120 void 121 single_step (signal) 122 enum target_signal signal; 123 { 124 #define INSNLEN(OPCODE) 4 125 126 static char le_breakp[] = LITTLE_BREAKPOINT; 127 static char be_breakp[] = BIG_BREAKPOINT; 128 char *breakp = TARGET_BYTE_ORDER == BIG_ENDIAN ? be_breakp : le_breakp; 129 int ii, insn; 130 CORE_ADDR loc; 131 CORE_ADDR breaks[2]; 132 int opcode; 133 134 if (!one_stepped) { 135 loc = read_pc (); 136 137 insn = read_memory_integer (loc, 4); 138 139 breaks[0] = loc + INSNLEN(insn); 140 opcode = insn >> 26; 141 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]); 142 143 /* Don't put two breakpoints on the same address. */ 144 if (breaks[1] == breaks[0]) 145 breaks[1] = -1; 146 147 stepBreaks[1].address = 0; 148 149 for (ii=0; ii < 2; ++ii) { 150 151 /* ignore invalid breakpoint. */ 152 if ( breaks[ii] == -1) 153 continue; 154 155 read_memory (breaks[ii], stepBreaks[ii].data, 4); 156 157 write_memory (breaks[ii], breakp, 4); 158 stepBreaks[ii].address = breaks[ii]; 159 } 160 161 one_stepped = 1; 162 } else { 163 164 /* remove step breakpoints. */ 165 for (ii=0; ii < 2; ++ii) 166 if (stepBreaks[ii].address != 0) 167 write_memory 168 (stepBreaks[ii].address, stepBreaks[ii].data, 4); 169 170 one_stepped = 0; 171 } 172 errno = 0; /* FIXME, don't ignore errors! */ 173 /* What errors? {read,write}_memory call error(). */ 174 } 175 176 177 /* return pc value after skipping a function prologue and also return 178 information about a function frame. 179 180 in struct rs6000_frameinfo fdata: 181 - frameless is TRUE, if function does not have a frame. 182 - nosavedpc is TRUE, if function does not save %pc value in its frame. 183 - offset is the number of bytes used in the frame to save registers. 184 - saved_gpr is the number of the first saved gpr. 185 - saved_fpr is the number of the first saved fpr. 186 - alloca_reg is the number of the register used for alloca() handling. 187 Otherwise -1. 188 - gpr_offset is the offset of the saved gprs 189 - fpr_offset is the offset of the saved fprs 190 - lr_offset is the offset of the saved lr 191 - cr_offset is the offset of the saved cr 192 */ 193 194 #define SIGNED_SHORT(x) \ 195 ((sizeof (short) == 2) \ 196 ? ((int)(short)(x)) \ 197 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000))) 198 199 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f) 200 201 CORE_ADDR 202 skip_prologue (pc, fdata) 203 CORE_ADDR pc; 204 struct rs6000_framedata *fdata; 205 { 206 CORE_ADDR orig_pc = pc; 207 char buf[4]; 208 unsigned long op; 209 long offset = 0; 210 int lr_reg = 0; 211 int cr_reg = 0; 212 int reg; 213 int framep = 0; 214 int minimal_toc_loaded = 0; 215 static struct rs6000_framedata zero_frame; 216 217 *fdata = zero_frame; 218 fdata->saved_gpr = -1; 219 fdata->saved_fpr = -1; 220 fdata->alloca_reg = -1; 221 fdata->frameless = 1; 222 fdata->nosavedpc = 1; 223 224 if (target_read_memory (pc, buf, 4)) 225 return pc; /* Can't access it -- assume no prologue. */ 226 227 /* Assume that subsequent fetches can fail with low probability. */ 228 pc -= 4; 229 for (;;) 230 { 231 pc += 4; 232 op = read_memory_integer (pc, 4); 233 234 if ((op & 0xfc1fffff) == 0x7c0802a6) { /* mflr Rx */ 235 lr_reg = (op & 0x03e00000) | 0x90010000; 236 continue; 237 238 } else if ((op & 0xfc1fffff) == 0x7c000026) { /* mfcr Rx */ 239 cr_reg = (op & 0x03e00000) | 0x90010000; 240 continue; 241 242 } else if ((op & 0xfc1f0000) == 0xd8010000) { /* stfd Rx,NUM(r1) */ 243 reg = GET_SRC_REG (op); 244 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg) { 245 fdata->saved_fpr = reg; 246 fdata->fpr_offset = SIGNED_SHORT (op) + offset; 247 } 248 continue; 249 250 } else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */ 251 ((op & 0xfc1f0000) == 0x90010000 && /* st rx,NUM(r1), rx >= r13 */ 252 (op & 0x03e00000) >= 0x01a00000)) { 253 254 reg = GET_SRC_REG (op); 255 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg) { 256 fdata->saved_gpr = reg; 257 fdata->gpr_offset = SIGNED_SHORT (op) + offset; 258 } 259 continue; 260 261 } else if ((op & 0xffff0000) == 0x3c000000) { /* addis 0,0,NUM, used for >= 32k frames */ 262 fdata->offset = (op & 0x0000ffff) << 16; 263 fdata->frameless = 0; 264 continue; 265 266 } else if ((op & 0xffff0000) == 0x60000000) { /* ori 0,0,NUM, 2nd half of >= 32k frames */ 267 fdata->offset |= (op & 0x0000ffff); 268 fdata->frameless = 0; 269 continue; 270 271 } else if ((op & 0xffff0000) == lr_reg) { /* st Rx,NUM(r1) where Rx == lr */ 272 fdata->lr_offset = SIGNED_SHORT (op) + offset; 273 fdata->nosavedpc = 0; 274 lr_reg = 0; 275 continue; 276 277 } else if ((op & 0xffff0000) == cr_reg) { /* st Rx,NUM(r1) where Rx == cr */ 278 fdata->cr_offset = SIGNED_SHORT (op) + offset; 279 cr_reg = 0; 280 continue; 281 282 } else if (op == 0x48000005) { /* bl .+4 used in -mrelocatable */ 283 continue; 284 285 } else if (op == 0x48000004) { /* b .+4 (xlc) */ 286 break; 287 288 } else if (((op & 0xffff0000) == 0x801e0000 || /* lwz 0,NUM(r30), used in V.4 -mrelocatable */ 289 op == 0x7fc0f214) && /* add r30,r0,r30, used in V.4 -mrelocatable */ 290 lr_reg == 0x901e0000) { 291 continue; 292 293 } else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used in V.4 -mminimal-toc */ 294 (op & 0xffff0000) == 0x3bde0000) { /* addi 30,30,foo@l */ 295 continue; 296 297 } else if ((op & 0xfc000000) == 0x48000000) { /* bl foo, to save fprs??? */ 298 299 fdata->frameless = 0; 300 /* Don't skip over the subroutine call if it is not within the first 301 three instructions of the prologue. */ 302 if ((pc - orig_pc) > 8) 303 break; 304 305 op = read_memory_integer (pc+4, 4); 306 307 /* At this point, make sure this is not a trampoline function 308 (a function that simply calls another functions, and nothing else). 309 If the next is not a nop, this branch was part of the function 310 prologue. */ 311 312 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */ 313 break; /* don't skip over this branch */ 314 315 continue; 316 317 /* update stack pointer */ 318 } else if ((op & 0xffff0000) == 0x94210000) { /* stu r1,NUM(r1) */ 319 fdata->frameless = 0; 320 fdata->offset = SIGNED_SHORT (op); 321 offset = fdata->offset; 322 continue; 323 324 } else if (op == 0x7c21016e) { /* stwux 1,1,0 */ 325 fdata->frameless = 0; 326 offset = fdata->offset; 327 continue; 328 329 /* Load up minimal toc pointer */ 330 } else if ((op >> 22) == 0x20f 331 && ! minimal_toc_loaded) { /* l r31,... or l r30,... */ 332 minimal_toc_loaded = 1; 333 continue; 334 335 /* store parameters in stack */ 336 } else if ((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */ 337 (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */ 338 (op & 0xfc1f0000) == 0xfc010000) { /* frsp, fp?,NUM(r1) */ 339 continue; 340 341 /* store parameters in stack via frame pointer */ 342 } else if (framep && 343 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */ 344 (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */ 345 (op & 0xfc1f0000) == 0xfc1f0000)) { /* frsp, fp?,NUM(r1) */ 346 continue; 347 348 /* Set up frame pointer */ 349 } else if (op == 0x603f0000 /* oril r31, r1, 0x0 */ 350 || op == 0x7c3f0b78) { /* mr r31, r1 */ 351 fdata->frameless = 0; 352 framep = 1; 353 fdata->alloca_reg = 31; 354 continue; 355 356 /* Another way to set up the frame pointer. */ 357 } else if ((op & 0xfc1fffff) == 0x38010000) { /* addi rX, r1, 0x0 */ 358 fdata->frameless = 0; 359 framep = 1; 360 fdata->alloca_reg = (op & ~0x38010000) >> 21; 361 continue; 362 363 } else { 364 break; 365 } 366 } 367 368 #if 0 369 /* I have problems with skipping over __main() that I need to address 370 * sometime. Previously, I used to use misc_function_vector which 371 * didn't work as well as I wanted to be. -MGO */ 372 373 /* If the first thing after skipping a prolog is a branch to a function, 374 this might be a call to an initializer in main(), introduced by gcc2. 375 We'd like to skip over it as well. Fortunately, xlc does some extra 376 work before calling a function right after a prologue, thus we can 377 single out such gcc2 behaviour. */ 378 379 380 if ((op & 0xfc000001) == 0x48000001) { /* bl foo, an initializer function? */ 381 op = read_memory_integer (pc+4, 4); 382 383 if (op == 0x4def7b82) { /* cror 0xf, 0xf, 0xf (nop) */ 384 385 /* check and see if we are in main. If so, skip over this initializer 386 function as well. */ 387 388 tmp = find_pc_misc_function (pc); 389 if (tmp >= 0 && STREQ (misc_function_vector [tmp].name, "main")) 390 return pc + 8; 391 } 392 } 393 #endif /* 0 */ 394 395 fdata->offset = - fdata->offset; 396 return pc; 397 } 398 399 400 /************************************************************************* 401 Support for creating pushind a dummy frame into the stack, and popping 402 frames, etc. 403 *************************************************************************/ 404 405 /* The total size of dummy frame is 436, which is; 406 407 32 gpr's - 128 bytes 408 32 fpr's - 256 " 409 7 the rest - 28 " 410 and 24 extra bytes for the callee's link area. The last 24 bytes 411 for the link area might not be necessary, since it will be taken 412 care of by push_arguments(). */ 413 414 #define DUMMY_FRAME_SIZE 436 415 416 #define DUMMY_FRAME_ADDR_SIZE 10 417 418 /* Make sure you initialize these in somewhere, in case gdb gives up what it 419 was debugging and starts debugging something else. FIXMEibm */ 420 421 static int dummy_frame_count = 0; 422 static int dummy_frame_size = 0; 423 static CORE_ADDR *dummy_frame_addr = 0; 424 425 extern int stop_stack_dummy; 426 427 /* push a dummy frame into stack, save all register. Currently we are saving 428 only gpr's and fpr's, which is not good enough! FIXMEmgo */ 429 430 void 431 push_dummy_frame () 432 { 433 /* stack pointer. */ 434 CORE_ADDR sp; 435 /* Same thing, target byte order. */ 436 char sp_targ[4]; 437 438 /* link register. */ 439 CORE_ADDR pc; 440 /* Same thing, target byte order. */ 441 char pc_targ[4]; 442 443 /* Needed to figure out where to save the dummy link area. 444 FIXME: There should be an easier way to do this, no? tiemann 9/9/95. */ 445 struct rs6000_framedata fdata; 446 447 int ii; 448 449 target_fetch_registers (-1); 450 451 if (dummy_frame_count >= dummy_frame_size) { 452 dummy_frame_size += DUMMY_FRAME_ADDR_SIZE; 453 if (dummy_frame_addr) 454 dummy_frame_addr = (CORE_ADDR*) xrealloc 455 (dummy_frame_addr, sizeof(CORE_ADDR) * (dummy_frame_size)); 456 else 457 dummy_frame_addr = (CORE_ADDR*) 458 xmalloc (sizeof(CORE_ADDR) * (dummy_frame_size)); 459 } 460 461 sp = read_register(SP_REGNUM); 462 pc = read_register(PC_REGNUM); 463 store_address (pc_targ, 4, pc); 464 465 (void) skip_prologue (get_pc_function_start (pc) + FUNCTION_START_OFFSET, &fdata); 466 467 dummy_frame_addr [dummy_frame_count++] = sp; 468 469 /* Be careful! If the stack pointer is not decremented first, then kernel 470 thinks he is free to use the space underneath it. And kernel actually 471 uses that area for IPC purposes when executing ptrace(2) calls. So 472 before writing register values into the new frame, decrement and update 473 %sp first in order to secure your frame. */ 474 475 /* FIXME: We don't check if the stack really has this much space. 476 This is a problem on the ppc simulator (which only grants one page 477 (4096 bytes) by default. */ 478 479 write_register (SP_REGNUM, sp-DUMMY_FRAME_SIZE); 480 481 /* gdb relies on the state of current_frame. We'd better update it, 482 otherwise things like do_registers_info() wouldn't work properly! */ 483 484 flush_cached_frames (); 485 486 /* save program counter in link register's space. */ 487 write_memory (sp + (fdata.lr_offset ? fdata.lr_offset : DEFAULT_LR_SAVE), 488 pc_targ, 4); 489 490 /* save all floating point and general purpose registers here. */ 491 492 /* fpr's, f0..f31 */ 493 for (ii = 0; ii < 32; ++ii) 494 write_memory (sp-8-(ii*8), ®isters[REGISTER_BYTE (31-ii+FP0_REGNUM)], 8); 495 496 /* gpr's r0..r31 */ 497 for (ii=1; ii <=32; ++ii) 498 write_memory (sp-256-(ii*4), ®isters[REGISTER_BYTE (32-ii)], 4); 499 500 /* so far, 32*2 + 32 words = 384 bytes have been written. 501 7 extra registers in our register set: pc, ps, cnd, lr, cnt, xer, mq */ 502 503 for (ii=1; ii <= (LAST_SP_REGNUM-FIRST_SP_REGNUM+1); ++ii) { 504 write_memory (sp-384-(ii*4), 505 ®isters[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4); 506 } 507 508 /* Save sp or so called back chain right here. */ 509 store_address (sp_targ, 4, sp); 510 write_memory (sp-DUMMY_FRAME_SIZE, sp_targ, 4); 511 sp -= DUMMY_FRAME_SIZE; 512 513 /* And finally, this is the back chain. */ 514 write_memory (sp+8, pc_targ, 4); 515 } 516 517 518 /* Pop a dummy frame. 519 520 In rs6000 when we push a dummy frame, we save all of the registers. This 521 is usually done before user calls a function explicitly. 522 523 After a dummy frame is pushed, some instructions are copied into stack, 524 and stack pointer is decremented even more. Since we don't have a frame 525 pointer to get back to the parent frame of the dummy, we start having 526 trouble poping it. Therefore, we keep a dummy frame stack, keeping 527 addresses of dummy frames as such. When poping happens and when we 528 detect that was a dummy frame, we pop it back to its parent by using 529 dummy frame stack (`dummy_frame_addr' array). 530 531 FIXME: This whole concept is broken. You should be able to detect 532 a dummy stack frame *on the user's stack itself*. When you do, 533 then you know the format of that stack frame -- including its 534 saved SP register! There should *not* be a separate stack in the 535 GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92 536 */ 537 538 static void 539 pop_dummy_frame () 540 { 541 CORE_ADDR sp, pc; 542 int ii; 543 sp = dummy_frame_addr [--dummy_frame_count]; 544 545 /* restore all fpr's. */ 546 for (ii = 1; ii <= 32; ++ii) 547 read_memory (sp-(ii*8), ®isters[REGISTER_BYTE (32-ii+FP0_REGNUM)], 8); 548 549 /* restore all gpr's */ 550 for (ii=1; ii <= 32; ++ii) { 551 read_memory (sp-256-(ii*4), ®isters[REGISTER_BYTE (32-ii)], 4); 552 } 553 554 /* restore the rest of the registers. */ 555 for (ii=1; ii <=(LAST_SP_REGNUM-FIRST_SP_REGNUM+1); ++ii) 556 read_memory (sp-384-(ii*4), 557 ®isters[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4); 558 559 read_memory (sp-(DUMMY_FRAME_SIZE-8), 560 ®isters [REGISTER_BYTE(PC_REGNUM)], 4); 561 562 /* when a dummy frame was being pushed, we had to decrement %sp first, in 563 order to secure astack space. Thus, saved %sp (or %r1) value, is not the 564 one we should restore. Change it with the one we need. */ 565 566 *(int*)®isters [REGISTER_BYTE(FP_REGNUM)] = sp; 567 568 /* Now we can restore all registers. */ 569 570 target_store_registers (-1); 571 pc = read_pc (); 572 flush_cached_frames (); 573 } 574 575 576 /* pop the innermost frame, go back to the caller. */ 577 578 void 579 pop_frame () 580 { 581 CORE_ADDR pc, lr, sp, prev_sp; /* %pc, %lr, %sp */ 582 struct rs6000_framedata fdata; 583 struct frame_info *frame = get_current_frame (); 584 int addr, ii; 585 586 pc = read_pc (); 587 sp = FRAME_FP (frame); 588 589 if (stop_stack_dummy && dummy_frame_count) { 590 pop_dummy_frame (); 591 return; 592 } 593 594 /* Make sure that all registers are valid. */ 595 read_register_bytes (0, NULL, REGISTER_BYTES); 596 597 /* figure out previous %pc value. If the function is frameless, it is 598 still in the link register, otherwise walk the frames and retrieve the 599 saved %pc value in the previous frame. */ 600 601 addr = get_pc_function_start (frame->pc) + FUNCTION_START_OFFSET; 602 (void) skip_prologue (addr, &fdata); 603 604 if (fdata.frameless) 605 prev_sp = sp; 606 else 607 prev_sp = read_memory_integer (sp, 4); 608 if (fdata.lr_offset == 0) 609 lr = read_register (LR_REGNUM); 610 else 611 lr = read_memory_integer (prev_sp + fdata.lr_offset, 4); 612 613 /* reset %pc value. */ 614 write_register (PC_REGNUM, lr); 615 616 /* reset register values if any was saved earlier. */ 617 addr = prev_sp - fdata.offset; 618 619 if (fdata.saved_gpr != -1) 620 for (ii = fdata.saved_gpr; ii <= 31; ++ii) { 621 read_memory (addr, ®isters [REGISTER_BYTE (ii)], 4); 622 addr += 4; 623 } 624 625 if (fdata.saved_fpr != -1) 626 for (ii = fdata.saved_fpr; ii <= 31; ++ii) { 627 read_memory (addr, ®isters [REGISTER_BYTE (ii+FP0_REGNUM)], 8); 628 addr += 8; 629 } 630 631 write_register (SP_REGNUM, prev_sp); 632 target_store_registers (-1); 633 flush_cached_frames (); 634 } 635 636 /* fixup the call sequence of a dummy function, with the real function address. 637 its argumets will be passed by gdb. */ 638 639 void 640 rs6000_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p) 641 char *dummyname; 642 CORE_ADDR pc; 643 CORE_ADDR fun; 644 int nargs; 645 value_ptr *args; 646 struct type *type; 647 int gcc_p; 648 { 649 #define TOC_ADDR_OFFSET 20 650 #define TARGET_ADDR_OFFSET 28 651 652 int ii; 653 CORE_ADDR target_addr; 654 CORE_ADDR tocvalue; 655 656 target_addr = fun; 657 tocvalue = find_toc_address (target_addr); 658 659 ii = *(int*)((char*)dummyname + TOC_ADDR_OFFSET); 660 ii = (ii & 0xffff0000) | (tocvalue >> 16); 661 *(int*)((char*)dummyname + TOC_ADDR_OFFSET) = ii; 662 663 ii = *(int*)((char*)dummyname + TOC_ADDR_OFFSET+4); 664 ii = (ii & 0xffff0000) | (tocvalue & 0x0000ffff); 665 *(int*)((char*)dummyname + TOC_ADDR_OFFSET+4) = ii; 666 667 ii = *(int*)((char*)dummyname + TARGET_ADDR_OFFSET); 668 ii = (ii & 0xffff0000) | (target_addr >> 16); 669 *(int*)((char*)dummyname + TARGET_ADDR_OFFSET) = ii; 670 671 ii = *(int*)((char*)dummyname + TARGET_ADDR_OFFSET+4); 672 ii = (ii & 0xffff0000) | (target_addr & 0x0000ffff); 673 *(int*)((char*)dummyname + TARGET_ADDR_OFFSET+4) = ii; 674 } 675 676 /* Pass the arguments in either registers, or in the stack. In RS6000, 677 the first eight words of the argument list (that might be less than 678 eight parameters if some parameters occupy more than one word) are 679 passed in r3..r11 registers. float and double parameters are 680 passed in fpr's, in addition to that. Rest of the parameters if any 681 are passed in user stack. There might be cases in which half of the 682 parameter is copied into registers, the other half is pushed into 683 stack. 684 685 If the function is returning a structure, then the return address is passed 686 in r3, then the first 7 words of the parameters can be passed in registers, 687 starting from r4. */ 688 689 CORE_ADDR 690 push_arguments (nargs, args, sp, struct_return, struct_addr) 691 int nargs; 692 value_ptr *args; 693 CORE_ADDR sp; 694 int struct_return; 695 CORE_ADDR struct_addr; 696 { 697 int ii; 698 int len = 0; 699 int argno; /* current argument number */ 700 int argbytes; /* current argument byte */ 701 char tmp_buffer [50]; 702 int f_argno = 0; /* current floating point argno */ 703 value_ptr arg = 0; 704 struct type *type; 705 706 CORE_ADDR saved_sp; 707 708 if ( dummy_frame_count <= 0) 709 printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n"); 710 711 /* The first eight words of ther arguments are passed in registers. Copy 712 them appropriately. 713 714 If the function is returning a `struct', then the first word (which 715 will be passed in r3) is used for struct return address. In that 716 case we should advance one word and start from r4 register to copy 717 parameters. */ 718 719 ii = struct_return ? 1 : 0; 720 721 for (argno=0, argbytes=0; argno < nargs && ii<8; ++ii) { 722 723 arg = args[argno]; 724 type = check_typedef (VALUE_TYPE (arg)); 725 len = TYPE_LENGTH (type); 726 727 if (TYPE_CODE (type) == TYPE_CODE_FLT) { 728 729 /* floating point arguments are passed in fpr's, as well as gpr's. 730 There are 13 fpr's reserved for passing parameters. At this point 731 there is no way we would run out of them. */ 732 733 if (len > 8) 734 printf_unfiltered ( 735 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno); 736 737 memcpy (®isters[REGISTER_BYTE(FP0_REGNUM + 1 + f_argno)], VALUE_CONTENTS (arg), 738 len); 739 ++f_argno; 740 } 741 742 if (len > 4) { 743 744 /* Argument takes more than one register. */ 745 while (argbytes < len) { 746 747 *(int*)®isters[REGISTER_BYTE(ii+3)] = 0; 748 memcpy (®isters[REGISTER_BYTE(ii+3)], 749 ((char*)VALUE_CONTENTS (arg))+argbytes, 750 (len - argbytes) > 4 ? 4 : len - argbytes); 751 ++ii, argbytes += 4; 752 753 if (ii >= 8) 754 goto ran_out_of_registers_for_arguments; 755 } 756 argbytes = 0; 757 --ii; 758 } 759 else { /* Argument can fit in one register. No problem. */ 760 *(int*)®isters[REGISTER_BYTE(ii+3)] = 0; 761 memcpy (®isters[REGISTER_BYTE(ii+3)], VALUE_CONTENTS (arg), len); 762 } 763 ++argno; 764 } 765 766 ran_out_of_registers_for_arguments: 767 768 /* location for 8 parameters are always reserved. */ 769 sp -= 4 * 8; 770 771 /* another six words for back chain, TOC register, link register, etc. */ 772 sp -= 24; 773 774 /* if there are more arguments, allocate space for them in 775 the stack, then push them starting from the ninth one. */ 776 777 if ((argno < nargs) || argbytes) { 778 int space = 0, jj; 779 780 if (argbytes) { 781 space += ((len - argbytes + 3) & -4); 782 jj = argno + 1; 783 } 784 else 785 jj = argno; 786 787 for (; jj < nargs; ++jj) { 788 value_ptr val = args[jj]; 789 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4; 790 } 791 792 /* add location required for the rest of the parameters */ 793 space = (space + 7) & -8; 794 sp -= space; 795 796 /* This is another instance we need to be concerned about securing our 797 stack space. If we write anything underneath %sp (r1), we might conflict 798 with the kernel who thinks he is free to use this area. So, update %sp 799 first before doing anything else. */ 800 801 write_register (SP_REGNUM, sp); 802 803 /* if the last argument copied into the registers didn't fit there 804 completely, push the rest of it into stack. */ 805 806 if (argbytes) { 807 write_memory ( 808 sp+24+(ii*4), ((char*)VALUE_CONTENTS (arg))+argbytes, len - argbytes); 809 ++argno; 810 ii += ((len - argbytes + 3) & -4) / 4; 811 } 812 813 /* push the rest of the arguments into stack. */ 814 for (; argno < nargs; ++argno) { 815 816 arg = args[argno]; 817 type = check_typedef (VALUE_TYPE (arg)); 818 len = TYPE_LENGTH (type); 819 820 821 /* float types should be passed in fpr's, as well as in the stack. */ 822 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13) { 823 824 if (len > 8) 825 printf_unfiltered ( 826 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno); 827 828 memcpy (®isters[REGISTER_BYTE(FP0_REGNUM + 1 + f_argno)], VALUE_CONTENTS (arg), 829 len); 830 ++f_argno; 831 } 832 833 write_memory (sp+24+(ii*4), (char *) VALUE_CONTENTS (arg), len); 834 ii += ((len + 3) & -4) / 4; 835 } 836 } 837 else 838 /* Secure stack areas first, before doing anything else. */ 839 write_register (SP_REGNUM, sp); 840 841 saved_sp = dummy_frame_addr [dummy_frame_count - 1]; 842 read_memory (saved_sp, tmp_buffer, 24); 843 write_memory (sp, tmp_buffer, 24); 844 845 /* set back chain properly */ 846 store_address (tmp_buffer, 4, saved_sp); 847 write_memory (sp, tmp_buffer, 4); 848 849 target_store_registers (-1); 850 return sp; 851 } 852 853 /* a given return value in `regbuf' with a type `valtype', extract and copy its 854 value into `valbuf' */ 855 856 void 857 extract_return_value (valtype, regbuf, valbuf) 858 struct type *valtype; 859 char regbuf[REGISTER_BYTES]; 860 char *valbuf; 861 { 862 int offset = 0; 863 864 if (TYPE_CODE (valtype) == TYPE_CODE_FLT) { 865 866 double dd; float ff; 867 /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes. 868 We need to truncate the return value into float size (4 byte) if 869 necessary. */ 870 871 if (TYPE_LENGTH (valtype) > 4) /* this is a double */ 872 memcpy (valbuf, ®buf[REGISTER_BYTE (FP0_REGNUM + 1)], 873 TYPE_LENGTH (valtype)); 874 else { /* float */ 875 memcpy (&dd, ®buf[REGISTER_BYTE (FP0_REGNUM + 1)], 8); 876 ff = (float)dd; 877 memcpy (valbuf, &ff, sizeof(float)); 878 } 879 } 880 else { 881 /* return value is copied starting from r3. */ 882 if (TARGET_BYTE_ORDER == BIG_ENDIAN 883 && TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (3)) 884 offset = REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype); 885 886 memcpy (valbuf, regbuf + REGISTER_BYTE (3) + offset, 887 TYPE_LENGTH (valtype)); 888 } 889 } 890 891 892 /* keep structure return address in this variable. 893 FIXME: This is a horrid kludge which should not be allowed to continue 894 living. This only allows a single nested call to a structure-returning 895 function. Come on, guys! -- gnu@cygnus.com, Aug 92 */ 896 897 CORE_ADDR rs6000_struct_return_address; 898 899 900 /* Indirect function calls use a piece of trampoline code to do context 901 switching, i.e. to set the new TOC table. Skip such code if we are on 902 its first instruction (as when we have single-stepped to here). 903 Also skip shared library trampoline code (which is different from 904 indirect function call trampolines). 905 Result is desired PC to step until, or NULL if we are not in 906 trampoline code. */ 907 908 CORE_ADDR 909 skip_trampoline_code (pc) 910 CORE_ADDR pc; 911 { 912 register unsigned int ii, op; 913 CORE_ADDR solib_target_pc; 914 915 static unsigned trampoline_code[] = { 916 0x800b0000, /* l r0,0x0(r11) */ 917 0x90410014, /* st r2,0x14(r1) */ 918 0x7c0903a6, /* mtctr r0 */ 919 0x804b0004, /* l r2,0x4(r11) */ 920 0x816b0008, /* l r11,0x8(r11) */ 921 0x4e800420, /* bctr */ 922 0x4e800020, /* br */ 923 0 924 }; 925 926 /* If pc is in a shared library trampoline, return its target. */ 927 solib_target_pc = find_solib_trampoline_target (pc); 928 if (solib_target_pc) 929 return solib_target_pc; 930 931 for (ii=0; trampoline_code[ii]; ++ii) { 932 op = read_memory_integer (pc + (ii*4), 4); 933 if (op != trampoline_code [ii]) 934 return 0; 935 } 936 ii = read_register (11); /* r11 holds destination addr */ 937 pc = read_memory_integer (ii, 4); /* (r11) value */ 938 return pc; 939 } 940 941 /* Determines whether the function FI has a frame on the stack or not. */ 942 943 int 944 frameless_function_invocation (fi) 945 struct frame_info *fi; 946 { 947 CORE_ADDR func_start; 948 struct rs6000_framedata fdata; 949 950 if (fi->next != NULL) 951 /* Don't even think about framelessness except on the innermost frame. */ 952 /* FIXME: Can also be frameless if fi->next->signal_handler_caller (if 953 a signal happens while executing in a frameless function). */ 954 return 0; 955 956 func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET; 957 958 /* If we failed to find the start of the function, it is a mistake 959 to inspect the instructions. */ 960 961 if (!func_start) 962 return 0; 963 964 (void) skip_prologue (func_start, &fdata); 965 return fdata.frameless; 966 } 967 968 /* Return the PC saved in a frame */ 969 970 unsigned long 971 frame_saved_pc (fi) 972 struct frame_info *fi; 973 { 974 CORE_ADDR func_start; 975 struct rs6000_framedata fdata; 976 977 if (fi->signal_handler_caller) 978 return read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, 4); 979 980 func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET; 981 982 /* If we failed to find the start of the function, it is a mistake 983 to inspect the instructions. */ 984 if (!func_start) 985 return 0; 986 987 (void) skip_prologue (func_start, &fdata); 988 989 if (fdata.lr_offset == 0 && fi->next != NULL) 990 return read_memory_integer (rs6000_frame_chain (fi) + DEFAULT_LR_SAVE, 4); 991 992 if (fdata.lr_offset == 0) 993 return read_register (LR_REGNUM); 994 995 return read_memory_integer (rs6000_frame_chain (fi) + fdata.lr_offset, 4); 996 } 997 998 /* If saved registers of frame FI are not known yet, read and cache them. 999 &FDATAP contains rs6000_framedata; TDATAP can be NULL, 1000 in which case the framedata are read. */ 1001 1002 static void 1003 frame_get_cache_fsr (fi, fdatap) 1004 struct frame_info *fi; 1005 struct rs6000_framedata *fdatap; 1006 { 1007 int ii; 1008 CORE_ADDR frame_addr; 1009 struct rs6000_framedata work_fdata; 1010 1011 if (fi->cache_fsr) 1012 return; 1013 1014 if (fdatap == NULL) { 1015 fdatap = &work_fdata; 1016 (void) skip_prologue (get_pc_function_start (fi->pc), fdatap); 1017 } 1018 1019 fi->cache_fsr = (struct frame_saved_regs *) 1020 obstack_alloc (&frame_cache_obstack, sizeof (struct frame_saved_regs)); 1021 memset (fi->cache_fsr, '\0', sizeof (struct frame_saved_regs)); 1022 1023 if (fi->prev && fi->prev->frame) 1024 frame_addr = fi->prev->frame; 1025 else 1026 frame_addr = read_memory_integer (fi->frame, 4); 1027 1028 /* if != -1, fdatap->saved_fpr is the smallest number of saved_fpr. 1029 All fpr's from saved_fpr to fp31 are saved. */ 1030 1031 if (fdatap->saved_fpr >= 0) { 1032 int fpr_offset = frame_addr + fdatap->fpr_offset; 1033 for (ii = fdatap->saved_fpr; ii < 32; ii++) { 1034 fi->cache_fsr->regs [FP0_REGNUM + ii] = fpr_offset; 1035 fpr_offset += 8; 1036 } 1037 } 1038 1039 /* if != -1, fdatap->saved_gpr is the smallest number of saved_gpr. 1040 All gpr's from saved_gpr to gpr31 are saved. */ 1041 1042 if (fdatap->saved_gpr >= 0) { 1043 int gpr_offset = frame_addr + fdatap->gpr_offset; 1044 for (ii = fdatap->saved_gpr; ii < 32; ii++) { 1045 fi->cache_fsr->regs [ii] = gpr_offset; 1046 gpr_offset += 4; 1047 } 1048 } 1049 1050 /* If != 0, fdatap->cr_offset is the offset from the frame that holds 1051 the CR. */ 1052 if (fdatap->cr_offset != 0) 1053 fi->cache_fsr->regs [CR_REGNUM] = frame_addr + fdatap->cr_offset; 1054 1055 /* If != 0, fdatap->lr_offset is the offset from the frame that holds 1056 the LR. */ 1057 if (fdatap->lr_offset != 0) 1058 fi->cache_fsr->regs [LR_REGNUM] = frame_addr + fdatap->lr_offset; 1059 } 1060 1061 /* Return the address of a frame. This is the inital %sp value when the frame 1062 was first allocated. For functions calling alloca(), it might be saved in 1063 an alloca register. */ 1064 1065 CORE_ADDR 1066 frame_initial_stack_address (fi) 1067 struct frame_info *fi; 1068 { 1069 CORE_ADDR tmpaddr; 1070 struct rs6000_framedata fdata; 1071 struct frame_info *callee_fi; 1072 1073 /* if the initial stack pointer (frame address) of this frame is known, 1074 just return it. */ 1075 1076 if (fi->initial_sp) 1077 return fi->initial_sp; 1078 1079 /* find out if this function is using an alloca register.. */ 1080 1081 (void) skip_prologue (get_pc_function_start (fi->pc), &fdata); 1082 1083 /* if saved registers of this frame are not known yet, read and cache them. */ 1084 1085 if (!fi->cache_fsr) 1086 frame_get_cache_fsr (fi, &fdata); 1087 1088 /* If no alloca register used, then fi->frame is the value of the %sp for 1089 this frame, and it is good enough. */ 1090 1091 if (fdata.alloca_reg < 0) { 1092 fi->initial_sp = fi->frame; 1093 return fi->initial_sp; 1094 } 1095 1096 /* This function has an alloca register. If this is the top-most frame 1097 (with the lowest address), the value in alloca register is good. */ 1098 1099 if (!fi->next) 1100 return fi->initial_sp = read_register (fdata.alloca_reg); 1101 1102 /* Otherwise, this is a caller frame. Callee has usually already saved 1103 registers, but there are exceptions (such as when the callee 1104 has no parameters). Find the address in which caller's alloca 1105 register is saved. */ 1106 1107 for (callee_fi = fi->next; callee_fi; callee_fi = callee_fi->next) { 1108 1109 if (!callee_fi->cache_fsr) 1110 frame_get_cache_fsr (callee_fi, NULL); 1111 1112 /* this is the address in which alloca register is saved. */ 1113 1114 tmpaddr = callee_fi->cache_fsr->regs [fdata.alloca_reg]; 1115 if (tmpaddr) { 1116 fi->initial_sp = read_memory_integer (tmpaddr, 4); 1117 return fi->initial_sp; 1118 } 1119 1120 /* Go look into deeper levels of the frame chain to see if any one of 1121 the callees has saved alloca register. */ 1122 } 1123 1124 /* If alloca register was not saved, by the callee (or any of its callees) 1125 then the value in the register is still good. */ 1126 1127 return fi->initial_sp = read_register (fdata.alloca_reg); 1128 } 1129 1130 CORE_ADDR 1131 rs6000_frame_chain (thisframe) 1132 struct frame_info *thisframe; 1133 { 1134 CORE_ADDR fp; 1135 if (inside_entry_file ((thisframe)->pc)) 1136 return 0; 1137 if (thisframe->signal_handler_caller) 1138 fp = read_memory_integer (thisframe->frame + SIG_FRAME_FP_OFFSET, 4); 1139 else 1140 fp = read_memory_integer ((thisframe)->frame, 4); 1141 1142 return fp; 1143 } 1144 1145 /* Keep an array of load segment information and their TOC table addresses. 1146 This info will be useful when calling a shared library function by hand. */ 1147 1148 struct loadinfo { 1149 CORE_ADDR textorg, dataorg; 1150 unsigned long toc_offset; 1151 }; 1152 1153 #define LOADINFOLEN 10 1154 1155 static struct loadinfo *loadinfo = NULL; 1156 static int loadinfolen = 0; 1157 static int loadinfotocindex = 0; 1158 static int loadinfotextindex = 0; 1159 1160 1161 void 1162 xcoff_init_loadinfo () 1163 { 1164 loadinfotocindex = 0; 1165 loadinfotextindex = 0; 1166 1167 if (loadinfolen == 0) { 1168 loadinfo = (struct loadinfo *) 1169 xmalloc (sizeof (struct loadinfo) * LOADINFOLEN); 1170 loadinfolen = LOADINFOLEN; 1171 } 1172 } 1173 1174 1175 /* FIXME -- this is never called! */ 1176 #if 0 1177 void 1178 free_loadinfo () 1179 { 1180 if (loadinfo) 1181 free (loadinfo); 1182 loadinfo = NULL; 1183 loadinfolen = 0; 1184 loadinfotocindex = 0; 1185 loadinfotextindex = 0; 1186 } 1187 #endif 1188 1189 /* this is called from xcoffread.c */ 1190 1191 void 1192 xcoff_add_toc_to_loadinfo (tocoff) 1193 unsigned long tocoff; 1194 { 1195 while (loadinfotocindex >= loadinfolen) { 1196 loadinfolen += LOADINFOLEN; 1197 loadinfo = (struct loadinfo *) 1198 xrealloc (loadinfo, sizeof(struct loadinfo) * loadinfolen); 1199 } 1200 loadinfo [loadinfotocindex++].toc_offset = tocoff; 1201 } 1202 1203 void 1204 add_text_to_loadinfo (textaddr, dataaddr) 1205 CORE_ADDR textaddr; 1206 CORE_ADDR dataaddr; 1207 { 1208 while (loadinfotextindex >= loadinfolen) { 1209 loadinfolen += LOADINFOLEN; 1210 loadinfo = (struct loadinfo *) 1211 xrealloc (loadinfo, sizeof(struct loadinfo) * loadinfolen); 1212 } 1213 loadinfo [loadinfotextindex].textorg = textaddr; 1214 loadinfo [loadinfotextindex].dataorg = dataaddr; 1215 ++loadinfotextindex; 1216 } 1217 1218 1219 /* Note that this assumes that the "textorg" and "dataorg" elements of 1220 a member of this array are correlated with the "toc_offset" element 1221 of the same member. This is taken care of because the loops which 1222 assign the former (in xcoff_relocate_symtab or xcoff_relocate_core) 1223 and the latter (in scan_xcoff_symtab, via vmap_symtab, in 1224 vmap_ldinfo or xcoff_relocate_core) traverse the same objfiles in 1225 the same order. */ 1226 1227 static CORE_ADDR 1228 find_toc_address (pc) 1229 CORE_ADDR pc; 1230 { 1231 int ii, toc_entry, tocbase = 0; 1232 1233 toc_entry = -1; 1234 for (ii=0; ii < loadinfotextindex; ++ii) 1235 if (pc > loadinfo[ii].textorg && loadinfo[ii].textorg > tocbase) { 1236 toc_entry = ii; 1237 tocbase = loadinfo[ii].textorg; 1238 } 1239 1240 if (toc_entry == -1) 1241 error ("Unable to find TOC entry for pc 0x%x\n", pc); 1242 return loadinfo[toc_entry].dataorg + loadinfo[toc_entry].toc_offset; 1243 } 1244 1245 /* Return nonzero if ADDR (a function pointer) is in the data space and 1246 is therefore a special function pointer. */ 1247 1248 int 1249 is_magic_function_pointer (addr) 1250 CORE_ADDR addr; 1251 { 1252 struct obj_section *s; 1253 1254 s = find_pc_section (addr); 1255 if (s && s->the_bfd_section->flags & SEC_CODE) 1256 return 0; 1257 else 1258 return 1; 1259 } 1260 1261 #ifdef GDB_TARGET_POWERPC 1262 int 1263 gdb_print_insn_powerpc (memaddr, info) 1264 bfd_vma memaddr; 1265 disassemble_info *info; 1266 { 1267 if (TARGET_BYTE_ORDER == BIG_ENDIAN) 1268 return print_insn_big_powerpc (memaddr, info); 1269 else 1270 return print_insn_little_powerpc (memaddr, info); 1271 } 1272 #endif 1273 1274 void 1275 _initialize_rs6000_tdep () 1276 { 1277 #ifndef ELF_OBJECT_FORMAT 1278 { 1279 extern void (*xcoff_add_toc_to_loadinfo_hook) PARAMS ((unsigned long)); 1280 extern void (*xcoff_init_loadinfo_hook) PARAMS ((void)); 1281 1282 /* Initialize hook in xcoffread for recording the toc offset value 1283 of a symbol table into the ldinfo structure, for native rs6000 1284 config. */ 1285 xcoff_add_toc_to_loadinfo_hook = &xcoff_add_toc_to_loadinfo; 1286 1287 /* Initialize hook in xcoffread for calling xcoff_init_loadinfo in 1288 a native rs6000 config. */ 1289 xcoff_init_loadinfo_hook = &xcoff_init_loadinfo; 1290 } 1291 #endif /* ELF_OBJECT_FORMAT */ 1292 1293 /* FIXME, this should not be decided via ifdef. */ 1294 #ifdef GDB_TARGET_POWERPC 1295 tm_print_insn = gdb_print_insn_powerpc; 1296 #else 1297 tm_print_insn = print_insn_rs6000; 1298 #endif 1299 } 1300