* gdbtypes.h (TYPE_OBJFILE_OWNED, TYPE_OWNER): New macros.
[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, 2008, 2009
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 3 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, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "frame.h"
24 #include "inferior.h"
25 #include "symtab.h"
26 #include "target.h"
27 #include "gdbcore.h"
28 #include "gdbcmd.h"
29 #include "objfiles.h"
30 #include "arch-utils.h"
31 #include "regcache.h"
32 #include "regset.h"
33 #include "doublest.h"
34 #include "value.h"
35 #include "parser-defs.h"
36 #include "osabi.h"
37 #include "infcall.h"
38 #include "sim-regno.h"
39 #include "gdb/sim-ppc.h"
40 #include "reggroups.h"
41 #include "dwarf2-frame.h"
42 #include "target-descriptions.h"
43 #include "user-regs.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 #include "elf/ppc.h"
53
54 #include "solib-svr4.h"
55 #include "ppc-tdep.h"
56
57 #include "gdb_assert.h"
58 #include "dis-asm.h"
59
60 #include "trad-frame.h"
61 #include "frame-unwind.h"
62 #include "frame-base.h"
63
64 #include "features/rs6000/powerpc-32.c"
65 #include "features/rs6000/powerpc-altivec32.c"
66 #include "features/rs6000/powerpc-vsx32.c"
67 #include "features/rs6000/powerpc-403.c"
68 #include "features/rs6000/powerpc-403gc.c"
69 #include "features/rs6000/powerpc-505.c"
70 #include "features/rs6000/powerpc-601.c"
71 #include "features/rs6000/powerpc-602.c"
72 #include "features/rs6000/powerpc-603.c"
73 #include "features/rs6000/powerpc-604.c"
74 #include "features/rs6000/powerpc-64.c"
75 #include "features/rs6000/powerpc-altivec64.c"
76 #include "features/rs6000/powerpc-vsx64.c"
77 #include "features/rs6000/powerpc-7400.c"
78 #include "features/rs6000/powerpc-750.c"
79 #include "features/rs6000/powerpc-860.c"
80 #include "features/rs6000/powerpc-e500.c"
81 #include "features/rs6000/rs6000.c"
82
83 /* Determine if regnum is an SPE pseudo-register.  */
84 #define IS_SPE_PSEUDOREG(tdep, regnum) ((tdep)->ppc_ev0_regnum >= 0 \
85     && (regnum) >= (tdep)->ppc_ev0_regnum \
86     && (regnum) < (tdep)->ppc_ev0_regnum + 32)
87
88 /* Determine if regnum is a decimal float pseudo-register.  */
89 #define IS_DFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_dl0_regnum >= 0 \
90     && (regnum) >= (tdep)->ppc_dl0_regnum \
91     && (regnum) < (tdep)->ppc_dl0_regnum + 16)
92
93 /* Determine if regnum is a POWER7 VSX register.  */
94 #define IS_VSX_PSEUDOREG(tdep, regnum) ((tdep)->ppc_vsr0_regnum >= 0 \
95     && (regnum) >= (tdep)->ppc_vsr0_regnum \
96     && (regnum) < (tdep)->ppc_vsr0_regnum + ppc_num_vsrs)
97
98 /* Determine if regnum is a POWER7 Extended FP register.  */
99 #define IS_EFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_efpr0_regnum >= 0 \
100     && (regnum) >= (tdep)->ppc_efpr0_regnum \
101     && (regnum) < (tdep)->ppc_efpr0_regnum + ppc_num_fprs)
102
103 /* The list of available "set powerpc ..." and "show powerpc ..."
104    commands.  */
105 static struct cmd_list_element *setpowerpccmdlist = NULL;
106 static struct cmd_list_element *showpowerpccmdlist = NULL;
107
108 static enum auto_boolean powerpc_soft_float_global = AUTO_BOOLEAN_AUTO;
109
110 /* The vector ABI to use.  Keep this in sync with powerpc_vector_abi.  */
111 static const char *powerpc_vector_strings[] =
112 {
113   "auto",
114   "generic",
115   "altivec",
116   "spe",
117   NULL
118 };
119
120 /* A variable that can be configured by the user.  */
121 static enum powerpc_vector_abi powerpc_vector_abi_global = POWERPC_VEC_AUTO;
122 static const char *powerpc_vector_abi_string = "auto";
123
124 /* To be used by skip_prologue. */
125
126 struct rs6000_framedata
127   {
128     int offset;                 /* total size of frame --- the distance
129                                    by which we decrement sp to allocate
130                                    the frame */
131     int saved_gpr;              /* smallest # of saved gpr */
132     unsigned int gpr_mask;      /* Each bit is an individual saved GPR.  */
133     int saved_fpr;              /* smallest # of saved fpr */
134     int saved_vr;               /* smallest # of saved vr */
135     int saved_ev;               /* smallest # of saved ev */
136     int alloca_reg;             /* alloca register number (frame ptr) */
137     char frameless;             /* true if frameless functions. */
138     char nosavedpc;             /* true if pc not saved. */
139     char used_bl;               /* true if link register clobbered */
140     int gpr_offset;             /* offset of saved gprs from prev sp */
141     int fpr_offset;             /* offset of saved fprs from prev sp */
142     int vr_offset;              /* offset of saved vrs from prev sp */
143     int ev_offset;              /* offset of saved evs from prev sp */
144     int lr_offset;              /* offset of saved lr */
145     int lr_register;            /* register of saved lr, if trustworthy */
146     int cr_offset;              /* offset of saved cr */
147     int vrsave_offset;          /* offset of saved vrsave register */
148   };
149
150
151 /* Is REGNO a VSX register? Return 1 if so, 0 otherwise.  */
152 int
153 vsx_register_p (struct gdbarch *gdbarch, int regno)
154 {
155   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
156   if (tdep->ppc_vsr0_regnum < 0)
157     return 0;
158   else
159     return (regno >= tdep->ppc_vsr0_upper_regnum && regno
160             <= tdep->ppc_vsr0_upper_regnum + 31);
161 }
162
163 /* Is REGNO an AltiVec register?  Return 1 if so, 0 otherwise.  */
164 int
165 altivec_register_p (struct gdbarch *gdbarch, int regno)
166 {
167   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
168   if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
169     return 0;
170   else
171     return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
172 }
173
174
175 /* Return true if REGNO is an SPE register, false otherwise.  */
176 int
177 spe_register_p (struct gdbarch *gdbarch, int regno)
178 {
179   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
180   
181   /* Is it a reference to EV0 -- EV31, and do we have those?  */
182   if (IS_SPE_PSEUDOREG (tdep, regno))
183     return 1;
184
185   /* Is it a reference to one of the raw upper GPR halves?  */
186   if (tdep->ppc_ev0_upper_regnum >= 0
187       && tdep->ppc_ev0_upper_regnum <= regno
188       && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
189     return 1;
190
191   /* Is it a reference to the 64-bit accumulator, and do we have that?  */
192   if (tdep->ppc_acc_regnum >= 0
193       && tdep->ppc_acc_regnum == regno)
194     return 1;
195
196   /* Is it a reference to the SPE floating-point status and control register,
197      and do we have that?  */
198   if (tdep->ppc_spefscr_regnum >= 0
199       && tdep->ppc_spefscr_regnum == regno)
200     return 1;
201
202   return 0;
203 }
204
205
206 /* Return non-zero if the architecture described by GDBARCH has
207    floating-point registers (f0 --- f31 and fpscr).  */
208 int
209 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
210 {
211   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
212
213   return (tdep->ppc_fp0_regnum >= 0
214           && tdep->ppc_fpscr_regnum >= 0);
215 }
216
217 /* Return non-zero if the architecture described by GDBARCH has
218    VSX registers (vsr0 --- vsr63).  */
219 static int
220 ppc_vsx_support_p (struct gdbarch *gdbarch)
221 {
222   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
223
224   return tdep->ppc_vsr0_regnum >= 0;
225 }
226
227 /* Return non-zero if the architecture described by GDBARCH has
228    Altivec registers (vr0 --- vr31, vrsave and vscr).  */
229 int
230 ppc_altivec_support_p (struct gdbarch *gdbarch)
231 {
232   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
233
234   return (tdep->ppc_vr0_regnum >= 0
235           && tdep->ppc_vrsave_regnum >= 0);
236 }
237
238 /* Check that TABLE[GDB_REGNO] is not already initialized, and then
239    set it to SIM_REGNO.
240
241    This is a helper function for init_sim_regno_table, constructing
242    the table mapping GDB register numbers to sim register numbers; we
243    initialize every element in that table to -1 before we start
244    filling it in.  */
245 static void
246 set_sim_regno (int *table, int gdb_regno, int sim_regno)
247 {
248   /* Make sure we don't try to assign any given GDB register a sim
249      register number more than once.  */
250   gdb_assert (table[gdb_regno] == -1);
251   table[gdb_regno] = sim_regno;
252 }
253
254
255 /* Initialize ARCH->tdep->sim_regno, the table mapping GDB register
256    numbers to simulator register numbers, based on the values placed
257    in the ARCH->tdep->ppc_foo_regnum members.  */
258 static void
259 init_sim_regno_table (struct gdbarch *arch)
260 {
261   struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
262   int total_regs = gdbarch_num_regs (arch);
263   int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int);
264   int i;
265   static const char *const segment_regs[] = {
266     "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
267     "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
268   };
269
270   /* Presume that all registers not explicitly mentioned below are
271      unavailable from the sim.  */
272   for (i = 0; i < total_regs; i++)
273     sim_regno[i] = -1;
274
275   /* General-purpose registers.  */
276   for (i = 0; i < ppc_num_gprs; i++)
277     set_sim_regno (sim_regno, tdep->ppc_gp0_regnum + i, sim_ppc_r0_regnum + i);
278   
279   /* Floating-point registers.  */
280   if (tdep->ppc_fp0_regnum >= 0)
281     for (i = 0; i < ppc_num_fprs; i++)
282       set_sim_regno (sim_regno,
283                      tdep->ppc_fp0_regnum + i,
284                      sim_ppc_f0_regnum + i);
285   if (tdep->ppc_fpscr_regnum >= 0)
286     set_sim_regno (sim_regno, tdep->ppc_fpscr_regnum, sim_ppc_fpscr_regnum);
287
288   set_sim_regno (sim_regno, gdbarch_pc_regnum (arch), sim_ppc_pc_regnum);
289   set_sim_regno (sim_regno, tdep->ppc_ps_regnum, sim_ppc_ps_regnum);
290   set_sim_regno (sim_regno, tdep->ppc_cr_regnum, sim_ppc_cr_regnum);
291
292   /* Segment registers.  */
293   for (i = 0; i < ppc_num_srs; i++)
294     {
295       int gdb_regno;
296
297       gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i], -1);
298       if (gdb_regno >= 0)
299         set_sim_regno (sim_regno, gdb_regno, sim_ppc_sr0_regnum + i);
300     }
301
302   /* Altivec registers.  */
303   if (tdep->ppc_vr0_regnum >= 0)
304     {
305       for (i = 0; i < ppc_num_vrs; i++)
306         set_sim_regno (sim_regno,
307                        tdep->ppc_vr0_regnum + i,
308                        sim_ppc_vr0_regnum + i);
309
310       /* FIXME: jimb/2004-07-15: when we have tdep->ppc_vscr_regnum,
311          we can treat this more like the other cases.  */
312       set_sim_regno (sim_regno,
313                      tdep->ppc_vr0_regnum + ppc_num_vrs,
314                      sim_ppc_vscr_regnum);
315     }
316   /* vsave is a special-purpose register, so the code below handles it.  */
317
318   /* SPE APU (E500) registers.  */
319   if (tdep->ppc_ev0_upper_regnum >= 0)
320     for (i = 0; i < ppc_num_gprs; i++)
321       set_sim_regno (sim_regno,
322                      tdep->ppc_ev0_upper_regnum + i,
323                      sim_ppc_rh0_regnum + i);
324   if (tdep->ppc_acc_regnum >= 0)
325     set_sim_regno (sim_regno, tdep->ppc_acc_regnum, sim_ppc_acc_regnum);
326   /* spefscr is a special-purpose register, so the code below handles it.  */
327
328 #ifdef WITH_SIM
329   /* Now handle all special-purpose registers.  Verify that they
330      haven't mistakenly been assigned numbers by any of the above
331      code.  */
332   for (i = 0; i < sim_ppc_num_sprs; i++)
333     {
334       const char *spr_name = sim_spr_register_name (i);
335       int gdb_regno = -1;
336
337       if (spr_name != NULL)
338         gdb_regno = user_reg_map_name_to_regnum (arch, spr_name, -1);
339
340       if (gdb_regno != -1)
341         set_sim_regno (sim_regno, gdb_regno, sim_ppc_spr0_regnum + i);
342     }
343 #endif
344
345   /* Drop the initialized array into place.  */
346   tdep->sim_regno = sim_regno;
347 }
348
349
350 /* Given a GDB register number REG, return the corresponding SIM
351    register number.  */
352 static int
353 rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
354 {
355   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
356   int sim_regno;
357
358   if (tdep->sim_regno == NULL)
359     init_sim_regno_table (gdbarch);
360
361   gdb_assert (0 <= reg 
362               && reg <= gdbarch_num_regs (gdbarch)
363                         + gdbarch_num_pseudo_regs (gdbarch));
364   sim_regno = tdep->sim_regno[reg];
365
366   if (sim_regno >= 0)
367     return sim_regno;
368   else
369     return LEGACY_SIM_REGNO_IGNORE;
370 }
371
372 \f
373
374 /* Register set support functions.  */
375
376 /* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
377    Write the register to REGCACHE.  */
378
379 void
380 ppc_supply_reg (struct regcache *regcache, int regnum, 
381                 const gdb_byte *regs, size_t offset, int regsize)
382 {
383   if (regnum != -1 && offset != -1)
384     {
385       if (regsize > 4)
386         {
387           struct gdbarch *gdbarch = get_regcache_arch (regcache);
388           int gdb_regsize = register_size (gdbarch, regnum);
389           if (gdb_regsize < regsize
390               && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
391             offset += regsize - gdb_regsize;
392         }
393       regcache_raw_supply (regcache, regnum, regs + offset);
394     }
395 }
396
397 /* Read register REGNUM from REGCACHE and store to REGS + OFFSET
398    in a field REGSIZE wide.  Zero pad as necessary.  */
399
400 void
401 ppc_collect_reg (const struct regcache *regcache, int regnum,
402                  gdb_byte *regs, size_t offset, int regsize)
403 {
404   if (regnum != -1 && offset != -1)
405     {
406       if (regsize > 4)
407         {
408           struct gdbarch *gdbarch = get_regcache_arch (regcache);
409           int gdb_regsize = register_size (gdbarch, regnum);
410           if (gdb_regsize < regsize)
411             {
412               if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
413                 {
414                   memset (regs + offset, 0, regsize - gdb_regsize);
415                   offset += regsize - gdb_regsize;
416                 }
417               else
418                 memset (regs + offset + regsize - gdb_regsize, 0,
419                         regsize - gdb_regsize);
420             }
421         }
422       regcache_raw_collect (regcache, regnum, regs + offset);
423     }
424 }
425     
426 static int
427 ppc_greg_offset (struct gdbarch *gdbarch,
428                  struct gdbarch_tdep *tdep,
429                  const struct ppc_reg_offsets *offsets,
430                  int regnum,
431                  int *regsize)
432 {
433   *regsize = offsets->gpr_size;
434   if (regnum >= tdep->ppc_gp0_regnum
435       && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs)
436     return (offsets->r0_offset
437             + (regnum - tdep->ppc_gp0_regnum) * offsets->gpr_size);
438
439   if (regnum == gdbarch_pc_regnum (gdbarch))
440     return offsets->pc_offset;
441
442   if (regnum == tdep->ppc_ps_regnum)
443     return offsets->ps_offset;
444
445   if (regnum == tdep->ppc_lr_regnum)
446     return offsets->lr_offset;
447
448   if (regnum == tdep->ppc_ctr_regnum)
449     return offsets->ctr_offset;
450
451   *regsize = offsets->xr_size;
452   if (regnum == tdep->ppc_cr_regnum)
453     return offsets->cr_offset;
454
455   if (regnum == tdep->ppc_xer_regnum)
456     return offsets->xer_offset;
457
458   if (regnum == tdep->ppc_mq_regnum)
459     return offsets->mq_offset;
460
461   return -1;
462 }
463
464 static int
465 ppc_fpreg_offset (struct gdbarch_tdep *tdep,
466                   const struct ppc_reg_offsets *offsets,
467                   int regnum)
468 {
469   if (regnum >= tdep->ppc_fp0_regnum
470       && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
471     return offsets->f0_offset + (regnum - tdep->ppc_fp0_regnum) * 8;
472
473   if (regnum == tdep->ppc_fpscr_regnum)
474     return offsets->fpscr_offset;
475
476   return -1;
477 }
478
479 static int
480 ppc_vrreg_offset (struct gdbarch_tdep *tdep,
481                   const struct ppc_reg_offsets *offsets,
482                   int regnum)
483 {
484   if (regnum >= tdep->ppc_vr0_regnum
485       && regnum < tdep->ppc_vr0_regnum + ppc_num_vrs)
486     return offsets->vr0_offset + (regnum - tdep->ppc_vr0_regnum) * 16;
487
488   if (regnum == tdep->ppc_vrsave_regnum - 1)
489     return offsets->vscr_offset;
490
491   if (regnum == tdep->ppc_vrsave_regnum)
492     return offsets->vrsave_offset;
493
494   return -1;
495 }
496
497 /* Supply register REGNUM in the general-purpose register set REGSET
498    from the buffer specified by GREGS and LEN to register cache
499    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
500
501 void
502 ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
503                     int regnum, const void *gregs, size_t len)
504 {
505   struct gdbarch *gdbarch = get_regcache_arch (regcache);
506   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
507   const struct ppc_reg_offsets *offsets = regset->descr;
508   size_t offset;
509   int regsize;
510
511   if (regnum == -1)
512     {
513       int i;
514       int gpr_size = offsets->gpr_size;
515
516       for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
517            i < tdep->ppc_gp0_regnum + ppc_num_gprs;
518            i++, offset += gpr_size)
519         ppc_supply_reg (regcache, i, gregs, offset, gpr_size);
520
521       ppc_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
522                       gregs, offsets->pc_offset, gpr_size);
523       ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
524                       gregs, offsets->ps_offset, gpr_size);
525       ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
526                       gregs, offsets->lr_offset, gpr_size);
527       ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
528                       gregs, offsets->ctr_offset, gpr_size);
529       ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
530                       gregs, offsets->cr_offset, offsets->xr_size);
531       ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
532                       gregs, offsets->xer_offset, offsets->xr_size);
533       ppc_supply_reg (regcache, tdep->ppc_mq_regnum,
534                       gregs, offsets->mq_offset, offsets->xr_size);
535       return;
536     }
537
538   offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
539   ppc_supply_reg (regcache, regnum, gregs, offset, regsize);
540 }
541
542 /* Supply register REGNUM in the floating-point register set REGSET
543    from the buffer specified by FPREGS and LEN to register cache
544    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
545
546 void
547 ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
548                      int regnum, const void *fpregs, size_t len)
549 {
550   struct gdbarch *gdbarch = get_regcache_arch (regcache);
551   struct gdbarch_tdep *tdep;
552   const struct ppc_reg_offsets *offsets;
553   size_t offset;
554
555   if (!ppc_floating_point_unit_p (gdbarch))
556     return;
557
558   tdep = gdbarch_tdep (gdbarch);
559   offsets = regset->descr;
560   if (regnum == -1)
561     {
562       int i;
563
564       for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
565            i < tdep->ppc_fp0_regnum + ppc_num_fprs;
566            i++, offset += 8)
567         ppc_supply_reg (regcache, i, fpregs, offset, 8);
568
569       ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
570                       fpregs, offsets->fpscr_offset, offsets->fpscr_size);
571       return;
572     }
573
574   offset = ppc_fpreg_offset (tdep, offsets, regnum);
575   ppc_supply_reg (regcache, regnum, fpregs, offset,
576                   regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
577 }
578
579 /* Supply register REGNUM in the VSX register set REGSET
580    from the buffer specified by VSXREGS and LEN to register cache
581    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
582
583 void
584 ppc_supply_vsxregset (const struct regset *regset, struct regcache *regcache,
585                      int regnum, const void *vsxregs, size_t len)
586 {
587   struct gdbarch *gdbarch = get_regcache_arch (regcache);
588   struct gdbarch_tdep *tdep;
589
590   if (!ppc_vsx_support_p (gdbarch))
591     return;
592
593   tdep = gdbarch_tdep (gdbarch);
594
595   if (regnum == -1)
596     {
597       int i;
598
599       for (i = tdep->ppc_vsr0_upper_regnum;
600            i < tdep->ppc_vsr0_upper_regnum + 32;
601            i++)
602         ppc_supply_reg (regcache, i, vsxregs, 0, 8);
603
604       return;
605     }
606   else
607     ppc_supply_reg (regcache, regnum, vsxregs, 0, 8);
608 }
609
610 /* Supply register REGNUM in the Altivec register set REGSET
611    from the buffer specified by VRREGS and LEN to register cache
612    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
613
614 void
615 ppc_supply_vrregset (const struct regset *regset, struct regcache *regcache,
616                      int regnum, const void *vrregs, size_t len)
617 {
618   struct gdbarch *gdbarch = get_regcache_arch (regcache);
619   struct gdbarch_tdep *tdep;
620   const struct ppc_reg_offsets *offsets;
621   size_t offset;
622
623   if (!ppc_altivec_support_p (gdbarch))
624     return;
625
626   tdep = gdbarch_tdep (gdbarch);
627   offsets = regset->descr;
628   if (regnum == -1)
629     {
630       int i;
631
632       for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
633            i < tdep->ppc_vr0_regnum + ppc_num_vrs;
634            i++, offset += 16)
635         ppc_supply_reg (regcache, i, vrregs, offset, 16);
636
637       ppc_supply_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
638                       vrregs, offsets->vscr_offset, 4);
639
640       ppc_supply_reg (regcache, tdep->ppc_vrsave_regnum,
641                       vrregs, offsets->vrsave_offset, 4);
642       return;
643     }
644
645   offset = ppc_vrreg_offset (tdep, offsets, regnum);
646   if (regnum != tdep->ppc_vrsave_regnum
647       && regnum != tdep->ppc_vrsave_regnum - 1)
648     ppc_supply_reg (regcache, regnum, vrregs, offset, 16);
649   else
650     ppc_supply_reg (regcache, regnum,
651                     vrregs, offset, 4);
652 }
653
654 /* Collect register REGNUM in the general-purpose register set
655    REGSET from register cache REGCACHE into the buffer specified by
656    GREGS and LEN.  If REGNUM is -1, do this for all registers in
657    REGSET.  */
658
659 void
660 ppc_collect_gregset (const struct regset *regset,
661                      const struct regcache *regcache,
662                      int regnum, void *gregs, size_t len)
663 {
664   struct gdbarch *gdbarch = get_regcache_arch (regcache);
665   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
666   const struct ppc_reg_offsets *offsets = regset->descr;
667   size_t offset;
668   int regsize;
669
670   if (regnum == -1)
671     {
672       int i;
673       int gpr_size = offsets->gpr_size;
674
675       for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
676            i < tdep->ppc_gp0_regnum + ppc_num_gprs;
677            i++, offset += gpr_size)
678         ppc_collect_reg (regcache, i, gregs, offset, gpr_size);
679
680       ppc_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
681                        gregs, offsets->pc_offset, gpr_size);
682       ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
683                        gregs, offsets->ps_offset, gpr_size);
684       ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
685                        gregs, offsets->lr_offset, gpr_size);
686       ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
687                        gregs, offsets->ctr_offset, gpr_size);
688       ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
689                        gregs, offsets->cr_offset, offsets->xr_size);
690       ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
691                        gregs, offsets->xer_offset, offsets->xr_size);
692       ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
693                        gregs, offsets->mq_offset, offsets->xr_size);
694       return;
695     }
696
697   offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
698   ppc_collect_reg (regcache, regnum, gregs, offset, regsize);
699 }
700
701 /* Collect register REGNUM in the floating-point register set
702    REGSET from register cache REGCACHE into the buffer specified by
703    FPREGS and LEN.  If REGNUM is -1, do this for all registers in
704    REGSET.  */
705
706 void
707 ppc_collect_fpregset (const struct regset *regset,
708                       const struct regcache *regcache,
709                       int regnum, void *fpregs, size_t len)
710 {
711   struct gdbarch *gdbarch = get_regcache_arch (regcache);
712   struct gdbarch_tdep *tdep;
713   const struct ppc_reg_offsets *offsets;
714   size_t offset;
715
716   if (!ppc_floating_point_unit_p (gdbarch))
717     return;
718
719   tdep = gdbarch_tdep (gdbarch);
720   offsets = regset->descr;
721   if (regnum == -1)
722     {
723       int i;
724
725       for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
726            i < tdep->ppc_fp0_regnum + ppc_num_fprs;
727            i++, offset += 8)
728         ppc_collect_reg (regcache, i, fpregs, offset, 8);
729
730       ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
731                        fpregs, offsets->fpscr_offset, offsets->fpscr_size);
732       return;
733     }
734
735   offset = ppc_fpreg_offset (tdep, offsets, regnum);
736   ppc_collect_reg (regcache, regnum, fpregs, offset,
737                    regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
738 }
739
740 /* Collect register REGNUM in the VSX register set
741    REGSET from register cache REGCACHE into the buffer specified by
742    VSXREGS and LEN.  If REGNUM is -1, do this for all registers in
743    REGSET.  */
744
745 void
746 ppc_collect_vsxregset (const struct regset *regset,
747                       const struct regcache *regcache,
748                       int regnum, void *vsxregs, size_t len)
749 {
750   struct gdbarch *gdbarch = get_regcache_arch (regcache);
751   struct gdbarch_tdep *tdep;
752
753   if (!ppc_vsx_support_p (gdbarch))
754     return;
755
756   tdep = gdbarch_tdep (gdbarch);
757
758   if (regnum == -1)
759     {
760       int i;
761
762       for (i = tdep->ppc_vsr0_upper_regnum;
763            i < tdep->ppc_vsr0_upper_regnum + 32;
764            i++)
765         ppc_collect_reg (regcache, i, vsxregs, 0, 8);
766
767       return;
768     }
769   else
770     ppc_collect_reg (regcache, regnum, vsxregs, 0, 8);
771 }
772
773
774 /* Collect register REGNUM in the Altivec register set
775    REGSET from register cache REGCACHE into the buffer specified by
776    VRREGS and LEN.  If REGNUM is -1, do this for all registers in
777    REGSET.  */
778
779 void
780 ppc_collect_vrregset (const struct regset *regset,
781                       const struct regcache *regcache,
782                       int regnum, void *vrregs, size_t len)
783 {
784   struct gdbarch *gdbarch = get_regcache_arch (regcache);
785   struct gdbarch_tdep *tdep;
786   const struct ppc_reg_offsets *offsets;
787   size_t offset;
788
789   if (!ppc_altivec_support_p (gdbarch))
790     return;
791
792   tdep = gdbarch_tdep (gdbarch);
793   offsets = regset->descr;
794   if (regnum == -1)
795     {
796       int i;
797
798       for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
799            i < tdep->ppc_vr0_regnum + ppc_num_vrs;
800            i++, offset += 16)
801         ppc_collect_reg (regcache, i, vrregs, offset, 16);
802
803       ppc_collect_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
804                        vrregs, offsets->vscr_offset, 4);
805
806       ppc_collect_reg (regcache, tdep->ppc_vrsave_regnum,
807                        vrregs, offsets->vrsave_offset, 4);
808       return;
809     }
810
811   offset = ppc_vrreg_offset (tdep, offsets, regnum);
812   if (regnum != tdep->ppc_vrsave_regnum
813       && regnum != tdep->ppc_vrsave_regnum - 1)
814     ppc_collect_reg (regcache, regnum, vrregs, offset, 16);
815   else
816     ppc_collect_reg (regcache, regnum,
817                     vrregs, offset, 4);
818 }
819 \f
820
821 static int
822 insn_changes_sp_or_jumps (unsigned long insn)
823 {
824   int opcode = (insn >> 26) & 0x03f;
825   int sd = (insn >> 21) & 0x01f;
826   int a = (insn >> 16) & 0x01f;
827   int subcode = (insn >> 1) & 0x3ff;
828
829   /* Changes the stack pointer.  */
830
831   /* NOTE: There are many ways to change the value of a given register.
832            The ways below are those used when the register is R1, the SP,
833            in a funtion's epilogue.  */
834
835   if (opcode == 31 && subcode == 444 && a == 1)
836     return 1;  /* mr R1,Rn */
837   if (opcode == 14 && sd == 1)
838     return 1;  /* addi R1,Rn,simm */
839   if (opcode == 58 && sd == 1)
840     return 1;  /* ld R1,ds(Rn) */
841
842   /* Transfers control.  */
843
844   if (opcode == 18)
845     return 1;  /* b */
846   if (opcode == 16)
847     return 1;  /* bc */
848   if (opcode == 19 && subcode == 16)
849     return 1;  /* bclr */
850   if (opcode == 19 && subcode == 528)
851     return 1;  /* bcctr */
852
853   return 0;
854 }
855
856 /* Return true if we are in the function's epilogue, i.e. after the
857    instruction that destroyed the function's stack frame.
858
859    1) scan forward from the point of execution:
860        a) If you find an instruction that modifies the stack pointer
861           or transfers control (except a return), execution is not in
862           an epilogue, return.
863        b) Stop scanning if you find a return instruction or reach the
864           end of the function or reach the hard limit for the size of
865           an epilogue.
866    2) scan backward from the point of execution:
867         a) If you find an instruction that modifies the stack pointer,
868             execution *is* in an epilogue, return.
869         b) Stop scanning if you reach an instruction that transfers
870            control or the beginning of the function or reach the hard
871            limit for the size of an epilogue.  */
872
873 static int
874 rs6000_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
875 {
876   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
877   bfd_byte insn_buf[PPC_INSN_SIZE];
878   CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
879   unsigned long insn;
880   struct frame_info *curfrm;
881
882   /* Find the search limits based on function boundaries and hard limit.  */
883
884   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
885     return 0;
886
887   epilogue_start = pc - PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
888   if (epilogue_start < func_start) epilogue_start = func_start;
889
890   epilogue_end = pc + PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
891   if (epilogue_end > func_end) epilogue_end = func_end;
892
893   curfrm = get_current_frame ();
894
895   /* Scan forward until next 'blr'.  */
896
897   for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += PPC_INSN_SIZE)
898     {
899       if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
900         return 0;
901       insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE);
902       if (insn == 0x4e800020)
903         break;
904       /* Assume a bctr is a tail call unless it points strictly within
905          this function.  */
906       if (insn == 0x4e800420)
907         {
908           CORE_ADDR ctr = get_frame_register_unsigned (curfrm,
909                                                        tdep->ppc_ctr_regnum);
910           if (ctr > func_start && ctr < func_end)
911             return 0;
912           else
913             break;
914         }
915       if (insn_changes_sp_or_jumps (insn))
916         return 0;
917     }
918
919   /* Scan backward until adjustment to stack pointer (R1).  */
920
921   for (scan_pc = pc - PPC_INSN_SIZE;
922        scan_pc >= epilogue_start;
923        scan_pc -= PPC_INSN_SIZE)
924     {
925       if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
926         return 0;
927       insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE);
928       if (insn_changes_sp_or_jumps (insn))
929         return 1;
930     }
931
932   return 0;
933 }
934
935 /* Get the ith function argument for the current function.  */
936 static CORE_ADDR
937 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi, 
938                                struct type *type)
939 {
940   return get_frame_register_unsigned (frame, 3 + argi);
941 }
942
943 /* Sequence of bytes for breakpoint instruction.  */
944
945 const static unsigned char *
946 rs6000_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
947                            int *bp_size)
948 {
949   static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
950   static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
951   *bp_size = 4;
952   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
953     return big_breakpoint;
954   else
955     return little_breakpoint;
956 }
957
958 /* Instruction masks for displaced stepping.  */
959 #define BRANCH_MASK 0xfc000000
960 #define BP_MASK 0xFC0007FE
961 #define B_INSN 0x48000000
962 #define BC_INSN 0x40000000
963 #define BXL_INSN 0x4c000000
964 #define BP_INSN 0x7C000008
965
966 /* Fix up the state of registers and memory after having single-stepped
967    a displaced instruction.  */
968 static void
969 ppc_displaced_step_fixup (struct gdbarch *gdbarch,
970                           struct displaced_step_closure *closure,
971                           CORE_ADDR from, CORE_ADDR to,
972                           struct regcache *regs)
973 {
974   /* Since we use simple_displaced_step_copy_insn, our closure is a
975      copy of the instruction.  */
976   ULONGEST insn  = extract_unsigned_integer ((gdb_byte *) closure,
977                                               PPC_INSN_SIZE);
978   ULONGEST opcode = 0;
979   /* Offset for non PC-relative instructions.  */
980   LONGEST offset = PPC_INSN_SIZE;
981
982   opcode = insn & BRANCH_MASK;
983
984   if (debug_displaced)
985     fprintf_unfiltered (gdb_stdlog,
986                         "displaced: (ppc) fixup (0x%s, 0x%s)\n",
987                         paddr_nz (from), paddr_nz (to));
988
989
990   /* Handle PC-relative branch instructions.  */
991   if (opcode == B_INSN || opcode == BC_INSN || opcode == BXL_INSN)
992     {
993       ULONGEST current_pc;
994
995       /* Read the current PC value after the instruction has been executed
996          in a displaced location.  Calculate the offset to be applied to the
997          original PC value before the displaced stepping.  */
998       regcache_cooked_read_unsigned (regs, gdbarch_pc_regnum (gdbarch),
999                                       &current_pc);
1000       offset = current_pc - to;
1001
1002       if (opcode != BXL_INSN)
1003         {
1004           /* Check for AA bit indicating whether this is an absolute
1005              addressing or PC-relative (1: absolute, 0: relative).  */
1006           if (!(insn & 0x2))
1007             {
1008               /* PC-relative addressing is being used in the branch.  */
1009               if (debug_displaced)
1010                 fprintf_unfiltered
1011                   (gdb_stdlog,
1012                    "displaced: (ppc) branch instruction: 0x%s\n"
1013                    "displaced: (ppc) adjusted PC from 0x%s to 0x%s\n",
1014                    paddr_nz (insn), paddr_nz (current_pc),
1015                    paddr_nz (from + offset));
1016
1017               regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
1018                                               from + offset);
1019             }
1020         }
1021       else
1022         {
1023           /* If we're here, it means we have a branch to LR or CTR.  If the
1024              branch was taken, the offset is probably greater than 4 (the next
1025              instruction), so it's safe to assume that an offset of 4 means we
1026              did not take the branch.  */
1027           if (offset == PPC_INSN_SIZE)
1028             regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
1029                                             from + PPC_INSN_SIZE);
1030         }
1031
1032       /* Check for LK bit indicating whether we should set the link
1033          register to point to the next instruction
1034          (1: Set, 0: Don't set).  */
1035       if (insn & 0x1)
1036         {
1037           /* Link register needs to be set to the next instruction's PC.  */
1038           regcache_cooked_write_unsigned (regs,
1039                                           gdbarch_tdep (gdbarch)->ppc_lr_regnum,
1040                                           from + PPC_INSN_SIZE);
1041           if (debug_displaced)
1042                 fprintf_unfiltered (gdb_stdlog,
1043                                     "displaced: (ppc) adjusted LR to 0x%s\n",
1044                                     paddr_nz (from + PPC_INSN_SIZE));
1045
1046         }
1047     }
1048   /* Check for breakpoints in the inferior.  If we've found one, place the PC
1049      right at the breakpoint instruction.  */
1050   else if ((insn & BP_MASK) == BP_INSN)
1051     regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch), from);
1052   else
1053   /* Handle any other instructions that do not fit in the categories above.  */
1054     regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
1055                                     from + offset);
1056 }
1057
1058 /* Instruction masks used during single-stepping of atomic sequences.  */
1059 #define LWARX_MASK 0xfc0007fe
1060 #define LWARX_INSTRUCTION 0x7c000028
1061 #define LDARX_INSTRUCTION 0x7c0000A8
1062 #define STWCX_MASK 0xfc0007ff
1063 #define STWCX_INSTRUCTION 0x7c00012d
1064 #define STDCX_INSTRUCTION 0x7c0001ad
1065
1066 /* Checks for an atomic sequence of instructions beginning with a LWARX/LDARX
1067    instruction and ending with a STWCX/STDCX instruction.  If such a sequence
1068    is found, attempt to step through it.  A breakpoint is placed at the end of 
1069    the sequence.  */
1070
1071 int 
1072 ppc_deal_with_atomic_sequence (struct frame_info *frame)
1073 {
1074   CORE_ADDR pc = get_frame_pc (frame);
1075   CORE_ADDR breaks[2] = {-1, -1};
1076   CORE_ADDR loc = pc;
1077   CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence.  */
1078   int insn = read_memory_integer (loc, PPC_INSN_SIZE);
1079   int insn_count;
1080   int index;
1081   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */  
1082   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
1083   int opcode; /* Branch instruction's OPcode.  */
1084   int bc_insn_count = 0; /* Conditional branch instruction count.  */
1085
1086   /* Assume all atomic sequences start with a lwarx/ldarx instruction.  */
1087   if ((insn & LWARX_MASK) != LWARX_INSTRUCTION
1088       && (insn & LWARX_MASK) != LDARX_INSTRUCTION)
1089     return 0;
1090
1091   /* Assume that no atomic sequence is longer than "atomic_sequence_length" 
1092      instructions.  */
1093   for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
1094     {
1095       loc += PPC_INSN_SIZE;
1096       insn = read_memory_integer (loc, PPC_INSN_SIZE);
1097
1098       /* Assume that there is at most one conditional branch in the atomic
1099          sequence.  If a conditional branch is found, put a breakpoint in 
1100          its destination address.  */
1101       if ((insn & BRANCH_MASK) == BC_INSN)
1102         {
1103           int immediate = ((insn & ~3) << 16) >> 16;
1104           int absolute = ((insn >> 1) & 1);
1105
1106           if (bc_insn_count >= 1)
1107             return 0; /* More than one conditional branch found, fallback 
1108                          to the standard single-step code.  */
1109  
1110           if (absolute)
1111             breaks[1] = immediate;
1112           else
1113             breaks[1] = pc + immediate;
1114
1115           bc_insn_count++;
1116           last_breakpoint++;
1117         }
1118
1119       if ((insn & STWCX_MASK) == STWCX_INSTRUCTION
1120           || (insn & STWCX_MASK) == STDCX_INSTRUCTION)
1121         break;
1122     }
1123
1124   /* Assume that the atomic sequence ends with a stwcx/stdcx instruction.  */
1125   if ((insn & STWCX_MASK) != STWCX_INSTRUCTION
1126       && (insn & STWCX_MASK) != STDCX_INSTRUCTION)
1127     return 0;
1128
1129   closing_insn = loc;
1130   loc += PPC_INSN_SIZE;
1131   insn = read_memory_integer (loc, PPC_INSN_SIZE);
1132
1133   /* Insert a breakpoint right after the end of the atomic sequence.  */
1134   breaks[0] = loc;
1135
1136   /* Check for duplicated breakpoints.  Check also for a breakpoint
1137      placed (branch instruction's destination) at the stwcx/stdcx 
1138      instruction, this resets the reservation and take us back to the 
1139      lwarx/ldarx instruction at the beginning of the atomic sequence.  */
1140   if (last_breakpoint && ((breaks[1] == breaks[0]) 
1141       || (breaks[1] == closing_insn)))
1142     last_breakpoint = 0;
1143
1144   /* Effectively inserts the breakpoints.  */
1145   for (index = 0; index <= last_breakpoint; index++)
1146     insert_single_step_breakpoint (breaks[index]);
1147
1148   return 1;
1149 }
1150
1151
1152 #define SIGNED_SHORT(x)                                                 \
1153   ((sizeof (short) == 2)                                                \
1154    ? ((int)(short)(x))                                                  \
1155    : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
1156
1157 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
1158
1159 /* Limit the number of skipped non-prologue instructions, as the examining
1160    of the prologue is expensive.  */
1161 static int max_skip_non_prologue_insns = 10;
1162
1163 /* Return nonzero if the given instruction OP can be part of the prologue
1164    of a function and saves a parameter on the stack.  FRAMEP should be
1165    set if one of the previous instructions in the function has set the
1166    Frame Pointer.  */
1167
1168 static int
1169 store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
1170 {
1171   /* Move parameters from argument registers to temporary register.  */
1172   if ((op & 0xfc0007fe) == 0x7c000378)         /* mr(.)  Rx,Ry */
1173     {
1174       /* Rx must be scratch register r0.  */
1175       const int rx_regno = (op >> 16) & 31;
1176       /* Ry: Only r3 - r10 are used for parameter passing.  */
1177       const int ry_regno = GET_SRC_REG (op);
1178
1179       if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
1180         {
1181           *r0_contains_arg = 1;
1182           return 1;
1183         }
1184       else
1185         return 0;
1186     }
1187
1188   /* Save a General Purpose Register on stack.  */
1189
1190   if ((op & 0xfc1f0003) == 0xf8010000 ||       /* std  Rx,NUM(r1) */
1191       (op & 0xfc1f0000) == 0xd8010000)         /* stfd Rx,NUM(r1) */
1192     {
1193       /* Rx: Only r3 - r10 are used for parameter passing.  */
1194       const int rx_regno = GET_SRC_REG (op);
1195
1196       return (rx_regno >= 3 && rx_regno <= 10);
1197     }
1198            
1199   /* Save a General Purpose Register on stack via the Frame Pointer.  */
1200
1201   if (framep &&
1202       ((op & 0xfc1f0000) == 0x901f0000 ||     /* st rx,NUM(r31) */
1203        (op & 0xfc1f0000) == 0x981f0000 ||     /* stb Rx,NUM(r31) */
1204        (op & 0xfc1f0000) == 0xd81f0000))      /* stfd Rx,NUM(r31) */
1205     {
1206       /* Rx: Usually, only r3 - r10 are used for parameter passing.
1207          However, the compiler sometimes uses r0 to hold an argument.  */
1208       const int rx_regno = GET_SRC_REG (op);
1209
1210       return ((rx_regno >= 3 && rx_regno <= 10)
1211               || (rx_regno == 0 && *r0_contains_arg));
1212     }
1213
1214   if ((op & 0xfc1f0000) == 0xfc010000)         /* frsp, fp?,NUM(r1) */
1215     {
1216       /* Only f2 - f8 are used for parameter passing.  */
1217       const int src_regno = GET_SRC_REG (op);
1218
1219       return (src_regno >= 2 && src_regno <= 8);
1220     }
1221
1222   if (framep && ((op & 0xfc1f0000) == 0xfc1f0000))  /* frsp, fp?,NUM(r31) */
1223     {
1224       /* Only f2 - f8 are used for parameter passing.  */
1225       const int src_regno = GET_SRC_REG (op);
1226
1227       return (src_regno >= 2 && src_regno <= 8);
1228     }
1229
1230   /* Not an insn that saves a parameter on stack.  */
1231   return 0;
1232 }
1233
1234 /* Assuming that INSN is a "bl" instruction located at PC, return
1235    nonzero if the destination of the branch is a "blrl" instruction.
1236    
1237    This sequence is sometimes found in certain function prologues.
1238    It allows the function to load the LR register with a value that
1239    they can use to access PIC data using PC-relative offsets.  */
1240
1241 static int
1242 bl_to_blrl_insn_p (CORE_ADDR pc, int insn)
1243 {
1244   CORE_ADDR dest;
1245   int immediate;
1246   int absolute;
1247   int dest_insn;
1248
1249   absolute = (int) ((insn >> 1) & 1);
1250   immediate = ((insn & ~3) << 6) >> 6;
1251   if (absolute)
1252     dest = immediate;
1253   else
1254     dest = pc + immediate;
1255
1256   dest_insn = read_memory_integer (dest, 4);
1257   if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
1258     return 1;
1259
1260   return 0;
1261 }
1262
1263 /* Masks for decoding a branch-and-link (bl) instruction.  
1264
1265    BL_MASK and BL_INSTRUCTION are used in combination with each other.
1266    The former is anded with the opcode in question; if the result of
1267    this masking operation is equal to BL_INSTRUCTION, then the opcode in
1268    question is a ``bl'' instruction.
1269    
1270    BL_DISPLACMENT_MASK is anded with the opcode in order to extract
1271    the branch displacement.  */
1272
1273 #define BL_MASK 0xfc000001
1274 #define BL_INSTRUCTION 0x48000001
1275 #define BL_DISPLACEMENT_MASK 0x03fffffc
1276
1277 static unsigned long
1278 rs6000_fetch_instruction (const CORE_ADDR pc)
1279 {
1280   gdb_byte buf[4];
1281   unsigned long op;
1282
1283   /* Fetch the instruction and convert it to an integer.  */
1284   if (target_read_memory (pc, buf, 4))
1285     return 0;
1286   op = extract_unsigned_integer (buf, 4);
1287
1288   return op;
1289 }
1290
1291 /* GCC generates several well-known sequences of instructions at the begining
1292    of each function prologue when compiling with -fstack-check.  If one of
1293    such sequences starts at START_PC, then return the address of the
1294    instruction immediately past this sequence.  Otherwise, return START_PC.  */
1295    
1296 static CORE_ADDR
1297 rs6000_skip_stack_check (const CORE_ADDR start_pc)
1298 {
1299   CORE_ADDR pc = start_pc;
1300   unsigned long op = rs6000_fetch_instruction (pc);
1301
1302   /* First possible sequence: A small number of probes.
1303          stw 0, -<some immediate>(1)
1304          [repeat this instruction any (small) number of times]
1305   */
1306   
1307   if ((op & 0xffff0000) == 0x90010000)
1308     {
1309       while ((op & 0xffff0000) == 0x90010000)
1310         {
1311           pc = pc + 4;
1312           op = rs6000_fetch_instruction (pc);
1313         }
1314       return pc;
1315     }
1316
1317   /* Second sequence: A probing loop.
1318          addi 12,1,-<some immediate>
1319          lis 0,-<some immediate>
1320          [possibly ori 0,0,<some immediate>]
1321          add 0,12,0
1322          cmpw 0,12,0
1323          beq 0,<disp>
1324          addi 12,12,-<some immediate>
1325          stw 0,0(12)
1326          b <disp>
1327          [possibly one last probe: stw 0,<some immediate>(12)]
1328   */
1329
1330   while (1)
1331     {
1332       /* addi 12,1,-<some immediate> */
1333       if ((op & 0xffff0000) != 0x39810000)
1334         break;
1335
1336       /* lis 0,-<some immediate> */
1337       pc = pc + 4;
1338       op = rs6000_fetch_instruction (pc);
1339       if ((op & 0xffff0000) != 0x3c000000)
1340         break;
1341
1342       pc = pc + 4;
1343       op = rs6000_fetch_instruction (pc);
1344       /* [possibly ori 0,0,<some immediate>] */
1345       if ((op & 0xffff0000) == 0x60000000)
1346         {
1347           pc = pc + 4;
1348           op = rs6000_fetch_instruction (pc);
1349         }
1350       /* add 0,12,0 */
1351       if (op != 0x7c0c0214)
1352         break;
1353
1354       /* cmpw 0,12,0 */
1355       pc = pc + 4;
1356       op = rs6000_fetch_instruction (pc);
1357       if (op != 0x7c0c0000)
1358         break;
1359
1360       /* beq 0,<disp> */
1361       pc = pc + 4;
1362       op = rs6000_fetch_instruction (pc);
1363       if ((op & 0xff9f0001) != 0x41820000)
1364         break;
1365
1366       /* addi 12,12,-<some immediate> */
1367       pc = pc + 4;
1368       op = rs6000_fetch_instruction (pc);
1369       if ((op & 0xffff0000) != 0x398c0000)
1370         break;
1371
1372       /* stw 0,0(12) */
1373       pc = pc + 4;
1374       op = rs6000_fetch_instruction (pc);
1375       if (op != 0x900c0000)
1376         break;
1377
1378       /* b <disp> */
1379       pc = pc + 4;
1380       op = rs6000_fetch_instruction (pc);
1381       if ((op & 0xfc000001) != 0x48000000)
1382         break;
1383
1384       /* [possibly one last probe: stw 0,<some immediate>(12)] */
1385       pc = pc + 4;
1386       op = rs6000_fetch_instruction (pc);
1387       if ((op & 0xffff0000) == 0x900c0000)
1388         {
1389           pc = pc + 4;
1390           op = rs6000_fetch_instruction (pc);
1391         }
1392
1393       /* We found a valid stack-check sequence, return the new PC.  */
1394       return pc;
1395     }
1396
1397   /* Third sequence: No probe; instead, a comparizon between the stack size
1398      limit (saved in a run-time global variable) and the current stack
1399      pointer:
1400
1401         addi 0,1,-<some immediate>
1402         lis 12,__gnat_stack_limit@ha
1403         lwz 12,__gnat_stack_limit@l(12)
1404         twllt 0,12
1405
1406      or, with a small variant in the case of a bigger stack frame:
1407         addis 0,1,<some immediate>
1408         addic 0,0,-<some immediate>
1409         lis 12,__gnat_stack_limit@ha
1410         lwz 12,__gnat_stack_limit@l(12)
1411         twllt 0,12
1412   */
1413   while (1)
1414     {
1415       /* addi 0,1,-<some immediate> */
1416       if ((op & 0xffff0000) != 0x38010000)
1417         {
1418           /* small stack frame variant not recognized; try the
1419              big stack frame variant: */
1420
1421           /* addis 0,1,<some immediate> */
1422           if ((op & 0xffff0000) != 0x3c010000)
1423             break;
1424
1425           /* addic 0,0,-<some immediate> */
1426           pc = pc + 4;
1427           op = rs6000_fetch_instruction (pc);
1428           if ((op & 0xffff0000) != 0x30000000)
1429             break;
1430         }
1431
1432       /* lis 12,<some immediate> */
1433       pc = pc + 4;
1434       op = rs6000_fetch_instruction (pc);
1435       if ((op & 0xffff0000) != 0x3d800000)
1436         break;
1437       
1438       /* lwz 12,<some immediate>(12) */
1439       pc = pc + 4;
1440       op = rs6000_fetch_instruction (pc);
1441       if ((op & 0xffff0000) != 0x818c0000)
1442         break;
1443
1444       /* twllt 0,12 */
1445       pc = pc + 4;
1446       op = rs6000_fetch_instruction (pc);
1447       if ((op & 0xfffffffe) != 0x7c406008)
1448         break;
1449
1450       /* We found a valid stack-check sequence, return the new PC.  */
1451       return pc;
1452     }
1453
1454   /* No stack check code in our prologue, return the start_pc.  */
1455   return start_pc;
1456 }
1457
1458 /* return pc value after skipping a function prologue and also return
1459    information about a function frame.
1460
1461    in struct rs6000_framedata fdata:
1462    - frameless is TRUE, if function does not have a frame.
1463    - nosavedpc is TRUE, if function does not save %pc value in its frame.
1464    - offset is the initial size of this stack frame --- the amount by
1465    which we decrement the sp to allocate the frame.
1466    - saved_gpr is the number of the first saved gpr.
1467    - saved_fpr is the number of the first saved fpr.
1468    - saved_vr is the number of the first saved vr.
1469    - saved_ev is the number of the first saved ev.
1470    - alloca_reg is the number of the register used for alloca() handling.
1471    Otherwise -1.
1472    - gpr_offset is the offset of the first saved gpr from the previous frame.
1473    - fpr_offset is the offset of the first saved fpr from the previous frame.
1474    - vr_offset is the offset of the first saved vr from the previous frame.
1475    - ev_offset is the offset of the first saved ev from the previous frame.
1476    - lr_offset is the offset of the saved lr
1477    - cr_offset is the offset of the saved cr
1478    - vrsave_offset is the offset of the saved vrsave register
1479  */
1480
1481 static CORE_ADDR
1482 skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
1483                struct rs6000_framedata *fdata)
1484 {
1485   CORE_ADDR orig_pc = pc;
1486   CORE_ADDR last_prologue_pc = pc;
1487   CORE_ADDR li_found_pc = 0;
1488   gdb_byte buf[4];
1489   unsigned long op;
1490   long offset = 0;
1491   long vr_saved_offset = 0;
1492   int lr_reg = -1;
1493   int cr_reg = -1;
1494   int vr_reg = -1;
1495   int ev_reg = -1;
1496   long ev_offset = 0;
1497   int vrsave_reg = -1;
1498   int reg;
1499   int framep = 0;
1500   int minimal_toc_loaded = 0;
1501   int prev_insn_was_prologue_insn = 1;
1502   int num_skip_non_prologue_insns = 0;
1503   int r0_contains_arg = 0;
1504   const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
1505   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1506
1507   memset (fdata, 0, sizeof (struct rs6000_framedata));
1508   fdata->saved_gpr = -1;
1509   fdata->saved_fpr = -1;
1510   fdata->saved_vr = -1;
1511   fdata->saved_ev = -1;
1512   fdata->alloca_reg = -1;
1513   fdata->frameless = 1;
1514   fdata->nosavedpc = 1;
1515   fdata->lr_register = -1;
1516
1517   pc = rs6000_skip_stack_check (pc);
1518   if (pc >= lim_pc)
1519     pc = lim_pc;
1520
1521   for (;; pc += 4)
1522     {
1523       /* Sometimes it isn't clear if an instruction is a prologue
1524          instruction or not.  When we encounter one of these ambiguous
1525          cases, we'll set prev_insn_was_prologue_insn to 0 (false).
1526          Otherwise, we'll assume that it really is a prologue instruction. */
1527       if (prev_insn_was_prologue_insn)
1528         last_prologue_pc = pc;
1529
1530       /* Stop scanning if we've hit the limit.  */
1531       if (pc >= lim_pc)
1532         break;
1533
1534       prev_insn_was_prologue_insn = 1;
1535
1536       /* Fetch the instruction and convert it to an integer.  */
1537       if (target_read_memory (pc, buf, 4))
1538         break;
1539       op = extract_unsigned_integer (buf, 4);
1540
1541       if ((op & 0xfc1fffff) == 0x7c0802a6)
1542         {                       /* mflr Rx */
1543           /* Since shared library / PIC code, which needs to get its
1544              address at runtime, can appear to save more than one link
1545              register vis:
1546
1547              *INDENT-OFF*
1548              stwu r1,-304(r1)
1549              mflr r3
1550              bl 0xff570d0 (blrl)
1551              stw r30,296(r1)
1552              mflr r30
1553              stw r31,300(r1)
1554              stw r3,308(r1);
1555              ...
1556              *INDENT-ON*
1557
1558              remember just the first one, but skip over additional
1559              ones.  */
1560           if (lr_reg == -1)
1561             lr_reg = (op & 0x03e00000) >> 21;
1562           if (lr_reg == 0)
1563             r0_contains_arg = 0;
1564           continue;
1565         }
1566       else if ((op & 0xfc1fffff) == 0x7c000026)
1567         {                       /* mfcr Rx */
1568           cr_reg = (op & 0x03e00000);
1569           if (cr_reg == 0)
1570             r0_contains_arg = 0;
1571           continue;
1572
1573         }
1574       else if ((op & 0xfc1f0000) == 0xd8010000)
1575         {                       /* stfd Rx,NUM(r1) */
1576           reg = GET_SRC_REG (op);
1577           if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
1578             {
1579               fdata->saved_fpr = reg;
1580               fdata->fpr_offset = SIGNED_SHORT (op) + offset;
1581             }
1582           continue;
1583
1584         }
1585       else if (((op & 0xfc1f0000) == 0xbc010000) ||     /* stm Rx, NUM(r1) */
1586                (((op & 0xfc1f0000) == 0x90010000 ||     /* st rx,NUM(r1) */
1587                  (op & 0xfc1f0003) == 0xf8010000) &&    /* std rx,NUM(r1) */
1588                 (op & 0x03e00000) >= 0x01a00000))       /* rx >= r13 */
1589         {
1590
1591           reg = GET_SRC_REG (op);
1592           if ((op & 0xfc1f0000) == 0xbc010000)
1593             fdata->gpr_mask |= ~((1U << reg) - 1);
1594           else
1595             fdata->gpr_mask |= 1U << reg;
1596           if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
1597             {
1598               fdata->saved_gpr = reg;
1599               if ((op & 0xfc1f0003) == 0xf8010000)
1600                 op &= ~3UL;
1601               fdata->gpr_offset = SIGNED_SHORT (op) + offset;
1602             }
1603           continue;
1604
1605         }
1606       else if ((op & 0xffff0000) == 0x60000000)
1607         {
1608           /* nop */
1609           /* Allow nops in the prologue, but do not consider them to
1610              be part of the prologue unless followed by other prologue
1611              instructions. */
1612           prev_insn_was_prologue_insn = 0;
1613           continue;
1614
1615         }
1616       else if ((op & 0xffff0000) == 0x3c000000)
1617         {                       /* addis 0,0,NUM, used
1618                                    for >= 32k frames */
1619           fdata->offset = (op & 0x0000ffff) << 16;
1620           fdata->frameless = 0;
1621           r0_contains_arg = 0;
1622           continue;
1623
1624         }
1625       else if ((op & 0xffff0000) == 0x60000000)
1626         {                       /* ori 0,0,NUM, 2nd ha
1627                                    lf of >= 32k frames */
1628           fdata->offset |= (op & 0x0000ffff);
1629           fdata->frameless = 0;
1630           r0_contains_arg = 0;
1631           continue;
1632
1633         }
1634       else if (lr_reg >= 0 &&
1635                /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1636                (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
1637                 /* stw Rx, NUM(r1) */
1638                 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
1639                 /* stwu Rx, NUM(r1) */
1640                 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
1641         {       /* where Rx == lr */
1642           fdata->lr_offset = offset;
1643           fdata->nosavedpc = 0;
1644           /* Invalidate lr_reg, but don't set it to -1.
1645              That would mean that it had never been set.  */
1646           lr_reg = -2;
1647           if ((op & 0xfc000003) == 0xf8000000 ||        /* std */
1648               (op & 0xfc000000) == 0x90000000)          /* stw */
1649             {
1650               /* Does not update r1, so add displacement to lr_offset.  */
1651               fdata->lr_offset += SIGNED_SHORT (op);
1652             }
1653           continue;
1654
1655         }
1656       else if (cr_reg >= 0 &&
1657                /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1658                (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
1659                 /* stw Rx, NUM(r1) */
1660                 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
1661                 /* stwu Rx, NUM(r1) */
1662                 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
1663         {       /* where Rx == cr */
1664           fdata->cr_offset = offset;
1665           /* Invalidate cr_reg, but don't set it to -1.
1666              That would mean that it had never been set.  */
1667           cr_reg = -2;
1668           if ((op & 0xfc000003) == 0xf8000000 ||
1669               (op & 0xfc000000) == 0x90000000)
1670             {
1671               /* Does not update r1, so add displacement to cr_offset.  */
1672               fdata->cr_offset += SIGNED_SHORT (op);
1673             }
1674           continue;
1675
1676         }
1677       else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
1678         {
1679           /* bcl 20,xx,.+4 is used to get the current PC, with or without
1680              prediction bits.  If the LR has already been saved, we can
1681              skip it.  */
1682           continue;
1683         }
1684       else if (op == 0x48000005)
1685         {                       /* bl .+4 used in 
1686                                    -mrelocatable */
1687           fdata->used_bl = 1;
1688           continue;
1689
1690         }
1691       else if (op == 0x48000004)
1692         {                       /* b .+4 (xlc) */
1693           break;
1694
1695         }
1696       else if ((op & 0xffff0000) == 0x3fc00000 ||  /* addis 30,0,foo@ha, used
1697                                                       in V.4 -mminimal-toc */
1698                (op & 0xffff0000) == 0x3bde0000)
1699         {                       /* addi 30,30,foo@l */
1700           continue;
1701
1702         }
1703       else if ((op & 0xfc000001) == 0x48000001)
1704         {                       /* bl foo, 
1705                                    to save fprs??? */
1706
1707           fdata->frameless = 0;
1708
1709           /* If the return address has already been saved, we can skip
1710              calls to blrl (for PIC).  */
1711           if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op))
1712             {
1713               fdata->used_bl = 1;
1714               continue;
1715             }
1716
1717           /* Don't skip over the subroutine call if it is not within
1718              the first three instructions of the prologue and either
1719              we have no line table information or the line info tells
1720              us that the subroutine call is not part of the line
1721              associated with the prologue.  */
1722           if ((pc - orig_pc) > 8)
1723             {
1724               struct symtab_and_line prologue_sal = find_pc_line (orig_pc, 0);
1725               struct symtab_and_line this_sal = find_pc_line (pc, 0);
1726
1727               if ((prologue_sal.line == 0) || (prologue_sal.line != this_sal.line))
1728                 break;
1729             }
1730
1731           op = read_memory_integer (pc + 4, 4);
1732
1733           /* At this point, make sure this is not a trampoline
1734              function (a function that simply calls another functions,
1735              and nothing else).  If the next is not a nop, this branch
1736              was part of the function prologue. */
1737
1738           if (op == 0x4def7b82 || op == 0)      /* crorc 15, 15, 15 */
1739             break;              /* don't skip over 
1740                                    this branch */
1741
1742           fdata->used_bl = 1;
1743           continue;
1744         }
1745       /* update stack pointer */
1746       else if ((op & 0xfc1f0000) == 0x94010000)
1747         {               /* stu rX,NUM(r1) ||  stwu rX,NUM(r1) */
1748           fdata->frameless = 0;
1749           fdata->offset = SIGNED_SHORT (op);
1750           offset = fdata->offset;
1751           continue;
1752         }
1753       else if ((op & 0xfc1f016a) == 0x7c01016e)
1754         {                       /* stwux rX,r1,rY */
1755           /* no way to figure out what r1 is going to be */
1756           fdata->frameless = 0;
1757           offset = fdata->offset;
1758           continue;
1759         }
1760       else if ((op & 0xfc1f0003) == 0xf8010001)
1761         {                       /* stdu rX,NUM(r1) */
1762           fdata->frameless = 0;
1763           fdata->offset = SIGNED_SHORT (op & ~3UL);
1764           offset = fdata->offset;
1765           continue;
1766         }
1767       else if ((op & 0xfc1f016a) == 0x7c01016a)
1768         {                       /* stdux rX,r1,rY */
1769           /* no way to figure out what r1 is going to be */
1770           fdata->frameless = 0;
1771           offset = fdata->offset;
1772           continue;
1773         }
1774       else if ((op & 0xffff0000) == 0x38210000)
1775         {                       /* addi r1,r1,SIMM */
1776           fdata->frameless = 0;
1777           fdata->offset += SIGNED_SHORT (op);
1778           offset = fdata->offset;
1779           continue;
1780         }
1781       /* Load up minimal toc pointer.  Do not treat an epilogue restore
1782          of r31 as a minimal TOC load.  */
1783       else if (((op >> 22) == 0x20f     ||      /* l r31,... or l r30,... */
1784                (op >> 22) == 0x3af)             /* ld r31,... or ld r30,... */
1785                && !framep
1786                && !minimal_toc_loaded)
1787         {
1788           minimal_toc_loaded = 1;
1789           continue;
1790
1791           /* move parameters from argument registers to local variable
1792              registers */
1793         }
1794       else if ((op & 0xfc0007fe) == 0x7c000378 &&       /* mr(.)  Rx,Ry */
1795                (((op >> 21) & 31) >= 3) &&              /* R3 >= Ry >= R10 */
1796                (((op >> 21) & 31) <= 10) &&
1797                ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
1798         {
1799           continue;
1800
1801           /* store parameters in stack */
1802         }
1803       /* Move parameters from argument registers to temporary register.  */
1804       else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
1805         {
1806           continue;
1807
1808           /* Set up frame pointer */
1809         }
1810       else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
1811                || op == 0x7c3f0b78)
1812         {                       /* mr r31, r1 */
1813           fdata->frameless = 0;
1814           framep = 1;
1815           fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
1816           continue;
1817
1818           /* Another way to set up the frame pointer.  */
1819         }
1820       else if ((op & 0xfc1fffff) == 0x38010000)
1821         {                       /* addi rX, r1, 0x0 */
1822           fdata->frameless = 0;
1823           framep = 1;
1824           fdata->alloca_reg = (tdep->ppc_gp0_regnum
1825                                + ((op & ~0x38010000) >> 21));
1826           continue;
1827         }
1828       /* AltiVec related instructions.  */
1829       /* Store the vrsave register (spr 256) in another register for
1830          later manipulation, or load a register into the vrsave
1831          register.  2 instructions are used: mfvrsave and
1832          mtvrsave.  They are shorthand notation for mfspr Rn, SPR256
1833          and mtspr SPR256, Rn.  */
1834       /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1835          mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110  */
1836       else if ((op & 0xfc1fffff) == 0x7c0042a6)    /* mfvrsave Rn */
1837         {
1838           vrsave_reg = GET_SRC_REG (op);
1839           continue;
1840         }
1841       else if ((op & 0xfc1fffff) == 0x7c0043a6)     /* mtvrsave Rn */
1842         {
1843           continue;
1844         }
1845       /* Store the register where vrsave was saved to onto the stack:
1846          rS is the register where vrsave was stored in a previous
1847          instruction.  */
1848       /* 100100 sssss 00001 dddddddd dddddddd */
1849       else if ((op & 0xfc1f0000) == 0x90010000)     /* stw rS, d(r1) */
1850         {
1851           if (vrsave_reg == GET_SRC_REG (op))
1852             {
1853               fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1854               vrsave_reg = -1;
1855             }
1856           continue;
1857         }
1858       /* Compute the new value of vrsave, by modifying the register
1859          where vrsave was saved to.  */
1860       else if (((op & 0xfc000000) == 0x64000000)    /* oris Ra, Rs, UIMM */
1861                || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1862         {
1863           continue;
1864         }
1865       /* li r0, SIMM (short for addi r0, 0, SIMM).  This is the first
1866          in a pair of insns to save the vector registers on the
1867          stack.  */
1868       /* 001110 00000 00000 iiii iiii iiii iiii  */
1869       /* 001110 01110 00000 iiii iiii iiii iiii  */
1870       else if ((op & 0xffff0000) == 0x38000000         /* li r0, SIMM */
1871                || (op & 0xffff0000) == 0x39c00000)     /* li r14, SIMM */
1872         {
1873           if ((op & 0xffff0000) == 0x38000000)
1874             r0_contains_arg = 0;
1875           li_found_pc = pc;
1876           vr_saved_offset = SIGNED_SHORT (op);
1877
1878           /* This insn by itself is not part of the prologue, unless
1879              if part of the pair of insns mentioned above. So do not
1880              record this insn as part of the prologue yet.  */
1881           prev_insn_was_prologue_insn = 0;
1882         }
1883       /* Store vector register S at (r31+r0) aligned to 16 bytes.  */      
1884       /* 011111 sssss 11111 00000 00111001110 */
1885       else if ((op & 0xfc1fffff) == 0x7c1f01ce)   /* stvx Vs, R31, R0 */
1886         {
1887           if (pc == (li_found_pc + 4))
1888             {
1889               vr_reg = GET_SRC_REG (op);
1890               /* If this is the first vector reg to be saved, or if
1891                  it has a lower number than others previously seen,
1892                  reupdate the frame info.  */
1893               if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1894                 {
1895                   fdata->saved_vr = vr_reg;
1896                   fdata->vr_offset = vr_saved_offset + offset;
1897                 }
1898               vr_saved_offset = -1;
1899               vr_reg = -1;
1900               li_found_pc = 0;
1901             }
1902         }
1903       /* End AltiVec related instructions.  */
1904
1905       /* Start BookE related instructions.  */
1906       /* Store gen register S at (r31+uimm).
1907          Any register less than r13 is volatile, so we don't care.  */
1908       /* 000100 sssss 11111 iiiii 01100100001 */
1909       else if (arch_info->mach == bfd_mach_ppc_e500
1910                && (op & 0xfc1f07ff) == 0x101f0321)    /* evstdd Rs,uimm(R31) */
1911         {
1912           if ((op & 0x03e00000) >= 0x01a00000)  /* Rs >= r13 */
1913             {
1914               unsigned int imm;
1915               ev_reg = GET_SRC_REG (op);
1916               imm = (op >> 11) & 0x1f;
1917               ev_offset = imm * 8;
1918               /* If this is the first vector reg to be saved, or if
1919                  it has a lower number than others previously seen,
1920                  reupdate the frame info.  */
1921               if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1922                 {
1923                   fdata->saved_ev = ev_reg;
1924                   fdata->ev_offset = ev_offset + offset;
1925                 }
1926             }
1927           continue;
1928         }
1929       /* Store gen register rS at (r1+rB).  */
1930       /* 000100 sssss 00001 bbbbb 01100100000 */
1931       else if (arch_info->mach == bfd_mach_ppc_e500
1932                && (op & 0xffe007ff) == 0x13e00320)     /* evstddx RS,R1,Rb */
1933         {
1934           if (pc == (li_found_pc + 4))
1935             {
1936               ev_reg = GET_SRC_REG (op);
1937               /* If this is the first vector reg to be saved, or if
1938                  it has a lower number than others previously seen,
1939                  reupdate the frame info.  */
1940               /* We know the contents of rB from the previous instruction.  */
1941               if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1942                 {
1943                   fdata->saved_ev = ev_reg;
1944                   fdata->ev_offset = vr_saved_offset + offset;
1945                 }
1946               vr_saved_offset = -1;
1947               ev_reg = -1;
1948               li_found_pc = 0;
1949             }
1950           continue;
1951         }
1952       /* Store gen register r31 at (rA+uimm).  */
1953       /* 000100 11111 aaaaa iiiii 01100100001 */
1954       else if (arch_info->mach == bfd_mach_ppc_e500
1955                && (op & 0xffe007ff) == 0x13e00321)   /* evstdd R31,Ra,UIMM */
1956         {
1957           /* Wwe know that the source register is 31 already, but
1958              it can't hurt to compute it.  */
1959           ev_reg = GET_SRC_REG (op);
1960           ev_offset = ((op >> 11) & 0x1f) * 8;
1961           /* If this is the first vector reg to be saved, or if
1962              it has a lower number than others previously seen,
1963              reupdate the frame info.  */
1964           if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1965             {
1966               fdata->saved_ev = ev_reg;
1967               fdata->ev_offset = ev_offset + offset;
1968             }
1969
1970           continue;
1971         }
1972       /* Store gen register S at (r31+r0).
1973          Store param on stack when offset from SP bigger than 4 bytes.  */
1974       /* 000100 sssss 11111 00000 01100100000 */
1975       else if (arch_info->mach == bfd_mach_ppc_e500
1976                && (op & 0xfc1fffff) == 0x101f0320)     /* evstddx Rs,R31,R0 */
1977         {
1978           if (pc == (li_found_pc + 4))
1979             {
1980               if ((op & 0x03e00000) >= 0x01a00000)
1981                 {
1982                   ev_reg = GET_SRC_REG (op);
1983                   /* If this is the first vector reg to be saved, or if
1984                      it has a lower number than others previously seen,
1985                      reupdate the frame info.  */
1986                   /* We know the contents of r0 from the previous
1987                      instruction.  */
1988                   if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1989                     {
1990                       fdata->saved_ev = ev_reg;
1991                       fdata->ev_offset = vr_saved_offset + offset;
1992                     }
1993                   ev_reg = -1;
1994                 }
1995               vr_saved_offset = -1;
1996               li_found_pc = 0;
1997               continue;
1998             }
1999         }
2000       /* End BookE related instructions.  */
2001
2002       else
2003         {
2004           unsigned int all_mask = ~((1U << fdata->saved_gpr) - 1);
2005
2006           /* Not a recognized prologue instruction.
2007              Handle optimizer code motions into the prologue by continuing
2008              the search if we have no valid frame yet or if the return
2009              address is not yet saved in the frame.  Also skip instructions
2010              if some of the GPRs expected to be saved are not yet saved.  */
2011           if (fdata->frameless == 0 && fdata->nosavedpc == 0
2012               && (fdata->gpr_mask & all_mask) == all_mask)
2013             break;
2014
2015           if (op == 0x4e800020          /* blr */
2016               || op == 0x4e800420)      /* bctr */
2017             /* Do not scan past epilogue in frameless functions or
2018                trampolines.  */
2019             break;
2020           if ((op & 0xf4000000) == 0x40000000) /* bxx */
2021             /* Never skip branches.  */
2022             break;
2023
2024           if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
2025             /* Do not scan too many insns, scanning insns is expensive with
2026                remote targets.  */
2027             break;
2028
2029           /* Continue scanning.  */
2030           prev_insn_was_prologue_insn = 0;
2031           continue;
2032         }
2033     }
2034
2035 #if 0
2036 /* I have problems with skipping over __main() that I need to address
2037  * sometime. Previously, I used to use misc_function_vector which
2038  * didn't work as well as I wanted to be.  -MGO */
2039
2040   /* If the first thing after skipping a prolog is a branch to a function,
2041      this might be a call to an initializer in main(), introduced by gcc2.
2042      We'd like to skip over it as well.  Fortunately, xlc does some extra
2043      work before calling a function right after a prologue, thus we can
2044      single out such gcc2 behaviour.  */
2045
2046
2047   if ((op & 0xfc000001) == 0x48000001)
2048     {                           /* bl foo, an initializer function? */
2049       op = read_memory_integer (pc + 4, 4);
2050
2051       if (op == 0x4def7b82)
2052         {                       /* cror 0xf, 0xf, 0xf (nop) */
2053
2054           /* Check and see if we are in main.  If so, skip over this
2055              initializer function as well.  */
2056
2057           tmp = find_pc_misc_function (pc);
2058           if (tmp >= 0
2059               && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
2060             return pc + 8;
2061         }
2062     }
2063 #endif /* 0 */
2064
2065   if (pc == lim_pc && lr_reg >= 0)
2066     fdata->lr_register = lr_reg;
2067
2068   fdata->offset = -fdata->offset;
2069   return last_prologue_pc;
2070 }
2071
2072 static CORE_ADDR
2073 rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2074 {
2075   struct rs6000_framedata frame;
2076   CORE_ADDR limit_pc, func_addr;
2077
2078   /* See if we can determine the end of the prologue via the symbol table.
2079      If so, then return either PC, or the PC after the prologue, whichever
2080      is greater.  */
2081   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
2082     {
2083       CORE_ADDR post_prologue_pc
2084         = skip_prologue_using_sal (gdbarch, func_addr);
2085       if (post_prologue_pc != 0)
2086         return max (pc, post_prologue_pc);
2087     }
2088
2089   /* Can't determine prologue from the symbol table, need to examine
2090      instructions.  */
2091
2092   /* Find an upper limit on the function prologue using the debug
2093      information.  If the debug information could not be used to provide
2094      that bound, then use an arbitrary large number as the upper bound.  */
2095   limit_pc = skip_prologue_using_sal (gdbarch, pc);
2096   if (limit_pc == 0)
2097     limit_pc = pc + 100;          /* Magic.  */
2098
2099   pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
2100   return pc;
2101 }
2102
2103 /* When compiling for EABI, some versions of GCC emit a call to __eabi
2104    in the prologue of main().
2105
2106    The function below examines the code pointed at by PC and checks to
2107    see if it corresponds to a call to __eabi.  If so, it returns the
2108    address of the instruction following that call.  Otherwise, it simply
2109    returns PC.  */
2110
2111 static CORE_ADDR
2112 rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2113 {
2114   gdb_byte buf[4];
2115   unsigned long op;
2116
2117   if (target_read_memory (pc, buf, 4))
2118     return pc;
2119   op = extract_unsigned_integer (buf, 4);
2120
2121   if ((op & BL_MASK) == BL_INSTRUCTION)
2122     {
2123       CORE_ADDR displ = op & BL_DISPLACEMENT_MASK;
2124       CORE_ADDR call_dest = pc + 4 + displ;
2125       struct minimal_symbol *s = lookup_minimal_symbol_by_pc (call_dest);
2126
2127       /* We check for ___eabi (three leading underscores) in addition
2128          to __eabi in case the GCC option "-fleading-underscore" was
2129          used to compile the program.  */
2130       if (s != NULL
2131           && SYMBOL_LINKAGE_NAME (s) != NULL
2132           && (strcmp (SYMBOL_LINKAGE_NAME (s), "__eabi") == 0
2133               || strcmp (SYMBOL_LINKAGE_NAME (s), "___eabi") == 0))
2134         pc += 4;
2135     }
2136   return pc;
2137 }
2138
2139 /* All the ABI's require 16 byte alignment.  */
2140 static CORE_ADDR
2141 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2142 {
2143   return (addr & -16);
2144 }
2145
2146 /* Return whether handle_inferior_event() should proceed through code
2147    starting at PC in function NAME when stepping.
2148
2149    The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2150    handle memory references that are too distant to fit in instructions
2151    generated by the compiler.  For example, if 'foo' in the following
2152    instruction:
2153
2154      lwz r9,foo(r2)
2155
2156    is greater than 32767, the linker might replace the lwz with a branch to
2157    somewhere in @FIX1 that does the load in 2 instructions and then branches
2158    back to where execution should continue.
2159
2160    GDB should silently step over @FIX code, just like AIX dbx does.
2161    Unfortunately, the linker uses the "b" instruction for the
2162    branches, meaning that the link register doesn't get set.
2163    Therefore, GDB's usual step_over_function () mechanism won't work.
2164
2165    Instead, use the gdbarch_skip_trampoline_code and
2166    gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2167    @FIX code.  */
2168
2169 static int
2170 rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name)
2171 {
2172   return name && !strncmp (name, "@FIX", 4);
2173 }
2174
2175 /* Skip code that the user doesn't want to see when stepping:
2176
2177    1. Indirect function calls use a piece of trampoline code to do context
2178    switching, i.e. to set the new TOC table.  Skip such code if we are on
2179    its first instruction (as when we have single-stepped to here).
2180
2181    2. Skip shared library trampoline code (which is different from
2182    indirect function call trampolines).
2183
2184    3. Skip bigtoc fixup code.
2185
2186    Result is desired PC to step until, or NULL if we are not in
2187    code that should be skipped.  */
2188
2189 static CORE_ADDR
2190 rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2191 {
2192   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
2193   unsigned int ii, op;
2194   int rel;
2195   CORE_ADDR solib_target_pc;
2196   struct minimal_symbol *msymbol;
2197
2198   static unsigned trampoline_code[] =
2199   {
2200     0x800b0000,                 /*     l   r0,0x0(r11)  */
2201     0x90410014,                 /*    st   r2,0x14(r1)  */
2202     0x7c0903a6,                 /* mtctr   r0           */
2203     0x804b0004,                 /*     l   r2,0x4(r11)  */
2204     0x816b0008,                 /*     l  r11,0x8(r11)  */
2205     0x4e800420,                 /*  bctr                */
2206     0x4e800020,                 /*    br                */
2207     0
2208   };
2209
2210   /* Check for bigtoc fixup code.  */
2211   msymbol = lookup_minimal_symbol_by_pc (pc);
2212   if (msymbol 
2213       && rs6000_in_solib_return_trampoline (pc, SYMBOL_LINKAGE_NAME (msymbol)))
2214     {
2215       /* Double-check that the third instruction from PC is relative "b".  */
2216       op = read_memory_integer (pc + 8, 4);
2217       if ((op & 0xfc000003) == 0x48000000)
2218         {
2219           /* Extract bits 6-29 as a signed 24-bit relative word address and
2220              add it to the containing PC.  */
2221           rel = ((int)(op << 6) >> 6);
2222           return pc + 8 + rel;
2223         }
2224     }
2225
2226   /* If pc is in a shared library trampoline, return its target.  */
2227   solib_target_pc = find_solib_trampoline_target (frame, pc);
2228   if (solib_target_pc)
2229     return solib_target_pc;
2230
2231   for (ii = 0; trampoline_code[ii]; ++ii)
2232     {
2233       op = read_memory_integer (pc + (ii * 4), 4);
2234       if (op != trampoline_code[ii])
2235         return 0;
2236     }
2237   ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination addr   */
2238   pc = read_memory_unsigned_integer (ii, tdep->wordsize); /* (r11) value */
2239   return pc;
2240 }
2241
2242 /* ISA-specific vector types.  */
2243
2244 static struct type *
2245 rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2246 {
2247   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2248
2249   if (!tdep->ppc_builtin_type_vec64)
2250     {
2251       const struct builtin_type *bt = builtin_type (gdbarch);
2252
2253       /* The type we're building is this: */
2254 #if 0
2255       union __gdb_builtin_type_vec64
2256         {
2257           int64_t uint64;
2258           float v2_float[2];
2259           int32_t v2_int32[2];
2260           int16_t v4_int16[4];
2261           int8_t v8_int8[8];
2262         };
2263 #endif
2264
2265       struct type *t;
2266
2267       t = arch_composite_type (gdbarch,
2268                                "__ppc_builtin_type_vec64", TYPE_CODE_UNION);
2269       append_composite_type_field (t, "uint64", bt->builtin_int64);
2270       append_composite_type_field (t, "v2_float",
2271                                    init_vector_type (bt->builtin_float, 2));
2272       append_composite_type_field (t, "v2_int32",
2273                                    init_vector_type (bt->builtin_int32, 2));
2274       append_composite_type_field (t, "v4_int16",
2275                                    init_vector_type (bt->builtin_int16, 4));
2276       append_composite_type_field (t, "v8_int8",
2277                                    init_vector_type (bt->builtin_int8, 8));
2278
2279       TYPE_VECTOR (t) = 1;
2280       TYPE_NAME (t) = "ppc_builtin_type_vec64";
2281       tdep->ppc_builtin_type_vec64 = t;
2282     }
2283
2284   return tdep->ppc_builtin_type_vec64;
2285 }
2286
2287 /* Vector 128 type.  */
2288
2289 static struct type *
2290 rs6000_builtin_type_vec128 (struct gdbarch *gdbarch)
2291 {
2292   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2293
2294   if (!tdep->ppc_builtin_type_vec128)
2295     {
2296       const struct builtin_type *bt = builtin_type (gdbarch);
2297
2298       /* The type we're building is this
2299
2300          type = union __ppc_builtin_type_vec128 {
2301              uint128_t uint128;
2302              float v4_float[4];
2303              int32_t v4_int32[4];
2304              int16_t v8_int16[8];
2305              int8_t v16_int8[16];
2306          }
2307       */
2308
2309       struct type *t;
2310
2311       t = arch_composite_type (gdbarch,
2312                                "__ppc_builtin_type_vec128", TYPE_CODE_UNION);
2313       append_composite_type_field (t, "uint128", bt->builtin_uint128);
2314       append_composite_type_field (t, "v4_float",
2315                                    init_vector_type (bt->builtin_float, 4));
2316       append_composite_type_field (t, "v4_int32",
2317                                    init_vector_type (bt->builtin_int32, 4));
2318       append_composite_type_field (t, "v8_int16",
2319                                    init_vector_type (bt->builtin_int16, 8));
2320       append_composite_type_field (t, "v16_int8",
2321                                    init_vector_type (bt->builtin_int8, 16));
2322
2323       TYPE_VECTOR (t) = 1;
2324       TYPE_NAME (t) = "ppc_builtin_type_vec128";
2325       tdep->ppc_builtin_type_vec128 = t;
2326     }
2327
2328   return tdep->ppc_builtin_type_vec128;
2329 }
2330
2331 /* Return the name of register number REGNO, or the empty string if it
2332    is an anonymous register.  */
2333
2334 static const char *
2335 rs6000_register_name (struct gdbarch *gdbarch, int regno)
2336 {
2337   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2338
2339   /* The upper half "registers" have names in the XML description,
2340      but we present only the low GPRs and the full 64-bit registers
2341      to the user.  */
2342   if (tdep->ppc_ev0_upper_regnum >= 0
2343       && tdep->ppc_ev0_upper_regnum <= regno
2344       && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
2345     return "";
2346
2347   /* Hide the upper halves of the vs0~vs31 registers.  */
2348   if (tdep->ppc_vsr0_regnum >= 0
2349       && tdep->ppc_vsr0_upper_regnum <= regno
2350       && regno < tdep->ppc_vsr0_upper_regnum + ppc_num_gprs)
2351     return "";
2352
2353   /* Check if the SPE pseudo registers are available.  */
2354   if (IS_SPE_PSEUDOREG (tdep, regno))
2355     {
2356       static const char *const spe_regnames[] = {
2357         "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2358         "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2359         "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2360         "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2361       };
2362       return spe_regnames[regno - tdep->ppc_ev0_regnum];
2363     }
2364
2365   /* Check if the decimal128 pseudo-registers are available.  */
2366   if (IS_DFP_PSEUDOREG (tdep, regno))
2367     {
2368       static const char *const dfp128_regnames[] = {
2369         "dl0", "dl1", "dl2", "dl3",
2370         "dl4", "dl5", "dl6", "dl7",
2371         "dl8", "dl9", "dl10", "dl11",
2372         "dl12", "dl13", "dl14", "dl15"
2373       };
2374       return dfp128_regnames[regno - tdep->ppc_dl0_regnum];
2375     }
2376
2377   /* Check if this is a VSX pseudo-register.  */
2378   if (IS_VSX_PSEUDOREG (tdep, regno))
2379     {
2380       static const char *const vsx_regnames[] = {
2381         "vs0", "vs1", "vs2", "vs3", "vs4", "vs5", "vs6", "vs7",
2382         "vs8", "vs9", "vs10", "vs11", "vs12", "vs13", "vs14",
2383         "vs15", "vs16", "vs17", "vs18", "vs19", "vs20", "vs21",
2384         "vs22", "vs23", "vs24", "vs25", "vs26", "vs27", "vs28",
2385         "vs29", "vs30", "vs31", "vs32", "vs33", "vs34", "vs35",
2386         "vs36", "vs37", "vs38", "vs39", "vs40", "vs41", "vs42",
2387         "vs43", "vs44", "vs45", "vs46", "vs47", "vs48", "vs49",
2388         "vs50", "vs51", "vs52", "vs53", "vs54", "vs55", "vs56",
2389         "vs57", "vs58", "vs59", "vs60", "vs61", "vs62", "vs63"
2390       };
2391       return vsx_regnames[regno - tdep->ppc_vsr0_regnum];
2392     }
2393
2394   /* Check if the this is a Extended FP pseudo-register.  */
2395   if (IS_EFP_PSEUDOREG (tdep, regno))
2396     {
2397       static const char *const efpr_regnames[] = {
2398         "f32", "f33", "f34", "f35", "f36", "f37", "f38",
2399         "f39", "f40", "f41", "f42", "f43", "f44", "f45",
2400         "f46", "f47", "f48", "f49", "f50", "f51",
2401         "f52", "f53", "f54", "f55", "f56", "f57",
2402         "f58", "f59", "f60", "f61", "f62", "f63"
2403       };
2404       return efpr_regnames[regno - tdep->ppc_efpr0_regnum];
2405     }
2406
2407   return tdesc_register_name (gdbarch, regno);
2408 }
2409
2410 /* Return the GDB type object for the "standard" data type of data in
2411    register N.  */
2412
2413 static struct type *
2414 rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2415 {
2416   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2417
2418   /* These are the only pseudo-registers we support.  */
2419   gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2420               || IS_DFP_PSEUDOREG (tdep, regnum)
2421               || IS_VSX_PSEUDOREG (tdep, regnum)
2422               || IS_EFP_PSEUDOREG (tdep, regnum));
2423
2424   /* These are the e500 pseudo-registers.  */
2425   if (IS_SPE_PSEUDOREG (tdep, regnum))
2426     return rs6000_builtin_type_vec64 (gdbarch);
2427   else if (IS_DFP_PSEUDOREG (tdep, regnum))
2428     /* PPC decimal128 pseudo-registers.  */
2429     return builtin_type (gdbarch)->builtin_declong;
2430   else if (IS_VSX_PSEUDOREG (tdep, regnum))
2431     /* POWER7 VSX pseudo-registers.  */
2432     return rs6000_builtin_type_vec128 (gdbarch);
2433   else
2434     /* POWER7 Extended FP pseudo-registers.  */
2435     return builtin_type (gdbarch)->builtin_double;
2436 }
2437
2438 /* Is REGNUM a member of REGGROUP?  */
2439 static int
2440 rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2441                                    struct reggroup *group)
2442 {
2443   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2444
2445   /* These are the only pseudo-registers we support.  */
2446   gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2447               || IS_DFP_PSEUDOREG (tdep, regnum)
2448               || IS_VSX_PSEUDOREG (tdep, regnum)
2449               || IS_EFP_PSEUDOREG (tdep, regnum));
2450
2451   /* These are the e500 pseudo-registers or the POWER7 VSX registers.  */
2452   if (IS_SPE_PSEUDOREG (tdep, regnum) || IS_VSX_PSEUDOREG (tdep, regnum))
2453     return group == all_reggroup || group == vector_reggroup;
2454   else
2455     /* PPC decimal128 or Extended FP pseudo-registers.  */
2456     return group == all_reggroup || group == float_reggroup;
2457 }
2458
2459 /* The register format for RS/6000 floating point registers is always
2460    double, we need a conversion if the memory format is float.  */
2461
2462 static int
2463 rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2464                            struct type *type)
2465 {
2466   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2467
2468   return (tdep->ppc_fp0_regnum >= 0
2469           && regnum >= tdep->ppc_fp0_regnum
2470           && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs
2471           && TYPE_CODE (type) == TYPE_CODE_FLT
2472           && TYPE_LENGTH (type)
2473              != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double));
2474 }
2475
2476 static void
2477 rs6000_register_to_value (struct frame_info *frame,
2478                           int regnum,
2479                           struct type *type,
2480                           gdb_byte *to)
2481 {
2482   struct gdbarch *gdbarch = get_frame_arch (frame);
2483   gdb_byte from[MAX_REGISTER_SIZE];
2484   
2485   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2486
2487   get_frame_register (frame, regnum, from);
2488   convert_typed_floating (from, builtin_type (gdbarch)->builtin_double,
2489                           to, type);
2490 }
2491
2492 static void
2493 rs6000_value_to_register (struct frame_info *frame,
2494                           int regnum,
2495                           struct type *type,
2496                           const gdb_byte *from)
2497 {
2498   struct gdbarch *gdbarch = get_frame_arch (frame);
2499   gdb_byte to[MAX_REGISTER_SIZE];
2500
2501   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2502
2503   convert_typed_floating (from, type,
2504                           to, builtin_type (gdbarch)->builtin_double);
2505   put_frame_register (frame, regnum, to);
2506 }
2507
2508 /* Move SPE vector register values between a 64-bit buffer and the two
2509    32-bit raw register halves in a regcache.  This function handles
2510    both splitting a 64-bit value into two 32-bit halves, and joining
2511    two halves into a whole 64-bit value, depending on the function
2512    passed as the MOVE argument.
2513
2514    EV_REG must be the number of an SPE evN vector register --- a
2515    pseudoregister.  REGCACHE must be a regcache, and BUFFER must be a
2516    64-bit buffer.
2517
2518    Call MOVE once for each 32-bit half of that register, passing
2519    REGCACHE, the number of the raw register corresponding to that
2520    half, and the address of the appropriate half of BUFFER.
2521
2522    For example, passing 'regcache_raw_read' as the MOVE function will
2523    fill BUFFER with the full 64-bit contents of EV_REG.  Or, passing
2524    'regcache_raw_supply' will supply the contents of BUFFER to the
2525    appropriate pair of raw registers in REGCACHE.
2526
2527    You may need to cast away some 'const' qualifiers when passing
2528    MOVE, since this function can't tell at compile-time which of
2529    REGCACHE or BUFFER is acting as the source of the data.  If C had
2530    co-variant type qualifiers, ...  */
2531 static void
2532 e500_move_ev_register (void (*move) (struct regcache *regcache,
2533                                      int regnum, gdb_byte *buf),
2534                        struct regcache *regcache, int ev_reg,
2535                        gdb_byte *buffer)
2536 {
2537   struct gdbarch *arch = get_regcache_arch (regcache);
2538   struct gdbarch_tdep *tdep = gdbarch_tdep (arch); 
2539   int reg_index;
2540   gdb_byte *byte_buffer = buffer;
2541
2542   gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2543
2544   reg_index = ev_reg - tdep->ppc_ev0_regnum;
2545
2546   if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2547     {
2548       move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer);
2549       move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer + 4);
2550     }
2551   else
2552     {
2553       move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer);
2554       move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer + 4);
2555     }
2556 }
2557
2558 static void
2559 e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2560                            int reg_nr, gdb_byte *buffer)
2561 {
2562   e500_move_ev_register (regcache_raw_read, regcache, reg_nr, buffer);
2563 }
2564
2565 static void
2566 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2567                             int reg_nr, const gdb_byte *buffer)
2568 {
2569   e500_move_ev_register ((void (*) (struct regcache *, int, gdb_byte *))
2570                          regcache_raw_write,
2571                          regcache, reg_nr, (gdb_byte *) buffer);
2572 }
2573
2574 /* Read method for DFP pseudo-registers.  */
2575 static void
2576 dfp_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2577                            int reg_nr, gdb_byte *buffer)
2578 {
2579   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2580   int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2581
2582   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2583     {
2584       /* Read two FP registers to form a whole dl register.  */
2585       regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2586                          2 * reg_index, buffer);
2587       regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2588                          2 * reg_index + 1, buffer + 8);
2589     }
2590   else
2591     {
2592       regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2593                          2 * reg_index + 1, buffer + 8);
2594       regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2595                          2 * reg_index, buffer);
2596     }
2597 }
2598
2599 /* Write method for DFP pseudo-registers.  */
2600 static void
2601 dfp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2602                             int reg_nr, const gdb_byte *buffer)
2603 {
2604   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2605   int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2606
2607   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2608     {
2609       /* Write each half of the dl register into a separate
2610       FP register.  */
2611       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2612                           2 * reg_index, buffer);
2613       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2614                           2 * reg_index + 1, buffer + 8);
2615     }
2616   else
2617     {
2618       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2619                           2 * reg_index + 1, buffer + 8);
2620       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2621                           2 * reg_index, buffer);
2622     }
2623 }
2624
2625 /* Read method for POWER7 VSX pseudo-registers.  */
2626 static void
2627 vsx_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2628                            int reg_nr, gdb_byte *buffer)
2629 {
2630   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2631   int reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2632
2633   /* Read the portion that overlaps the VMX registers.  */
2634   if (reg_index > 31)
2635     regcache_raw_read (regcache, tdep->ppc_vr0_regnum +
2636                         reg_index - 32, buffer);
2637   else
2638     /* Read the portion that overlaps the FPR registers.  */
2639     if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2640       {
2641         regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2642                         reg_index, buffer);
2643         regcache_raw_read (regcache, tdep->ppc_vsr0_upper_regnum +
2644                         reg_index, buffer + 8);
2645       }
2646     else
2647       {
2648         regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2649                         reg_index, buffer + 8);
2650         regcache_raw_read (regcache, tdep->ppc_vsr0_upper_regnum +
2651                         reg_index, buffer);
2652       }
2653 }
2654
2655 /* Write method for POWER7 VSX pseudo-registers.  */
2656 static void
2657 vsx_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2658                             int reg_nr, const gdb_byte *buffer)
2659 {
2660   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2661   int reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2662
2663   /* Write the portion that overlaps the VMX registers.  */
2664   if (reg_index > 31)
2665     regcache_raw_write (regcache, tdep->ppc_vr0_regnum +
2666                         reg_index - 32, buffer);
2667   else
2668     /* Write the portion that overlaps the FPR registers.  */
2669     if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2670       {
2671         regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2672                         reg_index, buffer);
2673         regcache_raw_write (regcache, tdep->ppc_vsr0_upper_regnum +
2674                         reg_index, buffer + 8);
2675       }
2676     else
2677       {
2678         regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2679                         reg_index, buffer + 8);
2680         regcache_raw_write (regcache, tdep->ppc_vsr0_upper_regnum +
2681                         reg_index, buffer);
2682       }
2683 }
2684
2685 /* Read method for POWER7 Extended FP pseudo-registers.  */
2686 static void
2687 efpr_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2688                            int reg_nr, gdb_byte *buffer)
2689 {
2690   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2691   int reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2692
2693   /* Read the portion that overlaps the VMX registers.  */
2694   regcache_raw_read (regcache, tdep->ppc_vr0_regnum +
2695                      reg_index, buffer);
2696 }
2697
2698 /* Write method for POWER7 Extended FP pseudo-registers.  */
2699 static void
2700 efpr_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2701                             int reg_nr, const gdb_byte *buffer)
2702 {
2703   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2704   int reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2705
2706   /* Write the portion that overlaps the VMX registers.  */
2707   regcache_raw_write (regcache, tdep->ppc_vr0_regnum +
2708                       reg_index, buffer);
2709 }
2710
2711 static void
2712 rs6000_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2713                              int reg_nr, gdb_byte *buffer)
2714 {
2715   struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2716   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 
2717
2718   gdb_assert (regcache_arch == gdbarch);
2719
2720   if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2721     e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2722   else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2723     dfp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2724   else if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2725     vsx_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2726   else if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2727     efpr_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2728   else
2729     internal_error (__FILE__, __LINE__,
2730                     _("rs6000_pseudo_register_read: "
2731                     "called on unexpected register '%s' (%d)"),
2732                     gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2733 }
2734
2735 static void
2736 rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2737                               struct regcache *regcache,
2738                               int reg_nr, const gdb_byte *buffer)
2739 {
2740   struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2741   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 
2742
2743   gdb_assert (regcache_arch == gdbarch);
2744
2745   if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2746     e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2747   else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2748     dfp_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2749   else if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2750     vsx_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2751   else if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2752     efpr_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2753   else
2754     internal_error (__FILE__, __LINE__,
2755                     _("rs6000_pseudo_register_write: "
2756                     "called on unexpected register '%s' (%d)"),
2757                     gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2758 }
2759
2760 /* Convert a DBX STABS register number to a GDB register number.  */
2761 static int
2762 rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
2763 {
2764   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2765
2766   if (0 <= num && num <= 31)
2767     return tdep->ppc_gp0_regnum + num;
2768   else if (32 <= num && num <= 63)
2769     /* FIXME: jimb/2004-05-05: What should we do when the debug info
2770        specifies registers the architecture doesn't have?  Our
2771        callers don't check the value we return.  */
2772     return tdep->ppc_fp0_regnum + (num - 32);
2773   else if (77 <= num && num <= 108)
2774     return tdep->ppc_vr0_regnum + (num - 77);
2775   else if (1200 <= num && num < 1200 + 32)
2776     return tdep->ppc_ev0_regnum + (num - 1200);
2777   else
2778     switch (num)
2779       {
2780       case 64: 
2781         return tdep->ppc_mq_regnum;
2782       case 65:
2783         return tdep->ppc_lr_regnum;
2784       case 66: 
2785         return tdep->ppc_ctr_regnum;
2786       case 76: 
2787         return tdep->ppc_xer_regnum;
2788       case 109:
2789         return tdep->ppc_vrsave_regnum;
2790       case 110:
2791         return tdep->ppc_vrsave_regnum - 1; /* vscr */
2792       case 111:
2793         return tdep->ppc_acc_regnum;
2794       case 112:
2795         return tdep->ppc_spefscr_regnum;
2796       default: 
2797         return num;
2798       }
2799 }
2800
2801
2802 /* Convert a Dwarf 2 register number to a GDB register number.  */
2803 static int
2804 rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
2805 {
2806   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2807
2808   if (0 <= num && num <= 31)
2809     return tdep->ppc_gp0_regnum + num;
2810   else if (32 <= num && num <= 63)
2811     /* FIXME: jimb/2004-05-05: What should we do when the debug info
2812        specifies registers the architecture doesn't have?  Our
2813        callers don't check the value we return.  */
2814     return tdep->ppc_fp0_regnum + (num - 32);
2815   else if (1124 <= num && num < 1124 + 32)
2816     return tdep->ppc_vr0_regnum + (num - 1124);
2817   else if (1200 <= num && num < 1200 + 32)
2818     return tdep->ppc_ev0_regnum + (num - 1200);
2819   else
2820     switch (num)
2821       {
2822       case 64:
2823         return tdep->ppc_cr_regnum;
2824       case 67:
2825         return tdep->ppc_vrsave_regnum - 1; /* vscr */
2826       case 99:
2827         return tdep->ppc_acc_regnum;
2828       case 100:
2829         return tdep->ppc_mq_regnum;
2830       case 101:
2831         return tdep->ppc_xer_regnum;
2832       case 108:
2833         return tdep->ppc_lr_regnum;
2834       case 109:
2835         return tdep->ppc_ctr_regnum;
2836       case 356:
2837         return tdep->ppc_vrsave_regnum;
2838       case 612:
2839         return tdep->ppc_spefscr_regnum;
2840       default:
2841         return num;
2842       }
2843 }
2844
2845 /* Translate a .eh_frame register to DWARF register, or adjust a
2846    .debug_frame register.  */
2847
2848 static int
2849 rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
2850 {
2851   /* GCC releases before 3.4 use GCC internal register numbering in
2852      .debug_frame (and .debug_info, et cetera).  The numbering is
2853      different from the standard SysV numbering for everything except
2854      for GPRs and FPRs.  We can not detect this problem in most cases
2855      - to get accurate debug info for variables living in lr, ctr, v0,
2856      et cetera, use a newer version of GCC.  But we must detect
2857      one important case - lr is in column 65 in .debug_frame output,
2858      instead of 108.
2859
2860      GCC 3.4, and the "hammer" branch, have a related problem.  They
2861      record lr register saves in .debug_frame as 108, but still record
2862      the return column as 65.  We fix that up too.
2863
2864      We can do this because 65 is assigned to fpsr, and GCC never
2865      generates debug info referring to it.  To add support for
2866      handwritten debug info that restores fpsr, we would need to add a
2867      producer version check to this.  */
2868   if (!eh_frame_p)
2869     {
2870       if (num == 65)
2871         return 108;
2872       else
2873         return num;
2874     }
2875
2876   /* .eh_frame is GCC specific.  For binary compatibility, it uses GCC
2877      internal register numbering; translate that to the standard DWARF2
2878      register numbering.  */
2879   if (0 <= num && num <= 63)    /* r0-r31,fp0-fp31 */
2880     return num;
2881   else if (68 <= num && num <= 75) /* cr0-cr8 */
2882     return num - 68 + 86;
2883   else if (77 <= num && num <= 108) /* vr0-vr31 */
2884     return num - 77 + 1124;
2885   else
2886     switch (num)
2887       {
2888       case 64: /* mq */
2889         return 100;
2890       case 65: /* lr */
2891         return 108;
2892       case 66: /* ctr */
2893         return 109;
2894       case 76: /* xer */
2895         return 101;
2896       case 109: /* vrsave */
2897         return 356;
2898       case 110: /* vscr */
2899         return 67;
2900       case 111: /* spe_acc */
2901         return 99;
2902       case 112: /* spefscr */
2903         return 612;
2904       default:
2905         return num;
2906       }
2907 }
2908 \f
2909
2910 /* Handling the various POWER/PowerPC variants.  */
2911
2912 /* Information about a particular processor variant.  */
2913
2914 struct variant
2915   {
2916     /* Name of this variant.  */
2917     char *name;
2918
2919     /* English description of the variant.  */
2920     char *description;
2921
2922     /* bfd_arch_info.arch corresponding to variant.  */
2923     enum bfd_architecture arch;
2924
2925     /* bfd_arch_info.mach corresponding to variant.  */
2926     unsigned long mach;
2927
2928     /* Target description for this variant.  */
2929     struct target_desc **tdesc;
2930   };
2931
2932 static struct variant variants[] =
2933 {
2934   {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
2935    bfd_mach_ppc, &tdesc_powerpc_altivec32},
2936   {"power", "POWER user-level", bfd_arch_rs6000,
2937    bfd_mach_rs6k, &tdesc_rs6000},
2938   {"403", "IBM PowerPC 403", bfd_arch_powerpc,
2939    bfd_mach_ppc_403, &tdesc_powerpc_403},
2940   {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
2941    bfd_mach_ppc_601, &tdesc_powerpc_601},
2942   {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
2943    bfd_mach_ppc_602, &tdesc_powerpc_602},
2944   {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
2945    bfd_mach_ppc_603, &tdesc_powerpc_603},
2946   {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
2947    604, &tdesc_powerpc_604},
2948   {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
2949    bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
2950   {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
2951    bfd_mach_ppc_505, &tdesc_powerpc_505},
2952   {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
2953    bfd_mach_ppc_860, &tdesc_powerpc_860},
2954   {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
2955    bfd_mach_ppc_750, &tdesc_powerpc_750},
2956   {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2957    bfd_mach_ppc_7400, &tdesc_powerpc_7400},
2958   {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
2959    bfd_mach_ppc_e500, &tdesc_powerpc_e500},
2960
2961   /* 64-bit */
2962   {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2963    bfd_mach_ppc64, &tdesc_powerpc_altivec64},
2964   {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2965    bfd_mach_ppc_620, &tdesc_powerpc_64},
2966   {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2967    bfd_mach_ppc_630, &tdesc_powerpc_64},
2968   {"a35", "PowerPC A35", bfd_arch_powerpc,
2969    bfd_mach_ppc_a35, &tdesc_powerpc_64},
2970   {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
2971    bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
2972   {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
2973    bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
2974
2975   /* FIXME: I haven't checked the register sets of the following.  */
2976   {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
2977    bfd_mach_rs6k_rs1, &tdesc_rs6000},
2978   {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
2979    bfd_mach_rs6k_rsc, &tdesc_rs6000},
2980   {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
2981    bfd_mach_rs6k_rs2, &tdesc_rs6000},
2982
2983   {0, 0, 0, 0, 0}
2984 };
2985
2986 /* Return the variant corresponding to architecture ARCH and machine number
2987    MACH.  If no such variant exists, return null.  */
2988
2989 static const struct variant *
2990 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
2991 {
2992   const struct variant *v;
2993
2994   for (v = variants; v->name; v++)
2995     if (arch == v->arch && mach == v->mach)
2996       return v;
2997
2998   return NULL;
2999 }
3000
3001 static int
3002 gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
3003 {
3004   if (!info->disassembler_options)
3005     info->disassembler_options = "any";
3006
3007   if (info->endian == BFD_ENDIAN_BIG)
3008     return print_insn_big_powerpc (memaddr, info);
3009   else
3010     return print_insn_little_powerpc (memaddr, info);
3011 }
3012 \f
3013 static CORE_ADDR
3014 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3015 {
3016   return frame_unwind_register_unsigned (next_frame,
3017                                          gdbarch_pc_regnum (gdbarch));
3018 }
3019
3020 static struct frame_id
3021 rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3022 {
3023   return frame_id_build (get_frame_register_unsigned
3024                           (this_frame, gdbarch_sp_regnum (gdbarch)),
3025                          get_frame_pc (this_frame));
3026 }
3027
3028 struct rs6000_frame_cache
3029 {
3030   CORE_ADDR base;
3031   CORE_ADDR initial_sp;
3032   struct trad_frame_saved_reg *saved_regs;
3033 };
3034
3035 static struct rs6000_frame_cache *
3036 rs6000_frame_cache (struct frame_info *this_frame, void **this_cache)
3037 {
3038   struct rs6000_frame_cache *cache;
3039   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3040   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3041   struct rs6000_framedata fdata;
3042   int wordsize = tdep->wordsize;
3043   CORE_ADDR func, pc;
3044
3045   if ((*this_cache) != NULL)
3046     return (*this_cache);
3047   cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3048   (*this_cache) = cache;
3049   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3050
3051   func = get_frame_func (this_frame);
3052   pc = get_frame_pc (this_frame);
3053   skip_prologue (gdbarch, func, pc, &fdata);
3054
3055   /* Figure out the parent's stack pointer.  */
3056
3057   /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
3058      address of the current frame.  Things might be easier if the
3059      ->frame pointed to the outer-most address of the frame.  In
3060      the mean time, the address of the prev frame is used as the
3061      base address of this frame.  */
3062   cache->base = get_frame_register_unsigned
3063                 (this_frame, gdbarch_sp_regnum (gdbarch));
3064
3065   /* If the function appears to be frameless, check a couple of likely
3066      indicators that we have simply failed to find the frame setup.
3067      Two common cases of this are missing symbols (i.e.
3068      get_frame_func returns the wrong address or 0), and assembly
3069      stubs which have a fast exit path but set up a frame on the slow
3070      path.
3071
3072      If the LR appears to return to this function, then presume that
3073      we have an ABI compliant frame that we failed to find.  */
3074   if (fdata.frameless && fdata.lr_offset == 0)
3075     {
3076       CORE_ADDR saved_lr;
3077       int make_frame = 0;
3078
3079       saved_lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3080       if (func == 0 && saved_lr == pc)
3081         make_frame = 1;
3082       else if (func != 0)
3083         {
3084           CORE_ADDR saved_func = get_pc_function_start (saved_lr);
3085           if (func == saved_func)
3086             make_frame = 1;
3087         }
3088
3089       if (make_frame)
3090         {
3091           fdata.frameless = 0;
3092           fdata.lr_offset = tdep->lr_frame_offset;
3093         }
3094     }
3095
3096   if (!fdata.frameless)
3097     /* Frameless really means stackless.  */
3098     cache->base = read_memory_unsigned_integer (cache->base, wordsize);
3099
3100   trad_frame_set_value (cache->saved_regs,
3101                         gdbarch_sp_regnum (gdbarch), cache->base);
3102
3103   /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3104      All fpr's from saved_fpr to fp31 are saved.  */
3105
3106   if (fdata.saved_fpr >= 0)
3107     {
3108       int i;
3109       CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
3110
3111       /* If skip_prologue says floating-point registers were saved,
3112          but the current architecture has no floating-point registers,
3113          then that's strange.  But we have no indices to even record
3114          the addresses under, so we just ignore it.  */
3115       if (ppc_floating_point_unit_p (gdbarch))
3116         for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
3117           {
3118             cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3119             fpr_addr += 8;
3120           }
3121     }
3122
3123   /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3124      All gpr's from saved_gpr to gpr31 are saved (except during the
3125      prologue).  */
3126
3127   if (fdata.saved_gpr >= 0)
3128     {
3129       int i;
3130       CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
3131       for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
3132         {
3133           if (fdata.gpr_mask & (1U << i))
3134             cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
3135           gpr_addr += wordsize;
3136         }
3137     }
3138
3139   /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3140      All vr's from saved_vr to vr31 are saved.  */
3141   if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
3142     {
3143       if (fdata.saved_vr >= 0)
3144         {
3145           int i;
3146           CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
3147           for (i = fdata.saved_vr; i < 32; i++)
3148             {
3149               cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
3150               vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
3151             }
3152         }
3153     }
3154
3155   /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3156      All vr's from saved_ev to ev31 are saved. ????? */
3157   if (tdep->ppc_ev0_regnum != -1)
3158     {
3159       if (fdata.saved_ev >= 0)
3160         {
3161           int i;
3162           CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
3163           for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
3164             {
3165               cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
3166               cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4;
3167               ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
3168             }
3169         }
3170     }
3171
3172   /* If != 0, fdata.cr_offset is the offset from the frame that
3173      holds the CR.  */
3174   if (fdata.cr_offset != 0)
3175     cache->saved_regs[tdep->ppc_cr_regnum].addr = cache->base + fdata.cr_offset;
3176
3177   /* If != 0, fdata.lr_offset is the offset from the frame that
3178      holds the LR.  */
3179   if (fdata.lr_offset != 0)
3180     cache->saved_regs[tdep->ppc_lr_regnum].addr = cache->base + fdata.lr_offset;
3181   else if (fdata.lr_register != -1)
3182     cache->saved_regs[tdep->ppc_lr_regnum].realreg = fdata.lr_register;
3183   /* The PC is found in the link register.  */
3184   cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3185     cache->saved_regs[tdep->ppc_lr_regnum];
3186
3187   /* If != 0, fdata.vrsave_offset is the offset from the frame that
3188      holds the VRSAVE.  */
3189   if (fdata.vrsave_offset != 0)
3190     cache->saved_regs[tdep->ppc_vrsave_regnum].addr = cache->base + fdata.vrsave_offset;
3191
3192   if (fdata.alloca_reg < 0)
3193     /* If no alloca register used, then fi->frame is the value of the
3194        %sp for this frame, and it is good enough.  */
3195     cache->initial_sp
3196       = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3197   else
3198     cache->initial_sp
3199       = get_frame_register_unsigned (this_frame, fdata.alloca_reg);
3200
3201   return cache;
3202 }
3203
3204 static void
3205 rs6000_frame_this_id (struct frame_info *this_frame, void **this_cache,
3206                       struct frame_id *this_id)
3207 {
3208   struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3209                                                         this_cache);
3210   /* This marks the outermost frame.  */
3211   if (info->base == 0)
3212     return;
3213
3214   (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3215 }
3216
3217 static struct value *
3218 rs6000_frame_prev_register (struct frame_info *this_frame,
3219                             void **this_cache, int regnum)
3220 {
3221   struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3222                                                         this_cache);
3223   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3224 }
3225
3226 static const struct frame_unwind rs6000_frame_unwind =
3227 {
3228   NORMAL_FRAME,
3229   rs6000_frame_this_id,
3230   rs6000_frame_prev_register,
3231   NULL,
3232   default_frame_sniffer
3233 };
3234 \f
3235
3236 static CORE_ADDR
3237 rs6000_frame_base_address (struct frame_info *this_frame, void **this_cache)
3238 {
3239   struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3240                                                         this_cache);
3241   return info->initial_sp;
3242 }
3243
3244 static const struct frame_base rs6000_frame_base = {
3245   &rs6000_frame_unwind,
3246   rs6000_frame_base_address,
3247   rs6000_frame_base_address,
3248   rs6000_frame_base_address
3249 };
3250
3251 static const struct frame_base *
3252 rs6000_frame_base_sniffer (struct frame_info *this_frame)
3253 {
3254   return &rs6000_frame_base;
3255 }
3256
3257 /* DWARF-2 frame support.  Used to handle the detection of
3258   clobbered registers during function calls.  */
3259
3260 static void
3261 ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3262                             struct dwarf2_frame_state_reg *reg,
3263                             struct frame_info *this_frame)
3264 {
3265   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3266
3267   /* PPC32 and PPC64 ABI's are the same regarding volatile and
3268      non-volatile registers.  We will use the same code for both.  */
3269
3270   /* Call-saved GP registers.  */
3271   if ((regnum >= tdep->ppc_gp0_regnum + 14
3272       && regnum <= tdep->ppc_gp0_regnum + 31)
3273       || (regnum == tdep->ppc_gp0_regnum + 1))
3274     reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3275
3276   /* Call-clobbered GP registers.  */
3277   if ((regnum >= tdep->ppc_gp0_regnum + 3
3278       && regnum <= tdep->ppc_gp0_regnum + 12)
3279       || (regnum == tdep->ppc_gp0_regnum))
3280     reg->how = DWARF2_FRAME_REG_UNDEFINED;
3281
3282   /* Deal with FP registers, if supported.  */
3283   if (tdep->ppc_fp0_regnum >= 0)
3284     {
3285       /* Call-saved FP registers.  */
3286       if ((regnum >= tdep->ppc_fp0_regnum + 14
3287           && regnum <= tdep->ppc_fp0_regnum + 31))
3288         reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3289
3290       /* Call-clobbered FP registers.  */
3291       if ((regnum >= tdep->ppc_fp0_regnum
3292           && regnum <= tdep->ppc_fp0_regnum + 13))
3293         reg->how = DWARF2_FRAME_REG_UNDEFINED;
3294     }
3295
3296   /* Deal with ALTIVEC registers, if supported.  */
3297   if (tdep->ppc_vr0_regnum > 0 && tdep->ppc_vrsave_regnum > 0)
3298     {
3299       /* Call-saved Altivec registers.  */
3300       if ((regnum >= tdep->ppc_vr0_regnum + 20
3301           && regnum <= tdep->ppc_vr0_regnum + 31)
3302           || regnum == tdep->ppc_vrsave_regnum)
3303         reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3304
3305       /* Call-clobbered Altivec registers.  */
3306       if ((regnum >= tdep->ppc_vr0_regnum
3307           && regnum <= tdep->ppc_vr0_regnum + 19))
3308         reg->how = DWARF2_FRAME_REG_UNDEFINED;
3309     }
3310
3311   /* Handle PC register and Stack Pointer correctly.  */
3312   if (regnum == gdbarch_pc_regnum (gdbarch))
3313     reg->how = DWARF2_FRAME_REG_RA;
3314   else if (regnum == gdbarch_sp_regnum (gdbarch))
3315     reg->how = DWARF2_FRAME_REG_CFA;
3316 }
3317
3318
3319 /* Initialize the current architecture based on INFO.  If possible, re-use an
3320    architecture from ARCHES, which is a list of architectures already created
3321    during this debugging session.
3322
3323    Called e.g. at program startup, when reading a core file, and when reading
3324    a binary file.  */
3325
3326 static struct gdbarch *
3327 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3328 {
3329   struct gdbarch *gdbarch;
3330   struct gdbarch_tdep *tdep;
3331   int wordsize, from_xcoff_exec, from_elf_exec;
3332   enum bfd_architecture arch;
3333   unsigned long mach;
3334   bfd abfd;
3335   asection *sect;
3336   enum auto_boolean soft_float_flag = powerpc_soft_float_global;
3337   int soft_float;
3338   enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
3339   int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0,
3340       have_vsx = 0;
3341   int tdesc_wordsize = -1;
3342   const struct target_desc *tdesc = info.target_desc;
3343   struct tdesc_arch_data *tdesc_data = NULL;
3344   int num_pseudoregs = 0;
3345   int cur_reg;
3346
3347   from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
3348     bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
3349
3350   from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
3351     bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
3352
3353   /* Check word size.  If INFO is from a binary file, infer it from
3354      that, else choose a likely default.  */
3355   if (from_xcoff_exec)
3356     {
3357       if (bfd_xcoff_is_xcoff64 (info.abfd))
3358         wordsize = 8;
3359       else
3360         wordsize = 4;
3361     }
3362   else if (from_elf_exec)
3363     {
3364       if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
3365         wordsize = 8;
3366       else
3367         wordsize = 4;
3368     }
3369   else if (tdesc_has_registers (tdesc))
3370     wordsize = -1;
3371   else
3372     {
3373       if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
3374         wordsize = info.bfd_arch_info->bits_per_word /
3375           info.bfd_arch_info->bits_per_byte;
3376       else
3377         wordsize = 4;
3378     }
3379
3380   /* Get the architecture and machine from the BFD.  */
3381   arch = info.bfd_arch_info->arch;
3382   mach = info.bfd_arch_info->mach;
3383
3384   /* For e500 executables, the apuinfo section is of help here.  Such
3385      section contains the identifier and revision number of each
3386      Application-specific Processing Unit that is present on the
3387      chip.  The content of the section is determined by the assembler
3388      which looks at each instruction and determines which unit (and
3389      which version of it) can execute it. In our case we just look for
3390      the existance of the section.  */
3391
3392   if (info.abfd)
3393     {
3394       sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo");
3395       if (sect)
3396         {
3397           arch = info.bfd_arch_info->arch;
3398           mach = bfd_mach_ppc_e500;
3399           bfd_default_set_arch_mach (&abfd, arch, mach);
3400           info.bfd_arch_info = bfd_get_arch_info (&abfd);
3401         }
3402     }
3403
3404   /* Find a default target description which describes our register
3405      layout, if we do not already have one.  */
3406   if (! tdesc_has_registers (tdesc))
3407     {
3408       const struct variant *v;
3409
3410       /* Choose variant.  */
3411       v = find_variant_by_arch (arch, mach);
3412       if (!v)
3413         return NULL;
3414
3415       tdesc = *v->tdesc;
3416     }
3417
3418   gdb_assert (tdesc_has_registers (tdesc));
3419
3420   /* Check any target description for validity.  */
3421   if (tdesc_has_registers (tdesc))
3422     {
3423       static const char *const gprs[] = {
3424         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
3425         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
3426         "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
3427         "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
3428       };
3429       static const char *const segment_regs[] = {
3430         "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
3431         "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
3432       };
3433       const struct tdesc_feature *feature;
3434       int i, valid_p;
3435       static const char *const msr_names[] = { "msr", "ps" };
3436       static const char *const cr_names[] = { "cr", "cnd" };
3437       static const char *const ctr_names[] = { "ctr", "cnt" };
3438
3439       feature = tdesc_find_feature (tdesc,
3440                                     "org.gnu.gdb.power.core");
3441       if (feature == NULL)
3442         return NULL;
3443
3444       tdesc_data = tdesc_data_alloc ();
3445
3446       valid_p = 1;
3447       for (i = 0; i < ppc_num_gprs; i++)
3448         valid_p &= tdesc_numbered_register (feature, tdesc_data, i, gprs[i]);
3449       valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_PC_REGNUM,
3450                                           "pc");
3451       valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_LR_REGNUM,
3452                                           "lr");
3453       valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_XER_REGNUM,
3454                                           "xer");
3455
3456       /* Allow alternate names for these registers, to accomodate GDB's
3457          historic naming.  */
3458       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3459                                                   PPC_MSR_REGNUM, msr_names);
3460       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3461                                                   PPC_CR_REGNUM, cr_names);
3462       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3463                                                   PPC_CTR_REGNUM, ctr_names);
3464
3465       if (!valid_p)
3466         {
3467           tdesc_data_cleanup (tdesc_data);
3468           return NULL;
3469         }
3470
3471       have_mq = tdesc_numbered_register (feature, tdesc_data, PPC_MQ_REGNUM,
3472                                          "mq");
3473
3474       tdesc_wordsize = tdesc_register_size (feature, "pc") / 8;
3475       if (wordsize == -1)
3476         wordsize = tdesc_wordsize;
3477
3478       feature = tdesc_find_feature (tdesc,
3479                                     "org.gnu.gdb.power.fpu");
3480       if (feature != NULL)
3481         {
3482           static const char *const fprs[] = {
3483             "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
3484             "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
3485             "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
3486             "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
3487           };
3488           valid_p = 1;
3489           for (i = 0; i < ppc_num_fprs; i++)
3490             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3491                                                 PPC_F0_REGNUM + i, fprs[i]);
3492           valid_p &= tdesc_numbered_register (feature, tdesc_data,
3493                                               PPC_FPSCR_REGNUM, "fpscr");
3494
3495           if (!valid_p)
3496             {
3497               tdesc_data_cleanup (tdesc_data);
3498               return NULL;
3499             }
3500           have_fpu = 1;
3501         }
3502       else
3503         have_fpu = 0;
3504
3505       /* The DFP pseudo-registers will be available when there are floating
3506          point registers.  */
3507       have_dfp = have_fpu;
3508
3509       feature = tdesc_find_feature (tdesc,
3510                                     "org.gnu.gdb.power.altivec");
3511       if (feature != NULL)
3512         {
3513           static const char *const vector_regs[] = {
3514             "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
3515             "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
3516             "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
3517             "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
3518           };
3519
3520           valid_p = 1;
3521           for (i = 0; i < ppc_num_gprs; i++)
3522             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3523                                                 PPC_VR0_REGNUM + i,
3524                                                 vector_regs[i]);
3525           valid_p &= tdesc_numbered_register (feature, tdesc_data,
3526                                               PPC_VSCR_REGNUM, "vscr");
3527           valid_p &= tdesc_numbered_register (feature, tdesc_data,
3528                                               PPC_VRSAVE_REGNUM, "vrsave");
3529
3530           if (have_spe || !valid_p)
3531             {
3532               tdesc_data_cleanup (tdesc_data);
3533               return NULL;
3534             }
3535           have_altivec = 1;
3536         }
3537       else
3538         have_altivec = 0;
3539
3540       /* Check for POWER7 VSX registers support.  */
3541       feature = tdesc_find_feature (tdesc,
3542                                     "org.gnu.gdb.power.vsx");
3543
3544       if (feature != NULL)
3545         {
3546           static const char *const vsx_regs[] = {
3547             "vs0h", "vs1h", "vs2h", "vs3h", "vs4h", "vs5h",
3548             "vs6h", "vs7h", "vs8h", "vs9h", "vs10h", "vs11h",
3549             "vs12h", "vs13h", "vs14h", "vs15h", "vs16h", "vs17h",
3550             "vs18h", "vs19h", "vs20h", "vs21h", "vs22h", "vs23h",
3551             "vs24h", "vs25h", "vs26h", "vs27h", "vs28h", "vs29h",
3552             "vs30h", "vs31h"
3553           };
3554
3555           valid_p = 1;
3556
3557           for (i = 0; i < ppc_num_vshrs; i++)
3558             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3559                                                 PPC_VSR0_UPPER_REGNUM + i,
3560                                                 vsx_regs[i]);
3561           if (!valid_p)
3562             {
3563               tdesc_data_cleanup (tdesc_data);
3564               return NULL;
3565             }
3566
3567           have_vsx = 1;
3568         }
3569       else
3570         have_vsx = 0;
3571
3572       /* On machines supporting the SPE APU, the general-purpose registers
3573          are 64 bits long.  There are SIMD vector instructions to treat them
3574          as pairs of floats, but the rest of the instruction set treats them
3575          as 32-bit registers, and only operates on their lower halves.
3576
3577          In the GDB regcache, we treat their high and low halves as separate
3578          registers.  The low halves we present as the general-purpose
3579          registers, and then we have pseudo-registers that stitch together
3580          the upper and lower halves and present them as pseudo-registers.
3581
3582          Thus, the target description is expected to supply the upper
3583          halves separately.  */
3584
3585       feature = tdesc_find_feature (tdesc,
3586                                     "org.gnu.gdb.power.spe");
3587       if (feature != NULL)
3588         {
3589           static const char *const upper_spe[] = {
3590             "ev0h", "ev1h", "ev2h", "ev3h",
3591             "ev4h", "ev5h", "ev6h", "ev7h",
3592             "ev8h", "ev9h", "ev10h", "ev11h",
3593             "ev12h", "ev13h", "ev14h", "ev15h",
3594             "ev16h", "ev17h", "ev18h", "ev19h",
3595             "ev20h", "ev21h", "ev22h", "ev23h",
3596             "ev24h", "ev25h", "ev26h", "ev27h",
3597             "ev28h", "ev29h", "ev30h", "ev31h"
3598           };
3599
3600           valid_p = 1;
3601           for (i = 0; i < ppc_num_gprs; i++)
3602             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3603                                                 PPC_SPE_UPPER_GP0_REGNUM + i,
3604                                                 upper_spe[i]);
3605           valid_p &= tdesc_numbered_register (feature, tdesc_data,
3606                                               PPC_SPE_ACC_REGNUM, "acc");
3607           valid_p &= tdesc_numbered_register (feature, tdesc_data,
3608                                               PPC_SPE_FSCR_REGNUM, "spefscr");
3609
3610           if (have_mq || have_fpu || !valid_p)
3611             {
3612               tdesc_data_cleanup (tdesc_data);
3613               return NULL;
3614             }
3615           have_spe = 1;
3616         }
3617       else
3618         have_spe = 0;
3619     }
3620
3621   /* If we have a 64-bit binary on a 32-bit target, complain.  Also
3622      complain for a 32-bit binary on a 64-bit target; we do not yet
3623      support that.  For instance, the 32-bit ABI routines expect
3624      32-bit GPRs.
3625
3626      As long as there isn't an explicit target description, we'll
3627      choose one based on the BFD architecture and get a word size
3628      matching the binary (probably powerpc:common or
3629      powerpc:common64).  So there is only trouble if a 64-bit target
3630      supplies a 64-bit description while debugging a 32-bit
3631      binary.  */
3632   if (tdesc_wordsize != -1 && tdesc_wordsize != wordsize)
3633     {
3634       tdesc_data_cleanup (tdesc_data);
3635       return NULL;
3636     }
3637
3638 #ifdef HAVE_ELF
3639   if (soft_float_flag == AUTO_BOOLEAN_AUTO && from_elf_exec)
3640     {
3641       switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
3642                                         Tag_GNU_Power_ABI_FP))
3643         {
3644         case 1:
3645           soft_float_flag = AUTO_BOOLEAN_FALSE;
3646           break;
3647         case 2:
3648           soft_float_flag = AUTO_BOOLEAN_TRUE;
3649           break;
3650         default:
3651           break;
3652         }
3653     }
3654
3655   if (vector_abi == POWERPC_VEC_AUTO && from_elf_exec)
3656     {
3657       switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
3658                                         Tag_GNU_Power_ABI_Vector))
3659         {
3660         case 1:
3661           vector_abi = POWERPC_VEC_GENERIC;
3662           break;
3663         case 2:
3664           vector_abi = POWERPC_VEC_ALTIVEC;
3665           break;
3666         case 3:
3667           vector_abi = POWERPC_VEC_SPE;
3668           break;
3669         default:
3670           break;
3671         }
3672     }
3673 #endif
3674
3675   if (soft_float_flag == AUTO_BOOLEAN_TRUE)
3676     soft_float = 1;
3677   else if (soft_float_flag == AUTO_BOOLEAN_FALSE)
3678     soft_float = 0;
3679   else
3680     soft_float = !have_fpu;
3681
3682   /* If we have a hard float binary or setting but no floating point
3683      registers, downgrade to soft float anyway.  We're still somewhat
3684      useful in this scenario.  */
3685   if (!soft_float && !have_fpu)
3686     soft_float = 1;
3687
3688   /* Similarly for vector registers.  */
3689   if (vector_abi == POWERPC_VEC_ALTIVEC && !have_altivec)
3690     vector_abi = POWERPC_VEC_GENERIC;
3691
3692   if (vector_abi == POWERPC_VEC_SPE && !have_spe)
3693     vector_abi = POWERPC_VEC_GENERIC;
3694
3695   if (vector_abi == POWERPC_VEC_AUTO)
3696     {
3697       if (have_altivec)
3698         vector_abi = POWERPC_VEC_ALTIVEC;
3699       else if (have_spe)
3700         vector_abi = POWERPC_VEC_SPE;
3701       else
3702         vector_abi = POWERPC_VEC_GENERIC;
3703     }
3704
3705   /* Do not limit the vector ABI based on available hardware, since we
3706      do not yet know what hardware we'll decide we have.  Yuck!  FIXME!  */
3707
3708   /* Find a candidate among extant architectures.  */
3709   for (arches = gdbarch_list_lookup_by_info (arches, &info);
3710        arches != NULL;
3711        arches = gdbarch_list_lookup_by_info (arches->next, &info))
3712     {
3713       /* Word size in the various PowerPC bfd_arch_info structs isn't
3714          meaningful, because 64-bit CPUs can run in 32-bit mode.  So, perform
3715          separate word size check.  */
3716       tdep = gdbarch_tdep (arches->gdbarch);
3717       if (tdep && tdep->soft_float != soft_float)
3718         continue;
3719       if (tdep && tdep->vector_abi != vector_abi)
3720         continue;
3721       if (tdep && tdep->wordsize == wordsize)
3722         {
3723           if (tdesc_data != NULL)
3724             tdesc_data_cleanup (tdesc_data);
3725           return arches->gdbarch;
3726         }
3727     }
3728
3729   /* None found, create a new architecture from INFO, whose bfd_arch_info
3730      validity depends on the source:
3731        - executable             useless
3732        - rs6000_host_arch()     good
3733        - core file              good
3734        - "set arch"             trust blindly
3735        - GDB startup            useless but harmless */
3736
3737   tdep = XCALLOC (1, struct gdbarch_tdep);
3738   tdep->wordsize = wordsize;
3739   tdep->soft_float = soft_float;
3740   tdep->vector_abi = vector_abi;
3741
3742   gdbarch = gdbarch_alloc (&info, tdep);
3743
3744   tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
3745   tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
3746   tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
3747   tdep->ppc_cr_regnum = PPC_CR_REGNUM;
3748   tdep->ppc_lr_regnum = PPC_LR_REGNUM;
3749   tdep->ppc_ctr_regnum = PPC_CTR_REGNUM;
3750   tdep->ppc_xer_regnum = PPC_XER_REGNUM;
3751   tdep->ppc_mq_regnum = have_mq ? PPC_MQ_REGNUM : -1;
3752
3753   tdep->ppc_fp0_regnum = have_fpu ? PPC_F0_REGNUM : -1;
3754   tdep->ppc_fpscr_regnum = have_fpu ? PPC_FPSCR_REGNUM : -1;
3755   tdep->ppc_vsr0_upper_regnum = have_vsx ? PPC_VSR0_UPPER_REGNUM : -1;
3756   tdep->ppc_vr0_regnum = have_altivec ? PPC_VR0_REGNUM : -1;
3757   tdep->ppc_vrsave_regnum = have_altivec ? PPC_VRSAVE_REGNUM : -1;
3758   tdep->ppc_ev0_upper_regnum = have_spe ? PPC_SPE_UPPER_GP0_REGNUM : -1;
3759   tdep->ppc_acc_regnum = have_spe ? PPC_SPE_ACC_REGNUM : -1;
3760   tdep->ppc_spefscr_regnum = have_spe ? PPC_SPE_FSCR_REGNUM : -1;
3761
3762   set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
3763   set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
3764   set_gdbarch_deprecated_fp_regnum (gdbarch, PPC_R0_REGNUM + 1);
3765   set_gdbarch_fp0_regnum (gdbarch, tdep->ppc_fp0_regnum);
3766   set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
3767
3768   /* The XML specification for PowerPC sensibly calls the MSR "msr".
3769      GDB traditionally called it "ps", though, so let GDB add an
3770      alias.  */
3771   set_gdbarch_ps_regnum (gdbarch, tdep->ppc_ps_regnum);
3772
3773   if (wordsize == 8)
3774     set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
3775   else
3776     set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
3777
3778   /* Set lr_frame_offset.  */
3779   if (wordsize == 8)
3780     tdep->lr_frame_offset = 16;
3781   else
3782     tdep->lr_frame_offset = 4;
3783
3784   if (have_spe || have_dfp || have_vsx)
3785     {
3786       set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
3787       set_gdbarch_pseudo_register_write (gdbarch, rs6000_pseudo_register_write);
3788     }
3789
3790   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3791
3792   /* Select instruction printer.  */
3793   if (arch == bfd_arch_rs6000)
3794     set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
3795   else
3796     set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
3797
3798   set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
3799
3800   if (have_spe)
3801     num_pseudoregs += 32;
3802   if (have_dfp)
3803     num_pseudoregs += 16;
3804   if (have_vsx)
3805     /* Include both VSX and Extended FP registers.  */
3806     num_pseudoregs += 96;
3807
3808   set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
3809
3810   set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3811   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
3812   set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3813   set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3814   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3815   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3816   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3817   set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
3818   set_gdbarch_char_signed (gdbarch, 0);
3819
3820   set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
3821   if (wordsize == 8)
3822     /* PPC64 SYSV.  */
3823     set_gdbarch_frame_red_zone_size (gdbarch, 288);
3824
3825   set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
3826   set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
3827   set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
3828
3829   set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
3830   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
3831
3832   if (wordsize == 4)
3833     set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
3834   else if (wordsize == 8)
3835     set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
3836
3837   set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
3838   set_gdbarch_in_function_epilogue_p (gdbarch, rs6000_in_function_epilogue_p);
3839   set_gdbarch_skip_main_prologue (gdbarch, rs6000_skip_main_prologue);
3840
3841   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3842   set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
3843
3844   /* The value of symbols of type N_SO and N_FUN maybe null when
3845      it shouldn't be. */
3846   set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
3847
3848   /* Handles single stepping of atomic sequences.  */
3849   set_gdbarch_software_single_step (gdbarch, ppc_deal_with_atomic_sequence);
3850   
3851   /* Not sure on this. FIXMEmgo */
3852   set_gdbarch_frame_args_skip (gdbarch, 8);
3853
3854   /* Helpers for function argument information.  */
3855   set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
3856
3857   /* Trampoline.  */
3858   set_gdbarch_in_solib_return_trampoline
3859     (gdbarch, rs6000_in_solib_return_trampoline);
3860   set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
3861
3862   /* Hook in the DWARF CFI frame unwinder.  */
3863   dwarf2_append_unwinders (gdbarch);
3864   dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
3865
3866   /* Frame handling.  */
3867   dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
3868
3869   /* Setup displaced stepping.  */
3870   set_gdbarch_displaced_step_copy_insn (gdbarch,
3871                                         simple_displaced_step_copy_insn);
3872   set_gdbarch_displaced_step_fixup (gdbarch, ppc_displaced_step_fixup);
3873   set_gdbarch_displaced_step_free_closure (gdbarch,
3874                                            simple_displaced_step_free_closure);
3875   set_gdbarch_displaced_step_location (gdbarch,
3876                                        displaced_step_at_entry_point);
3877
3878   set_gdbarch_max_insn_length (gdbarch, PPC_INSN_SIZE);
3879
3880   /* Hook in ABI-specific overrides, if they have been registered.  */
3881   info.target_desc = tdesc;
3882   info.tdep_info = (void *) tdesc_data;
3883   gdbarch_init_osabi (info, gdbarch);
3884
3885   switch (info.osabi)
3886     {
3887     case GDB_OSABI_LINUX:
3888     case GDB_OSABI_NETBSD_AOUT:
3889     case GDB_OSABI_NETBSD_ELF:
3890     case GDB_OSABI_UNKNOWN:
3891       set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3892       frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
3893       set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
3894       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3895       break;
3896     default:
3897       set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3898
3899       set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3900       frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
3901       set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
3902       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3903     }
3904
3905   set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
3906   set_tdesc_pseudo_register_reggroup_p (gdbarch,
3907                                         rs6000_pseudo_register_reggroup_p);
3908   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3909
3910   /* Override the normal target description method to make the SPE upper
3911      halves anonymous.  */
3912   set_gdbarch_register_name (gdbarch, rs6000_register_name);
3913
3914   /* Choose register numbers for all supported pseudo-registers.  */
3915   tdep->ppc_ev0_regnum = -1;
3916   tdep->ppc_dl0_regnum = -1;
3917   tdep->ppc_vsr0_regnum = -1;
3918   tdep->ppc_efpr0_regnum = -1;
3919
3920   cur_reg = gdbarch_num_regs (gdbarch);
3921
3922   if (have_spe)
3923     {
3924       tdep->ppc_ev0_regnum = cur_reg;
3925       cur_reg += 32;
3926     }
3927   if (have_dfp)
3928     {
3929       tdep->ppc_dl0_regnum = cur_reg;
3930       cur_reg += 16;
3931     }
3932   if (have_vsx)
3933     {
3934       tdep->ppc_vsr0_regnum = cur_reg;
3935       cur_reg += 64;
3936       tdep->ppc_efpr0_regnum = cur_reg;
3937       cur_reg += 32;
3938     }
3939
3940   gdb_assert (gdbarch_num_regs (gdbarch)
3941               + gdbarch_num_pseudo_regs (gdbarch) == cur_reg);
3942
3943   return gdbarch;
3944 }
3945
3946 static void
3947 rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3948 {
3949   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3950
3951   if (tdep == NULL)
3952     return;
3953
3954   /* FIXME: Dump gdbarch_tdep.  */
3955 }
3956
3957 /* PowerPC-specific commands.  */
3958
3959 static void
3960 set_powerpc_command (char *args, int from_tty)
3961 {
3962   printf_unfiltered (_("\
3963 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
3964   help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout);
3965 }
3966
3967 static void
3968 show_powerpc_command (char *args, int from_tty)
3969 {
3970   cmd_show_list (showpowerpccmdlist, from_tty, "");
3971 }
3972
3973 static void
3974 powerpc_set_soft_float (char *args, int from_tty,
3975                         struct cmd_list_element *c)
3976 {
3977   struct gdbarch_info info;
3978
3979   /* Update the architecture.  */
3980   gdbarch_info_init (&info);
3981   if (!gdbarch_update_p (info))
3982     internal_error (__FILE__, __LINE__, "could not update architecture");
3983 }
3984
3985 static void
3986 powerpc_set_vector_abi (char *args, int from_tty,
3987                         struct cmd_list_element *c)
3988 {
3989   struct gdbarch_info info;
3990   enum powerpc_vector_abi vector_abi;
3991
3992   for (vector_abi = POWERPC_VEC_AUTO;
3993        vector_abi != POWERPC_VEC_LAST;
3994        vector_abi++)
3995     if (strcmp (powerpc_vector_abi_string,
3996                 powerpc_vector_strings[vector_abi]) == 0)
3997       {
3998         powerpc_vector_abi_global = vector_abi;
3999         break;
4000       }
4001
4002   if (vector_abi == POWERPC_VEC_LAST)
4003     internal_error (__FILE__, __LINE__, _("Invalid vector ABI accepted: %s."),
4004                     powerpc_vector_abi_string);
4005
4006   /* Update the architecture.  */
4007   gdbarch_info_init (&info);
4008   if (!gdbarch_update_p (info))
4009     internal_error (__FILE__, __LINE__, "could not update architecture");
4010 }
4011
4012 /* Initialization code.  */
4013
4014 extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */
4015
4016 void
4017 _initialize_rs6000_tdep (void)
4018 {
4019   gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
4020   gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
4021
4022   /* Initialize the standard target descriptions.  */
4023   initialize_tdesc_powerpc_32 ();
4024   initialize_tdesc_powerpc_altivec32 ();
4025   initialize_tdesc_powerpc_vsx32 ();
4026   initialize_tdesc_powerpc_403 ();
4027   initialize_tdesc_powerpc_403gc ();
4028   initialize_tdesc_powerpc_505 ();
4029   initialize_tdesc_powerpc_601 ();
4030   initialize_tdesc_powerpc_602 ();
4031   initialize_tdesc_powerpc_603 ();
4032   initialize_tdesc_powerpc_604 ();
4033   initialize_tdesc_powerpc_64 ();
4034   initialize_tdesc_powerpc_altivec64 ();
4035   initialize_tdesc_powerpc_vsx64 ();
4036   initialize_tdesc_powerpc_7400 ();
4037   initialize_tdesc_powerpc_750 ();
4038   initialize_tdesc_powerpc_860 ();
4039   initialize_tdesc_powerpc_e500 ();
4040   initialize_tdesc_rs6000 ();
4041
4042   /* Add root prefix command for all "set powerpc"/"show powerpc"
4043      commands.  */
4044   add_prefix_cmd ("powerpc", no_class, set_powerpc_command,
4045                   _("Various PowerPC-specific commands."),
4046                   &setpowerpccmdlist, "set powerpc ", 0, &setlist);
4047
4048   add_prefix_cmd ("powerpc", no_class, show_powerpc_command,
4049                   _("Various PowerPC-specific commands."),
4050                   &showpowerpccmdlist, "show powerpc ", 0, &showlist);
4051
4052   /* Add a command to allow the user to force the ABI.  */
4053   add_setshow_auto_boolean_cmd ("soft-float", class_support,
4054                                 &powerpc_soft_float_global,
4055                                 _("Set whether to use a soft-float ABI."),
4056                                 _("Show whether to use a soft-float ABI."),
4057                                 NULL,
4058                                 powerpc_set_soft_float, NULL,
4059                                 &setpowerpccmdlist, &showpowerpccmdlist);
4060
4061   add_setshow_enum_cmd ("vector-abi", class_support, powerpc_vector_strings,
4062                         &powerpc_vector_abi_string,
4063                         _("Set the vector ABI."),
4064                         _("Show the vector ABI."),
4065                         NULL, powerpc_set_vector_abi, NULL,
4066                         &setpowerpccmdlist, &showpowerpccmdlist);
4067 }