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