1 /* Target-dependent code for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
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., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
31 #include "xcoffsolib.h"
35 /* Breakpoint shadows for the single step instructions will be kept here. */
37 static struct sstep_breaks
39 /* Address, or 0 if this is not in use. */
41 /* Shadow contents. */
46 /* Hook for determining the TOC address when calling functions in the
47 inferior under AIX. The initialization code in rs6000-nat.c sets
48 this hook to point to find_toc_address. */
50 CORE_ADDR (*find_toc_address_hook) PARAMS ((CORE_ADDR)) = NULL;
52 /* Static function prototypes */
54 static CORE_ADDR branch_dest PARAMS ((int opcode, int instr, CORE_ADDR pc,
57 static void frame_get_saved_regs PARAMS ((struct frame_info * fi,
58 struct rs6000_framedata * fdatap));
60 static void pop_dummy_frame PARAMS ((void));
62 static CORE_ADDR frame_initial_stack_address PARAMS ((struct frame_info *));
65 rs6000_skip_prologue (pc)
68 struct rs6000_framedata frame;
69 pc = skip_prologue (pc, &frame);
74 /* Fill in fi->saved_regs */
76 struct frame_extra_info
78 /* Functions calling alloca() change the value of the stack
79 pointer. We need to use initial stack pointer (which is saved in
80 r31 by gcc) in such cases. If a compiler emits traceback table,
81 then we should use the alloca register specified in traceback
83 CORE_ADDR initial_sp; /* initial stack pointer. */
87 rs6000_init_extra_frame_info (fromleaf, fi)
89 struct frame_info *fi;
91 fi->extra_info = (struct frame_extra_info *)
92 frame_obstack_alloc (sizeof (struct frame_extra_info));
93 fi->extra_info->initial_sp = 0;
94 if (fi->next != (CORE_ADDR) 0
95 && fi->pc < TEXT_SEGMENT_BASE)
96 /* We're in get_prev_frame */
97 /* and this is a special signal frame. */
98 /* (fi->pc will be some low address in the kernel, */
99 /* to which the signal handler returns). */
100 fi->signal_handler_caller = 1;
105 rs6000_frame_init_saved_regs (fi)
106 struct frame_info *fi;
108 frame_get_saved_regs (fi, NULL);
112 rs6000_frame_args_address (fi)
113 struct frame_info *fi;
115 if (fi->extra_info->initial_sp != 0)
116 return fi->extra_info->initial_sp;
118 return frame_initial_stack_address (fi);
122 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
125 branch_dest (opcode, instr, pc, safety)
136 absolute = (int) ((instr >> 1) & 1);
141 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
145 dest = pc + immediate;
149 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
153 dest = pc + immediate;
157 ext_op = (instr >> 1) & 0x3ff;
159 if (ext_op == 16) /* br conditional register */
161 dest = read_register (LR_REGNUM) & ~3;
163 /* If we are about to return from a signal handler, dest is
164 something like 0x3c90. The current frame is a signal handler
165 caller frame, upon completion of the sigreturn system call
166 execution will return to the saved PC in the frame. */
167 if (dest < TEXT_SEGMENT_BASE)
169 struct frame_info *fi;
171 fi = get_current_frame ();
173 dest = read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET,
178 else if (ext_op == 528) /* br cond to count reg */
180 dest = read_register (CTR_REGNUM) & ~3;
182 /* If we are about to execute a system call, dest is something
183 like 0x22fc or 0x3b00. Upon completion the system call
184 will return to the address in the link register. */
185 if (dest < TEXT_SEGMENT_BASE)
186 dest = read_register (LR_REGNUM) & ~3;
195 return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
199 /* Sequence of bytes for breakpoint instruction. */
201 #define BIG_BREAKPOINT { 0x7d, 0x82, 0x10, 0x08 }
202 #define LITTLE_BREAKPOINT { 0x08, 0x10, 0x82, 0x7d }
205 rs6000_breakpoint_from_pc (bp_addr, bp_size)
209 static unsigned char big_breakpoint[] = BIG_BREAKPOINT;
210 static unsigned char little_breakpoint[] = LITTLE_BREAKPOINT;
212 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
213 return big_breakpoint;
215 return little_breakpoint;
219 /* AIX does not support PT_STEP. Simulate it. */
222 rs6000_software_single_step (signal, insert_breakpoints_p)
224 int insert_breakpoints_p;
226 #define INSNLEN(OPCODE) 4
228 static char le_breakp[] = LITTLE_BREAKPOINT;
229 static char be_breakp[] = BIG_BREAKPOINT;
230 char *breakp = TARGET_BYTE_ORDER == BIG_ENDIAN ? be_breakp : le_breakp;
236 if (insert_breakpoints_p)
241 insn = read_memory_integer (loc, 4);
243 breaks[0] = loc + INSNLEN (insn);
245 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
247 /* Don't put two breakpoints on the same address. */
248 if (breaks[1] == breaks[0])
251 stepBreaks[1].address = 0;
253 for (ii = 0; ii < 2; ++ii)
256 /* ignore invalid breakpoint. */
257 if (breaks[ii] == -1)
260 read_memory (breaks[ii], stepBreaks[ii].data, 4);
262 write_memory (breaks[ii], breakp, 4);
263 stepBreaks[ii].address = breaks[ii];
270 /* remove step breakpoints. */
271 for (ii = 0; ii < 2; ++ii)
272 if (stepBreaks[ii].address != 0)
274 (stepBreaks[ii].address, stepBreaks[ii].data, 4);
277 errno = 0; /* FIXME, don't ignore errors! */
278 /* What errors? {read,write}_memory call error(). */
282 /* return pc value after skipping a function prologue and also return
283 information about a function frame.
285 in struct rs6000_framedata fdata:
286 - frameless is TRUE, if function does not have a frame.
287 - nosavedpc is TRUE, if function does not save %pc value in its frame.
288 - offset is the initial size of this stack frame --- the amount by
289 which we decrement the sp to allocate the frame.
290 - saved_gpr is the number of the first saved gpr.
291 - saved_fpr is the number of the first saved fpr.
292 - alloca_reg is the number of the register used for alloca() handling.
294 - gpr_offset is the offset of the first saved gpr from the previous frame.
295 - fpr_offset is the offset of the first saved fpr from the previous frame.
296 - lr_offset is the offset of the saved lr
297 - cr_offset is the offset of the saved cr
300 #define SIGNED_SHORT(x) \
301 ((sizeof (short) == 2) \
302 ? ((int)(short)(x)) \
303 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
305 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
308 skip_prologue (pc, fdata)
310 struct rs6000_framedata *fdata;
312 CORE_ADDR orig_pc = pc;
320 int minimal_toc_loaded = 0;
321 static struct rs6000_framedata zero_frame;
324 fdata->saved_gpr = -1;
325 fdata->saved_fpr = -1;
326 fdata->alloca_reg = -1;
327 fdata->frameless = 1;
328 fdata->nosavedpc = 1;
330 if (target_read_memory (pc, buf, 4))
331 return pc; /* Can't access it -- assume no prologue. */
333 /* Assume that subsequent fetches can fail with low probability. */
338 op = read_memory_integer (pc, 4);
340 if ((op & 0xfc1fffff) == 0x7c0802a6)
342 lr_reg = (op & 0x03e00000) | 0x90010000;
346 else if ((op & 0xfc1fffff) == 0x7c000026)
348 cr_reg = (op & 0x03e00000) | 0x90010000;
352 else if ((op & 0xfc1f0000) == 0xd8010000)
353 { /* stfd Rx,NUM(r1) */
354 reg = GET_SRC_REG (op);
355 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
357 fdata->saved_fpr = reg;
358 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
363 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
364 ((op & 0xfc1f0000) == 0x90010000 && /* st rx,NUM(r1),
366 (op & 0x03e00000) >= 0x01a00000))
369 reg = GET_SRC_REG (op);
370 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
372 fdata->saved_gpr = reg;
373 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
378 else if ((op & 0xffff0000) == 0x3c000000)
379 { /* addis 0,0,NUM, used
381 fdata->offset = (op & 0x0000ffff) << 16;
382 fdata->frameless = 0;
386 else if ((op & 0xffff0000) == 0x60000000)
387 { /* ori 0,0,NUM, 2nd ha
388 lf of >= 32k frames */
389 fdata->offset |= (op & 0x0000ffff);
390 fdata->frameless = 0;
394 else if ((op & 0xffff0000) == lr_reg)
397 fdata->lr_offset = SIGNED_SHORT (op) + offset;
398 fdata->nosavedpc = 0;
403 else if ((op & 0xffff0000) == cr_reg)
406 fdata->cr_offset = SIGNED_SHORT (op) + offset;
411 else if (op == 0x48000005)
417 else if (op == 0x48000004)
422 else if (((op & 0xffff0000) == 0x801e0000 || /* lwz 0,NUM(r30), used
423 in V.4 -mrelocatable */
424 op == 0x7fc0f214) && /* add r30,r0,r30, used
425 in V.4 -mrelocatable */
426 lr_reg == 0x901e0000)
431 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
432 in V.4 -mminimal-toc */
433 (op & 0xffff0000) == 0x3bde0000)
434 { /* addi 30,30,foo@l */
438 else if ((op & 0xfc000001) == 0x48000001)
442 fdata->frameless = 0;
443 /* Don't skip over the subroutine call if it is not within the first
444 three instructions of the prologue. */
445 if ((pc - orig_pc) > 8)
448 op = read_memory_integer (pc + 4, 4);
450 /* At this point, make sure this is not a trampoline function
451 (a function that simply calls another functions, and nothing else).
452 If the next is not a nop, this branch was part of the function
455 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
456 break; /* don't skip over
460 /* update stack pointer */
462 else if ((op & 0xffff0000) == 0x94210000)
463 { /* stu r1,NUM(r1) */
464 fdata->frameless = 0;
465 fdata->offset = SIGNED_SHORT (op);
466 offset = fdata->offset;
470 else if (op == 0x7c21016e)
472 fdata->frameless = 0;
473 offset = fdata->offset;
476 /* Load up minimal toc pointer */
478 else if ((op >> 22) == 0x20f
479 && !minimal_toc_loaded)
480 { /* l r31,... or l r30,... */
481 minimal_toc_loaded = 1;
484 /* move parameters from argument registers to local variable
487 else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */
488 (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */
489 (((op >> 21) & 31) <= 10) &&
490 (((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
494 /* store parameters in stack */
496 else if ((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
497 (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */
498 (op & 0xfc1f0000) == 0xfc010000)
499 { /* frsp, fp?,NUM(r1) */
502 /* store parameters in stack via frame pointer */
505 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */
506 (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */
507 (op & 0xfc1f0000) == 0xfc1f0000))
508 { /* frsp, fp?,NUM(r1) */
511 /* Set up frame pointer */
513 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
516 fdata->frameless = 0;
518 fdata->alloca_reg = 31;
521 /* Another way to set up the frame pointer. */
523 else if ((op & 0xfc1fffff) == 0x38010000)
524 { /* addi rX, r1, 0x0 */
525 fdata->frameless = 0;
527 fdata->alloca_reg = (op & ~0x38010000) >> 21;
538 /* I have problems with skipping over __main() that I need to address
539 * sometime. Previously, I used to use misc_function_vector which
540 * didn't work as well as I wanted to be. -MGO */
542 /* If the first thing after skipping a prolog is a branch to a function,
543 this might be a call to an initializer in main(), introduced by gcc2.
544 We'd like to skip over it as well. Fortunately, xlc does some extra
545 work before calling a function right after a prologue, thus we can
546 single out such gcc2 behaviour. */
549 if ((op & 0xfc000001) == 0x48000001)
550 { /* bl foo, an initializer function? */
551 op = read_memory_integer (pc + 4, 4);
553 if (op == 0x4def7b82)
554 { /* cror 0xf, 0xf, 0xf (nop) */
556 /* check and see if we are in main. If so, skip over this initializer
559 tmp = find_pc_misc_function (pc);
560 if (tmp >= 0 && STREQ (misc_function_vector[tmp].name, "main"))
566 fdata->offset = -fdata->offset;
571 /*************************************************************************
572 Support for creating pushing a dummy frame into the stack, and popping
574 *************************************************************************/
576 /* The total size of dummy frame is 436, which is;
580 7 the rest - 28 bytes
581 callee's link area - 24 bytes
584 Note that the last 24 bytes for the link area might not be necessary,
585 since it will be taken care of by push_arguments(). */
587 #define DUMMY_FRAME_SIZE 448
589 #define DUMMY_FRAME_ADDR_SIZE 10
591 /* Make sure you initialize these in somewhere, in case gdb gives up what it
592 was debugging and starts debugging something else. FIXMEibm */
594 static int dummy_frame_count = 0;
595 static int dummy_frame_size = 0;
596 static CORE_ADDR *dummy_frame_addr = 0;
598 extern int stop_stack_dummy;
600 /* push a dummy frame into stack, save all register. Currently we are saving
601 only gpr's and fpr's, which is not good enough! FIXMEmgo */
608 /* Same thing, target byte order. */
613 /* Same thing, target byte order. */
616 /* Needed to figure out where to save the dummy link area.
617 FIXME: There should be an easier way to do this, no? tiemann 9/9/95. */
618 struct rs6000_framedata fdata;
622 target_fetch_registers (-1);
624 if (dummy_frame_count >= dummy_frame_size)
626 dummy_frame_size += DUMMY_FRAME_ADDR_SIZE;
627 if (dummy_frame_addr)
628 dummy_frame_addr = (CORE_ADDR *) xrealloc
629 (dummy_frame_addr, sizeof (CORE_ADDR) * (dummy_frame_size));
631 dummy_frame_addr = (CORE_ADDR *)
632 xmalloc (sizeof (CORE_ADDR) * (dummy_frame_size));
635 sp = read_register (SP_REGNUM);
636 pc = read_register (PC_REGNUM);
637 store_address (pc_targ, 4, pc);
639 skip_prologue (get_pc_function_start (pc), &fdata);
641 dummy_frame_addr[dummy_frame_count++] = sp;
643 /* Be careful! If the stack pointer is not decremented first, then kernel
644 thinks he is free to use the space underneath it. And kernel actually
645 uses that area for IPC purposes when executing ptrace(2) calls. So
646 before writing register values into the new frame, decrement and update
647 %sp first in order to secure your frame. */
649 /* FIXME: We don't check if the stack really has this much space.
650 This is a problem on the ppc simulator (which only grants one page
651 (4096 bytes) by default. */
653 write_register (SP_REGNUM, sp - DUMMY_FRAME_SIZE);
655 /* gdb relies on the state of current_frame. We'd better update it,
656 otherwise things like do_registers_info() wouldn't work properly! */
658 flush_cached_frames ();
660 /* save program counter in link register's space. */
661 write_memory (sp + (fdata.lr_offset ? fdata.lr_offset : DEFAULT_LR_SAVE),
664 /* save all floating point and general purpose registers here. */
667 for (ii = 0; ii < 32; ++ii)
668 write_memory (sp - 8 - (ii * 8), ®isters[REGISTER_BYTE (31 - ii + FP0_REGNUM)], 8);
671 for (ii = 1; ii <= 32; ++ii)
672 write_memory (sp - 256 - (ii * 4), ®isters[REGISTER_BYTE (32 - ii)], 4);
674 /* so far, 32*2 + 32 words = 384 bytes have been written.
675 7 extra registers in our register set: pc, ps, cnd, lr, cnt, xer, mq */
677 for (ii = 1; ii <= (LAST_UISA_SP_REGNUM - FIRST_UISA_SP_REGNUM + 1); ++ii)
679 write_memory (sp - 384 - (ii * 4),
680 ®isters[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4);
683 /* Save sp or so called back chain right here. */
684 store_address (sp_targ, 4, sp);
685 write_memory (sp - DUMMY_FRAME_SIZE, sp_targ, 4);
686 sp -= DUMMY_FRAME_SIZE;
688 /* And finally, this is the back chain. */
689 write_memory (sp + 8, pc_targ, 4);
693 /* Pop a dummy frame.
695 In rs6000 when we push a dummy frame, we save all of the registers. This
696 is usually done before user calls a function explicitly.
698 After a dummy frame is pushed, some instructions are copied into stack,
699 and stack pointer is decremented even more. Since we don't have a frame
700 pointer to get back to the parent frame of the dummy, we start having
701 trouble poping it. Therefore, we keep a dummy frame stack, keeping
702 addresses of dummy frames as such. When poping happens and when we
703 detect that was a dummy frame, we pop it back to its parent by using
704 dummy frame stack (`dummy_frame_addr' array).
706 FIXME: This whole concept is broken. You should be able to detect
707 a dummy stack frame *on the user's stack itself*. When you do,
708 then you know the format of that stack frame -- including its
709 saved SP register! There should *not* be a separate stack in the
710 GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92
718 sp = dummy_frame_addr[--dummy_frame_count];
720 /* restore all fpr's. */
721 for (ii = 1; ii <= 32; ++ii)
722 read_memory (sp - (ii * 8), ®isters[REGISTER_BYTE (32 - ii + FP0_REGNUM)], 8);
724 /* restore all gpr's */
725 for (ii = 1; ii <= 32; ++ii)
727 read_memory (sp - 256 - (ii * 4), ®isters[REGISTER_BYTE (32 - ii)], 4);
730 /* restore the rest of the registers. */
731 for (ii = 1; ii <= (LAST_UISA_SP_REGNUM - FIRST_UISA_SP_REGNUM + 1); ++ii)
732 read_memory (sp - 384 - (ii * 4),
733 ®isters[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4);
735 read_memory (sp - (DUMMY_FRAME_SIZE - 8),
736 ®isters[REGISTER_BYTE (PC_REGNUM)], 4);
738 /* when a dummy frame was being pushed, we had to decrement %sp first, in
739 order to secure astack space. Thus, saved %sp (or %r1) value, is not the
740 one we should restore. Change it with the one we need. */
742 memcpy (®isters[REGISTER_BYTE (FP_REGNUM)], (char *) &sp, sizeof (int));
744 /* Now we can restore all registers. */
746 target_store_registers (-1);
748 flush_cached_frames ();
752 /* pop the innermost frame, go back to the caller. */
757 CORE_ADDR pc, lr, sp, prev_sp; /* %pc, %lr, %sp */
758 struct rs6000_framedata fdata;
759 struct frame_info *frame = get_current_frame ();
763 sp = FRAME_FP (frame);
765 if (stop_stack_dummy)
767 if (USE_GENERIC_DUMMY_FRAMES)
769 generic_pop_dummy_frame ();
770 flush_cached_frames ();
775 if (dummy_frame_count)
781 /* Make sure that all registers are valid. */
782 read_register_bytes (0, NULL, REGISTER_BYTES);
784 /* figure out previous %pc value. If the function is frameless, it is
785 still in the link register, otherwise walk the frames and retrieve the
786 saved %pc value in the previous frame. */
788 addr = get_pc_function_start (frame->pc);
789 (void) skip_prologue (addr, &fdata);
794 prev_sp = read_memory_integer (sp, 4);
795 if (fdata.lr_offset == 0)
796 lr = read_register (LR_REGNUM);
798 lr = read_memory_integer (prev_sp + fdata.lr_offset, 4);
800 /* reset %pc value. */
801 write_register (PC_REGNUM, lr);
803 /* reset register values if any was saved earlier. */
805 if (fdata.saved_gpr != -1)
807 addr = prev_sp + fdata.gpr_offset;
808 for (ii = fdata.saved_gpr; ii <= 31; ++ii)
810 read_memory (addr, ®isters[REGISTER_BYTE (ii)], 4);
815 if (fdata.saved_fpr != -1)
817 addr = prev_sp + fdata.fpr_offset;
818 for (ii = fdata.saved_fpr; ii <= 31; ++ii)
820 read_memory (addr, ®isters[REGISTER_BYTE (ii + FP0_REGNUM)], 8);
825 write_register (SP_REGNUM, prev_sp);
826 target_store_registers (-1);
827 flush_cached_frames ();
830 /* fixup the call sequence of a dummy function, with the real function address.
831 its argumets will be passed by gdb. */
834 rs6000_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p)
843 #define TOC_ADDR_OFFSET 20
844 #define TARGET_ADDR_OFFSET 28
847 CORE_ADDR target_addr;
849 if (USE_GENERIC_DUMMY_FRAMES)
851 if (find_toc_address_hook != NULL)
853 CORE_ADDR tocvalue = (*find_toc_address_hook) (fun);
854 write_register (TOC_REGNUM, tocvalue);
859 if (find_toc_address_hook != NULL)
863 tocvalue = (*find_toc_address_hook) (fun);
864 ii = *(int *) ((char *) dummyname + TOC_ADDR_OFFSET);
865 ii = (ii & 0xffff0000) | (tocvalue >> 16);
866 *(int *) ((char *) dummyname + TOC_ADDR_OFFSET) = ii;
868 ii = *(int *) ((char *) dummyname + TOC_ADDR_OFFSET + 4);
869 ii = (ii & 0xffff0000) | (tocvalue & 0x0000ffff);
870 *(int *) ((char *) dummyname + TOC_ADDR_OFFSET + 4) = ii;
874 ii = *(int *) ((char *) dummyname + TARGET_ADDR_OFFSET);
875 ii = (ii & 0xffff0000) | (target_addr >> 16);
876 *(int *) ((char *) dummyname + TARGET_ADDR_OFFSET) = ii;
878 ii = *(int *) ((char *) dummyname + TARGET_ADDR_OFFSET + 4);
879 ii = (ii & 0xffff0000) | (target_addr & 0x0000ffff);
880 *(int *) ((char *) dummyname + TARGET_ADDR_OFFSET + 4) = ii;
884 /* Pass the arguments in either registers, or in the stack. In RS6000,
885 the first eight words of the argument list (that might be less than
886 eight parameters if some parameters occupy more than one word) are
887 passed in r3..r11 registers. float and double parameters are
888 passed in fpr's, in addition to that. Rest of the parameters if any
889 are passed in user stack. There might be cases in which half of the
890 parameter is copied into registers, the other half is pushed into
893 If the function is returning a structure, then the return address is passed
894 in r3, then the first 7 words of the parameters can be passed in registers,
898 rs6000_push_arguments (nargs, args, sp, struct_return, struct_addr)
903 CORE_ADDR struct_addr;
907 int argno; /* current argument number */
908 int argbytes; /* current argument byte */
910 int f_argno = 0; /* current floating point argno */
917 if (!USE_GENERIC_DUMMY_FRAMES)
919 if (dummy_frame_count <= 0)
920 printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n");
923 /* The first eight words of ther arguments are passed in registers. Copy
926 If the function is returning a `struct', then the first word (which
927 will be passed in r3) is used for struct return address. In that
928 case we should advance one word and start from r4 register to copy
931 ii = struct_return ? 1 : 0;
934 effectively indirect call... gcc does...
936 return_val example( float, int);
939 float in fp0, int in r3
940 offset of stack on overflow 8/16
941 for varargs, must go by type.
943 float in r3&r4, int in r5
944 offset of stack on overflow different
946 return in r3 or f0. If no float, must study how gcc emulates floats;
947 pay attention to arg promotion.
948 User may have to cast\args to handle promotion correctly
949 since gdb won't know if prototype supplied or not.
952 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
954 int reg_size = REGISTER_RAW_SIZE (ii + 3);
957 type = check_typedef (VALUE_TYPE (arg));
958 len = TYPE_LENGTH (type);
960 if (TYPE_CODE (type) == TYPE_CODE_FLT)
963 /* floating point arguments are passed in fpr's, as well as gpr's.
964 There are 13 fpr's reserved for passing parameters. At this point
965 there is no way we would run out of them. */
969 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
971 memcpy (®isters[REGISTER_BYTE (FP0_REGNUM + 1 + f_argno)],
972 VALUE_CONTENTS (arg),
980 /* Argument takes more than one register. */
981 while (argbytes < len)
983 memset (®isters[REGISTER_BYTE (ii + 3)], 0, reg_size);
984 memcpy (®isters[REGISTER_BYTE (ii + 3)],
985 ((char *) VALUE_CONTENTS (arg)) + argbytes,
986 (len - argbytes) > reg_size
987 ? reg_size : len - argbytes);
988 ++ii, argbytes += reg_size;
991 goto ran_out_of_registers_for_arguments;
997 { /* Argument can fit in one register. No problem. */
998 int adj = TARGET_BYTE_ORDER == BIG_ENDIAN ? reg_size - len : 0;
999 memset (®isters[REGISTER_BYTE (ii + 3)], 0, reg_size);
1000 memcpy ((char *)®isters[REGISTER_BYTE (ii + 3)] + adj,
1001 VALUE_CONTENTS (arg), len);
1006 ran_out_of_registers_for_arguments:
1008 if (USE_GENERIC_DUMMY_FRAMES)
1010 saved_sp = read_sp ();
1011 #ifndef ELF_OBJECT_FORMAT
1012 /* location for 8 parameters are always reserved. */
1015 /* another six words for back chain, TOC register, link register, etc. */
1018 /* stack pointer must be quadword aligned */
1024 /* location for 8 parameters are always reserved. */
1027 /* another six words for back chain, TOC register, link register, etc. */
1030 /* stack pointer must be quadword aligned */
1034 /* if there are more arguments, allocate space for them in
1035 the stack, then push them starting from the ninth one. */
1037 if ((argno < nargs) || argbytes)
1043 space += ((len - argbytes + 3) & -4);
1049 for (; jj < nargs; ++jj)
1051 value_ptr val = args[jj];
1052 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
1055 /* add location required for the rest of the parameters */
1056 space = (space + 15) & -16;
1059 /* This is another instance we need to be concerned about securing our
1060 stack space. If we write anything underneath %sp (r1), we might conflict
1061 with the kernel who thinks he is free to use this area. So, update %sp
1062 first before doing anything else. */
1064 write_register (SP_REGNUM, sp);
1066 /* if the last argument copied into the registers didn't fit there
1067 completely, push the rest of it into stack. */
1071 write_memory (sp + 24 + (ii * 4),
1072 ((char *) VALUE_CONTENTS (arg)) + argbytes,
1075 ii += ((len - argbytes + 3) & -4) / 4;
1078 /* push the rest of the arguments into stack. */
1079 for (; argno < nargs; ++argno)
1083 type = check_typedef (VALUE_TYPE (arg));
1084 len = TYPE_LENGTH (type);
1087 /* float types should be passed in fpr's, as well as in the stack. */
1088 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
1093 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
1095 memcpy (®isters[REGISTER_BYTE (FP0_REGNUM + 1 + f_argno)],
1096 VALUE_CONTENTS (arg),
1101 write_memory (sp + 24 + (ii * 4), (char *) VALUE_CONTENTS (arg), len);
1102 ii += ((len + 3) & -4) / 4;
1106 /* Secure stack areas first, before doing anything else. */
1107 write_register (SP_REGNUM, sp);
1109 if (!USE_GENERIC_DUMMY_FRAMES)
1111 /* we want to copy 24 bytes of target's frame to dummy's frame,
1112 then set back chain to point to new frame. */
1114 saved_sp = dummy_frame_addr[dummy_frame_count - 1];
1115 read_memory (saved_sp, tmp_buffer, 24);
1116 write_memory (sp, tmp_buffer, 24);
1119 /* set back chain properly */
1120 store_address (tmp_buffer, 4, saved_sp);
1121 write_memory (sp, tmp_buffer, 4);
1123 target_store_registers (-1);
1126 /* #ifdef ELF_OBJECT_FORMAT */
1128 /* Function: ppc_push_return_address (pc, sp)
1129 Set up the return address for the inferior function call. */
1132 ppc_push_return_address (pc, sp)
1136 write_register (LR_REGNUM, CALL_DUMMY_ADDRESS ());
1142 /* a given return value in `regbuf' with a type `valtype', extract and copy its
1143 value into `valbuf' */
1146 extract_return_value (valtype, regbuf, valbuf)
1147 struct type *valtype;
1148 char regbuf[REGISTER_BYTES];
1153 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1158 /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
1159 We need to truncate the return value into float size (4 byte) if
1162 if (TYPE_LENGTH (valtype) > 4) /* this is a double */
1164 ®buf[REGISTER_BYTE (FP0_REGNUM + 1)],
1165 TYPE_LENGTH (valtype));
1168 memcpy (&dd, ®buf[REGISTER_BYTE (FP0_REGNUM + 1)], 8);
1170 memcpy (valbuf, &ff, sizeof (float));
1175 /* return value is copied starting from r3. */
1176 if (TARGET_BYTE_ORDER == BIG_ENDIAN
1177 && TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (3))
1178 offset = REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
1181 regbuf + REGISTER_BYTE (3) + offset,
1182 TYPE_LENGTH (valtype));
1187 /* keep structure return address in this variable.
1188 FIXME: This is a horrid kludge which should not be allowed to continue
1189 living. This only allows a single nested call to a structure-returning
1190 function. Come on, guys! -- gnu@cygnus.com, Aug 92 */
1192 CORE_ADDR rs6000_struct_return_address;
1195 /* Indirect function calls use a piece of trampoline code to do context
1196 switching, i.e. to set the new TOC table. Skip such code if we are on
1197 its first instruction (as when we have single-stepped to here).
1198 Also skip shared library trampoline code (which is different from
1199 indirect function call trampolines).
1200 Result is desired PC to step until, or NULL if we are not in
1204 skip_trampoline_code (pc)
1207 register unsigned int ii, op;
1208 CORE_ADDR solib_target_pc;
1210 static unsigned trampoline_code[] =
1212 0x800b0000, /* l r0,0x0(r11) */
1213 0x90410014, /* st r2,0x14(r1) */
1214 0x7c0903a6, /* mtctr r0 */
1215 0x804b0004, /* l r2,0x4(r11) */
1216 0x816b0008, /* l r11,0x8(r11) */
1217 0x4e800420, /* bctr */
1218 0x4e800020, /* br */
1222 /* If pc is in a shared library trampoline, return its target. */
1223 solib_target_pc = find_solib_trampoline_target (pc);
1224 if (solib_target_pc)
1225 return solib_target_pc;
1227 for (ii = 0; trampoline_code[ii]; ++ii)
1229 op = read_memory_integer (pc + (ii * 4), 4);
1230 if (op != trampoline_code[ii])
1233 ii = read_register (11); /* r11 holds destination addr */
1234 pc = read_memory_integer (ii, 4); /* (r11) value */
1238 /* Determines whether the function FI has a frame on the stack or not. */
1241 rs6000_frameless_function_invocation (struct frame_info *fi)
1243 CORE_ADDR func_start;
1244 struct rs6000_framedata fdata;
1246 /* Don't even think about framelessness except on the innermost frame
1247 or if the function was interrupted by a signal. */
1248 if (fi->next != NULL && !fi->next->signal_handler_caller)
1251 func_start = get_pc_function_start (fi->pc);
1253 /* If we failed to find the start of the function, it is a mistake
1254 to inspect the instructions. */
1258 /* A frame with a zero PC is usually created by dereferencing a NULL
1259 function pointer, normally causing an immediate core dump of the
1260 inferior. Mark function as frameless, as the inferior has no chance
1261 of setting up a stack frame. */
1268 (void) skip_prologue (func_start, &fdata);
1269 return fdata.frameless;
1272 /* Return the PC saved in a frame */
1275 rs6000_frame_saved_pc (struct frame_info *fi)
1277 CORE_ADDR func_start;
1278 struct rs6000_framedata fdata;
1280 if (fi->signal_handler_caller)
1281 return read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, 4);
1283 if (USE_GENERIC_DUMMY_FRAMES)
1285 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
1286 return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
1289 func_start = get_pc_function_start (fi->pc);
1291 /* If we failed to find the start of the function, it is a mistake
1292 to inspect the instructions. */
1296 (void) skip_prologue (func_start, &fdata);
1298 if (fdata.lr_offset == 0 && fi->next != NULL)
1300 if (fi->next->signal_handler_caller)
1301 return read_memory_integer (fi->next->frame + SIG_FRAME_LR_OFFSET, 4);
1303 return read_memory_integer (FRAME_CHAIN (fi) + DEFAULT_LR_SAVE, 4);
1306 if (fdata.lr_offset == 0)
1307 return read_register (LR_REGNUM);
1309 return read_memory_integer (FRAME_CHAIN (fi) + fdata.lr_offset, 4);
1312 /* If saved registers of frame FI are not known yet, read and cache them.
1313 &FDATAP contains rs6000_framedata; TDATAP can be NULL,
1314 in which case the framedata are read. */
1317 frame_get_saved_regs (fi, fdatap)
1318 struct frame_info *fi;
1319 struct rs6000_framedata *fdatap;
1321 CORE_ADDR frame_addr;
1322 struct rs6000_framedata work_fdata;
1329 fdatap = &work_fdata;
1330 (void) skip_prologue (get_pc_function_start (fi->pc), fdatap);
1333 frame_saved_regs_zalloc (fi);
1335 /* If there were any saved registers, figure out parent's stack
1337 /* The following is true only if the frame doesn't have a call to
1340 if (fdatap->saved_fpr == 0 && fdatap->saved_gpr == 0
1341 && fdatap->lr_offset == 0 && fdatap->cr_offset == 0)
1343 else if (fi->prev && fi->prev->frame)
1344 frame_addr = fi->prev->frame;
1346 frame_addr = read_memory_integer (fi->frame, 4);
1348 /* if != -1, fdatap->saved_fpr is the smallest number of saved_fpr.
1349 All fpr's from saved_fpr to fp31 are saved. */
1351 if (fdatap->saved_fpr >= 0)
1354 int fpr_offset = frame_addr + fdatap->fpr_offset;
1355 for (i = fdatap->saved_fpr; i < 32; i++)
1357 fi->saved_regs[FP0_REGNUM + i] = fpr_offset;
1362 /* if != -1, fdatap->saved_gpr is the smallest number of saved_gpr.
1363 All gpr's from saved_gpr to gpr31 are saved. */
1365 if (fdatap->saved_gpr >= 0)
1368 int gpr_offset = frame_addr + fdatap->gpr_offset;
1369 for (i = fdatap->saved_gpr; i < 32; i++)
1371 fi->saved_regs[i] = gpr_offset;
1376 /* If != 0, fdatap->cr_offset is the offset from the frame that holds
1378 if (fdatap->cr_offset != 0)
1379 fi->saved_regs[CR_REGNUM] = frame_addr + fdatap->cr_offset;
1381 /* If != 0, fdatap->lr_offset is the offset from the frame that holds
1383 if (fdatap->lr_offset != 0)
1384 fi->saved_regs[LR_REGNUM] = frame_addr + fdatap->lr_offset;
1387 /* Return the address of a frame. This is the inital %sp value when the frame
1388 was first allocated. For functions calling alloca(), it might be saved in
1389 an alloca register. */
1392 frame_initial_stack_address (fi)
1393 struct frame_info *fi;
1396 struct rs6000_framedata fdata;
1397 struct frame_info *callee_fi;
1399 /* if the initial stack pointer (frame address) of this frame is known,
1402 if (fi->extra_info->initial_sp)
1403 return fi->extra_info->initial_sp;
1405 /* find out if this function is using an alloca register.. */
1407 (void) skip_prologue (get_pc_function_start (fi->pc), &fdata);
1409 /* if saved registers of this frame are not known yet, read and cache them. */
1411 if (!fi->saved_regs)
1412 frame_get_saved_regs (fi, &fdata);
1414 /* If no alloca register used, then fi->frame is the value of the %sp for
1415 this frame, and it is good enough. */
1417 if (fdata.alloca_reg < 0)
1419 fi->extra_info->initial_sp = fi->frame;
1420 return fi->extra_info->initial_sp;
1423 /* This function has an alloca register. If this is the top-most frame
1424 (with the lowest address), the value in alloca register is good. */
1427 return fi->extra_info->initial_sp = read_register (fdata.alloca_reg);
1429 /* Otherwise, this is a caller frame. Callee has usually already saved
1430 registers, but there are exceptions (such as when the callee
1431 has no parameters). Find the address in which caller's alloca
1432 register is saved. */
1434 for (callee_fi = fi->next; callee_fi; callee_fi = callee_fi->next)
1437 if (!callee_fi->saved_regs)
1438 frame_get_saved_regs (callee_fi, NULL);
1440 /* this is the address in which alloca register is saved. */
1442 tmpaddr = callee_fi->saved_regs[fdata.alloca_reg];
1445 fi->extra_info->initial_sp = read_memory_integer (tmpaddr, 4);
1446 return fi->extra_info->initial_sp;
1449 /* Go look into deeper levels of the frame chain to see if any one of
1450 the callees has saved alloca register. */
1453 /* If alloca register was not saved, by the callee (or any of its callees)
1454 then the value in the register is still good. */
1456 fi->extra_info->initial_sp = read_register (fdata.alloca_reg);
1457 return fi->extra_info->initial_sp;
1461 rs6000_frame_chain (thisframe)
1462 struct frame_info *thisframe;
1466 if (USE_GENERIC_DUMMY_FRAMES)
1468 if (PC_IN_CALL_DUMMY (thisframe->pc, thisframe->frame, thisframe->frame))
1469 return thisframe->frame; /* dummy frame same as caller's frame */
1472 if (inside_entry_file (thisframe->pc) ||
1473 thisframe->pc == entry_point_address ())
1476 if (thisframe->signal_handler_caller)
1477 fp = read_memory_integer (thisframe->frame + SIG_FRAME_FP_OFFSET, 4);
1478 else if (thisframe->next != NULL
1479 && thisframe->next->signal_handler_caller
1480 && FRAMELESS_FUNCTION_INVOCATION (thisframe))
1481 /* A frameless function interrupted by a signal did not change the
1483 fp = FRAME_FP (thisframe);
1485 fp = read_memory_integer ((thisframe)->frame, 4);
1487 if (USE_GENERIC_DUMMY_FRAMES)
1491 lr = read_register (LR_REGNUM);
1492 if (lr == entry_point_address ())
1493 if (fp != 0 && (fpp = read_memory_integer (fp, 4)) != 0)
1494 if (PC_IN_CALL_DUMMY (lr, fpp, fpp))
1501 /* Return nonzero if ADDR (a function pointer) is in the data space and
1502 is therefore a special function pointer. */
1505 is_magic_function_pointer (addr)
1508 struct obj_section *s;
1510 s = find_pc_section (addr);
1511 if (s && s->the_bfd_section->flags & SEC_CODE)
1517 #ifdef GDB_TARGET_POWERPC
1519 gdb_print_insn_powerpc (memaddr, info)
1521 disassemble_info *info;
1523 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1524 return print_insn_big_powerpc (memaddr, info);
1526 return print_insn_little_powerpc (memaddr, info);
1531 /* Handling the various PowerPC/RS6000 variants. */
1534 /* The arrays here called register_names_MUMBLE hold names that
1535 the rs6000_register_name function returns.
1537 For each family of PPC variants, I've tried to isolate out the
1538 common registers and put them up front, so that as long as you get
1539 the general family right, GDB will correctly identify the registers
1540 common to that family. The common register sets are:
1542 For the 60x family: hid0 hid1 iabr dabr pir
1544 For the 505 and 860 family: eie eid nri
1546 For the 403 and 403GC: icdbdr esr dear evpr cdbcr tsr tcr pit tbhi
1547 tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1
1550 Most of these register groups aren't anything formal. I arrived at
1551 them by looking at the registers that occurred in more than one
1554 /* UISA register names common across all architectures, including POWER. */
1556 #define COMMON_UISA_REG_NAMES \
1557 /* 0 */ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
1558 /* 8 */ "r8", "r9", "r10","r11","r12","r13","r14","r15", \
1559 /* 16 */ "r16","r17","r18","r19","r20","r21","r22","r23", \
1560 /* 24 */ "r24","r25","r26","r27","r28","r29","r30","r31", \
1561 /* 32 */ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
1562 /* 40 */ "f8", "f9", "f10","f11","f12","f13","f14","f15", \
1563 /* 48 */ "f16","f17","f18","f19","f20","f21","f22","f23", \
1564 /* 56 */ "f24","f25","f26","f27","f28","f29","f30","f31", \
1567 /* UISA-level SPR names for PowerPC. */
1568 #define PPC_UISA_SPR_NAMES \
1569 /* 66 */ "cr", "lr", "ctr", "xer", ""
1571 /* Segment register names, for PowerPC. */
1572 #define PPC_SEGMENT_REG_NAMES \
1573 /* 71 */ "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7", \
1574 /* 79 */ "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
1576 /* OEA SPR names for 32-bit PowerPC implementations.
1577 The blank space is for "asr", which is only present on 64-bit
1579 #define PPC_32_OEA_SPR_NAMES \
1581 /* 88 */ "ibat0u", "ibat0l", "ibat1u", "ibat1l", \
1582 /* 92 */ "ibat2u", "ibat2l", "ibat3u", "ibat3l", \
1583 /* 96 */ "dbat0u", "dbat0l", "dbat1u", "dbat1l", \
1584 /* 100 */ "dbat2u", "dbat2l", "dbat3u", "dbat3l", \
1585 /* 104 */ "sdr1", "", "dar", "dsisr", "sprg0", "sprg1", "sprg2", "sprg3",\
1586 /* 112 */ "srr0", "srr1", "tbl", "tbu", "dec", "dabr", "ear"
1588 /* For the RS6000, we only cover user-level SPR's. */
1589 char *register_names_rs6000[] =
1591 COMMON_UISA_REG_NAMES,
1592 /* 66 */ "cnd", "lr", "cnt", "xer", "mq"
1595 /* a UISA-only view of the PowerPC. */
1596 char *register_names_uisa[] =
1598 COMMON_UISA_REG_NAMES,
1602 char *register_names_403[] =
1604 COMMON_UISA_REG_NAMES,
1606 PPC_SEGMENT_REG_NAMES,
1607 PPC_32_OEA_SPR_NAMES,
1608 /* 119 */ "icdbdr", "esr", "dear", "evpr", "cdbcr", "tsr", "tcr", "pit",
1609 /* 127 */ "tbhi", "tblo", "srr2", "srr3", "dbsr", "dbcr", "iac1", "iac2",
1610 /* 135 */ "dac1", "dac2", "dccr", "iccr", "pbl1", "pbu1", "pbl2", "pbu2"
1613 char *register_names_403GC[] =
1615 COMMON_UISA_REG_NAMES,
1617 PPC_SEGMENT_REG_NAMES,
1618 PPC_32_OEA_SPR_NAMES,
1619 /* 119 */ "icdbdr", "esr", "dear", "evpr", "cdbcr", "tsr", "tcr", "pit",
1620 /* 127 */ "tbhi", "tblo", "srr2", "srr3", "dbsr", "dbcr", "iac1", "iac2",
1621 /* 135 */ "dac1", "dac2", "dccr", "iccr", "pbl1", "pbu1", "pbl2", "pbu2",
1622 /* 143 */ "zpr", "pid", "sgr", "dcwr", "tbhu", "tblu"
1625 char *register_names_505[] =
1627 COMMON_UISA_REG_NAMES,
1629 PPC_SEGMENT_REG_NAMES,
1630 PPC_32_OEA_SPR_NAMES,
1631 /* 119 */ "eie", "eid", "nri"
1634 char *register_names_860[] =
1636 COMMON_UISA_REG_NAMES,
1638 PPC_SEGMENT_REG_NAMES,
1639 PPC_32_OEA_SPR_NAMES,
1640 /* 119 */ "eie", "eid", "nri", "cmpa", "cmpb", "cmpc", "cmpd", "icr",
1641 /* 127 */ "der", "counta", "countb", "cmpe", "cmpf", "cmpg", "cmph",
1642 /* 134 */ "lctrl1", "lctrl2", "ictrl", "bar", "ic_cst", "ic_adr", "ic_dat",
1643 /* 141 */ "dc_cst", "dc_adr", "dc_dat", "dpdr", "dpir", "immr", "mi_ctr",
1644 /* 148 */ "mi_ap", "mi_epn", "mi_twc", "mi_rpn", "md_ctr", "m_casid",
1645 /* 154 */ "md_ap", "md_epn", "md_twb", "md_twc", "md_rpn", "m_tw",
1646 /* 160 */ "mi_dbcam", "mi_dbram0", "mi_dbram1", "md_dbcam", "md_dbram0",
1647 /* 165 */ "md_dbram1"
1650 /* Note that the 601 has different register numbers for reading and
1651 writing RTCU and RTCL. However, how one reads and writes a
1652 register is the stub's problem. */
1653 char *register_names_601[] =
1655 COMMON_UISA_REG_NAMES,
1657 PPC_SEGMENT_REG_NAMES,
1658 PPC_32_OEA_SPR_NAMES,
1659 /* 119 */ "hid0", "hid1", "iabr", "dabr", "pir", "mq", "rtcu",
1663 char *register_names_602[] =
1665 COMMON_UISA_REG_NAMES,
1667 PPC_SEGMENT_REG_NAMES,
1668 PPC_32_OEA_SPR_NAMES,
1669 /* 119 */ "hid0", "hid1", "iabr", "", "", "tcr", "ibr", "esassr", "sebr",
1670 /* 128 */ "ser", "sp", "lt"
1673 char *register_names_603[] =
1675 COMMON_UISA_REG_NAMES,
1677 PPC_SEGMENT_REG_NAMES,
1678 PPC_32_OEA_SPR_NAMES,
1679 /* 119 */ "hid0", "hid1", "iabr", "", "", "dmiss", "dcmp", "hash1",
1680 /* 127 */ "hash2", "imiss", "icmp", "rpa"
1683 char *register_names_604[] =
1685 COMMON_UISA_REG_NAMES,
1687 PPC_SEGMENT_REG_NAMES,
1688 PPC_32_OEA_SPR_NAMES,
1689 /* 119 */ "hid0", "hid1", "iabr", "dabr", "pir", "mmcr0", "pmc1", "pmc2",
1690 /* 127 */ "sia", "sda"
1693 char *register_names_750[] =
1695 COMMON_UISA_REG_NAMES,
1697 PPC_SEGMENT_REG_NAMES,
1698 PPC_32_OEA_SPR_NAMES,
1699 /* 119 */ "hid0", "hid1", "iabr", "dabr", "", "ummcr0", "upmc1", "upmc2",
1700 /* 127 */ "usia", "ummcr1", "upmc3", "upmc4", "mmcr0", "pmc1", "pmc2",
1701 /* 134 */ "sia", "mmcr1", "pmc3", "pmc4", "l2cr", "ictc", "thrm1", "thrm2",
1706 /* Information about a particular processor variant. */
1709 /* Name of this variant. */
1712 /* English description of the variant. */
1715 /* Table of register names; registers[R] is the name of the register
1721 #define num_registers(list) (sizeof (list) / sizeof((list)[0]))
1724 /* Information in this table comes from the following web sites:
1725 IBM: http://www.chips.ibm.com:80/products/embedded/
1726 Motorola: http://www.mot.com/SPS/PowerPC/
1728 I'm sure I've got some of the variant descriptions not quite right.
1729 Please report any inaccuracies you find to GDB's maintainer.
1731 If you add entries to this table, please be sure to allow the new
1732 value as an argument to the --with-cpu flag, in configure.in. */
1734 static struct variant
1737 {"ppc-uisa", "PowerPC UISA - a PPC processor as viewed by user-level code",
1738 num_registers (register_names_uisa), register_names_uisa},
1739 {"rs6000", "IBM RS6000 (\"POWER\") architecture, user-level view",
1740 num_registers (register_names_rs6000), register_names_rs6000},
1741 {"403", "IBM PowerPC 403",
1742 num_registers (register_names_403), register_names_403},
1743 {"403GC", "IBM PowerPC 403GC",
1744 num_registers (register_names_403GC), register_names_403GC},
1745 {"505", "Motorola PowerPC 505",
1746 num_registers (register_names_505), register_names_505},
1747 {"860", "Motorola PowerPC 860 or 850",
1748 num_registers (register_names_860), register_names_860},
1749 {"601", "Motorola PowerPC 601",
1750 num_registers (register_names_601), register_names_601},
1751 {"602", "Motorola PowerPC 602",
1752 num_registers (register_names_602), register_names_602},
1753 {"603", "Motorola/IBM PowerPC 603 or 603e",
1754 num_registers (register_names_603), register_names_603},
1755 {"604", "Motorola PowerPC 604 or 604e",
1756 num_registers (register_names_604), register_names_604},
1757 {"750", "Motorola/IBM PowerPC 750 or 740",
1758 num_registers (register_names_750), register_names_750},
1763 static struct variant *current_variant;
1766 rs6000_register_name (int i)
1768 if (i < 0 || i >= NUM_REGS)
1769 error ("GDB bug: rs6000-tdep.c (rs6000_register_name): strange register number");
1771 return ((i < current_variant->num_registers)
1772 ? current_variant->registers[i]
1778 install_variant (struct variant *v)
1780 current_variant = v;
1784 /* Look up the variant named NAME in the `variants' table. Return a
1785 pointer to the struct variant, or null if we couldn't find it. */
1786 static struct variant *
1787 find_variant_by_name (char *name)
1791 for (i = 0; variants[i].name; i++)
1792 if (!strcmp (name, variants[i].name))
1793 return &variants[i];
1799 /* Install the PPC/RS6000 variant named NAME in the `variants' table.
1800 Return zero if we installed it successfully, or a non-zero value if
1803 This might be useful to code outside this file, which doesn't want
1804 to depend on the exact indices of the entries in the `variants'
1805 table. Just make it non-static if you want that. */
1807 install_variant_by_name (char *name)
1809 struct variant *v = find_variant_by_name (name);
1813 install_variant (v);
1826 printf_filtered ("GDB knows about the following PowerPC and RS6000 variants:\n");
1828 for (i = 0; variants[i].name; i++)
1829 printf_filtered (" %-8s %s\n",
1830 variants[i].name, variants[i].description);
1835 show_current_variant ()
1837 printf_filtered ("PowerPC / RS6000 processor variant is set to `%s'.\n",
1838 current_variant->name);
1843 set_processor (char *arg, int from_tty)
1845 if (!arg || arg[0] == '\0')
1851 if (install_variant_by_name (arg))
1854 fprintf_filtered (gdb_stderr,
1855 "`%s' is not a recognized PowerPC / RS6000 variant name.\n\n", arg);
1857 return_to_top_level (RETURN_ERROR);
1860 show_current_variant ();
1864 show_processor (char *arg, int from_tty)
1866 show_current_variant ();
1872 /* Initialization code. */
1875 _initialize_rs6000_tdep ()
1877 /* FIXME, this should not be decided via ifdef. */
1878 #ifdef GDB_TARGET_POWERPC
1879 tm_print_insn = gdb_print_insn_powerpc;
1881 tm_print_insn = print_insn_rs6000;
1884 /* I don't think we should use the set/show command arrangement
1885 here, because the way that's implemented makes it hard to do the
1886 error checking we want in a reasonable way. So we just add them
1887 as two separate commands. */
1888 add_cmd ("processor", class_support, set_processor,
1889 "`set processor NAME' sets the PowerPC/RS6000 variant to NAME.\n\
1890 If you set this, GDB will know about the special-purpose registers that are\n\
1891 available on the given variant.\n\
1892 Type `set processor' alone for a list of recognized variant names.",
1894 add_cmd ("processor", class_support, show_processor,
1895 "Show the variant of the PowerPC or RS6000 processor in use.\n\
1896 Use `set processor' to change this.",
1899 /* Set the current PPC processor variant. */
1903 #ifdef TARGET_CPU_DEFAULT
1904 status = install_variant_by_name (TARGET_CPU_DEFAULT);
1909 #ifdef GDB_TARGET_POWERPC
1910 install_variant_by_name ("ppc-uisa");
1912 install_variant_by_name ("rs6000");