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