1 /* Target-dependent code for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995
3 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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., 675 Mass Ave, Cambridge, MA 02139, USA. */
28 #include "xcoffsolib.h"
32 extern struct obstack frame_cache_obstack;
36 /* Nonzero if we just simulated a single step break. */
39 /* Breakpoint shadows for the single step instructions will be kept here. */
41 static struct sstep_breaks {
42 /* Address, or 0 if this is not in use. */
44 /* Shadow contents. */
48 /* Static function prototypes */
51 find_toc_address PARAMS ((CORE_ADDR pc));
54 branch_dest PARAMS ((int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety));
57 frame_get_cache_fsr PARAMS ((struct frame_info *fi,
58 struct rs6000_framedata *fdatap));
61 * Calculate the destination of a branch/jump. Return -1 if not a branch.
64 branch_dest (opcode, instr, pc, safety)
76 absolute = (int) ((instr >> 1) & 1);
80 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
84 dest = pc + immediate;
88 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
92 dest = pc + immediate;
96 ext_op = (instr>>1) & 0x3ff;
98 if (ext_op == 16) /* br conditional register */
99 dest = read_register (LR_REGNUM) & ~3;
101 else if (ext_op == 528) /* br cond to count reg */
103 dest = read_register (CTR_REGNUM) & ~3;
105 /* If we are about to execute a system call, dest is something
106 like 0x22fc or 0x3b00. Upon completion the system call
107 will return to the address in the link register. */
108 if (dest < TEXT_SEGMENT_BASE)
109 dest = read_register (LR_REGNUM) & ~3;
116 return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
121 /* AIX does not support PT_STEP. Simulate it. */
127 #define INSNLEN(OPCODE) 4
129 static char le_breakp[] = LITTLE_BREAKPOINT;
130 static char be_breakp[] = BIG_BREAKPOINT;
131 char *breakp = TARGET_BYTE_ORDER == BIG_ENDIAN ? be_breakp : le_breakp;
140 insn = read_memory_integer (loc, 4);
142 breaks[0] = loc + INSNLEN(insn);
144 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
146 /* Don't put two breakpoints on the same address. */
147 if (breaks[1] == breaks[0])
150 stepBreaks[1].address = 0;
152 for (ii=0; ii < 2; ++ii) {
154 /* ignore invalid breakpoint. */
155 if ( breaks[ii] == -1)
158 read_memory (breaks[ii], stepBreaks[ii].data, 4);
160 write_memory (breaks[ii], breakp, 4);
161 stepBreaks[ii].address = breaks[ii];
167 /* remove step breakpoints. */
168 for (ii=0; ii < 2; ++ii)
169 if (stepBreaks[ii].address != 0)
171 (stepBreaks[ii].address, stepBreaks[ii].data, 4);
175 errno = 0; /* FIXME, don't ignore errors! */
176 /* What errors? {read,write}_memory call error(). */
180 /* return pc value after skipping a function prologue and also return
181 information about a function frame.
183 in struct rs6000_frameinfo fdata:
184 - frameless is TRUE, if function does not have a frame.
185 - nosavedpc is TRUE, if function does not save %pc value in its frame.
186 - offset is the number of bytes used in the frame to save registers.
187 - saved_gpr is the number of the first saved gpr.
188 - saved_fpr is the number of the first saved fpr.
189 - alloca_reg is the number of the register used for alloca() handling.
191 - gpr_offset is the offset of the saved gprs
192 - fpr_offset is the offset of the saved fprs
193 - lr_offset is the offset of the saved lr
194 - cr_offset is the offset of the saved cr
197 #define SIGNED_SHORT(x) \
198 ((sizeof (short) == 2) \
199 ? ((int)(short)(x)) \
200 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
202 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
205 skip_prologue (pc, fdata)
207 struct rs6000_framedata *fdata;
209 CORE_ADDR orig_pc = pc;
217 static struct rs6000_framedata zero_frame;
220 fdata->saved_gpr = -1;
221 fdata->saved_fpr = -1;
222 fdata->alloca_reg = -1;
223 fdata->frameless = 1;
224 fdata->nosavedpc = 1;
226 if (target_read_memory (pc, buf, 4))
227 return pc; /* Can't access it -- assume no prologue. */
229 /* Assume that subsequent fetches can fail with low probability. */
234 op = read_memory_integer (pc, 4);
236 if ((op & 0xfc1fffff) == 0x7c0802a6) { /* mflr Rx */
237 lr_reg = (op & 0x03e00000) | 0x90010000;
240 } else if ((op & 0xfc1fffff) == 0x7c000026) { /* mfcr Rx */
241 cr_reg = (op & 0x03e00000) | 0x90010000;
244 } else if ((op & 0xfc1f0000) == 0xd8010000) { /* stfd Rx,NUM(r1) */
245 reg = GET_SRC_REG (op);
246 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg) {
247 fdata->saved_fpr = reg;
248 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
252 } else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
253 ((op & 0xfc1f0000) == 0x90010000 && /* st rx,NUM(r1), rx >= r13 */
254 (op & 0x03e00000) >= 0x01a00000)) {
256 reg = GET_SRC_REG (op);
257 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg) {
258 fdata->saved_gpr = reg;
259 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
263 } else if ((op & 0xffff0000) == 0x3c000000) { /* addis 0,0,NUM, used for >= 32k frames */
264 fdata->offset = (op & 0x0000ffff) << 16;
267 } else if ((op & 0xffff0000) == 0x60000000) { /* ori 0,0,NUM, 2nd half of >= 32k frames */
268 fdata->offset |= (op & 0x0000ffff);
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;
277 } else if ((op & 0xffff0000) == cr_reg) { /* st Rx,NUM(r1) where Rx == cr */
278 fdata->cr_offset = SIGNED_SHORT (op) + offset;
282 } else if (op == 0x48000005) { /* bl .+4 used in -mrelocatable */
285 } else if (((op & 0xffff0000) == 0x801e0000 || /* lwz 0,NUM(r30), used in V.4 -mrelocatable */
286 op == 0x7fc0f214) && /* add r30,r0,r30, used in V.4 -mrelocatable */
287 lr_reg == 0x901e0000) {
290 } else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used in V.4 -mminimal-toc */
291 (op & 0xffff0000) == 0x3bde0000) { /* addi 30,30,foo@l */
294 } else if ((op & 0xfc000000) == 0x48000000) { /* bl foo, to save fprs??? */
295 op = read_memory_integer (pc+4, 4);
297 /* At this point, make sure this is not a trampoline function
298 (a function that simply calls another functions, and nothing else).
299 If the next is not a nop, this branch was part of the function
302 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
303 return pc; /* don't skip over this branch */
307 /* update stack pointer */
308 } else if ((op & 0xffff0000) == 0x94210000) { /* stu r1,NUM(r1) */
309 fdata->offset = SIGNED_SHORT (op);
310 offset = fdata->offset;
313 } else if (op == 0x7c21016e) { /* stwux 1,1,0 */
314 offset = fdata->offset;
317 /* Load up minimal toc pointer */
318 } else if ((op >> 22) == 0x20f) { /* l r31,... or l r30,... */
321 /* store parameters in stack */
322 } else if ((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
323 (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */
324 (op & 0xfc1f0000) == 0xfc010000) { /* frsp, fp?,NUM(r1) */
327 /* store parameters in stack via frame pointer */
329 (op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */
330 (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */
331 (op & 0xfc1f0000) == 0xfc1f0000) { /* frsp, fp?,NUM(r1) */
334 /* Set up frame pointer */
335 } else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
336 || op == 0x7c3f0b78) { /* mr r31, r1 */
346 /* I have problems with skipping over __main() that I need to address
347 * sometime. Previously, I used to use misc_function_vector which
348 * didn't work as well as I wanted to be. -MGO */
350 /* If the first thing after skipping a prolog is a branch to a function,
351 this might be a call to an initializer in main(), introduced by gcc2.
352 We'd like to skip over it as well. Fortunately, xlc does some extra
353 work before calling a function right after a prologue, thus we can
354 single out such gcc2 behaviour. */
357 if ((op & 0xfc000001) == 0x48000001) { /* bl foo, an initializer function? */
358 op = read_memory_integer (pc+4, 4);
360 if (op == 0x4def7b82) { /* cror 0xf, 0xf, 0xf (nop) */
362 /* check and see if we are in main. If so, skip over this initializer
365 tmp = find_pc_misc_function (pc);
366 if (tmp >= 0 && STREQ (misc_function_vector [tmp].name, "main"))
372 fdata->frameless = (pc == orig_pc);
373 fdata->offset = - fdata->offset;
378 /*************************************************************************
379 Support for creating pushind a dummy frame into the stack, and popping
381 *************************************************************************/
383 /* The total size of dummy frame is 436, which is;
388 and 24 extra bytes for the callee's link area. The last 24 bytes
389 for the link area might not be necessary, since it will be taken
390 care of by push_arguments(). */
392 #define DUMMY_FRAME_SIZE 436
394 #define DUMMY_FRAME_ADDR_SIZE 10
396 /* Make sure you initialize these in somewhere, in case gdb gives up what it
397 was debugging and starts debugging something else. FIXMEibm */
399 static int dummy_frame_count = 0;
400 static int dummy_frame_size = 0;
401 static CORE_ADDR *dummy_frame_addr = 0;
403 extern int stop_stack_dummy;
405 /* push a dummy frame into stack, save all register. Currently we are saving
406 only gpr's and fpr's, which is not good enough! FIXMEmgo */
413 /* Same thing, target byte order. */
418 /* Same thing, target byte order. */
423 target_fetch_registers (-1);
425 if (dummy_frame_count >= dummy_frame_size) {
426 dummy_frame_size += DUMMY_FRAME_ADDR_SIZE;
427 if (dummy_frame_addr)
428 dummy_frame_addr = (CORE_ADDR*) xrealloc
429 (dummy_frame_addr, sizeof(CORE_ADDR) * (dummy_frame_size));
431 dummy_frame_addr = (CORE_ADDR*)
432 xmalloc (sizeof(CORE_ADDR) * (dummy_frame_size));
435 sp = read_register(SP_REGNUM);
436 pc = read_register(PC_REGNUM);
437 store_address (pc_targ, 4, pc);
439 dummy_frame_addr [dummy_frame_count++] = sp;
441 /* Be careful! If the stack pointer is not decremented first, then kernel
442 thinks he is free to use the space underneath it. And kernel actually
443 uses that area for IPC purposes when executing ptrace(2) calls. So
444 before writing register values into the new frame, decrement and update
445 %sp first in order to secure your frame. */
447 write_register (SP_REGNUM, sp-DUMMY_FRAME_SIZE);
449 /* gdb relies on the state of current_frame. We'd better update it,
450 otherwise things like do_registers_info() wouldn't work properly! */
452 flush_cached_frames ();
454 /* save program counter in link register's space. */
455 write_memory (sp+8, pc_targ, 4);
457 /* save all floating point and general purpose registers here. */
460 for (ii = 0; ii < 32; ++ii)
461 write_memory (sp-8-(ii*8), ®isters[REGISTER_BYTE (31-ii+FP0_REGNUM)], 8);
464 for (ii=1; ii <=32; ++ii)
465 write_memory (sp-256-(ii*4), ®isters[REGISTER_BYTE (32-ii)], 4);
467 /* so far, 32*2 + 32 words = 384 bytes have been written.
468 7 extra registers in our register set: pc, ps, cnd, lr, cnt, xer, mq */
470 for (ii=1; ii <= (LAST_SP_REGNUM-FIRST_SP_REGNUM+1); ++ii) {
471 write_memory (sp-384-(ii*4),
472 ®isters[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4);
475 /* Save sp or so called back chain right here. */
476 store_address (sp_targ, 4, sp);
477 write_memory (sp-DUMMY_FRAME_SIZE, sp_targ, 4);
478 sp -= DUMMY_FRAME_SIZE;
480 /* And finally, this is the back chain. */
481 write_memory (sp+8, pc_targ, 4);
485 /* Pop a dummy frame.
487 In rs6000 when we push a dummy frame, we save all of the registers. This
488 is usually done before user calls a function explicitly.
490 After a dummy frame is pushed, some instructions are copied into stack,
491 and stack pointer is decremented even more. Since we don't have a frame
492 pointer to get back to the parent frame of the dummy, we start having
493 trouble poping it. Therefore, we keep a dummy frame stack, keeping
494 addresses of dummy frames as such. When poping happens and when we
495 detect that was a dummy frame, we pop it back to its parent by using
496 dummy frame stack (`dummy_frame_addr' array).
498 FIXME: This whole concept is broken. You should be able to detect
499 a dummy stack frame *on the user's stack itself*. When you do,
500 then you know the format of that stack frame -- including its
501 saved SP register! There should *not* be a separate stack in the
509 sp = dummy_frame_addr [--dummy_frame_count];
511 /* restore all fpr's. */
512 for (ii = 1; ii <= 32; ++ii)
513 read_memory (sp-(ii*8), ®isters[REGISTER_BYTE (32-ii+FP0_REGNUM)], 8);
515 /* restore all gpr's */
516 for (ii=1; ii <= 32; ++ii) {
517 read_memory (sp-256-(ii*4), ®isters[REGISTER_BYTE (32-ii)], 4);
520 /* restore the rest of the registers. */
521 for (ii=1; ii <=(LAST_SP_REGNUM-FIRST_SP_REGNUM+1); ++ii)
522 read_memory (sp-384-(ii*4),
523 ®isters[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4);
525 read_memory (sp-(DUMMY_FRAME_SIZE-8),
526 ®isters [REGISTER_BYTE(PC_REGNUM)], 4);
528 /* when a dummy frame was being pushed, we had to decrement %sp first, in
529 order to secure astack space. Thus, saved %sp (or %r1) value, is not the
530 one we should restore. Change it with the one we need. */
532 *(int*)®isters [REGISTER_BYTE(FP_REGNUM)] = sp;
534 /* Now we can restore all registers. */
536 target_store_registers (-1);
538 flush_cached_frames ();
542 /* pop the innermost frame, go back to the caller. */
547 CORE_ADDR pc, lr, sp, prev_sp; /* %pc, %lr, %sp */
548 struct rs6000_framedata fdata;
549 struct frame_info *frame = get_current_frame ();
553 sp = FRAME_FP (frame);
555 if (stop_stack_dummy && dummy_frame_count) {
560 /* Make sure that all registers are valid. */
561 read_register_bytes (0, NULL, REGISTER_BYTES);
563 /* figure out previous %pc value. If the function is frameless, it is
564 still in the link register, otherwise walk the frames and retrieve the
565 saved %pc value in the previous frame. */
567 addr = get_pc_function_start (frame->pc) + FUNCTION_START_OFFSET;
568 (void) skip_prologue (addr, &fdata);
573 prev_sp = read_memory_integer (sp, 4);
574 if (fdata.lr_offset == 0)
575 lr = read_register (LR_REGNUM);
577 lr = read_memory_integer (prev_sp + fdata.lr_offset, 4);
579 /* reset %pc value. */
580 write_register (PC_REGNUM, lr);
582 /* reset register values if any was saved earlier. */
583 addr = prev_sp - fdata.offset;
585 if (fdata.saved_gpr != -1)
586 for (ii = fdata.saved_gpr; ii <= 31; ++ii) {
587 read_memory (addr, ®isters [REGISTER_BYTE (ii)], 4);
591 if (fdata.saved_fpr != -1)
592 for (ii = fdata.saved_fpr; ii <= 31; ++ii) {
593 read_memory (addr, ®isters [REGISTER_BYTE (ii+FP0_REGNUM)], 8);
597 write_register (SP_REGNUM, prev_sp);
598 target_store_registers (-1);
599 flush_cached_frames ();
602 /* fixup the call sequence of a dummy function, with the real function address.
603 its argumets will be passed by gdb. */
606 fix_call_dummy(dummyname, pc, fun, nargs, type)
610 int nargs; /* not used */
611 int type; /* not used */
613 #define TOC_ADDR_OFFSET 20
614 #define TARGET_ADDR_OFFSET 28
617 CORE_ADDR target_addr;
621 tocvalue = find_toc_address (target_addr);
623 ii = *(int*)((char*)dummyname + TOC_ADDR_OFFSET);
624 ii = (ii & 0xffff0000) | (tocvalue >> 16);
625 *(int*)((char*)dummyname + TOC_ADDR_OFFSET) = ii;
627 ii = *(int*)((char*)dummyname + TOC_ADDR_OFFSET+4);
628 ii = (ii & 0xffff0000) | (tocvalue & 0x0000ffff);
629 *(int*)((char*)dummyname + TOC_ADDR_OFFSET+4) = ii;
631 ii = *(int*)((char*)dummyname + TARGET_ADDR_OFFSET);
632 ii = (ii & 0xffff0000) | (target_addr >> 16);
633 *(int*)((char*)dummyname + TARGET_ADDR_OFFSET) = ii;
635 ii = *(int*)((char*)dummyname + TARGET_ADDR_OFFSET+4);
636 ii = (ii & 0xffff0000) | (target_addr & 0x0000ffff);
637 *(int*)((char*)dummyname + TARGET_ADDR_OFFSET+4) = ii;
640 /* Pass the arguments in either registers, or in the stack. In RS6000, the first
641 eight words of the argument list (that might be less than eight parameters if
642 some parameters occupy more than one word) are passed in r3..r11 registers.
643 float and double parameters are passed in fpr's, in addition to that. Rest of
644 the parameters if any are passed in user stack. There might be cases in which
645 half of the parameter is copied into registers, the other half is pushed into
648 If the function is returning a structure, then the return address is passed
649 in r3, then the first 7 words of the parametes can be passed in registers,
653 push_arguments (nargs, args, sp, struct_return, struct_addr)
658 CORE_ADDR struct_addr;
661 int argno; /* current argument number */
662 int argbytes; /* current argument byte */
663 char tmp_buffer [50];
665 int f_argno = 0; /* current floating point argno */
667 CORE_ADDR saved_sp, pc;
669 if ( dummy_frame_count <= 0)
670 printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n");
672 /* The first eight words of ther arguments are passed in registers. Copy
675 If the function is returning a `struct', then the first word (which
676 will be passed in r3) is used for struct return address. In that
677 case we should advance one word and start from r4 register to copy
680 ii = struct_return ? 1 : 0;
682 for (argno=0, argbytes=0; argno < nargs && ii<8; ++ii) {
685 len = TYPE_LENGTH (VALUE_TYPE (arg));
687 if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_FLT) {
689 /* floating point arguments are passed in fpr's, as well as gpr's.
690 There are 13 fpr's reserved for passing parameters. At this point
691 there is no way we would run out of them. */
695 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
697 memcpy (®isters[REGISTER_BYTE(FP0_REGNUM + 1 + f_argno)], VALUE_CONTENTS (arg),
704 /* Argument takes more than one register. */
705 while (argbytes < len) {
707 *(int*)®isters[REGISTER_BYTE(ii+3)] = 0;
708 memcpy (®isters[REGISTER_BYTE(ii+3)],
709 ((char*)VALUE_CONTENTS (arg))+argbytes,
710 (len - argbytes) > 4 ? 4 : len - argbytes);
714 goto ran_out_of_registers_for_arguments;
719 else { /* Argument can fit in one register. No problem. */
720 *(int*)®isters[REGISTER_BYTE(ii+3)] = 0;
721 memcpy (®isters[REGISTER_BYTE(ii+3)], VALUE_CONTENTS (arg), len);
726 ran_out_of_registers_for_arguments:
728 /* location for 8 parameters are always reserved. */
731 /* another six words for back chain, TOC register, link register, etc. */
734 /* if there are more arguments, allocate space for them in
735 the stack, then push them starting from the ninth one. */
737 if ((argno < nargs) || argbytes) {
742 space += ((len - argbytes + 3) & -4);
748 for (; jj < nargs; ++jj) {
750 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
753 /* add location required for the rest of the parameters */
754 space = (space + 7) & -8;
757 /* This is another instance we need to be concerned about securing our
758 stack space. If we write anything underneath %sp (r1), we might conflict
759 with the kernel who thinks he is free to use this area. So, update %sp
760 first before doing anything else. */
762 write_register (SP_REGNUM, sp);
764 /* if the last argument copied into the registers didn't fit there
765 completely, push the rest of it into stack. */
769 sp+24+(ii*4), ((char*)VALUE_CONTENTS (arg))+argbytes, len - argbytes);
771 ii += ((len - argbytes + 3) & -4) / 4;
774 /* push the rest of the arguments into stack. */
775 for (; argno < nargs; ++argno) {
778 len = TYPE_LENGTH (VALUE_TYPE (arg));
781 /* float types should be passed in fpr's, as well as in the stack. */
782 if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_FLT && f_argno < 13) {
786 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
788 memcpy (®isters[REGISTER_BYTE(FP0_REGNUM + 1 + f_argno)], VALUE_CONTENTS (arg),
793 write_memory (sp+24+(ii*4), (char *) VALUE_CONTENTS (arg), len);
794 ii += ((len + 3) & -4) / 4;
798 /* Secure stack areas first, before doing anything else. */
799 write_register (SP_REGNUM, sp);
801 saved_sp = dummy_frame_addr [dummy_frame_count - 1];
802 read_memory (saved_sp, tmp_buffer, 24);
803 write_memory (sp, tmp_buffer, 24);
805 /* set back chain properly */
806 store_address (tmp_buffer, 4, saved_sp);
807 write_memory (sp, tmp_buffer, 4);
809 target_store_registers (-1);
813 /* a given return value in `regbuf' with a type `valtype', extract and copy its
814 value into `valbuf' */
817 extract_return_value (valtype, regbuf, valbuf)
818 struct type *valtype;
819 char regbuf[REGISTER_BYTES];
823 if (TYPE_CODE (valtype) == TYPE_CODE_FLT) {
826 /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
827 We need to truncate the return value into float size (4 byte) if
830 if (TYPE_LENGTH (valtype) > 4) /* this is a double */
831 memcpy (valbuf, ®buf[REGISTER_BYTE (FP0_REGNUM + 1)],
832 TYPE_LENGTH (valtype));
834 memcpy (&dd, ®buf[REGISTER_BYTE (FP0_REGNUM + 1)], 8);
836 memcpy (valbuf, &ff, sizeof(float));
840 /* return value is copied starting from r3. */
841 memcpy (valbuf, ®buf[REGISTER_BYTE (3)], TYPE_LENGTH (valtype));
845 /* keep structure return address in this variable.
846 FIXME: This is a horrid kludge which should not be allowed to continue
847 living. This only allows a single nested call to a structure-returning
850 CORE_ADDR rs6000_struct_return_address;
853 /* Indirect function calls use a piece of trampoline code to do context
854 switching, i.e. to set the new TOC table. Skip such code if we are on
855 its first instruction (as when we have single-stepped to here).
856 Also skip shared library trampoline code (which is different from
857 indirect function call trampolines).
858 Result is desired PC to step until, or NULL if we are not in
862 skip_trampoline_code (pc)
865 register unsigned int ii, op;
866 CORE_ADDR solib_target_pc;
868 static unsigned trampoline_code[] = {
869 0x800b0000, /* l r0,0x0(r11) */
870 0x90410014, /* st r2,0x14(r1) */
871 0x7c0903a6, /* mtctr r0 */
872 0x804b0004, /* l r2,0x4(r11) */
873 0x816b0008, /* l r11,0x8(r11) */
874 0x4e800420, /* bctr */
879 /* If pc is in a shared library trampoline, return its target. */
880 solib_target_pc = find_solib_trampoline_target (pc);
882 return solib_target_pc;
884 for (ii=0; trampoline_code[ii]; ++ii) {
885 op = read_memory_integer (pc + (ii*4), 4);
886 if (op != trampoline_code [ii])
889 ii = read_register (11); /* r11 holds destination addr */
890 pc = read_memory_integer (ii, 4); /* (r11) value */
895 /* Determines whether the function FI has a frame on the stack or not. */
897 frameless_function_invocation (fi)
898 struct frame_info *fi;
900 CORE_ADDR func_start;
901 struct rs6000_framedata fdata;
903 if (fi->next != NULL)
904 /* Don't even think about framelessness except on the innermost frame. */
905 /* FIXME: Can also be frameless if fi->next->signal_handler_caller (if
906 a signal happens while executing in a frameless function). */
909 func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET;
911 /* If we failed to find the start of the function, it is a mistake
912 to inspect the instructions. */
917 (void) skip_prologue (func_start, &fdata);
918 return fdata.frameless;
921 /* Return the PC saved in a frame */
924 struct frame_info *fi;
926 CORE_ADDR func_start;
927 struct rs6000_framedata fdata;
930 func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET;
932 /* If we failed to find the start of the function, it is a mistake
933 to inspect the instructions. */
937 (void) skip_prologue (func_start, &fdata);
939 if (fi->signal_handler_caller)
940 return read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, 4);
942 if (fdata.lr_offset == 0 && fi->next != NULL)
943 return read_memory_integer (rs6000_frame_chain (fi) + DEFAULT_LR_SAVE, 4);
945 if (fdata.lr_offset == 0)
946 return read_register (LR_REGNUM);
948 return read_memory_integer (rs6000_frame_chain (fi) + fdata.lr_offset, 4);
951 /* If saved registers of frame FI are not known yet, read and cache them.
952 &FDATAP contains rs6000_framedata; TDATAP can be NULL,
953 in which case the framedata are read. */
956 frame_get_cache_fsr (fi, fdatap)
957 struct frame_info *fi;
958 struct rs6000_framedata *fdatap;
961 CORE_ADDR frame_addr;
962 struct rs6000_framedata work_fdata;
967 if (fdatap == NULL) {
968 fdatap = &work_fdata;
969 (void) skip_prologue (get_pc_function_start (fi->pc), fdatap);
972 fi->cache_fsr = (struct frame_saved_regs *)
973 obstack_alloc (&frame_cache_obstack, sizeof (struct frame_saved_regs));
974 memset (fi->cache_fsr, '\0', sizeof (struct frame_saved_regs));
976 if (fi->prev && fi->prev->frame)
977 frame_addr = fi->prev->frame;
979 frame_addr = read_memory_integer (fi->frame, 4);
981 /* if != -1, fdatap->saved_fpr is the smallest number of saved_fpr.
982 All fpr's from saved_fpr to fp31 are saved right underneath caller
983 stack pointer, starting from fp31 first. */
985 if (fdatap->saved_fpr >= 0) {
986 for (ii=31; ii >= fdatap->saved_fpr; --ii)
987 fi->cache_fsr->regs [FP0_REGNUM + ii] = frame_addr - ((32 - ii) * 8);
988 frame_addr -= (32 - fdatap->saved_fpr) * 8;
991 /* if != -1, fdatap->saved_gpr is the smallest number of saved_gpr.
992 All gpr's from saved_gpr to gpr31 are saved right under saved fprs,
993 starting from r31 first. */
995 if (fdatap->saved_gpr >= 0)
996 for (ii=31; ii >= fdatap->saved_gpr; --ii)
997 fi->cache_fsr->regs [ii] = frame_addr - ((32 - ii) * 4);
1000 /* Return the address of a frame. This is the inital %sp value when the frame
1001 was first allocated. For functions calling alloca(), it might be saved in
1002 an alloca register. */
1005 frame_initial_stack_address (fi)
1006 struct frame_info *fi;
1009 struct rs6000_framedata fdata;
1010 struct frame_info *callee_fi;
1012 /* if the initial stack pointer (frame address) of this frame is known,
1016 return fi->initial_sp;
1018 /* find out if this function is using an alloca register.. */
1020 (void) skip_prologue (get_pc_function_start (fi->pc), &fdata);
1022 /* if saved registers of this frame are not known yet, read and cache them. */
1025 frame_get_cache_fsr (fi, &fdata);
1027 /* If no alloca register used, then fi->frame is the value of the %sp for
1028 this frame, and it is good enough. */
1030 if (fdata.alloca_reg < 0) {
1031 fi->initial_sp = fi->frame;
1032 return fi->initial_sp;
1035 /* This function has an alloca register. If this is the top-most frame
1036 (with the lowest address), the value in alloca register is good. */
1039 return fi->initial_sp = read_register (fdata.alloca_reg);
1041 /* Otherwise, this is a caller frame. Callee has usually already saved
1042 registers, but there are exceptions (such as when the callee
1043 has no parameters). Find the address in which caller's alloca
1044 register is saved. */
1046 for (callee_fi = fi->next; callee_fi; callee_fi = callee_fi->next) {
1048 if (!callee_fi->cache_fsr)
1049 frame_get_cache_fsr (callee_fi, NULL);
1051 /* this is the address in which alloca register is saved. */
1053 tmpaddr = callee_fi->cache_fsr->regs [fdata.alloca_reg];
1055 fi->initial_sp = read_memory_integer (tmpaddr, 4);
1056 return fi->initial_sp;
1059 /* Go look into deeper levels of the frame chain to see if any one of
1060 the callees has saved alloca register. */
1063 /* If alloca register was not saved, by the callee (or any of its callees)
1064 then the value in the register is still good. */
1066 return fi->initial_sp = read_register (fdata.alloca_reg);
1070 rs6000_frame_chain (thisframe)
1071 struct frame_info *thisframe;
1074 if (inside_entry_file ((thisframe)->pc))
1076 if (thisframe->signal_handler_caller)
1077 fp = read_memory_integer (thisframe->frame + SIG_FRAME_FP_OFFSET, 4);
1079 fp = read_memory_integer ((thisframe)->frame, 4);
1084 /* Keep an array of load segment information and their TOC table addresses.
1085 This info will be useful when calling a shared library function by hand. */
1088 CORE_ADDR textorg, dataorg;
1089 unsigned long toc_offset;
1092 #define LOADINFOLEN 10
1094 static struct loadinfo *loadinfo = NULL;
1095 static int loadinfolen = 0;
1096 static int loadinfotocindex = 0;
1097 static int loadinfotextindex = 0;
1101 xcoff_init_loadinfo ()
1103 loadinfotocindex = 0;
1104 loadinfotextindex = 0;
1106 if (loadinfolen == 0) {
1107 loadinfo = (struct loadinfo *)
1108 xmalloc (sizeof (struct loadinfo) * LOADINFOLEN);
1109 loadinfolen = LOADINFOLEN;
1114 /* FIXME -- this is never called! */
1122 loadinfotocindex = 0;
1123 loadinfotextindex = 0;
1126 /* this is called from xcoffread.c */
1129 xcoff_add_toc_to_loadinfo (tocoff)
1130 unsigned long tocoff;
1132 while (loadinfotocindex >= loadinfolen) {
1133 loadinfolen += LOADINFOLEN;
1134 loadinfo = (struct loadinfo *)
1135 xrealloc (loadinfo, sizeof(struct loadinfo) * loadinfolen);
1137 loadinfo [loadinfotocindex++].toc_offset = tocoff;
1141 add_text_to_loadinfo (textaddr, dataaddr)
1145 while (loadinfotextindex >= loadinfolen) {
1146 loadinfolen += LOADINFOLEN;
1147 loadinfo = (struct loadinfo *)
1148 xrealloc (loadinfo, sizeof(struct loadinfo) * loadinfolen);
1150 loadinfo [loadinfotextindex].textorg = textaddr;
1151 loadinfo [loadinfotextindex].dataorg = dataaddr;
1152 ++loadinfotextindex;
1156 /* Note that this assumes that the "textorg" and "dataorg" elements
1157 of a member of this array are correlated with the "toc_offset"
1158 element of the same member. This is taken care of because the loops
1159 which assign the former (in xcoff_relocate_symtab or xcoff_relocate_core)
1160 and the latter (in scan_xcoff_symtab, via vmap_symtab, in vmap_ldinfo
1161 or xcoff_relocate_core) traverse the same objfiles in the same order. */
1164 find_toc_address (pc)
1167 int ii, toc_entry, tocbase = 0;
1169 for (ii=0; ii < loadinfotextindex; ++ii)
1170 if (pc > loadinfo[ii].textorg && loadinfo[ii].textorg > tocbase) {
1172 tocbase = loadinfo[ii].textorg;
1175 return loadinfo[toc_entry].dataorg + loadinfo[toc_entry].toc_offset;
1178 #ifdef GDB_TARGET_POWERPC
1180 gdb_print_insn_powerpc (memaddr, info)
1182 disassemble_info *info;
1184 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1185 return print_insn_big_powerpc (memaddr, info);
1187 return print_insn_little_powerpc (memaddr, info);
1192 _initialize_rs6000_tdep ()
1194 /* FIXME, this should not be decided via ifdef. */
1195 #ifdef GDB_TARGET_POWERPC
1196 tm_print_insn = gdb_print_insn_powerpc;
1198 tm_print_insn = print_insn_rs6000;