* rs6000-tdep.c (rs6000_gdbarch_init): The register set used for
[external/binutils.git] / gdb / rs6000-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3    Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
4    1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
5    Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "symtab.h"
28 #include "target.h"
29 #include "gdbcore.h"
30 #include "gdbcmd.h"
31 #include "objfiles.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "regset.h"
35 #include "doublest.h"
36 #include "value.h"
37 #include "parser-defs.h"
38 #include "osabi.h"
39 #include "infcall.h"
40
41 #include "libbfd.h"             /* for bfd_default_set_arch_mach */
42 #include "coff/internal.h"      /* for libcoff.h */
43 #include "libcoff.h"            /* for xcoff_data */
44 #include "coff/xcoff.h"
45 #include "libxcoff.h"
46
47 #include "elf-bfd.h"
48
49 #include "solib-svr4.h"
50 #include "ppc-tdep.h"
51
52 #include "gdb_assert.h"
53 #include "dis-asm.h"
54
55 #include "trad-frame.h"
56 #include "frame-unwind.h"
57 #include "frame-base.h"
58
59 /* If the kernel has to deliver a signal, it pushes a sigcontext
60    structure on the stack and then calls the signal handler, passing
61    the address of the sigcontext in an argument register. Usually
62    the signal handler doesn't save this register, so we have to
63    access the sigcontext structure via an offset from the signal handler
64    frame.
65    The following constants were determined by experimentation on AIX 3.2.  */
66 #define SIG_FRAME_PC_OFFSET 96
67 #define SIG_FRAME_LR_OFFSET 108
68 #define SIG_FRAME_FP_OFFSET 284
69
70 /* To be used by skip_prologue. */
71
72 struct rs6000_framedata
73   {
74     int offset;                 /* total size of frame --- the distance
75                                    by which we decrement sp to allocate
76                                    the frame */
77     int saved_gpr;              /* smallest # of saved gpr */
78     int saved_fpr;              /* smallest # of saved fpr */
79     int saved_vr;               /* smallest # of saved vr */
80     int saved_ev;               /* smallest # of saved ev */
81     int alloca_reg;             /* alloca register number (frame ptr) */
82     char frameless;             /* true if frameless functions. */
83     char nosavedpc;             /* true if pc not saved. */
84     int gpr_offset;             /* offset of saved gprs from prev sp */
85     int fpr_offset;             /* offset of saved fprs from prev sp */
86     int vr_offset;              /* offset of saved vrs from prev sp */
87     int ev_offset;              /* offset of saved evs from prev sp */
88     int lr_offset;              /* offset of saved lr */
89     int cr_offset;              /* offset of saved cr */
90     int vrsave_offset;          /* offset of saved vrsave register */
91   };
92
93 /* Description of a single register. */
94
95 struct reg
96   {
97     char *name;                 /* name of register */
98     unsigned char sz32;         /* size on 32-bit arch, 0 if nonextant */
99     unsigned char sz64;         /* size on 64-bit arch, 0 if nonextant */
100     unsigned char fpr;          /* whether register is floating-point */
101     unsigned char pseudo;       /* whether register is pseudo */
102     int spr_num;                /* PowerPC SPR number, or -1 if not an SPR.
103                                    This is an ISA SPR number, not a GDB
104                                    register number.  */
105   };
106
107 /* Breakpoint shadows for the single step instructions will be kept here. */
108
109 static struct sstep_breaks
110   {
111     /* Address, or 0 if this is not in use.  */
112     CORE_ADDR address;
113     /* Shadow contents.  */
114     char data[4];
115   }
116 stepBreaks[2];
117
118 /* Hook for determining the TOC address when calling functions in the
119    inferior under AIX. The initialization code in rs6000-nat.c sets
120    this hook to point to find_toc_address.  */
121
122 CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
123
124 /* Hook to set the current architecture when starting a child process. 
125    rs6000-nat.c sets this. */
126
127 void (*rs6000_set_host_arch_hook) (int) = NULL;
128
129 /* Static function prototypes */
130
131 static CORE_ADDR branch_dest (int opcode, int instr, CORE_ADDR pc,
132                               CORE_ADDR safety);
133 static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR,
134                                 struct rs6000_framedata *);
135
136 /* Is REGNO an AltiVec register?  Return 1 if so, 0 otherwise.  */
137 int
138 altivec_register_p (int regno)
139 {
140   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
141   if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
142     return 0;
143   else
144     return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
145 }
146
147
148 /* Return true if REGNO is an SPE register, false otherwise.  */
149 int
150 spe_register_p (int regno)
151 {
152   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
153   
154   /* Is it a reference to EV0 -- EV31, and do we have those?  */
155   if (tdep->ppc_ev0_regnum >= 0
156       && tdep->ppc_ev31_regnum >= 0
157       && tdep->ppc_ev0_regnum <= regno && regno <= tdep->ppc_ev31_regnum)
158     return 1;
159
160   /* Is it a reference to the 64-bit accumulator, and do we have that?  */
161   if (tdep->ppc_acc_regnum >= 0
162       && tdep->ppc_acc_regnum == regno)
163     return 1;
164
165   /* Is it a reference to the SPE floating-point status and control register,
166      and do we have that?  */
167   if (tdep->ppc_spefscr_regnum >= 0
168       && tdep->ppc_spefscr_regnum == regno)
169     return 1;
170
171   return 0;
172 }
173
174
175 /* Return non-zero if the architecture described by GDBARCH has
176    floating-point registers (f0 --- f31 and fpscr).  */
177 int
178 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
179 {
180   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
181
182   return (tdep->ppc_fp0_regnum >= 0
183           && tdep->ppc_fpscr_regnum >= 0);
184 }
185 \f
186
187 /* Register set support functions.  */
188
189 static void
190 ppc_supply_reg (struct regcache *regcache, int regnum, 
191                 const char *regs, size_t offset)
192 {
193   if (regnum != -1 && offset != -1)
194     regcache_raw_supply (regcache, regnum, regs + offset);
195 }
196
197 static void
198 ppc_collect_reg (const struct regcache *regcache, int regnum,
199                  char *regs, size_t offset)
200 {
201   if (regnum != -1 && offset != -1)
202     regcache_raw_collect (regcache, regnum, regs + offset);
203 }
204     
205 /* Supply register REGNUM in the general-purpose register set REGSET
206    from the buffer specified by GREGS and LEN to register cache
207    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
208
209 void
210 ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
211                     int regnum, const void *gregs, size_t len)
212 {
213   struct gdbarch *gdbarch = get_regcache_arch (regcache);
214   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
215   const struct ppc_reg_offsets *offsets = regset->descr;
216   size_t offset;
217   int i;
218
219   for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
220        i < tdep->ppc_gp0_regnum + ppc_num_gprs;
221        i++, offset += 4)
222     {
223       if (regnum == -1 || regnum == i)
224         ppc_supply_reg (regcache, i, gregs, offset);
225     }
226
227   if (regnum == -1 || regnum == PC_REGNUM)
228     ppc_supply_reg (regcache, PC_REGNUM, gregs, offsets->pc_offset);
229   if (regnum == -1 || regnum == tdep->ppc_ps_regnum)
230     ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
231                     gregs, offsets->ps_offset);
232   if (regnum == -1 || regnum == tdep->ppc_cr_regnum)
233     ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
234                     gregs, offsets->cr_offset);
235   if (regnum == -1 || regnum == tdep->ppc_lr_regnum)
236     ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
237                     gregs, offsets->lr_offset);
238   if (regnum == -1 || regnum == tdep->ppc_ctr_regnum)
239     ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
240                     gregs, offsets->ctr_offset);
241   if (regnum == -1 || regnum == tdep->ppc_xer_regnum)
242     ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
243                     gregs, offsets->cr_offset);
244   if (regnum == -1 || regnum == tdep->ppc_mq_regnum)
245     ppc_supply_reg (regcache, tdep->ppc_mq_regnum, gregs, offsets->mq_offset);
246 }
247
248 /* Supply register REGNUM in the floating-point register set REGSET
249    from the buffer specified by FPREGS and LEN to register cache
250    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
251
252 void
253 ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
254                      int regnum, const void *fpregs, size_t len)
255 {
256   struct gdbarch *gdbarch = get_regcache_arch (regcache);
257   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
258   const struct ppc_reg_offsets *offsets = regset->descr;
259   size_t offset;
260   int i;
261
262   gdb_assert (ppc_floating_point_unit_p (gdbarch));
263
264   offset = offsets->f0_offset;
265   for (i = tdep->ppc_fp0_regnum;
266        i < tdep->ppc_fp0_regnum + ppc_num_fprs;
267        i++, offset += 4)
268     {
269       if (regnum == -1 || regnum == i)
270         ppc_supply_reg (regcache, i, fpregs, offset);
271     }
272
273   if (regnum == -1 || regnum == tdep->ppc_fpscr_regnum)
274     ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
275                     fpregs, offsets->fpscr_offset);
276 }
277
278 /* Collect register REGNUM in the general-purpose register set
279    REGSET. from register cache REGCACHE into the buffer specified by
280    GREGS and LEN.  If REGNUM is -1, do this for all registers in
281    REGSET.  */
282
283 void
284 ppc_collect_gregset (const struct regset *regset,
285                      const struct regcache *regcache,
286                      int regnum, void *gregs, size_t len)
287 {
288   struct gdbarch *gdbarch = get_regcache_arch (regcache);
289   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
290   const struct ppc_reg_offsets *offsets = regset->descr;
291   size_t offset;
292   int i;
293
294   offset = offsets->r0_offset;
295   for (i = tdep->ppc_gp0_regnum;
296        i < tdep->ppc_gp0_regnum + ppc_num_gprs;
297        i++, offset += 4)
298     {
299       if (regnum == -1 || regnum == i)
300         ppc_collect_reg (regcache, i, gregs, offset);
301     }
302
303   if (regnum == -1 || regnum == PC_REGNUM)
304     ppc_collect_reg (regcache, PC_REGNUM, gregs, offsets->pc_offset);
305   if (regnum == -1 || regnum == tdep->ppc_ps_regnum)
306     ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
307                      gregs, offsets->ps_offset);
308   if (regnum == -1 || regnum == tdep->ppc_cr_regnum)
309     ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
310                      gregs, offsets->cr_offset);
311   if (regnum == -1 || regnum == tdep->ppc_lr_regnum)
312     ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
313                      gregs, offsets->lr_offset);
314   if (regnum == -1 || regnum == tdep->ppc_ctr_regnum)
315     ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
316                      gregs, offsets->ctr_offset);
317   if (regnum == -1 || regnum == tdep->ppc_xer_regnum)
318     ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
319                      gregs, offsets->xer_offset);
320   if (regnum == -1 || regnum == tdep->ppc_mq_regnum)
321     ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
322                      gregs, offsets->mq_offset);
323 }
324
325 /* Collect register REGNUM in the floating-point register set
326    REGSET. from register cache REGCACHE into the buffer specified by
327    FPREGS and LEN.  If REGNUM is -1, do this for all registers in
328    REGSET.  */
329
330 void
331 ppc_collect_fpregset (const struct regset *regset,
332                       const struct regcache *regcache,
333                       int regnum, void *fpregs, size_t len)
334 {
335   struct gdbarch *gdbarch = get_regcache_arch (regcache);
336   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
337   const struct ppc_reg_offsets *offsets = regset->descr;
338   size_t offset;
339   int i;
340
341   gdb_assert (ppc_floating_point_unit_p (gdbarch));
342
343   offset = offsets->f0_offset;
344   for (i = tdep->ppc_fp0_regnum;
345        i <= tdep->ppc_fp0_regnum + ppc_num_fprs;
346        i++, offset += 4)
347     {
348       if (regnum == -1 || regnum == i)
349         ppc_collect_reg (regcache, regnum, fpregs, offset);
350     }
351
352   if (regnum == -1 || regnum == tdep->ppc_fpscr_regnum)
353     ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
354                      fpregs, offsets->fpscr_offset);
355 }
356 \f
357
358 /* Read a LEN-byte address from debugged memory address MEMADDR. */
359
360 static CORE_ADDR
361 read_memory_addr (CORE_ADDR memaddr, int len)
362 {
363   return read_memory_unsigned_integer (memaddr, len);
364 }
365
366 static CORE_ADDR
367 rs6000_skip_prologue (CORE_ADDR pc)
368 {
369   struct rs6000_framedata frame;
370   pc = skip_prologue (pc, 0, &frame);
371   return pc;
372 }
373
374
375 /* Fill in fi->saved_regs */
376
377 struct frame_extra_info
378 {
379   /* Functions calling alloca() change the value of the stack
380      pointer. We need to use initial stack pointer (which is saved in
381      r31 by gcc) in such cases. If a compiler emits traceback table,
382      then we should use the alloca register specified in traceback
383      table. FIXME. */
384   CORE_ADDR initial_sp;         /* initial stack pointer. */
385 };
386
387 /* Get the ith function argument for the current function.  */
388 static CORE_ADDR
389 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi, 
390                                struct type *type)
391 {
392   CORE_ADDR addr;
393   get_frame_register (frame, 3 + argi, &addr);
394   return addr;
395 }
396
397 /* Calculate the destination of a branch/jump.  Return -1 if not a branch.  */
398
399 static CORE_ADDR
400 branch_dest (int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety)
401 {
402   CORE_ADDR dest;
403   int immediate;
404   int absolute;
405   int ext_op;
406
407   absolute = (int) ((instr >> 1) & 1);
408
409   switch (opcode)
410     {
411     case 18:
412       immediate = ((instr & ~3) << 6) >> 6;     /* br unconditional */
413       if (absolute)
414         dest = immediate;
415       else
416         dest = pc + immediate;
417       break;
418
419     case 16:
420       immediate = ((instr & ~3) << 16) >> 16;   /* br conditional */
421       if (absolute)
422         dest = immediate;
423       else
424         dest = pc + immediate;
425       break;
426
427     case 19:
428       ext_op = (instr >> 1) & 0x3ff;
429
430       if (ext_op == 16)         /* br conditional register */
431         {
432           dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
433
434           /* If we are about to return from a signal handler, dest is
435              something like 0x3c90.  The current frame is a signal handler
436              caller frame, upon completion of the sigreturn system call
437              execution will return to the saved PC in the frame.  */
438           if (dest < TEXT_SEGMENT_BASE)
439             {
440               struct frame_info *fi;
441
442               fi = get_current_frame ();
443               if (fi != NULL)
444                 dest = read_memory_addr (get_frame_base (fi) + SIG_FRAME_PC_OFFSET,
445                                          gdbarch_tdep (current_gdbarch)->wordsize);
446             }
447         }
448
449       else if (ext_op == 528)   /* br cond to count reg */
450         {
451           dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum) & ~3;
452
453           /* If we are about to execute a system call, dest is something
454              like 0x22fc or 0x3b00.  Upon completion the system call
455              will return to the address in the link register.  */
456           if (dest < TEXT_SEGMENT_BASE)
457             dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
458         }
459       else
460         return -1;
461       break;
462
463     default:
464       return -1;
465     }
466   return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
467 }
468
469
470 /* Sequence of bytes for breakpoint instruction.  */
471
472 const static unsigned char *
473 rs6000_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
474 {
475   static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
476   static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
477   *bp_size = 4;
478   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
479     return big_breakpoint;
480   else
481     return little_breakpoint;
482 }
483
484
485 /* AIX does not support PT_STEP. Simulate it. */
486
487 void
488 rs6000_software_single_step (enum target_signal signal,
489                              int insert_breakpoints_p)
490 {
491   CORE_ADDR dummy;
492   int breakp_sz;
493   const char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz);
494   int ii, insn;
495   CORE_ADDR loc;
496   CORE_ADDR breaks[2];
497   int opcode;
498
499   if (insert_breakpoints_p)
500     {
501
502       loc = read_pc ();
503
504       insn = read_memory_integer (loc, 4);
505
506       breaks[0] = loc + breakp_sz;
507       opcode = insn >> 26;
508       breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
509
510       /* Don't put two breakpoints on the same address. */
511       if (breaks[1] == breaks[0])
512         breaks[1] = -1;
513
514       stepBreaks[1].address = 0;
515
516       for (ii = 0; ii < 2; ++ii)
517         {
518
519           /* ignore invalid breakpoint. */
520           if (breaks[ii] == -1)
521             continue;
522           target_insert_breakpoint (breaks[ii], stepBreaks[ii].data);
523           stepBreaks[ii].address = breaks[ii];
524         }
525
526     }
527   else
528     {
529
530       /* remove step breakpoints. */
531       for (ii = 0; ii < 2; ++ii)
532         if (stepBreaks[ii].address != 0)
533           target_remove_breakpoint (stepBreaks[ii].address,
534                                     stepBreaks[ii].data);
535     }
536   errno = 0;                    /* FIXME, don't ignore errors! */
537   /* What errors?  {read,write}_memory call error().  */
538 }
539
540
541 /* return pc value after skipping a function prologue and also return
542    information about a function frame.
543
544    in struct rs6000_framedata fdata:
545    - frameless is TRUE, if function does not have a frame.
546    - nosavedpc is TRUE, if function does not save %pc value in its frame.
547    - offset is the initial size of this stack frame --- the amount by
548    which we decrement the sp to allocate the frame.
549    - saved_gpr is the number of the first saved gpr.
550    - saved_fpr is the number of the first saved fpr.
551    - saved_vr is the number of the first saved vr.
552    - saved_ev is the number of the first saved ev.
553    - alloca_reg is the number of the register used for alloca() handling.
554    Otherwise -1.
555    - gpr_offset is the offset of the first saved gpr from the previous frame.
556    - fpr_offset is the offset of the first saved fpr from the previous frame.
557    - vr_offset is the offset of the first saved vr from the previous frame.
558    - ev_offset is the offset of the first saved ev from the previous frame.
559    - lr_offset is the offset of the saved lr
560    - cr_offset is the offset of the saved cr
561    - vrsave_offset is the offset of the saved vrsave register
562  */
563
564 #define SIGNED_SHORT(x)                                                 \
565   ((sizeof (short) == 2)                                                \
566    ? ((int)(short)(x))                                                  \
567    : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
568
569 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
570
571 /* Limit the number of skipped non-prologue instructions, as the examining
572    of the prologue is expensive.  */
573 static int max_skip_non_prologue_insns = 10;
574
575 /* Given PC representing the starting address of a function, and
576    LIM_PC which is the (sloppy) limit to which to scan when looking
577    for a prologue, attempt to further refine this limit by using
578    the line data in the symbol table.  If successful, a better guess
579    on where the prologue ends is returned, otherwise the previous
580    value of lim_pc is returned.  */
581
582 /* FIXME: cagney/2004-02-14: This function and logic have largely been
583    superseded by skip_prologue_using_sal.  */
584
585 static CORE_ADDR
586 refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc)
587 {
588   struct symtab_and_line prologue_sal;
589
590   prologue_sal = find_pc_line (pc, 0);
591   if (prologue_sal.line != 0)
592     {
593       int i;
594       CORE_ADDR addr = prologue_sal.end;
595
596       /* Handle the case in which compiler's optimizer/scheduler
597          has moved instructions into the prologue.  We scan ahead
598          in the function looking for address ranges whose corresponding
599          line number is less than or equal to the first one that we
600          found for the function.  (It can be less than when the
601          scheduler puts a body instruction before the first prologue
602          instruction.)  */
603       for (i = 2 * max_skip_non_prologue_insns; 
604            i > 0 && (lim_pc == 0 || addr < lim_pc);
605            i--)
606         {
607           struct symtab_and_line sal;
608
609           sal = find_pc_line (addr, 0);
610           if (sal.line == 0)
611             break;
612           if (sal.line <= prologue_sal.line 
613               && sal.symtab == prologue_sal.symtab)
614             {
615               prologue_sal = sal;
616             }
617           addr = sal.end;
618         }
619
620       if (lim_pc == 0 || prologue_sal.end < lim_pc)
621         lim_pc = prologue_sal.end;
622     }
623   return lim_pc;
624 }
625
626 /* Return nonzero if the given instruction OP can be part of the prologue
627    of a function and saves a parameter on the stack.  FRAMEP should be
628    set if one of the previous instructions in the function has set the
629    Frame Pointer.  */
630
631 static int
632 store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
633 {
634   /* Move parameters from argument registers to temporary register.  */
635   if ((op & 0xfc0007fe) == 0x7c000378)         /* mr(.)  Rx,Ry */
636     {
637       /* Rx must be scratch register r0.  */
638       const int rx_regno = (op >> 16) & 31;
639       /* Ry: Only r3 - r10 are used for parameter passing.  */
640       const int ry_regno = GET_SRC_REG (op);
641
642       if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
643         {
644           *r0_contains_arg = 1;
645           return 1;
646         }
647       else
648         return 0;
649     }
650
651   /* Save a General Purpose Register on stack.  */
652
653   if ((op & 0xfc1f0003) == 0xf8010000 ||       /* std  Rx,NUM(r1) */
654       (op & 0xfc1f0000) == 0xd8010000)         /* stfd Rx,NUM(r1) */
655     {
656       /* Rx: Only r3 - r10 are used for parameter passing.  */
657       const int rx_regno = GET_SRC_REG (op);
658
659       return (rx_regno >= 3 && rx_regno <= 10);
660     }
661            
662   /* Save a General Purpose Register on stack via the Frame Pointer.  */
663
664   if (framep &&
665       ((op & 0xfc1f0000) == 0x901f0000 ||     /* st rx,NUM(r31) */
666        (op & 0xfc1f0000) == 0x981f0000 ||     /* stb Rx,NUM(r31) */
667        (op & 0xfc1f0000) == 0xd81f0000))      /* stfd Rx,NUM(r31) */
668     {
669       /* Rx: Usually, only r3 - r10 are used for parameter passing.
670          However, the compiler sometimes uses r0 to hold an argument.  */
671       const int rx_regno = GET_SRC_REG (op);
672
673       return ((rx_regno >= 3 && rx_regno <= 10)
674               || (rx_regno == 0 && *r0_contains_arg));
675     }
676
677   if ((op & 0xfc1f0000) == 0xfc010000)         /* frsp, fp?,NUM(r1) */
678     {
679       /* Only f2 - f8 are used for parameter passing.  */
680       const int src_regno = GET_SRC_REG (op);
681
682       return (src_regno >= 2 && src_regno <= 8);
683     }
684
685   if (framep && ((op & 0xfc1f0000) == 0xfc1f0000))  /* frsp, fp?,NUM(r31) */
686     {
687       /* Only f2 - f8 are used for parameter passing.  */
688       const int src_regno = GET_SRC_REG (op);
689
690       return (src_regno >= 2 && src_regno <= 8);
691     }
692
693   /* Not an insn that saves a parameter on stack.  */
694   return 0;
695 }
696
697 static CORE_ADDR
698 skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
699 {
700   CORE_ADDR orig_pc = pc;
701   CORE_ADDR last_prologue_pc = pc;
702   CORE_ADDR li_found_pc = 0;
703   char buf[4];
704   unsigned long op;
705   long offset = 0;
706   long vr_saved_offset = 0;
707   int lr_reg = -1;
708   int cr_reg = -1;
709   int vr_reg = -1;
710   int ev_reg = -1;
711   long ev_offset = 0;
712   int vrsave_reg = -1;
713   int reg;
714   int framep = 0;
715   int minimal_toc_loaded = 0;
716   int prev_insn_was_prologue_insn = 1;
717   int num_skip_non_prologue_insns = 0;
718   int r0_contains_arg = 0;
719   const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (current_gdbarch);
720   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
721   
722   /* Attempt to find the end of the prologue when no limit is specified.
723      Note that refine_prologue_limit() has been written so that it may
724      be used to "refine" the limits of non-zero PC values too, but this
725      is only safe if we 1) trust the line information provided by the
726      compiler and 2) iterate enough to actually find the end of the
727      prologue.  
728      
729      It may become a good idea at some point (for both performance and
730      accuracy) to unconditionally call refine_prologue_limit().  But,
731      until we can make a clear determination that this is beneficial,
732      we'll play it safe and only use it to obtain a limit when none
733      has been specified.  */
734   if (lim_pc == 0)
735     lim_pc = refine_prologue_limit (pc, lim_pc);
736
737   memset (fdata, 0, sizeof (struct rs6000_framedata));
738   fdata->saved_gpr = -1;
739   fdata->saved_fpr = -1;
740   fdata->saved_vr = -1;
741   fdata->saved_ev = -1;
742   fdata->alloca_reg = -1;
743   fdata->frameless = 1;
744   fdata->nosavedpc = 1;
745
746   for (;; pc += 4)
747     {
748       /* Sometimes it isn't clear if an instruction is a prologue
749          instruction or not.  When we encounter one of these ambiguous
750          cases, we'll set prev_insn_was_prologue_insn to 0 (false).
751          Otherwise, we'll assume that it really is a prologue instruction. */
752       if (prev_insn_was_prologue_insn)
753         last_prologue_pc = pc;
754
755       /* Stop scanning if we've hit the limit.  */
756       if (lim_pc != 0 && pc >= lim_pc)
757         break;
758
759       prev_insn_was_prologue_insn = 1;
760
761       /* Fetch the instruction and convert it to an integer.  */
762       if (target_read_memory (pc, buf, 4))
763         break;
764       op = extract_signed_integer (buf, 4);
765
766       if ((op & 0xfc1fffff) == 0x7c0802a6)
767         {                       /* mflr Rx */
768           /* Since shared library / PIC code, which needs to get its
769              address at runtime, can appear to save more than one link
770              register vis:
771
772              *INDENT-OFF*
773              stwu r1,-304(r1)
774              mflr r3
775              bl 0xff570d0 (blrl)
776              stw r30,296(r1)
777              mflr r30
778              stw r31,300(r1)
779              stw r3,308(r1);
780              ...
781              *INDENT-ON*
782
783              remember just the first one, but skip over additional
784              ones.  */
785           if (lr_reg < 0)
786             lr_reg = (op & 0x03e00000);
787           if (lr_reg == 0)
788             r0_contains_arg = 0;
789           continue;
790         }
791       else if ((op & 0xfc1fffff) == 0x7c000026)
792         {                       /* mfcr Rx */
793           cr_reg = (op & 0x03e00000);
794           if (cr_reg == 0)
795             r0_contains_arg = 0;
796           continue;
797
798         }
799       else if ((op & 0xfc1f0000) == 0xd8010000)
800         {                       /* stfd Rx,NUM(r1) */
801           reg = GET_SRC_REG (op);
802           if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
803             {
804               fdata->saved_fpr = reg;
805               fdata->fpr_offset = SIGNED_SHORT (op) + offset;
806             }
807           continue;
808
809         }
810       else if (((op & 0xfc1f0000) == 0xbc010000) ||     /* stm Rx, NUM(r1) */
811                (((op & 0xfc1f0000) == 0x90010000 ||     /* st rx,NUM(r1) */
812                  (op & 0xfc1f0003) == 0xf8010000) &&    /* std rx,NUM(r1) */
813                 (op & 0x03e00000) >= 0x01a00000))       /* rx >= r13 */
814         {
815
816           reg = GET_SRC_REG (op);
817           if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
818             {
819               fdata->saved_gpr = reg;
820               if ((op & 0xfc1f0003) == 0xf8010000)
821                 op &= ~3UL;
822               fdata->gpr_offset = SIGNED_SHORT (op) + offset;
823             }
824           continue;
825
826         }
827       else if ((op & 0xffff0000) == 0x60000000)
828         {
829           /* nop */
830           /* Allow nops in the prologue, but do not consider them to
831              be part of the prologue unless followed by other prologue
832              instructions. */
833           prev_insn_was_prologue_insn = 0;
834           continue;
835
836         }
837       else if ((op & 0xffff0000) == 0x3c000000)
838         {                       /* addis 0,0,NUM, used
839                                    for >= 32k frames */
840           fdata->offset = (op & 0x0000ffff) << 16;
841           fdata->frameless = 0;
842           r0_contains_arg = 0;
843           continue;
844
845         }
846       else if ((op & 0xffff0000) == 0x60000000)
847         {                       /* ori 0,0,NUM, 2nd ha
848                                    lf of >= 32k frames */
849           fdata->offset |= (op & 0x0000ffff);
850           fdata->frameless = 0;
851           r0_contains_arg = 0;
852           continue;
853
854         }
855       else if (lr_reg != -1 &&
856                /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
857                (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
858                 /* stw Rx, NUM(r1) */
859                 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
860                 /* stwu Rx, NUM(r1) */
861                 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
862         {       /* where Rx == lr */
863           fdata->lr_offset = offset;
864           fdata->nosavedpc = 0;
865           lr_reg = 0;
866           if ((op & 0xfc000003) == 0xf8000000 ||        /* std */
867               (op & 0xfc000000) == 0x90000000)          /* stw */
868             {
869               /* Does not update r1, so add displacement to lr_offset.  */
870               fdata->lr_offset += SIGNED_SHORT (op);
871             }
872           continue;
873
874         }
875       else if (cr_reg != -1 &&
876                /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
877                (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
878                 /* stw Rx, NUM(r1) */
879                 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
880                 /* stwu Rx, NUM(r1) */
881                 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
882         {       /* where Rx == cr */
883           fdata->cr_offset = offset;
884           cr_reg = 0;
885           if ((op & 0xfc000003) == 0xf8000000 ||
886               (op & 0xfc000000) == 0x90000000)
887             {
888               /* Does not update r1, so add displacement to cr_offset.  */
889               fdata->cr_offset += SIGNED_SHORT (op);
890             }
891           continue;
892
893         }
894       else if (op == 0x48000005)
895         {                       /* bl .+4 used in 
896                                    -mrelocatable */
897           continue;
898
899         }
900       else if (op == 0x48000004)
901         {                       /* b .+4 (xlc) */
902           break;
903
904         }
905       else if ((op & 0xffff0000) == 0x3fc00000 ||  /* addis 30,0,foo@ha, used
906                                                       in V.4 -mminimal-toc */
907                (op & 0xffff0000) == 0x3bde0000)
908         {                       /* addi 30,30,foo@l */
909           continue;
910
911         }
912       else if ((op & 0xfc000001) == 0x48000001)
913         {                       /* bl foo, 
914                                    to save fprs??? */
915
916           fdata->frameless = 0;
917           /* Don't skip over the subroutine call if it is not within
918              the first three instructions of the prologue.  */
919           if ((pc - orig_pc) > 8)
920             break;
921
922           op = read_memory_integer (pc + 4, 4);
923
924           /* At this point, make sure this is not a trampoline
925              function (a function that simply calls another functions,
926              and nothing else).  If the next is not a nop, this branch
927              was part of the function prologue. */
928
929           if (op == 0x4def7b82 || op == 0)      /* crorc 15, 15, 15 */
930             break;              /* don't skip over 
931                                    this branch */
932           continue;
933
934         }
935       /* update stack pointer */
936       else if ((op & 0xfc1f0000) == 0x94010000)
937         {               /* stu rX,NUM(r1) ||  stwu rX,NUM(r1) */
938           fdata->frameless = 0;
939           fdata->offset = SIGNED_SHORT (op);
940           offset = fdata->offset;
941           continue;
942         }
943       else if ((op & 0xfc1f016a) == 0x7c01016e)
944         {                       /* stwux rX,r1,rY */
945           /* no way to figure out what r1 is going to be */
946           fdata->frameless = 0;
947           offset = fdata->offset;
948           continue;
949         }
950       else if ((op & 0xfc1f0003) == 0xf8010001)
951         {                       /* stdu rX,NUM(r1) */
952           fdata->frameless = 0;
953           fdata->offset = SIGNED_SHORT (op & ~3UL);
954           offset = fdata->offset;
955           continue;
956         }
957       else if ((op & 0xfc1f016a) == 0x7c01016a)
958         {                       /* stdux rX,r1,rY */
959           /* no way to figure out what r1 is going to be */
960           fdata->frameless = 0;
961           offset = fdata->offset;
962           continue;
963         }
964       /* Load up minimal toc pointer */
965       else if (((op >> 22) == 0x20f     ||      /* l r31,... or l r30,... */
966                (op >> 22) == 0x3af)             /* ld r31,... or ld r30,... */
967                && !minimal_toc_loaded)
968         {
969           minimal_toc_loaded = 1;
970           continue;
971
972           /* move parameters from argument registers to local variable
973              registers */
974         }
975       else if ((op & 0xfc0007fe) == 0x7c000378 &&       /* mr(.)  Rx,Ry */
976                (((op >> 21) & 31) >= 3) &&              /* R3 >= Ry >= R10 */
977                (((op >> 21) & 31) <= 10) &&
978                ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
979         {
980           continue;
981
982           /* store parameters in stack */
983         }
984       /* Move parameters from argument registers to temporary register.  */
985       else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
986         {
987           continue;
988
989           /* Set up frame pointer */
990         }
991       else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
992                || op == 0x7c3f0b78)
993         {                       /* mr r31, r1 */
994           fdata->frameless = 0;
995           framep = 1;
996           fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
997           continue;
998
999           /* Another way to set up the frame pointer.  */
1000         }
1001       else if ((op & 0xfc1fffff) == 0x38010000)
1002         {                       /* addi rX, r1, 0x0 */
1003           fdata->frameless = 0;
1004           framep = 1;
1005           fdata->alloca_reg = (tdep->ppc_gp0_regnum
1006                                + ((op & ~0x38010000) >> 21));
1007           continue;
1008         }
1009       /* AltiVec related instructions.  */
1010       /* Store the vrsave register (spr 256) in another register for
1011          later manipulation, or load a register into the vrsave
1012          register.  2 instructions are used: mfvrsave and
1013          mtvrsave.  They are shorthand notation for mfspr Rn, SPR256
1014          and mtspr SPR256, Rn.  */
1015       /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1016          mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110  */
1017       else if ((op & 0xfc1fffff) == 0x7c0042a6)    /* mfvrsave Rn */
1018         {
1019           vrsave_reg = GET_SRC_REG (op);
1020           continue;
1021         }
1022       else if ((op & 0xfc1fffff) == 0x7c0043a6)     /* mtvrsave Rn */
1023         {
1024           continue;
1025         }
1026       /* Store the register where vrsave was saved to onto the stack:
1027          rS is the register where vrsave was stored in a previous
1028          instruction.  */
1029       /* 100100 sssss 00001 dddddddd dddddddd */
1030       else if ((op & 0xfc1f0000) == 0x90010000)     /* stw rS, d(r1) */
1031         {
1032           if (vrsave_reg == GET_SRC_REG (op))
1033             {
1034               fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1035               vrsave_reg = -1;
1036             }
1037           continue;
1038         }
1039       /* Compute the new value of vrsave, by modifying the register
1040          where vrsave was saved to.  */
1041       else if (((op & 0xfc000000) == 0x64000000)    /* oris Ra, Rs, UIMM */
1042                || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1043         {
1044           continue;
1045         }
1046       /* li r0, SIMM (short for addi r0, 0, SIMM).  This is the first
1047          in a pair of insns to save the vector registers on the
1048          stack.  */
1049       /* 001110 00000 00000 iiii iiii iiii iiii  */
1050       /* 001110 01110 00000 iiii iiii iiii iiii  */
1051       else if ((op & 0xffff0000) == 0x38000000         /* li r0, SIMM */
1052                || (op & 0xffff0000) == 0x39c00000)     /* li r14, SIMM */
1053         {
1054           if ((op & 0xffff0000) == 0x38000000)
1055             r0_contains_arg = 0;
1056           li_found_pc = pc;
1057           vr_saved_offset = SIGNED_SHORT (op);
1058
1059           /* This insn by itself is not part of the prologue, unless
1060              if part of the pair of insns mentioned above. So do not
1061              record this insn as part of the prologue yet.  */
1062           prev_insn_was_prologue_insn = 0;
1063         }
1064       /* Store vector register S at (r31+r0) aligned to 16 bytes.  */      
1065       /* 011111 sssss 11111 00000 00111001110 */
1066       else if ((op & 0xfc1fffff) == 0x7c1f01ce)   /* stvx Vs, R31, R0 */
1067         {
1068           if (pc == (li_found_pc + 4))
1069             {
1070               vr_reg = GET_SRC_REG (op);
1071               /* If this is the first vector reg to be saved, or if
1072                  it has a lower number than others previously seen,
1073                  reupdate the frame info.  */
1074               if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1075                 {
1076                   fdata->saved_vr = vr_reg;
1077                   fdata->vr_offset = vr_saved_offset + offset;
1078                 }
1079               vr_saved_offset = -1;
1080               vr_reg = -1;
1081               li_found_pc = 0;
1082             }
1083         }
1084       /* End AltiVec related instructions.  */
1085
1086       /* Start BookE related instructions.  */
1087       /* Store gen register S at (r31+uimm).
1088          Any register less than r13 is volatile, so we don't care.  */
1089       /* 000100 sssss 11111 iiiii 01100100001 */
1090       else if (arch_info->mach == bfd_mach_ppc_e500
1091                && (op & 0xfc1f07ff) == 0x101f0321)    /* evstdd Rs,uimm(R31) */
1092         {
1093           if ((op & 0x03e00000) >= 0x01a00000)  /* Rs >= r13 */
1094             {
1095               unsigned int imm;
1096               ev_reg = GET_SRC_REG (op);
1097               imm = (op >> 11) & 0x1f;
1098               ev_offset = imm * 8;
1099               /* If this is the first vector reg to be saved, or if
1100                  it has a lower number than others previously seen,
1101                  reupdate the frame info.  */
1102               if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1103                 {
1104                   fdata->saved_ev = ev_reg;
1105                   fdata->ev_offset = ev_offset + offset;
1106                 }
1107             }
1108           continue;
1109         }
1110       /* Store gen register rS at (r1+rB).  */
1111       /* 000100 sssss 00001 bbbbb 01100100000 */
1112       else if (arch_info->mach == bfd_mach_ppc_e500
1113                && (op & 0xffe007ff) == 0x13e00320)     /* evstddx RS,R1,Rb */
1114         {
1115           if (pc == (li_found_pc + 4))
1116             {
1117               ev_reg = GET_SRC_REG (op);
1118               /* If this is the first vector reg to be saved, or if
1119                  it has a lower number than others previously seen,
1120                  reupdate the frame info.  */
1121               /* We know the contents of rB from the previous instruction.  */
1122               if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1123                 {
1124                   fdata->saved_ev = ev_reg;
1125                   fdata->ev_offset = vr_saved_offset + offset;
1126                 }
1127               vr_saved_offset = -1;
1128               ev_reg = -1;
1129               li_found_pc = 0;
1130             }
1131           continue;
1132         }
1133       /* Store gen register r31 at (rA+uimm).  */
1134       /* 000100 11111 aaaaa iiiii 01100100001 */
1135       else if (arch_info->mach == bfd_mach_ppc_e500
1136                && (op & 0xffe007ff) == 0x13e00321)   /* evstdd R31,Ra,UIMM */
1137         {
1138           /* Wwe know that the source register is 31 already, but
1139              it can't hurt to compute it.  */
1140           ev_reg = GET_SRC_REG (op);
1141           ev_offset = ((op >> 11) & 0x1f) * 8;
1142           /* If this is the first vector reg to be saved, or if
1143              it has a lower number than others previously seen,
1144              reupdate the frame info.  */
1145           if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1146             {
1147               fdata->saved_ev = ev_reg;
1148               fdata->ev_offset = ev_offset + offset;
1149             }
1150
1151           continue;
1152         }
1153       /* Store gen register S at (r31+r0).
1154          Store param on stack when offset from SP bigger than 4 bytes.  */
1155       /* 000100 sssss 11111 00000 01100100000 */
1156       else if (arch_info->mach == bfd_mach_ppc_e500
1157                && (op & 0xfc1fffff) == 0x101f0320)     /* evstddx Rs,R31,R0 */
1158         {
1159           if (pc == (li_found_pc + 4))
1160             {
1161               if ((op & 0x03e00000) >= 0x01a00000)
1162                 {
1163                   ev_reg = GET_SRC_REG (op);
1164                   /* If this is the first vector reg to be saved, or if
1165                      it has a lower number than others previously seen,
1166                      reupdate the frame info.  */
1167                   /* We know the contents of r0 from the previous
1168                      instruction.  */
1169                   if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1170                     {
1171                       fdata->saved_ev = ev_reg;
1172                       fdata->ev_offset = vr_saved_offset + offset;
1173                     }
1174                   ev_reg = -1;
1175                 }
1176               vr_saved_offset = -1;
1177               li_found_pc = 0;
1178               continue;
1179             }
1180         }
1181       /* End BookE related instructions.  */
1182
1183       else
1184         {
1185           /* Not a recognized prologue instruction.
1186              Handle optimizer code motions into the prologue by continuing
1187              the search if we have no valid frame yet or if the return
1188              address is not yet saved in the frame.  */
1189           if (fdata->frameless == 0
1190               && (lr_reg == -1 || fdata->nosavedpc == 0))
1191             break;
1192
1193           if (op == 0x4e800020          /* blr */
1194               || op == 0x4e800420)      /* bctr */
1195             /* Do not scan past epilogue in frameless functions or
1196                trampolines.  */
1197             break;
1198           if ((op & 0xf4000000) == 0x40000000) /* bxx */
1199             /* Never skip branches.  */
1200             break;
1201
1202           if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
1203             /* Do not scan too many insns, scanning insns is expensive with
1204                remote targets.  */
1205             break;
1206
1207           /* Continue scanning.  */
1208           prev_insn_was_prologue_insn = 0;
1209           continue;
1210         }
1211     }
1212
1213 #if 0
1214 /* I have problems with skipping over __main() that I need to address
1215  * sometime. Previously, I used to use misc_function_vector which
1216  * didn't work as well as I wanted to be.  -MGO */
1217
1218   /* If the first thing after skipping a prolog is a branch to a function,
1219      this might be a call to an initializer in main(), introduced by gcc2.
1220      We'd like to skip over it as well.  Fortunately, xlc does some extra
1221      work before calling a function right after a prologue, thus we can
1222      single out such gcc2 behaviour.  */
1223
1224
1225   if ((op & 0xfc000001) == 0x48000001)
1226     {                           /* bl foo, an initializer function? */
1227       op = read_memory_integer (pc + 4, 4);
1228
1229       if (op == 0x4def7b82)
1230         {                       /* cror 0xf, 0xf, 0xf (nop) */
1231
1232           /* Check and see if we are in main.  If so, skip over this
1233              initializer function as well.  */
1234
1235           tmp = find_pc_misc_function (pc);
1236           if (tmp >= 0
1237               && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
1238             return pc + 8;
1239         }
1240     }
1241 #endif /* 0 */
1242
1243   fdata->offset = -fdata->offset;
1244   return last_prologue_pc;
1245 }
1246
1247
1248 /*************************************************************************
1249   Support for creating pushing a dummy frame into the stack, and popping
1250   frames, etc. 
1251 *************************************************************************/
1252
1253
1254 /* All the ABI's require 16 byte alignment.  */
1255 static CORE_ADDR
1256 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1257 {
1258   return (addr & -16);
1259 }
1260
1261 /* Pass the arguments in either registers, or in the stack. In RS/6000,
1262    the first eight words of the argument list (that might be less than
1263    eight parameters if some parameters occupy more than one word) are
1264    passed in r3..r10 registers.  float and double parameters are
1265    passed in fpr's, in addition to that.  Rest of the parameters if any
1266    are passed in user stack.  There might be cases in which half of the
1267    parameter is copied into registers, the other half is pushed into
1268    stack.
1269
1270    Stack must be aligned on 64-bit boundaries when synthesizing
1271    function calls.
1272
1273    If the function is returning a structure, then the return address is passed
1274    in r3, then the first 7 words of the parameters can be passed in registers,
1275    starting from r4.  */
1276
1277 static CORE_ADDR
1278 rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1279                         struct regcache *regcache, CORE_ADDR bp_addr,
1280                         int nargs, struct value **args, CORE_ADDR sp,
1281                         int struct_return, CORE_ADDR struct_addr)
1282 {
1283   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1284   int ii;
1285   int len = 0;
1286   int argno;                    /* current argument number */
1287   int argbytes;                 /* current argument byte */
1288   char tmp_buffer[50];
1289   int f_argno = 0;              /* current floating point argno */
1290   int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
1291   CORE_ADDR func_addr = find_function_addr (function, NULL);
1292
1293   struct value *arg = 0;
1294   struct type *type;
1295
1296   CORE_ADDR saved_sp;
1297
1298   /* The calling convention this function implements assumes the
1299      processor has floating-point registers.  We shouldn't be using it
1300      on PPC variants that lack them.  */
1301   gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
1302
1303   /* The first eight words of ther arguments are passed in registers.
1304      Copy them appropriately.  */
1305   ii = 0;
1306
1307   /* If the function is returning a `struct', then the first word
1308      (which will be passed in r3) is used for struct return address.
1309      In that case we should advance one word and start from r4
1310      register to copy parameters.  */
1311   if (struct_return)
1312     {
1313       regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
1314                                    struct_addr);
1315       ii++;
1316     }
1317
1318 /* 
1319    effectively indirect call... gcc does...
1320
1321    return_val example( float, int);
1322
1323    eabi: 
1324    float in fp0, int in r3
1325    offset of stack on overflow 8/16
1326    for varargs, must go by type.
1327    power open:
1328    float in r3&r4, int in r5
1329    offset of stack on overflow different 
1330    both: 
1331    return in r3 or f0.  If no float, must study how gcc emulates floats;
1332    pay attention to arg promotion.  
1333    User may have to cast\args to handle promotion correctly 
1334    since gdb won't know if prototype supplied or not.
1335  */
1336
1337   for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
1338     {
1339       int reg_size = DEPRECATED_REGISTER_RAW_SIZE (ii + 3);
1340
1341       arg = args[argno];
1342       type = check_typedef (VALUE_TYPE (arg));
1343       len = TYPE_LENGTH (type);
1344
1345       if (TYPE_CODE (type) == TYPE_CODE_FLT)
1346         {
1347
1348           /* Floating point arguments are passed in fpr's, as well as gpr's.
1349              There are 13 fpr's reserved for passing parameters. At this point
1350              there is no way we would run out of them.  */
1351
1352           if (len > 8)
1353             printf_unfiltered ("Fatal Error: a floating point parameter "
1354                                "#%d with a size > 8 is found!\n", argno);
1355
1356           memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE
1357                                         (tdep->ppc_fp0_regnum + 1 + f_argno)],
1358                   VALUE_CONTENTS (arg),
1359                   len);
1360           ++f_argno;
1361         }
1362
1363       if (len > reg_size)
1364         {
1365
1366           /* Argument takes more than one register.  */
1367           while (argbytes < len)
1368             {
1369               memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0,
1370                       reg_size);
1371               memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)],
1372                       ((char *) VALUE_CONTENTS (arg)) + argbytes,
1373                       (len - argbytes) > reg_size
1374                         ? reg_size : len - argbytes);
1375               ++ii, argbytes += reg_size;
1376
1377               if (ii >= 8)
1378                 goto ran_out_of_registers_for_arguments;
1379             }
1380           argbytes = 0;
1381           --ii;
1382         }
1383       else
1384         {
1385           /* Argument can fit in one register.  No problem.  */
1386           int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
1387           memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, reg_size);
1388           memcpy ((char *)&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)] + adj, 
1389                   VALUE_CONTENTS (arg), len);
1390         }
1391       ++argno;
1392     }
1393
1394 ran_out_of_registers_for_arguments:
1395
1396   saved_sp = read_sp ();
1397
1398   /* Location for 8 parameters are always reserved.  */
1399   sp -= wordsize * 8;
1400
1401   /* Another six words for back chain, TOC register, link register, etc.  */
1402   sp -= wordsize * 6;
1403
1404   /* Stack pointer must be quadword aligned.  */
1405   sp &= -16;
1406
1407   /* If there are more arguments, allocate space for them in 
1408      the stack, then push them starting from the ninth one.  */
1409
1410   if ((argno < nargs) || argbytes)
1411     {
1412       int space = 0, jj;
1413
1414       if (argbytes)
1415         {
1416           space += ((len - argbytes + 3) & -4);
1417           jj = argno + 1;
1418         }
1419       else
1420         jj = argno;
1421
1422       for (; jj < nargs; ++jj)
1423         {
1424           struct value *val = args[jj];
1425           space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
1426         }
1427
1428       /* Add location required for the rest of the parameters.  */
1429       space = (space + 15) & -16;
1430       sp -= space;
1431
1432       /* This is another instance we need to be concerned about
1433          securing our stack space. If we write anything underneath %sp
1434          (r1), we might conflict with the kernel who thinks he is free
1435          to use this area.  So, update %sp first before doing anything
1436          else.  */
1437
1438       regcache_raw_write_signed (regcache, SP_REGNUM, sp);
1439
1440       /* If the last argument copied into the registers didn't fit there 
1441          completely, push the rest of it into stack.  */
1442
1443       if (argbytes)
1444         {
1445           write_memory (sp + 24 + (ii * 4),
1446                         ((char *) VALUE_CONTENTS (arg)) + argbytes,
1447                         len - argbytes);
1448           ++argno;
1449           ii += ((len - argbytes + 3) & -4) / 4;
1450         }
1451
1452       /* Push the rest of the arguments into stack.  */
1453       for (; argno < nargs; ++argno)
1454         {
1455
1456           arg = args[argno];
1457           type = check_typedef (VALUE_TYPE (arg));
1458           len = TYPE_LENGTH (type);
1459
1460
1461           /* Float types should be passed in fpr's, as well as in the
1462              stack.  */
1463           if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
1464             {
1465
1466               if (len > 8)
1467                 printf_unfiltered ("Fatal Error: a floating point parameter"
1468                                    " #%d with a size > 8 is found!\n", argno);
1469
1470               memcpy (&(deprecated_registers
1471                         [DEPRECATED_REGISTER_BYTE
1472                          (tdep->ppc_fp0_regnum + 1 + f_argno)]),
1473                       VALUE_CONTENTS (arg),
1474                       len);
1475               ++f_argno;
1476             }
1477
1478           write_memory (sp + 24 + (ii * 4),
1479                         (char *) VALUE_CONTENTS (arg),
1480                         len);
1481           ii += ((len + 3) & -4) / 4;
1482         }
1483     }
1484
1485   /* Set the stack pointer.  According to the ABI, the SP is meant to
1486      be set _before_ the corresponding stack space is used.  On AIX,
1487      this even applies when the target has been completely stopped!
1488      Not doing this can lead to conflicts with the kernel which thinks
1489      that it still has control over this not-yet-allocated stack
1490      region.  */
1491   regcache_raw_write_signed (regcache, SP_REGNUM, sp);
1492
1493   /* Set back chain properly.  */
1494   store_unsigned_integer (tmp_buffer, 4, saved_sp);
1495   write_memory (sp, tmp_buffer, 4);
1496
1497   /* Point the inferior function call's return address at the dummy's
1498      breakpoint.  */
1499   regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
1500
1501   /* Set the TOC register, get the value from the objfile reader
1502      which, in turn, gets it from the VMAP table.  */
1503   if (rs6000_find_toc_address_hook != NULL)
1504     {
1505       CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (func_addr);
1506       regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, tocvalue);
1507     }
1508
1509   target_store_registers (-1);
1510   return sp;
1511 }
1512
1513 /* PowerOpen always puts structures in memory.  Vectors, which were
1514    added later, do get returned in a register though.  */
1515
1516 static int     
1517 rs6000_use_struct_convention (int gcc_p, struct type *value_type)
1518 {  
1519   if ((TYPE_LENGTH (value_type) == 16 || TYPE_LENGTH (value_type) == 8)
1520       && TYPE_VECTOR (value_type))
1521     return 0;                            
1522   return 1;
1523 }
1524
1525 static void
1526 rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
1527 {
1528   int offset = 0;
1529   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1530
1531   /* The calling convention this function implements assumes the
1532      processor has floating-point registers.  We shouldn't be using it
1533      on PPC variants that lack them.  */
1534   gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
1535
1536   if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1537     {
1538
1539       /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
1540          We need to truncate the return value into float size (4 byte) if
1541          necessary.  */
1542
1543       convert_typed_floating (&regbuf[DEPRECATED_REGISTER_BYTE
1544                                       (tdep->ppc_fp0_regnum + 1)],
1545                               builtin_type_double,
1546                               valbuf,
1547                               valtype);
1548     }
1549   else if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY
1550            && TYPE_LENGTH (valtype) == 16
1551            && TYPE_VECTOR (valtype))
1552     {
1553       memcpy (valbuf, regbuf + DEPRECATED_REGISTER_BYTE (tdep->ppc_vr0_regnum + 2),
1554               TYPE_LENGTH (valtype));
1555     }
1556   else
1557     {
1558       /* return value is copied starting from r3. */
1559       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
1560           && TYPE_LENGTH (valtype) < DEPRECATED_REGISTER_RAW_SIZE (3))
1561         offset = DEPRECATED_REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
1562
1563       memcpy (valbuf,
1564               regbuf + DEPRECATED_REGISTER_BYTE (3) + offset,
1565               TYPE_LENGTH (valtype));
1566     }
1567 }
1568
1569 /* Return whether handle_inferior_event() should proceed through code
1570    starting at PC in function NAME when stepping.
1571
1572    The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
1573    handle memory references that are too distant to fit in instructions
1574    generated by the compiler.  For example, if 'foo' in the following
1575    instruction:
1576
1577      lwz r9,foo(r2)
1578
1579    is greater than 32767, the linker might replace the lwz with a branch to
1580    somewhere in @FIX1 that does the load in 2 instructions and then branches
1581    back to where execution should continue.
1582
1583    GDB should silently step over @FIX code, just like AIX dbx does.
1584    Unfortunately, the linker uses the "b" instruction for the branches,
1585    meaning that the link register doesn't get set.  Therefore, GDB's usual
1586    step_over_function() mechanism won't work.
1587
1588    Instead, use the IN_SOLIB_RETURN_TRAMPOLINE and SKIP_TRAMPOLINE_CODE hooks
1589    in handle_inferior_event() to skip past @FIX code.  */
1590
1591 int
1592 rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name)
1593 {
1594   return name && !strncmp (name, "@FIX", 4);
1595 }
1596
1597 /* Skip code that the user doesn't want to see when stepping:
1598
1599    1. Indirect function calls use a piece of trampoline code to do context
1600    switching, i.e. to set the new TOC table.  Skip such code if we are on
1601    its first instruction (as when we have single-stepped to here).
1602
1603    2. Skip shared library trampoline code (which is different from
1604    indirect function call trampolines).
1605
1606    3. Skip bigtoc fixup code.
1607
1608    Result is desired PC to step until, or NULL if we are not in
1609    code that should be skipped.  */
1610
1611 CORE_ADDR
1612 rs6000_skip_trampoline_code (CORE_ADDR pc)
1613 {
1614   unsigned int ii, op;
1615   int rel;
1616   CORE_ADDR solib_target_pc;
1617   struct minimal_symbol *msymbol;
1618
1619   static unsigned trampoline_code[] =
1620   {
1621     0x800b0000,                 /*     l   r0,0x0(r11)  */
1622     0x90410014,                 /*    st   r2,0x14(r1)  */
1623     0x7c0903a6,                 /* mtctr   r0           */
1624     0x804b0004,                 /*     l   r2,0x4(r11)  */
1625     0x816b0008,                 /*     l  r11,0x8(r11)  */
1626     0x4e800420,                 /*  bctr                */
1627     0x4e800020,                 /*    br                */
1628     0
1629   };
1630
1631   /* Check for bigtoc fixup code.  */
1632   msymbol = lookup_minimal_symbol_by_pc (pc);
1633   if (msymbol && rs6000_in_solib_return_trampoline (pc, DEPRECATED_SYMBOL_NAME (msymbol)))
1634     {
1635       /* Double-check that the third instruction from PC is relative "b".  */
1636       op = read_memory_integer (pc + 8, 4);
1637       if ((op & 0xfc000003) == 0x48000000)
1638         {
1639           /* Extract bits 6-29 as a signed 24-bit relative word address and
1640              add it to the containing PC.  */
1641           rel = ((int)(op << 6) >> 6);
1642           return pc + 8 + rel;
1643         }
1644     }
1645
1646   /* If pc is in a shared library trampoline, return its target.  */
1647   solib_target_pc = find_solib_trampoline_target (pc);
1648   if (solib_target_pc)
1649     return solib_target_pc;
1650
1651   for (ii = 0; trampoline_code[ii]; ++ii)
1652     {
1653       op = read_memory_integer (pc + (ii * 4), 4);
1654       if (op != trampoline_code[ii])
1655         return 0;
1656     }
1657   ii = read_register (11);      /* r11 holds destination addr   */
1658   pc = read_memory_addr (ii, gdbarch_tdep (current_gdbarch)->wordsize); /* (r11) value */
1659   return pc;
1660 }
1661
1662 /* Return the size of register REG when words are WORDSIZE bytes long.  If REG
1663    isn't available with that word size, return 0.  */
1664
1665 static int
1666 regsize (const struct reg *reg, int wordsize)
1667 {
1668   return wordsize == 8 ? reg->sz64 : reg->sz32;
1669 }
1670
1671 /* Return the name of register number N, or null if no such register exists
1672    in the current architecture.  */
1673
1674 static const char *
1675 rs6000_register_name (int n)
1676 {
1677   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1678   const struct reg *reg = tdep->regs + n;
1679
1680   if (!regsize (reg, tdep->wordsize))
1681     return NULL;
1682   return reg->name;
1683 }
1684
1685 /* Return the GDB type object for the "standard" data type
1686    of data in register N.  */
1687
1688 static struct type *
1689 rs6000_register_type (struct gdbarch *gdbarch, int n)
1690 {
1691   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1692   const struct reg *reg = tdep->regs + n;
1693
1694   if (reg->fpr)
1695     return builtin_type_double;
1696   else
1697     {
1698       int size = regsize (reg, tdep->wordsize);
1699       switch (size)
1700         {
1701         case 0:
1702           return builtin_type_int0;
1703         case 4:
1704           return builtin_type_uint32;
1705         case 8:
1706           if (tdep->ppc_ev0_regnum <= n && n <= tdep->ppc_ev31_regnum)
1707             return builtin_type_vec64;
1708           else
1709             return builtin_type_uint64;
1710           break;
1711         case 16:
1712           return builtin_type_vec128;
1713           break;
1714         default:
1715           internal_error (__FILE__, __LINE__, "Register %d size %d unknown",
1716                           n, size);
1717         }
1718     }
1719 }
1720
1721 /* The register format for RS/6000 floating point registers is always
1722    double, we need a conversion if the memory format is float.  */
1723
1724 static int
1725 rs6000_convert_register_p (int regnum, struct type *type)
1726 {
1727   const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum;
1728   
1729   return (reg->fpr
1730           && TYPE_CODE (type) == TYPE_CODE_FLT
1731           && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type_double));
1732 }
1733
1734 static void
1735 rs6000_register_to_value (struct frame_info *frame,
1736                           int regnum,
1737                           struct type *type,
1738                           void *to)
1739 {
1740   const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum;
1741   char from[MAX_REGISTER_SIZE];
1742   
1743   gdb_assert (reg->fpr);
1744   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
1745
1746   get_frame_register (frame, regnum, from);
1747   convert_typed_floating (from, builtin_type_double, to, type);
1748 }
1749
1750 static void
1751 rs6000_value_to_register (struct frame_info *frame,
1752                           int regnum,
1753                           struct type *type,
1754                           const void *from)
1755 {
1756   const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum;
1757   char to[MAX_REGISTER_SIZE];
1758
1759   gdb_assert (reg->fpr);
1760   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
1761
1762   convert_typed_floating (from, type, to, builtin_type_double);
1763   put_frame_register (frame, regnum, to);
1764 }
1765
1766 static void
1767 e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
1768                            int reg_nr, void *buffer)
1769 {
1770   int base_regnum;
1771   int offset = 0;
1772   char temp_buffer[MAX_REGISTER_SIZE];
1773   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 
1774
1775   if (reg_nr >= tdep->ppc_gp0_regnum 
1776       && reg_nr < tdep->ppc_gp0_regnum + ppc_num_gprs)
1777     {
1778       base_regnum = reg_nr - tdep->ppc_gp0_regnum + tdep->ppc_ev0_regnum;
1779
1780       /* Build the value in the provided buffer.  */ 
1781       /* Read the raw register of which this one is the lower portion.  */
1782       regcache_raw_read (regcache, base_regnum, temp_buffer);
1783       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1784         offset = 4;
1785       memcpy ((char *) buffer, temp_buffer + offset, 4);
1786     }
1787 }
1788
1789 static void
1790 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
1791                             int reg_nr, const void *buffer)
1792 {
1793   int base_regnum;
1794   int offset = 0;
1795   char temp_buffer[MAX_REGISTER_SIZE];
1796   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 
1797
1798   if (reg_nr >= tdep->ppc_gp0_regnum 
1799       && reg_nr < tdep->ppc_gp0_regnum + ppc_num_gprs)
1800     {
1801       base_regnum = reg_nr - tdep->ppc_gp0_regnum + tdep->ppc_ev0_regnum;
1802       /* reg_nr is 32 bit here, and base_regnum is 64 bits.  */
1803       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1804         offset = 4;
1805
1806       /* Let's read the value of the base register into a temporary
1807          buffer, so that overwriting the last four bytes with the new
1808          value of the pseudo will leave the upper 4 bytes unchanged.  */
1809       regcache_raw_read (regcache, base_regnum, temp_buffer);
1810
1811       /* Write as an 8 byte quantity.  */
1812       memcpy (temp_buffer + offset, (char *) buffer, 4);
1813       regcache_raw_write (regcache, base_regnum, temp_buffer);
1814     }
1815 }
1816
1817 /* Convert a DBX STABS register number to a GDB register number.  */
1818 static int
1819 rs6000_stab_reg_to_regnum (int num)
1820 {
1821   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1822
1823   if (0 <= num && num <= 31)
1824     return tdep->ppc_gp0_regnum + num;
1825   else if (32 <= num && num <= 63)
1826     /* FIXME: jimb/2004-05-05: What should we do when the debug info
1827        specifies registers the architecture doesn't have?  Our
1828        callers don't check the value we return.  */
1829     return tdep->ppc_fp0_regnum + (num - 32);
1830   else if (77 <= num && num <= 108)
1831     return tdep->ppc_vr0_regnum + (num - 77);
1832   else if (1200 <= num && num < 1200 + 32)
1833     return tdep->ppc_ev0_regnum + (num - 1200);
1834   else
1835     switch (num)
1836       {
1837       case 64: 
1838         return tdep->ppc_mq_regnum;
1839       case 65:
1840         return tdep->ppc_lr_regnum;
1841       case 66: 
1842         return tdep->ppc_ctr_regnum;
1843       case 76: 
1844         return tdep->ppc_xer_regnum;
1845       case 109:
1846         return tdep->ppc_vrsave_regnum;
1847       case 110:
1848         return tdep->ppc_vrsave_regnum - 1; /* vscr */
1849       case 111:
1850         return tdep->ppc_acc_regnum;
1851       case 112:
1852         return tdep->ppc_spefscr_regnum;
1853       default: 
1854         return num;
1855       }
1856 }
1857
1858
1859 /* Convert a Dwarf 2 register number to a GDB register number.  */
1860 static int
1861 rs6000_dwarf2_reg_to_regnum (int num)
1862 {
1863   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1864
1865   if (0 <= num && num <= 31)
1866     return tdep->ppc_gp0_regnum + num;
1867   else if (32 <= num && num <= 63)
1868     /* FIXME: jimb/2004-05-05: What should we do when the debug info
1869        specifies registers the architecture doesn't have?  Our
1870        callers don't check the value we return.  */
1871     return tdep->ppc_fp0_regnum + (num - 32);
1872   else if (1124 <= num && num < 1124 + 32)
1873     return tdep->ppc_vr0_regnum + (num - 1124);
1874   else if (1200 <= num && num < 1200 + 32)
1875     return tdep->ppc_ev0_regnum + (num - 1200);
1876   else
1877     switch (num)
1878       {
1879       case 67:
1880         return tdep->ppc_vrsave_regnum - 1; /* vscr */
1881       case 99:
1882         return tdep->ppc_acc_regnum;
1883       case 100:
1884         return tdep->ppc_mq_regnum;
1885       case 101:
1886         return tdep->ppc_xer_regnum;
1887       case 108:
1888         return tdep->ppc_lr_regnum;
1889       case 109:
1890         return tdep->ppc_ctr_regnum;
1891       case 356:
1892         return tdep->ppc_vrsave_regnum;
1893       case 612:
1894         return tdep->ppc_spefscr_regnum;
1895       default:
1896         return num;
1897       }
1898 }
1899
1900
1901 static void
1902 rs6000_store_return_value (struct type *type,
1903                            struct regcache *regcache,
1904                            const void *valbuf)
1905 {
1906   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1907   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1908   int regnum = -1;
1909
1910   /* The calling convention this function implements assumes the
1911      processor has floating-point registers.  We shouldn't be using it
1912      on PPC variants that lack them.  */
1913   gdb_assert (ppc_floating_point_unit_p (gdbarch));
1914
1915   if (TYPE_CODE (type) == TYPE_CODE_FLT)
1916     /* Floating point values are returned starting from FPR1 and up.
1917        Say a double_double_double type could be returned in
1918        FPR1/FPR2/FPR3 triple.  */
1919     regnum = tdep->ppc_fp0_regnum + 1;
1920   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1921     {
1922       if (TYPE_LENGTH (type) == 16
1923           && TYPE_VECTOR (type))
1924         regnum = tdep->ppc_vr0_regnum + 2;
1925       else
1926         gdb_assert (0);
1927     }
1928   else
1929     /* Everything else is returned in GPR3 and up.  */
1930     regnum = tdep->ppc_gp0_regnum + 3;
1931
1932   {
1933     size_t bytes_written = 0;
1934
1935     while (bytes_written < TYPE_LENGTH (type))
1936       {
1937         /* How much of this value can we write to this register?  */
1938         size_t bytes_to_write = min (TYPE_LENGTH (type) - bytes_written,
1939                                      register_size (gdbarch, regnum));
1940         regcache_cooked_write_part (regcache, regnum,
1941                                     0, bytes_to_write,
1942                                     (char *) valbuf + bytes_written);
1943         regnum++;
1944         bytes_written += bytes_to_write;
1945       }
1946   }
1947 }
1948
1949
1950 /* Extract from an array REGBUF containing the (raw) register state
1951    the address in which a function should return its structure value,
1952    as a CORE_ADDR (or an expression that can be used as one).  */
1953
1954 static CORE_ADDR
1955 rs6000_extract_struct_value_address (struct regcache *regcache)
1956 {
1957   /* FIXME: cagney/2002-09-26: PR gdb/724: When making an inferior
1958      function call GDB knows the address of the struct return value
1959      and hence, should not need to call this function.  Unfortunately,
1960      the current call_function_by_hand() code only saves the most
1961      recent struct address leading to occasional calls.  The code
1962      should instead maintain a stack of such addresses (in the dummy
1963      frame object).  */
1964   /* NOTE: cagney/2002-09-26: Return 0 which indicates that we've
1965      really got no idea where the return value is being stored.  While
1966      r3, on function entry, contained the address it will have since
1967      been reused (scratch) and hence wouldn't be valid */
1968   return 0;
1969 }
1970
1971 /* Hook called when a new child process is started.  */
1972
1973 void
1974 rs6000_create_inferior (int pid)
1975 {
1976   if (rs6000_set_host_arch_hook)
1977     rs6000_set_host_arch_hook (pid);
1978 }
1979 \f
1980 /* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
1981
1982    Usually a function pointer's representation is simply the address
1983    of the function. On the RS/6000 however, a function pointer is
1984    represented by a pointer to a TOC entry. This TOC entry contains
1985    three words, the first word is the address of the function, the
1986    second word is the TOC pointer (r2), and the third word is the
1987    static chain value.  Throughout GDB it is currently assumed that a
1988    function pointer contains the address of the function, which is not
1989    easy to fix.  In addition, the conversion of a function address to
1990    a function pointer would require allocation of a TOC entry in the
1991    inferior's memory space, with all its drawbacks.  To be able to
1992    call C++ virtual methods in the inferior (which are called via
1993    function pointers), find_function_addr uses this function to get the
1994    function address from a function pointer.  */
1995
1996 /* Return real function address if ADDR (a function pointer) is in the data
1997    space and is therefore a special function pointer.  */
1998
1999 static CORE_ADDR
2000 rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
2001                                    CORE_ADDR addr,
2002                                    struct target_ops *targ)
2003 {
2004   struct obj_section *s;
2005
2006   s = find_pc_section (addr);
2007   if (s && s->the_bfd_section->flags & SEC_CODE)
2008     return addr;
2009
2010   /* ADDR is in the data space, so it's a special function pointer. */
2011   return read_memory_addr (addr, gdbarch_tdep (current_gdbarch)->wordsize);
2012 }
2013 \f
2014
2015 /* Handling the various POWER/PowerPC variants.  */
2016
2017
2018 /* The arrays here called registers_MUMBLE hold information about available
2019    registers.
2020
2021    For each family of PPC variants, I've tried to isolate out the
2022    common registers and put them up front, so that as long as you get
2023    the general family right, GDB will correctly identify the registers
2024    common to that family.  The common register sets are:
2025
2026    For the 60x family: hid0 hid1 iabr dabr pir
2027
2028    For the 505 and 860 family: eie eid nri
2029
2030    For the 403 and 403GC: icdbdr esr dear evpr cdbcr tsr tcr pit tbhi
2031    tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1
2032    pbu1 pbl2 pbu2
2033
2034    Most of these register groups aren't anything formal.  I arrived at
2035    them by looking at the registers that occurred in more than one
2036    processor.
2037    
2038    Note: kevinb/2002-04-30: Support for the fpscr register was added
2039    during April, 2002.  Slot 70 is being used for PowerPC and slot 71
2040    for Power.  For PowerPC, slot 70 was unused and was already in the
2041    PPC_UISA_SPRS which is ideally where fpscr should go.  For Power,
2042    slot 70 was being used for "mq", so the next available slot (71)
2043    was chosen.  It would have been nice to be able to make the
2044    register numbers the same across processor cores, but this wasn't
2045    possible without either 1) renumbering some registers for some
2046    processors or 2) assigning fpscr to a really high slot that's
2047    larger than any current register number.  Doing (1) is bad because
2048    existing stubs would break.  Doing (2) is undesirable because it
2049    would introduce a really large gap between fpscr and the rest of
2050    the registers for most processors.  */
2051
2052 /* Convenience macros for populating register arrays.  */
2053
2054 /* Within another macro, convert S to a string.  */
2055
2056 #define STR(s)  #s
2057
2058 /* Return a struct reg defining register NAME that's 32 bits on 32-bit systems
2059    and 64 bits on 64-bit systems.  */
2060 #define R(name)         { STR(name), 4, 8, 0, 0, -1 }
2061
2062 /* Return a struct reg defining register NAME that's 32 bits on all
2063    systems.  */
2064 #define R4(name)        { STR(name), 4, 4, 0, 0, -1 }
2065
2066 /* Return a struct reg defining register NAME that's 64 bits on all
2067    systems.  */
2068 #define R8(name)        { STR(name), 8, 8, 0, 0, -1 }
2069
2070 /* Return a struct reg defining register NAME that's 128 bits on all
2071    systems.  */
2072 #define R16(name)       { STR(name), 16, 16, 0, 0, -1 }
2073
2074 /* Return a struct reg defining floating-point register NAME.  */
2075 #define F(name)         { STR(name), 8, 8, 1, 0, -1 }
2076
2077 /* Return a struct reg defining a pseudo register NAME.  */
2078 #define P(name)         { STR(name), 4, 8, 0, 1, -1 }
2079
2080 /* Return a struct reg defining register NAME that's 32 bits on 32-bit
2081    systems and that doesn't exist on 64-bit systems.  */
2082 #define R32(name)       { STR(name), 4, 0, 0, 0, -1 }
2083
2084 /* Return a struct reg defining register NAME that's 64 bits on 64-bit
2085    systems and that doesn't exist on 32-bit systems.  */
2086 #define R64(name)       { STR(name), 0, 8, 0, 0, -1 }
2087
2088 /* Return a struct reg placeholder for a register that doesn't exist.  */
2089 #define R0              { 0, 0, 0, 0, 0, -1 }
2090
2091 /* Return a struct reg defining an SPR named NAME that is 32 bits on
2092    32-bit systems and 64 bits on 64-bit systems.  */
2093 #define S(name)         { STR(name), 4, 8, 0, 0, ppc_spr_ ## name }
2094   
2095 /* Return a struct reg defining an SPR named NAME that is 32 bits on
2096    all systems.  */
2097 #define S4(name)        { STR(name), 4, 4, 0, 0, ppc_spr_ ## name }
2098   
2099 /* Return a struct reg defining an SPR named NAME that is 32 bits on
2100    all systems, and whose SPR number is NUMBER.  */
2101 #define SN4(name, number) { STR(name), 4, 4, 0, 0, (number) }
2102   
2103 /* Return a struct reg defining an SPR named NAME that's 64 bits on
2104    64-bit systems and that doesn't exist on 32-bit systems.  */
2105 #define S64(name)       { STR(name), 0, 8, 0, 0, ppc_spr_ ## name }
2106   
2107 /* UISA registers common across all architectures, including POWER.  */
2108
2109 #define COMMON_UISA_REGS \
2110   /*  0 */ R(r0), R(r1), R(r2), R(r3), R(r4), R(r5), R(r6), R(r7),  \
2111   /*  8 */ R(r8), R(r9), R(r10),R(r11),R(r12),R(r13),R(r14),R(r15), \
2112   /* 16 */ R(r16),R(r17),R(r18),R(r19),R(r20),R(r21),R(r22),R(r23), \
2113   /* 24 */ R(r24),R(r25),R(r26),R(r27),R(r28),R(r29),R(r30),R(r31), \
2114   /* 32 */ F(f0), F(f1), F(f2), F(f3), F(f4), F(f5), F(f6), F(f7),  \
2115   /* 40 */ F(f8), F(f9), F(f10),F(f11),F(f12),F(f13),F(f14),F(f15), \
2116   /* 48 */ F(f16),F(f17),F(f18),F(f19),F(f20),F(f21),F(f22),F(f23), \
2117   /* 56 */ F(f24),F(f25),F(f26),F(f27),F(f28),F(f29),F(f30),F(f31), \
2118   /* 64 */ R(pc), R(ps)
2119
2120 /* UISA-level SPRs for PowerPC.  */
2121 #define PPC_UISA_SPRS \
2122   /* 66 */ R4(cr),  S(lr), S(ctr), S4(xer), R4(fpscr)
2123
2124 /* UISA-level SPRs for PowerPC without floating point support.  */
2125 #define PPC_UISA_NOFP_SPRS \
2126   /* 66 */ R4(cr),  S(lr), S(ctr), S4(xer), R0
2127
2128 /* Segment registers, for PowerPC.  */
2129 #define PPC_SEGMENT_REGS \
2130   /* 71 */ R32(sr0),  R32(sr1),  R32(sr2),  R32(sr3),  \
2131   /* 75 */ R32(sr4),  R32(sr5),  R32(sr6),  R32(sr7),  \
2132   /* 79 */ R32(sr8),  R32(sr9),  R32(sr10), R32(sr11), \
2133   /* 83 */ R32(sr12), R32(sr13), R32(sr14), R32(sr15)
2134
2135 /* OEA SPRs for PowerPC.  */
2136 #define PPC_OEA_SPRS \
2137   /*  87 */ S4(pvr), \
2138   /*  88 */ S(ibat0u), S(ibat0l), S(ibat1u), S(ibat1l), \
2139   /*  92 */ S(ibat2u), S(ibat2l), S(ibat3u), S(ibat3l), \
2140   /*  96 */ S(dbat0u), S(dbat0l), S(dbat1u), S(dbat1l), \
2141   /* 100 */ S(dbat2u), S(dbat2l), S(dbat3u), S(dbat3l), \
2142   /* 104 */ S(sdr1),   S64(asr),  S(dar),    S4(dsisr), \
2143   /* 108 */ S(sprg0),  S(sprg1),  S(sprg2),  S(sprg3),  \
2144   /* 112 */ S(srr0),   S(srr1),   S(tbl),    S(tbu),    \
2145   /* 116 */ S4(dec),   S(dabr),   S4(ear)
2146
2147 /* AltiVec registers.  */
2148 #define PPC_ALTIVEC_REGS \
2149   /*119*/R16(vr0), R16(vr1), R16(vr2), R16(vr3), R16(vr4), R16(vr5), R16(vr6), R16(vr7),  \
2150   /*127*/R16(vr8), R16(vr9), R16(vr10),R16(vr11),R16(vr12),R16(vr13),R16(vr14),R16(vr15), \
2151   /*135*/R16(vr16),R16(vr17),R16(vr18),R16(vr19),R16(vr20),R16(vr21),R16(vr22),R16(vr23), \
2152   /*143*/R16(vr24),R16(vr25),R16(vr26),R16(vr27),R16(vr28),R16(vr29),R16(vr30),R16(vr31), \
2153   /*151*/R4(vscr), R4(vrsave)
2154
2155 /* Vectors of hi-lo general purpose registers.  */
2156 #define PPC_EV_REGS \
2157   /* 0*/R8(ev0), R8(ev1), R8(ev2), R8(ev3), R8(ev4), R8(ev5), R8(ev6), R8(ev7),  \
2158   /* 8*/R8(ev8), R8(ev9), R8(ev10),R8(ev11),R8(ev12),R8(ev13),R8(ev14),R8(ev15), \
2159   /*16*/R8(ev16),R8(ev17),R8(ev18),R8(ev19),R8(ev20),R8(ev21),R8(ev22),R8(ev23), \
2160   /*24*/R8(ev24),R8(ev25),R8(ev26),R8(ev27),R8(ev28),R8(ev29),R8(ev30),R8(ev31)
2161
2162 /* Lower half of the EV registers.  */
2163 #define PPC_GPRS_PSEUDO_REGS \
2164   /*  0 */ P(r0), P(r1), P(r2), P(r3), P(r4), P(r5), P(r6), P(r7),  \
2165   /*  8 */ P(r8), P(r9), P(r10),P(r11),P(r12),P(r13),P(r14),P(r15), \
2166   /* 16 */ P(r16),P(r17),P(r18),P(r19),P(r20),P(r21),P(r22),P(r23), \
2167   /* 24 */ P(r24),P(r25),P(r26),P(r27),P(r28),P(r29),P(r30),P(r31)
2168
2169 /* IBM POWER (pre-PowerPC) architecture, user-level view.  We only cover
2170    user-level SPR's.  */
2171 static const struct reg registers_power[] =
2172 {
2173   COMMON_UISA_REGS,
2174   /* 66 */ R4(cnd), S(lr), S(cnt), S4(xer), S4(mq),
2175   /* 71 */ R4(fpscr)
2176 };
2177
2178 /* PowerPC UISA - a PPC processor as viewed by user-level code.  A UISA-only
2179    view of the PowerPC.  */
2180 static const struct reg registers_powerpc[] =
2181 {
2182   COMMON_UISA_REGS,
2183   PPC_UISA_SPRS,
2184   PPC_ALTIVEC_REGS
2185 };
2186
2187 /* IBM PowerPC 403.
2188
2189    Some notes about the "tcr" special-purpose register:
2190    - On the 403 and 403GC, SPR 986 is named "tcr", and it controls the
2191      403's programmable interval timer, fixed interval timer, and
2192      watchdog timer.
2193    - On the 602, SPR 984 is named "tcr", and it controls the 602's
2194      watchdog timer, and nothing else.
2195
2196    Some of the fields are similar between the two, but they're not
2197    compatible with each other.  Since the two variants have different
2198    registers, with different numbers, but the same name, we can't
2199    splice the register name to get the SPR number.  */
2200 static const struct reg registers_403[] =
2201 {
2202   COMMON_UISA_REGS,
2203   PPC_UISA_SPRS,
2204   PPC_SEGMENT_REGS,
2205   PPC_OEA_SPRS,
2206   /* 119 */ S(icdbdr), S(esr),  S(dear), S(evpr),
2207   /* 123 */ S(cdbcr),  S(tsr),  SN4(tcr, ppc_spr_403_tcr), S(pit),
2208   /* 127 */ S(tbhi),   S(tblo), S(srr2), S(srr3),
2209   /* 131 */ S(dbsr),   S(dbcr), S(iac1), S(iac2),
2210   /* 135 */ S(dac1),   S(dac2), S(dccr), S(iccr),
2211   /* 139 */ S(pbl1),   S(pbu1), S(pbl2), S(pbu2)
2212 };
2213
2214 /* IBM PowerPC 403GC.
2215    See the comments about 'tcr' for the 403, above.  */
2216 static const struct reg registers_403GC[] =
2217 {
2218   COMMON_UISA_REGS,
2219   PPC_UISA_SPRS,
2220   PPC_SEGMENT_REGS,
2221   PPC_OEA_SPRS,
2222   /* 119 */ S(icdbdr), S(esr),  S(dear), S(evpr),
2223   /* 123 */ S(cdbcr),  S(tsr),  SN4(tcr, ppc_spr_403_tcr), S(pit),
2224   /* 127 */ S(tbhi),   S(tblo), S(srr2), S(srr3),
2225   /* 131 */ S(dbsr),   S(dbcr), S(iac1), S(iac2),
2226   /* 135 */ S(dac1),   S(dac2), S(dccr), S(iccr),
2227   /* 139 */ S(pbl1),   S(pbu1), S(pbl2), S(pbu2),
2228   /* 143 */ S(zpr),    S(pid),  S(sgr),  S(dcwr),
2229   /* 147 */ S(tbhu),   S(tblu)
2230 };
2231
2232 /* Motorola PowerPC 505.  */
2233 static const struct reg registers_505[] =
2234 {
2235   COMMON_UISA_REGS,
2236   PPC_UISA_SPRS,
2237   PPC_SEGMENT_REGS,
2238   PPC_OEA_SPRS,
2239   /* 119 */ S(eie), S(eid), S(nri)
2240 };
2241
2242 /* Motorola PowerPC 860 or 850.  */
2243 static const struct reg registers_860[] =
2244 {
2245   COMMON_UISA_REGS,
2246   PPC_UISA_SPRS,
2247   PPC_SEGMENT_REGS,
2248   PPC_OEA_SPRS,
2249   /* 119 */ S(eie), S(eid), S(nri), S(cmpa),
2250   /* 123 */ S(cmpb), S(cmpc), S(cmpd), S(icr),
2251   /* 127 */ S(der), S(counta), S(countb), S(cmpe),
2252   /* 131 */ S(cmpf), S(cmpg), S(cmph), S(lctrl1),
2253   /* 135 */ S(lctrl2), S(ictrl), S(bar), S(ic_cst),
2254   /* 139 */ S(ic_adr), S(ic_dat), S(dc_cst), S(dc_adr),
2255   /* 143 */ S(dc_dat), S(dpdr), S(dpir), S(immr),
2256   /* 147 */ S(mi_ctr), S(mi_ap), S(mi_epn), S(mi_twc),
2257   /* 151 */ S(mi_rpn), S(md_ctr), S(m_casid), S(md_ap),
2258   /* 155 */ S(md_epn), S(m_twb), S(md_twc), S(md_rpn),
2259   /* 159 */ S(m_tw), S(mi_dbcam), S(mi_dbram0), S(mi_dbram1),
2260   /* 163 */ S(md_dbcam), S(md_dbram0), S(md_dbram1)
2261 };
2262
2263 /* Motorola PowerPC 601.  Note that the 601 has different register numbers
2264    for reading and writing RTCU and RTCL.  However, how one reads and writes a
2265    register is the stub's problem.  */
2266 static const struct reg registers_601[] =
2267 {
2268   COMMON_UISA_REGS,
2269   PPC_UISA_SPRS,
2270   PPC_SEGMENT_REGS,
2271   PPC_OEA_SPRS,
2272   /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr),
2273   /* 123 */ S(pir), S(mq), S(rtcu), S(rtcl)
2274 };
2275
2276 /* Motorola PowerPC 602.
2277    See the notes under the 403 about 'tcr'.  */
2278 static const struct reg registers_602[] =
2279 {
2280   COMMON_UISA_REGS,
2281   PPC_UISA_SPRS,
2282   PPC_SEGMENT_REGS,
2283   PPC_OEA_SPRS,
2284   /* 119 */ S(hid0), S(hid1), S(iabr), R0,
2285   /* 123 */ R0, SN4(tcr, ppc_spr_602_tcr), S(ibr), S(esasrr),
2286   /* 127 */ S(sebr), S(ser), S(sp), S(lt)
2287 };
2288
2289 /* Motorola/IBM PowerPC 603 or 603e.  */
2290 static const struct reg registers_603[] =
2291 {
2292   COMMON_UISA_REGS,
2293   PPC_UISA_SPRS,
2294   PPC_SEGMENT_REGS,
2295   PPC_OEA_SPRS,
2296   /* 119 */ S(hid0), S(hid1), S(iabr), R0,
2297   /* 123 */ R0, S(dmiss), S(dcmp), S(hash1),
2298   /* 127 */ S(hash2), S(imiss), S(icmp), S(rpa)
2299 };
2300
2301 /* Motorola PowerPC 604 or 604e.  */
2302 static const struct reg registers_604[] =
2303 {
2304   COMMON_UISA_REGS,
2305   PPC_UISA_SPRS,
2306   PPC_SEGMENT_REGS,
2307   PPC_OEA_SPRS,
2308   /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr),
2309   /* 123 */ S(pir), S(mmcr0), S(pmc1), S(pmc2),
2310   /* 127 */ S(sia), S(sda)
2311 };
2312
2313 /* Motorola/IBM PowerPC 750 or 740.  */
2314 static const struct reg registers_750[] =
2315 {
2316   COMMON_UISA_REGS,
2317   PPC_UISA_SPRS,
2318   PPC_SEGMENT_REGS,
2319   PPC_OEA_SPRS,
2320   /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr),
2321   /* 123 */ R0, S(ummcr0), S(upmc1), S(upmc2),
2322   /* 127 */ S(usia), S(ummcr1), S(upmc3), S(upmc4),
2323   /* 131 */ S(mmcr0), S(pmc1), S(pmc2), S(sia),
2324   /* 135 */ S(mmcr1), S(pmc3), S(pmc4), S(l2cr),
2325   /* 139 */ S(ictc), S(thrm1), S(thrm2), S(thrm3)
2326 };
2327
2328
2329 /* Motorola PowerPC 7400.  */
2330 static const struct reg registers_7400[] =
2331 {
2332   /* gpr0-gpr31, fpr0-fpr31 */
2333   COMMON_UISA_REGS,
2334   /* cr, lr, ctr, xer, fpscr */
2335   PPC_UISA_SPRS,
2336   /* sr0-sr15 */
2337   PPC_SEGMENT_REGS,
2338   PPC_OEA_SPRS,
2339   /* vr0-vr31, vrsave, vscr */
2340   PPC_ALTIVEC_REGS
2341   /* FIXME? Add more registers? */
2342 };
2343
2344 /* Motorola e500.  */
2345 static const struct reg registers_e500[] =
2346 {
2347   R(pc), R(ps),
2348   /* cr, lr, ctr, xer, "" */
2349   PPC_UISA_NOFP_SPRS,
2350   /* 7...38 */
2351   PPC_EV_REGS,
2352   R8(acc), S4(spefscr),
2353   /* NOTE: Add new registers here the end of the raw register
2354      list and just before the first pseudo register.  */
2355   /* 41...72 */
2356   PPC_GPRS_PSEUDO_REGS
2357 };
2358
2359 /* Information about a particular processor variant.  */
2360
2361 struct variant
2362   {
2363     /* Name of this variant.  */
2364     char *name;
2365
2366     /* English description of the variant.  */
2367     char *description;
2368
2369     /* bfd_arch_info.arch corresponding to variant.  */
2370     enum bfd_architecture arch;
2371
2372     /* bfd_arch_info.mach corresponding to variant.  */
2373     unsigned long mach;
2374
2375     /* Number of real registers.  */
2376     int nregs;
2377
2378     /* Number of pseudo registers.  */
2379     int npregs;
2380
2381     /* Number of total registers (the sum of nregs and npregs).  */
2382     int num_tot_regs;
2383
2384     /* Table of register names; registers[R] is the name of the register
2385        number R.  */
2386     const struct reg *regs;
2387   };
2388
2389 #define tot_num_registers(list) (sizeof (list) / sizeof((list)[0]))
2390
2391 static int
2392 num_registers (const struct reg *reg_list, int num_tot_regs)
2393 {
2394   int i;
2395   int nregs = 0;
2396
2397   for (i = 0; i < num_tot_regs; i++)
2398     if (!reg_list[i].pseudo)
2399       nregs++;
2400        
2401   return nregs;
2402 }
2403
2404 static int
2405 num_pseudo_registers (const struct reg *reg_list, int num_tot_regs)
2406 {
2407   int i;
2408   int npregs = 0;
2409
2410   for (i = 0; i < num_tot_regs; i++)
2411     if (reg_list[i].pseudo)
2412       npregs ++; 
2413
2414   return npregs;
2415 }
2416
2417 /* Information in this table comes from the following web sites:
2418    IBM:       http://www.chips.ibm.com:80/products/embedded/
2419    Motorola:  http://www.mot.com/SPS/PowerPC/
2420
2421    I'm sure I've got some of the variant descriptions not quite right.
2422    Please report any inaccuracies you find to GDB's maintainer.
2423
2424    If you add entries to this table, please be sure to allow the new
2425    value as an argument to the --with-cpu flag, in configure.in.  */
2426
2427 static struct variant variants[] =
2428 {
2429
2430   {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
2431    bfd_mach_ppc, -1, -1, tot_num_registers (registers_powerpc),
2432    registers_powerpc},
2433   {"power", "POWER user-level", bfd_arch_rs6000,
2434    bfd_mach_rs6k, -1, -1, tot_num_registers (registers_power),
2435    registers_power},
2436   {"403", "IBM PowerPC 403", bfd_arch_powerpc,
2437    bfd_mach_ppc_403, -1, -1, tot_num_registers (registers_403),
2438    registers_403},
2439   {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
2440    bfd_mach_ppc_601, -1, -1, tot_num_registers (registers_601),
2441    registers_601},
2442   {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
2443    bfd_mach_ppc_602, -1, -1, tot_num_registers (registers_602),
2444    registers_602},
2445   {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
2446    bfd_mach_ppc_603, -1, -1, tot_num_registers (registers_603),
2447    registers_603},
2448   {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
2449    604, -1, -1, tot_num_registers (registers_604),
2450    registers_604},
2451   {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
2452    bfd_mach_ppc_403gc, -1, -1, tot_num_registers (registers_403GC),
2453    registers_403GC},
2454   {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
2455    bfd_mach_ppc_505, -1, -1, tot_num_registers (registers_505),
2456    registers_505},
2457   {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
2458    bfd_mach_ppc_860, -1, -1, tot_num_registers (registers_860),
2459    registers_860},
2460   {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
2461    bfd_mach_ppc_750, -1, -1, tot_num_registers (registers_750),
2462    registers_750},
2463   {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2464    bfd_mach_ppc_7400, -1, -1, tot_num_registers (registers_7400),
2465    registers_7400},
2466   {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
2467    bfd_mach_ppc_e500, -1, -1, tot_num_registers (registers_e500),
2468    registers_e500},
2469
2470   /* 64-bit */
2471   {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2472    bfd_mach_ppc64, -1, -1, tot_num_registers (registers_powerpc),
2473    registers_powerpc},
2474   {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2475    bfd_mach_ppc_620, -1, -1, tot_num_registers (registers_powerpc),
2476    registers_powerpc},
2477   {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2478    bfd_mach_ppc_630, -1, -1, tot_num_registers (registers_powerpc),
2479    registers_powerpc},
2480   {"a35", "PowerPC A35", bfd_arch_powerpc,
2481    bfd_mach_ppc_a35, -1, -1, tot_num_registers (registers_powerpc),
2482    registers_powerpc},
2483   {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
2484    bfd_mach_ppc_rs64ii, -1, -1, tot_num_registers (registers_powerpc),
2485    registers_powerpc},
2486   {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
2487    bfd_mach_ppc_rs64iii, -1, -1, tot_num_registers (registers_powerpc),
2488    registers_powerpc},
2489
2490   /* FIXME: I haven't checked the register sets of the following.  */
2491   {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
2492    bfd_mach_rs6k_rs1, -1, -1, tot_num_registers (registers_power),
2493    registers_power},
2494   {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
2495    bfd_mach_rs6k_rsc, -1, -1, tot_num_registers (registers_power),
2496    registers_power},
2497   {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
2498    bfd_mach_rs6k_rs2, -1, -1, tot_num_registers (registers_power),
2499    registers_power},
2500
2501   {0, 0, 0, 0, 0, 0, 0, 0}
2502 };
2503
2504 /* Initialize the number of registers and pseudo registers in each variant.  */
2505
2506 static void
2507 init_variants (void)
2508 {
2509   struct variant *v;
2510
2511   for (v = variants; v->name; v++)
2512     {
2513       if (v->nregs == -1)
2514         v->nregs = num_registers (v->regs, v->num_tot_regs);
2515       if (v->npregs == -1)
2516         v->npregs = num_pseudo_registers (v->regs, v->num_tot_regs);
2517     }  
2518 }
2519
2520 /* Return the variant corresponding to architecture ARCH and machine number
2521    MACH.  If no such variant exists, return null.  */
2522
2523 static const struct variant *
2524 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
2525 {
2526   const struct variant *v;
2527
2528   for (v = variants; v->name; v++)
2529     if (arch == v->arch && mach == v->mach)
2530       return v;
2531
2532   return NULL;
2533 }
2534
2535 static int
2536 gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
2537 {
2538   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2539     return print_insn_big_powerpc (memaddr, info);
2540   else
2541     return print_insn_little_powerpc (memaddr, info);
2542 }
2543 \f
2544 static CORE_ADDR
2545 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2546 {
2547   return frame_unwind_register_unsigned (next_frame, PC_REGNUM);
2548 }
2549
2550 static struct frame_id
2551 rs6000_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
2552 {
2553   return frame_id_build (frame_unwind_register_unsigned (next_frame,
2554                                                          SP_REGNUM),
2555                          frame_pc_unwind (next_frame));
2556 }
2557
2558 struct rs6000_frame_cache
2559 {
2560   CORE_ADDR base;
2561   CORE_ADDR initial_sp;
2562   struct trad_frame_saved_reg *saved_regs;
2563 };
2564
2565 static struct rs6000_frame_cache *
2566 rs6000_frame_cache (struct frame_info *next_frame, void **this_cache)
2567 {
2568   struct rs6000_frame_cache *cache;
2569   struct gdbarch *gdbarch = get_frame_arch (next_frame);
2570   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2571   struct rs6000_framedata fdata;
2572   int wordsize = tdep->wordsize;
2573
2574   if ((*this_cache) != NULL)
2575     return (*this_cache);
2576   cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
2577   (*this_cache) = cache;
2578   cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
2579
2580   skip_prologue (frame_func_unwind (next_frame), frame_pc_unwind (next_frame),
2581                  &fdata);
2582
2583   /* If there were any saved registers, figure out parent's stack
2584      pointer.  */
2585   /* The following is true only if the frame doesn't have a call to
2586      alloca(), FIXME.  */
2587
2588   if (fdata.saved_fpr == 0
2589       && fdata.saved_gpr == 0
2590       && fdata.saved_vr == 0
2591       && fdata.saved_ev == 0
2592       && fdata.lr_offset == 0
2593       && fdata.cr_offset == 0
2594       && fdata.vr_offset == 0
2595       && fdata.ev_offset == 0)
2596     cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2597   else
2598     {
2599       /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
2600          address of the current frame.  Things might be easier if the
2601          ->frame pointed to the outer-most address of the frame.  In
2602          the mean time, the address of the prev frame is used as the
2603          base address of this frame.  */
2604       cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2605       if (!fdata.frameless)
2606         /* Frameless really means stackless.  */
2607         cache->base = read_memory_addr (cache->base, wordsize);
2608     }
2609   trad_frame_set_value (cache->saved_regs, SP_REGNUM, cache->base);
2610
2611   /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
2612      All fpr's from saved_fpr to fp31 are saved.  */
2613
2614   if (fdata.saved_fpr >= 0)
2615     {
2616       int i;
2617       CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
2618
2619       /* If skip_prologue says floating-point registers were saved,
2620          but the current architecture has no floating-point registers,
2621          then that's strange.  But we have no indices to even record
2622          the addresses under, so we just ignore it.  */
2623       if (ppc_floating_point_unit_p (gdbarch))
2624         for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
2625           {
2626             cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
2627             fpr_addr += 8;
2628           }
2629     }
2630
2631   /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
2632      All gpr's from saved_gpr to gpr31 are saved.  */
2633
2634   if (fdata.saved_gpr >= 0)
2635     {
2636       int i;
2637       CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
2638       for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
2639         {
2640           cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
2641           gpr_addr += wordsize;
2642         }
2643     }
2644
2645   /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
2646      All vr's from saved_vr to vr31 are saved.  */
2647   if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
2648     {
2649       if (fdata.saved_vr >= 0)
2650         {
2651           int i;
2652           CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
2653           for (i = fdata.saved_vr; i < 32; i++)
2654             {
2655               cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
2656               vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
2657             }
2658         }
2659     }
2660
2661   /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
2662      All vr's from saved_ev to ev31 are saved. ????? */
2663   if (tdep->ppc_ev0_regnum != -1 && tdep->ppc_ev31_regnum != -1)
2664     {
2665       if (fdata.saved_ev >= 0)
2666         {
2667           int i;
2668           CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
2669           for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
2670             {
2671               cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
2672               cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4;
2673               ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
2674             }
2675         }
2676     }
2677
2678   /* If != 0, fdata.cr_offset is the offset from the frame that
2679      holds the CR.  */
2680   if (fdata.cr_offset != 0)
2681     cache->saved_regs[tdep->ppc_cr_regnum].addr = cache->base + fdata.cr_offset;
2682
2683   /* If != 0, fdata.lr_offset is the offset from the frame that
2684      holds the LR.  */
2685   if (fdata.lr_offset != 0)
2686     cache->saved_regs[tdep->ppc_lr_regnum].addr = cache->base + fdata.lr_offset;
2687   /* The PC is found in the link register.  */
2688   cache->saved_regs[PC_REGNUM] = cache->saved_regs[tdep->ppc_lr_regnum];
2689
2690   /* If != 0, fdata.vrsave_offset is the offset from the frame that
2691      holds the VRSAVE.  */
2692   if (fdata.vrsave_offset != 0)
2693     cache->saved_regs[tdep->ppc_vrsave_regnum].addr = cache->base + fdata.vrsave_offset;
2694
2695   if (fdata.alloca_reg < 0)
2696     /* If no alloca register used, then fi->frame is the value of the
2697        %sp for this frame, and it is good enough.  */
2698     cache->initial_sp = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2699   else
2700     cache->initial_sp = frame_unwind_register_unsigned (next_frame,
2701                                                         fdata.alloca_reg);
2702
2703   return cache;
2704 }
2705
2706 static void
2707 rs6000_frame_this_id (struct frame_info *next_frame, void **this_cache,
2708                       struct frame_id *this_id)
2709 {
2710   struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
2711                                                         this_cache);
2712   (*this_id) = frame_id_build (info->base, frame_func_unwind (next_frame));
2713 }
2714
2715 static void
2716 rs6000_frame_prev_register (struct frame_info *next_frame,
2717                                  void **this_cache,
2718                                  int regnum, int *optimizedp,
2719                                  enum lval_type *lvalp, CORE_ADDR *addrp,
2720                                  int *realnump, void *valuep)
2721 {
2722   struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
2723                                                         this_cache);
2724   trad_frame_prev_register (next_frame, info->saved_regs, regnum,
2725                             optimizedp, lvalp, addrp, realnump, valuep);
2726 }
2727
2728 static const struct frame_unwind rs6000_frame_unwind =
2729 {
2730   NORMAL_FRAME,
2731   rs6000_frame_this_id,
2732   rs6000_frame_prev_register
2733 };
2734
2735 static const struct frame_unwind *
2736 rs6000_frame_sniffer (struct frame_info *next_frame)
2737 {
2738   return &rs6000_frame_unwind;
2739 }
2740
2741 \f
2742
2743 static CORE_ADDR
2744 rs6000_frame_base_address (struct frame_info *next_frame,
2745                                 void **this_cache)
2746 {
2747   struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
2748                                                         this_cache);
2749   return info->initial_sp;
2750 }
2751
2752 static const struct frame_base rs6000_frame_base = {
2753   &rs6000_frame_unwind,
2754   rs6000_frame_base_address,
2755   rs6000_frame_base_address,
2756   rs6000_frame_base_address
2757 };
2758
2759 static const struct frame_base *
2760 rs6000_frame_base_sniffer (struct frame_info *next_frame)
2761 {
2762   return &rs6000_frame_base;
2763 }
2764
2765 /* Initialize the current architecture based on INFO.  If possible, re-use an
2766    architecture from ARCHES, which is a list of architectures already created
2767    during this debugging session.
2768
2769    Called e.g. at program startup, when reading a core file, and when reading
2770    a binary file.  */
2771
2772 static struct gdbarch *
2773 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2774 {
2775   struct gdbarch *gdbarch;
2776   struct gdbarch_tdep *tdep;
2777   int wordsize, from_xcoff_exec, from_elf_exec, i, off;
2778   struct reg *regs;
2779   const struct variant *v;
2780   enum bfd_architecture arch;
2781   unsigned long mach;
2782   bfd abfd;
2783   int sysv_abi;
2784   asection *sect;
2785
2786   from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
2787     bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
2788
2789   from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
2790     bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
2791
2792   sysv_abi = info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
2793
2794   /* Check word size.  If INFO is from a binary file, infer it from
2795      that, else choose a likely default.  */
2796   if (from_xcoff_exec)
2797     {
2798       if (bfd_xcoff_is_xcoff64 (info.abfd))
2799         wordsize = 8;
2800       else
2801         wordsize = 4;
2802     }
2803   else if (from_elf_exec)
2804     {
2805       if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
2806         wordsize = 8;
2807       else
2808         wordsize = 4;
2809     }
2810   else
2811     {
2812       if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
2813         wordsize = info.bfd_arch_info->bits_per_word /
2814           info.bfd_arch_info->bits_per_byte;
2815       else
2816         wordsize = 4;
2817     }
2818
2819   /* Find a candidate among extant architectures.  */
2820   for (arches = gdbarch_list_lookup_by_info (arches, &info);
2821        arches != NULL;
2822        arches = gdbarch_list_lookup_by_info (arches->next, &info))
2823     {
2824       /* Word size in the various PowerPC bfd_arch_info structs isn't
2825          meaningful, because 64-bit CPUs can run in 32-bit mode.  So, perform
2826          separate word size check.  */
2827       tdep = gdbarch_tdep (arches->gdbarch);
2828       if (tdep && tdep->wordsize == wordsize)
2829         return arches->gdbarch;
2830     }
2831
2832   /* None found, create a new architecture from INFO, whose bfd_arch_info
2833      validity depends on the source:
2834        - executable             useless
2835        - rs6000_host_arch()     good
2836        - core file              good
2837        - "set arch"             trust blindly
2838        - GDB startup            useless but harmless */
2839
2840   if (!from_xcoff_exec)
2841     {
2842       arch = info.bfd_arch_info->arch;
2843       mach = info.bfd_arch_info->mach;
2844     }
2845   else
2846     {
2847       arch = bfd_arch_powerpc;
2848       bfd_default_set_arch_mach (&abfd, arch, 0);
2849       info.bfd_arch_info = bfd_get_arch_info (&abfd);
2850       mach = info.bfd_arch_info->mach;
2851     }
2852   tdep = xmalloc (sizeof (struct gdbarch_tdep));
2853   tdep->wordsize = wordsize;
2854
2855   /* For e500 executables, the apuinfo section is of help here.  Such
2856      section contains the identifier and revision number of each
2857      Application-specific Processing Unit that is present on the
2858      chip.  The content of the section is determined by the assembler
2859      which looks at each instruction and determines which unit (and
2860      which version of it) can execute it. In our case we just look for
2861      the existance of the section.  */
2862
2863   if (info.abfd)
2864     {
2865       sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo");
2866       if (sect)
2867         {
2868           arch = info.bfd_arch_info->arch;
2869           mach = bfd_mach_ppc_e500;
2870           bfd_default_set_arch_mach (&abfd, arch, mach);
2871           info.bfd_arch_info = bfd_get_arch_info (&abfd);
2872         }
2873     }
2874
2875   gdbarch = gdbarch_alloc (&info, tdep);
2876
2877   /* Initialize the number of real and pseudo registers in each variant.  */
2878   init_variants ();
2879
2880   /* Choose variant.  */
2881   v = find_variant_by_arch (arch, mach);
2882   if (!v)
2883     return NULL;
2884
2885   tdep->regs = v->regs;
2886
2887   tdep->ppc_gp0_regnum = 0;
2888   tdep->ppc_gprs_pseudo_p = 0;
2889   tdep->ppc_toc_regnum = 2;
2890   tdep->ppc_ps_regnum = 65;
2891   tdep->ppc_cr_regnum = 66;
2892   tdep->ppc_lr_regnum = 67;
2893   tdep->ppc_ctr_regnum = 68;
2894   tdep->ppc_xer_regnum = 69;
2895   if (v->mach == bfd_mach_ppc_601)
2896     tdep->ppc_mq_regnum = 124;
2897   else if (arch == bfd_arch_rs6000)
2898     tdep->ppc_mq_regnum = 70;
2899   else
2900     tdep->ppc_mq_regnum = -1;
2901   tdep->ppc_fp0_regnum = 32;
2902   tdep->ppc_fpscr_regnum = (arch == bfd_arch_rs6000) ? 71 : 70;
2903   tdep->ppc_sr0_regnum = 71;
2904   tdep->ppc_vr0_regnum = -1;
2905   tdep->ppc_vrsave_regnum = -1;
2906   tdep->ppc_ev0_regnum = -1;
2907   tdep->ppc_ev31_regnum = -1;
2908   tdep->ppc_acc_regnum = -1;
2909   tdep->ppc_spefscr_regnum = -1;
2910
2911   set_gdbarch_pc_regnum (gdbarch, 64);
2912   set_gdbarch_sp_regnum (gdbarch, 1);
2913   set_gdbarch_deprecated_fp_regnum (gdbarch, 1);
2914   if (sysv_abi && wordsize == 8)
2915     set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
2916   else if (sysv_abi && wordsize == 4)
2917     set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
2918   else
2919     {
2920       set_gdbarch_deprecated_extract_return_value (gdbarch, rs6000_extract_return_value);
2921       set_gdbarch_store_return_value (gdbarch, rs6000_store_return_value);
2922     }
2923
2924   /* Set lr_frame_offset.  */
2925   if (wordsize == 8)
2926     tdep->lr_frame_offset = 16;
2927   else if (sysv_abi)
2928     tdep->lr_frame_offset = 4;
2929   else
2930     tdep->lr_frame_offset = 8;
2931
2932   if (v->arch == bfd_arch_rs6000)
2933     tdep->ppc_sr0_regnum = -1;
2934   else if (v->arch == bfd_arch_powerpc)
2935     switch (v->mach)
2936       {
2937       case bfd_mach_ppc: 
2938         tdep->ppc_sr0_regnum = -1;
2939         tdep->ppc_vr0_regnum = 71;
2940         tdep->ppc_vrsave_regnum = 104;
2941         break;
2942       case bfd_mach_ppc_7400:
2943         tdep->ppc_vr0_regnum = 119;
2944         tdep->ppc_vrsave_regnum = 152;
2945         break;
2946       case bfd_mach_ppc_e500:
2947         tdep->ppc_gp0_regnum = 41;
2948         tdep->ppc_gprs_pseudo_p = 1;
2949         tdep->ppc_toc_regnum = -1;
2950         tdep->ppc_ps_regnum = 1;
2951         tdep->ppc_cr_regnum = 2;
2952         tdep->ppc_lr_regnum = 3;
2953         tdep->ppc_ctr_regnum = 4;
2954         tdep->ppc_xer_regnum = 5;
2955         tdep->ppc_ev0_regnum = 7;
2956         tdep->ppc_ev31_regnum = 38;
2957         tdep->ppc_fp0_regnum = -1;
2958         tdep->ppc_fpscr_regnum = -1;
2959         tdep->ppc_sr0_regnum = -1;
2960         tdep->ppc_acc_regnum = 39;
2961         tdep->ppc_spefscr_regnum = 40;
2962         set_gdbarch_pc_regnum (gdbarch, 0);
2963         set_gdbarch_sp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
2964         set_gdbarch_deprecated_fp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
2965         set_gdbarch_pseudo_register_read (gdbarch, e500_pseudo_register_read);
2966         set_gdbarch_pseudo_register_write (gdbarch, e500_pseudo_register_write);
2967         break;
2968
2969       case bfd_mach_ppc64:
2970       case bfd_mach_ppc_620:
2971       case bfd_mach_ppc_630:
2972       case bfd_mach_ppc_a35:
2973       case bfd_mach_ppc_rs64ii:
2974       case bfd_mach_ppc_rs64iii:
2975         /* These processor's register sets don't have segment registers.  */
2976         tdep->ppc_sr0_regnum = -1;
2977         break;
2978       }   
2979   else
2980     internal_error (__FILE__, __LINE__,
2981                     "rs6000_gdbarch_init: "
2982                     "received unexpected BFD 'arch' value");
2983
2984   /* Sanity check on registers.  */
2985   gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0);
2986
2987   /* Select instruction printer.  */
2988   if (arch == bfd_arch_rs6000)
2989     set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
2990   else
2991     set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
2992
2993   set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
2994
2995   set_gdbarch_num_regs (gdbarch, v->nregs);
2996   set_gdbarch_num_pseudo_regs (gdbarch, v->npregs);
2997   set_gdbarch_register_name (gdbarch, rs6000_register_name);
2998   set_gdbarch_register_type (gdbarch, rs6000_register_type);
2999
3000   set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3001   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
3002   set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3003   set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3004   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3005   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3006   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3007   if (sysv_abi)
3008     set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
3009   else
3010     set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3011   set_gdbarch_char_signed (gdbarch, 0);
3012
3013   set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
3014   if (sysv_abi && wordsize == 8)
3015     /* PPC64 SYSV.  */
3016     set_gdbarch_frame_red_zone_size (gdbarch, 288);
3017   else if (!sysv_abi && wordsize == 4)
3018     /* PowerOpen / AIX 32 bit.  The saved area or red zone consists of
3019        19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
3020        Problem is, 220 isn't frame (16 byte) aligned.  Round it up to
3021        224.  */
3022     set_gdbarch_frame_red_zone_size (gdbarch, 224);
3023
3024   set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
3025   set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
3026   set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
3027
3028   set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
3029   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
3030   /* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments()
3031      is correct for the SysV ABI when the wordsize is 8, but I'm also
3032      fairly certain that ppc_sysv_abi_push_arguments() will give even
3033      worse results since it only works for 32-bit code.  So, for the moment,
3034      we're better off calling rs6000_push_arguments() since it works for
3035      64-bit code.  At some point in the future, this matter needs to be
3036      revisited.  */
3037   if (sysv_abi && wordsize == 4)
3038     set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
3039   else if (sysv_abi && wordsize == 8)
3040     set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
3041   else
3042     set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
3043
3044   set_gdbarch_deprecated_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address);
3045
3046   set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
3047   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3048   set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
3049
3050   /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN"
3051      for the descriptor and ".FN" for the entry-point -- a user
3052      specifying "break FN" will unexpectedly end up with a breakpoint
3053      on the descriptor and not the function.  This architecture method
3054      transforms any breakpoints on descriptors into breakpoints on the
3055      corresponding entry point.  */
3056   if (sysv_abi && wordsize == 8)
3057     set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address);
3058
3059   /* Not sure on this. FIXMEmgo */
3060   set_gdbarch_frame_args_skip (gdbarch, 8);
3061
3062   if (!sysv_abi)
3063     set_gdbarch_deprecated_use_struct_convention (gdbarch, rs6000_use_struct_convention);
3064
3065   if (!sysv_abi)
3066     {
3067       /* Handle RS/6000 function pointers (which are really function
3068          descriptors).  */
3069       set_gdbarch_convert_from_func_ptr_addr (gdbarch,
3070         rs6000_convert_from_func_ptr_addr);
3071     }
3072
3073   /* Helpers for function argument information.  */
3074   set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
3075
3076   /* Hook in ABI-specific overrides, if they have been registered.  */
3077   gdbarch_init_osabi (info, gdbarch);
3078
3079   switch (info.osabi)
3080     {
3081     case GDB_OSABI_NETBSD_AOUT:
3082     case GDB_OSABI_NETBSD_ELF:
3083     case GDB_OSABI_UNKNOWN:
3084     case GDB_OSABI_LINUX:
3085       set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3086       frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3087       set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3088       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3089       break;
3090     default:
3091       set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3092
3093       set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3094       frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3095       set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3096       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3097     }
3098
3099   if (from_xcoff_exec)
3100     {
3101       /* NOTE: jimix/2003-06-09: This test should really check for
3102          GDB_OSABI_AIX when that is defined and becomes
3103          available. (Actually, once things are properly split apart,
3104          the test goes away.) */
3105        /* RS6000/AIX does not support PT_STEP.  Has to be simulated.  */
3106        set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step);
3107     }
3108
3109   return gdbarch;
3110 }
3111
3112 static void
3113 rs6000_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3114 {
3115   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3116
3117   if (tdep == NULL)
3118     return;
3119
3120   /* FIXME: Dump gdbarch_tdep.  */
3121 }
3122
3123 static struct cmd_list_element *info_powerpc_cmdlist = NULL;
3124
3125 static void
3126 rs6000_info_powerpc_command (char *args, int from_tty)
3127 {
3128   help_list (info_powerpc_cmdlist, "info powerpc ", class_info, gdb_stdout);
3129 }
3130
3131 /* Initialization code.  */
3132
3133 extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */
3134
3135 void
3136 _initialize_rs6000_tdep (void)
3137 {
3138   gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
3139   gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
3140
3141   /* Add root prefix command for "info powerpc" commands */
3142   add_prefix_cmd ("powerpc", class_info, rs6000_info_powerpc_command,
3143                   "Various POWERPC info specific commands.",
3144                   &info_powerpc_cmdlist, "info powerpc ", 0, &infolist);
3145 }