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