[ARM] Add ARMv8.3 command line option and feature flag
[external/binutils.git] / gdb / rs6000-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3    Copyright (C) 1986-2016 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "frame.h"
22 #include "inferior.h"
23 #include "infrun.h"
24 #include "symtab.h"
25 #include "target.h"
26 #include "gdbcore.h"
27 #include "gdbcmd.h"
28 #include "objfiles.h"
29 #include "arch-utils.h"
30 #include "regcache.h"
31 #include "regset.h"
32 #include "doublest.h"
33 #include "value.h"
34 #include "parser-defs.h"
35 #include "osabi.h"
36 #include "infcall.h"
37 #include "sim-regno.h"
38 #include "gdb/sim-ppc.h"
39 #include "reggroups.h"
40 #include "dwarf2-frame.h"
41 #include "target-descriptions.h"
42 #include "user-regs.h"
43 #include "record-full.h"
44 #include "auxv.h"
45
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 #include "elf/ppc64.h"
54
55 #include "solib-svr4.h"
56 #include "ppc-tdep.h"
57 #include "ppc-ravenscar-thread.h"
58
59 #include "dis-asm.h"
60
61 #include "trad-frame.h"
62 #include "frame-unwind.h"
63 #include "frame-base.h"
64
65 #include "ax.h"
66 #include "ax-gdb.h"
67 #include <algorithm>
68
69 #include "features/rs6000/powerpc-32.c"
70 #include "features/rs6000/powerpc-altivec32.c"
71 #include "features/rs6000/powerpc-vsx32.c"
72 #include "features/rs6000/powerpc-403.c"
73 #include "features/rs6000/powerpc-403gc.c"
74 #include "features/rs6000/powerpc-405.c"
75 #include "features/rs6000/powerpc-505.c"
76 #include "features/rs6000/powerpc-601.c"
77 #include "features/rs6000/powerpc-602.c"
78 #include "features/rs6000/powerpc-603.c"
79 #include "features/rs6000/powerpc-604.c"
80 #include "features/rs6000/powerpc-64.c"
81 #include "features/rs6000/powerpc-altivec64.c"
82 #include "features/rs6000/powerpc-vsx64.c"
83 #include "features/rs6000/powerpc-7400.c"
84 #include "features/rs6000/powerpc-750.c"
85 #include "features/rs6000/powerpc-860.c"
86 #include "features/rs6000/powerpc-e500.c"
87 #include "features/rs6000/rs6000.c"
88
89 /* Determine if regnum is an SPE pseudo-register.  */
90 #define IS_SPE_PSEUDOREG(tdep, regnum) ((tdep)->ppc_ev0_regnum >= 0 \
91     && (regnum) >= (tdep)->ppc_ev0_regnum \
92     && (regnum) < (tdep)->ppc_ev0_regnum + 32)
93
94 /* Determine if regnum is a decimal float pseudo-register.  */
95 #define IS_DFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_dl0_regnum >= 0 \
96     && (regnum) >= (tdep)->ppc_dl0_regnum \
97     && (regnum) < (tdep)->ppc_dl0_regnum + 16)
98
99 /* Determine if regnum is a POWER7 VSX register.  */
100 #define IS_VSX_PSEUDOREG(tdep, regnum) ((tdep)->ppc_vsr0_regnum >= 0 \
101     && (regnum) >= (tdep)->ppc_vsr0_regnum \
102     && (regnum) < (tdep)->ppc_vsr0_regnum + ppc_num_vsrs)
103
104 /* Determine if regnum is a POWER7 Extended FP register.  */
105 #define IS_EFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_efpr0_regnum >= 0 \
106     && (regnum) >= (tdep)->ppc_efpr0_regnum \
107     && (regnum) < (tdep)->ppc_efpr0_regnum + ppc_num_efprs)
108
109 /* The list of available "set powerpc ..." and "show powerpc ..."
110    commands.  */
111 static struct cmd_list_element *setpowerpccmdlist = NULL;
112 static struct cmd_list_element *showpowerpccmdlist = NULL;
113
114 static enum auto_boolean powerpc_soft_float_global = AUTO_BOOLEAN_AUTO;
115
116 /* The vector ABI to use.  Keep this in sync with powerpc_vector_abi.  */
117 static const char *const powerpc_vector_strings[] =
118 {
119   "auto",
120   "generic",
121   "altivec",
122   "spe",
123   NULL
124 };
125
126 /* A variable that can be configured by the user.  */
127 static enum powerpc_vector_abi powerpc_vector_abi_global = POWERPC_VEC_AUTO;
128 static const char *powerpc_vector_abi_string = "auto";
129
130 /* To be used by skip_prologue.  */
131
132 struct rs6000_framedata
133   {
134     int offset;                 /* total size of frame --- the distance
135                                    by which we decrement sp to allocate
136                                    the frame */
137     int saved_gpr;              /* smallest # of saved gpr */
138     unsigned int gpr_mask;      /* Each bit is an individual saved GPR.  */
139     int saved_fpr;              /* smallest # of saved fpr */
140     int saved_vr;               /* smallest # of saved vr */
141     int saved_ev;               /* smallest # of saved ev */
142     int alloca_reg;             /* alloca register number (frame ptr) */
143     char frameless;             /* true if frameless functions.  */
144     char nosavedpc;             /* true if pc not saved.  */
145     char used_bl;               /* true if link register clobbered */
146     int gpr_offset;             /* offset of saved gprs from prev sp */
147     int fpr_offset;             /* offset of saved fprs from prev sp */
148     int vr_offset;              /* offset of saved vrs from prev sp */
149     int ev_offset;              /* offset of saved evs from prev sp */
150     int lr_offset;              /* offset of saved lr */
151     int lr_register;            /* register of saved lr, if trustworthy */
152     int cr_offset;              /* offset of saved cr */
153     int vrsave_offset;          /* offset of saved vrsave register */
154   };
155
156
157 /* Is REGNO a VSX register? Return 1 if so, 0 otherwise.  */
158 int
159 vsx_register_p (struct gdbarch *gdbarch, int regno)
160 {
161   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
162   if (tdep->ppc_vsr0_regnum < 0)
163     return 0;
164   else
165     return (regno >= tdep->ppc_vsr0_upper_regnum && regno
166             <= tdep->ppc_vsr0_upper_regnum + 31);
167 }
168
169 /* Is REGNO an AltiVec register?  Return 1 if so, 0 otherwise.  */
170 int
171 altivec_register_p (struct gdbarch *gdbarch, int regno)
172 {
173   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
174   if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
175     return 0;
176   else
177     return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
178 }
179
180
181 /* Return true if REGNO is an SPE register, false otherwise.  */
182 int
183 spe_register_p (struct gdbarch *gdbarch, int regno)
184 {
185   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
186   
187   /* Is it a reference to EV0 -- EV31, and do we have those?  */
188   if (IS_SPE_PSEUDOREG (tdep, regno))
189     return 1;
190
191   /* Is it a reference to one of the raw upper GPR halves?  */
192   if (tdep->ppc_ev0_upper_regnum >= 0
193       && tdep->ppc_ev0_upper_regnum <= regno
194       && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
195     return 1;
196
197   /* Is it a reference to the 64-bit accumulator, and do we have that?  */
198   if (tdep->ppc_acc_regnum >= 0
199       && tdep->ppc_acc_regnum == regno)
200     return 1;
201
202   /* Is it a reference to the SPE floating-point status and control register,
203      and do we have that?  */
204   if (tdep->ppc_spefscr_regnum >= 0
205       && tdep->ppc_spefscr_regnum == regno)
206     return 1;
207
208   return 0;
209 }
210
211
212 /* Return non-zero if the architecture described by GDBARCH has
213    floating-point registers (f0 --- f31 and fpscr).  */
214 int
215 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
216 {
217   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
218
219   return (tdep->ppc_fp0_regnum >= 0
220           && tdep->ppc_fpscr_regnum >= 0);
221 }
222
223 /* Return non-zero if the architecture described by GDBARCH has
224    VSX registers (vsr0 --- vsr63).  */
225 static int
226 ppc_vsx_support_p (struct gdbarch *gdbarch)
227 {
228   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
229
230   return tdep->ppc_vsr0_regnum >= 0;
231 }
232
233 /* Return non-zero if the architecture described by GDBARCH has
234    Altivec registers (vr0 --- vr31, vrsave and vscr).  */
235 int
236 ppc_altivec_support_p (struct gdbarch *gdbarch)
237 {
238   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
239
240   return (tdep->ppc_vr0_regnum >= 0
241           && tdep->ppc_vrsave_regnum >= 0);
242 }
243
244 /* Check that TABLE[GDB_REGNO] is not already initialized, and then
245    set it to SIM_REGNO.
246
247    This is a helper function for init_sim_regno_table, constructing
248    the table mapping GDB register numbers to sim register numbers; we
249    initialize every element in that table to -1 before we start
250    filling it in.  */
251 static void
252 set_sim_regno (int *table, int gdb_regno, int sim_regno)
253 {
254   /* Make sure we don't try to assign any given GDB register a sim
255      register number more than once.  */
256   gdb_assert (table[gdb_regno] == -1);
257   table[gdb_regno] = sim_regno;
258 }
259
260
261 /* Initialize ARCH->tdep->sim_regno, the table mapping GDB register
262    numbers to simulator register numbers, based on the values placed
263    in the ARCH->tdep->ppc_foo_regnum members.  */
264 static void
265 init_sim_regno_table (struct gdbarch *arch)
266 {
267   struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
268   int total_regs = gdbarch_num_regs (arch);
269   int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int);
270   int i;
271   static const char *const segment_regs[] = {
272     "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
273     "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
274   };
275
276   /* Presume that all registers not explicitly mentioned below are
277      unavailable from the sim.  */
278   for (i = 0; i < total_regs; i++)
279     sim_regno[i] = -1;
280
281   /* General-purpose registers.  */
282   for (i = 0; i < ppc_num_gprs; i++)
283     set_sim_regno (sim_regno, tdep->ppc_gp0_regnum + i, sim_ppc_r0_regnum + i);
284   
285   /* Floating-point registers.  */
286   if (tdep->ppc_fp0_regnum >= 0)
287     for (i = 0; i < ppc_num_fprs; i++)
288       set_sim_regno (sim_regno,
289                      tdep->ppc_fp0_regnum + i,
290                      sim_ppc_f0_regnum + i);
291   if (tdep->ppc_fpscr_regnum >= 0)
292     set_sim_regno (sim_regno, tdep->ppc_fpscr_regnum, sim_ppc_fpscr_regnum);
293
294   set_sim_regno (sim_regno, gdbarch_pc_regnum (arch), sim_ppc_pc_regnum);
295   set_sim_regno (sim_regno, tdep->ppc_ps_regnum, sim_ppc_ps_regnum);
296   set_sim_regno (sim_regno, tdep->ppc_cr_regnum, sim_ppc_cr_regnum);
297
298   /* Segment registers.  */
299   for (i = 0; i < ppc_num_srs; i++)
300     {
301       int gdb_regno;
302
303       gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i], -1);
304       if (gdb_regno >= 0)
305         set_sim_regno (sim_regno, gdb_regno, sim_ppc_sr0_regnum + i);
306     }
307
308   /* Altivec registers.  */
309   if (tdep->ppc_vr0_regnum >= 0)
310     {
311       for (i = 0; i < ppc_num_vrs; i++)
312         set_sim_regno (sim_regno,
313                        tdep->ppc_vr0_regnum + i,
314                        sim_ppc_vr0_regnum + i);
315
316       /* FIXME: jimb/2004-07-15: when we have tdep->ppc_vscr_regnum,
317          we can treat this more like the other cases.  */
318       set_sim_regno (sim_regno,
319                      tdep->ppc_vr0_regnum + ppc_num_vrs,
320                      sim_ppc_vscr_regnum);
321     }
322   /* vsave is a special-purpose register, so the code below handles it.  */
323
324   /* SPE APU (E500) registers.  */
325   if (tdep->ppc_ev0_upper_regnum >= 0)
326     for (i = 0; i < ppc_num_gprs; i++)
327       set_sim_regno (sim_regno,
328                      tdep->ppc_ev0_upper_regnum + i,
329                      sim_ppc_rh0_regnum + i);
330   if (tdep->ppc_acc_regnum >= 0)
331     set_sim_regno (sim_regno, tdep->ppc_acc_regnum, sim_ppc_acc_regnum);
332   /* spefscr is a special-purpose register, so the code below handles it.  */
333
334 #ifdef WITH_PPC_SIM
335   /* Now handle all special-purpose registers.  Verify that they
336      haven't mistakenly been assigned numbers by any of the above
337      code.  */
338   for (i = 0; i < sim_ppc_num_sprs; i++)
339     {
340       const char *spr_name = sim_spr_register_name (i);
341       int gdb_regno = -1;
342
343       if (spr_name != NULL)
344         gdb_regno = user_reg_map_name_to_regnum (arch, spr_name, -1);
345
346       if (gdb_regno != -1)
347         set_sim_regno (sim_regno, gdb_regno, sim_ppc_spr0_regnum + i);
348     }
349 #endif
350
351   /* Drop the initialized array into place.  */
352   tdep->sim_regno = sim_regno;
353 }
354
355
356 /* Given a GDB register number REG, return the corresponding SIM
357    register number.  */
358 static int
359 rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
360 {
361   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
362   int sim_regno;
363
364   if (tdep->sim_regno == NULL)
365     init_sim_regno_table (gdbarch);
366
367   gdb_assert (0 <= reg 
368               && reg <= gdbarch_num_regs (gdbarch)
369                         + gdbarch_num_pseudo_regs (gdbarch));
370   sim_regno = tdep->sim_regno[reg];
371
372   if (sim_regno >= 0)
373     return sim_regno;
374   else
375     return LEGACY_SIM_REGNO_IGNORE;
376 }
377
378 \f
379
380 /* Register set support functions.  */
381
382 /* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
383    Write the register to REGCACHE.  */
384
385 void
386 ppc_supply_reg (struct regcache *regcache, int regnum, 
387                 const gdb_byte *regs, size_t offset, int regsize)
388 {
389   if (regnum != -1 && offset != -1)
390     {
391       if (regsize > 4)
392         {
393           struct gdbarch *gdbarch = get_regcache_arch (regcache);
394           int gdb_regsize = register_size (gdbarch, regnum);
395           if (gdb_regsize < regsize
396               && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
397             offset += regsize - gdb_regsize;
398         }
399       regcache_raw_supply (regcache, regnum, regs + offset);
400     }
401 }
402
403 /* Read register REGNUM from REGCACHE and store to REGS + OFFSET
404    in a field REGSIZE wide.  Zero pad as necessary.  */
405
406 void
407 ppc_collect_reg (const struct regcache *regcache, int regnum,
408                  gdb_byte *regs, size_t offset, int regsize)
409 {
410   if (regnum != -1 && offset != -1)
411     {
412       if (regsize > 4)
413         {
414           struct gdbarch *gdbarch = get_regcache_arch (regcache);
415           int gdb_regsize = register_size (gdbarch, regnum);
416           if (gdb_regsize < regsize)
417             {
418               if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
419                 {
420                   memset (regs + offset, 0, regsize - gdb_regsize);
421                   offset += regsize - gdb_regsize;
422                 }
423               else
424                 memset (regs + offset + regsize - gdb_regsize, 0,
425                         regsize - gdb_regsize);
426             }
427         }
428       regcache_raw_collect (regcache, regnum, regs + offset);
429     }
430 }
431     
432 static int
433 ppc_greg_offset (struct gdbarch *gdbarch,
434                  struct gdbarch_tdep *tdep,
435                  const struct ppc_reg_offsets *offsets,
436                  int regnum,
437                  int *regsize)
438 {
439   *regsize = offsets->gpr_size;
440   if (regnum >= tdep->ppc_gp0_regnum
441       && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs)
442     return (offsets->r0_offset
443             + (regnum - tdep->ppc_gp0_regnum) * offsets->gpr_size);
444
445   if (regnum == gdbarch_pc_regnum (gdbarch))
446     return offsets->pc_offset;
447
448   if (regnum == tdep->ppc_ps_regnum)
449     return offsets->ps_offset;
450
451   if (regnum == tdep->ppc_lr_regnum)
452     return offsets->lr_offset;
453
454   if (regnum == tdep->ppc_ctr_regnum)
455     return offsets->ctr_offset;
456
457   *regsize = offsets->xr_size;
458   if (regnum == tdep->ppc_cr_regnum)
459     return offsets->cr_offset;
460
461   if (regnum == tdep->ppc_xer_regnum)
462     return offsets->xer_offset;
463
464   if (regnum == tdep->ppc_mq_regnum)
465     return offsets->mq_offset;
466
467   return -1;
468 }
469
470 static int
471 ppc_fpreg_offset (struct gdbarch_tdep *tdep,
472                   const struct ppc_reg_offsets *offsets,
473                   int regnum)
474 {
475   if (regnum >= tdep->ppc_fp0_regnum
476       && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
477     return offsets->f0_offset + (regnum - tdep->ppc_fp0_regnum) * 8;
478
479   if (regnum == tdep->ppc_fpscr_regnum)
480     return offsets->fpscr_offset;
481
482   return -1;
483 }
484
485 static int
486 ppc_vrreg_offset (struct gdbarch_tdep *tdep,
487                   const struct ppc_reg_offsets *offsets,
488                   int regnum)
489 {
490   if (regnum >= tdep->ppc_vr0_regnum
491       && regnum < tdep->ppc_vr0_regnum + ppc_num_vrs)
492     return offsets->vr0_offset + (regnum - tdep->ppc_vr0_regnum) * 16;
493
494   if (regnum == tdep->ppc_vrsave_regnum - 1)
495     return offsets->vscr_offset;
496
497   if (regnum == tdep->ppc_vrsave_regnum)
498     return offsets->vrsave_offset;
499
500   return -1;
501 }
502
503 /* Supply register REGNUM in the general-purpose register set REGSET
504    from the buffer specified by GREGS and LEN to register cache
505    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
506
507 void
508 ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
509                     int regnum, const void *gregs, size_t len)
510 {
511   struct gdbarch *gdbarch = get_regcache_arch (regcache);
512   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
513   const struct ppc_reg_offsets *offsets
514     = (const struct ppc_reg_offsets *) regset->regmap;
515   size_t offset;
516   int regsize;
517
518   if (regnum == -1)
519     {
520       int i;
521       int gpr_size = offsets->gpr_size;
522
523       for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
524            i < tdep->ppc_gp0_regnum + ppc_num_gprs;
525            i++, offset += gpr_size)
526         ppc_supply_reg (regcache, i, (const gdb_byte *) gregs, offset,
527                         gpr_size);
528
529       ppc_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
530                       (const gdb_byte *) gregs, offsets->pc_offset, gpr_size);
531       ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
532                       (const gdb_byte *) gregs, offsets->ps_offset, gpr_size);
533       ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
534                       (const gdb_byte *) gregs, offsets->lr_offset, gpr_size);
535       ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
536                       (const gdb_byte *) gregs, offsets->ctr_offset, gpr_size);
537       ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
538                       (const gdb_byte *) gregs, offsets->cr_offset,
539                       offsets->xr_size);
540       ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
541                       (const gdb_byte *) gregs, offsets->xer_offset,
542                       offsets->xr_size);
543       ppc_supply_reg (regcache, tdep->ppc_mq_regnum,
544                       (const gdb_byte *) gregs, offsets->mq_offset,
545                       offsets->xr_size);
546       return;
547     }
548
549   offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
550   ppc_supply_reg (regcache, regnum, (const gdb_byte *) gregs, offset, regsize);
551 }
552
553 /* Supply register REGNUM in the floating-point register set REGSET
554    from the buffer specified by FPREGS and LEN to register cache
555    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
556
557 void
558 ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
559                      int regnum, const void *fpregs, size_t len)
560 {
561   struct gdbarch *gdbarch = get_regcache_arch (regcache);
562   struct gdbarch_tdep *tdep;
563   const struct ppc_reg_offsets *offsets;
564   size_t offset;
565
566   if (!ppc_floating_point_unit_p (gdbarch))
567     return;
568
569   tdep = gdbarch_tdep (gdbarch);
570   offsets = (const struct ppc_reg_offsets *) regset->regmap;
571   if (regnum == -1)
572     {
573       int i;
574
575       for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
576            i < tdep->ppc_fp0_regnum + ppc_num_fprs;
577            i++, offset += 8)
578         ppc_supply_reg (regcache, i, (const gdb_byte *) fpregs, offset, 8);
579
580       ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
581                       (const gdb_byte *) fpregs, offsets->fpscr_offset,
582                       offsets->fpscr_size);
583       return;
584     }
585
586   offset = ppc_fpreg_offset (tdep, offsets, regnum);
587   ppc_supply_reg (regcache, regnum, (const gdb_byte *) fpregs, offset,
588                   regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
589 }
590
591 /* Supply register REGNUM in the VSX register set REGSET
592    from the buffer specified by VSXREGS and LEN to register cache
593    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
594
595 void
596 ppc_supply_vsxregset (const struct regset *regset, struct regcache *regcache,
597                      int regnum, const void *vsxregs, size_t len)
598 {
599   struct gdbarch *gdbarch = get_regcache_arch (regcache);
600   struct gdbarch_tdep *tdep;
601
602   if (!ppc_vsx_support_p (gdbarch))
603     return;
604
605   tdep = gdbarch_tdep (gdbarch);
606
607   if (regnum == -1)
608     {
609       int i;
610
611       for (i = tdep->ppc_vsr0_upper_regnum;
612            i < tdep->ppc_vsr0_upper_regnum + 32;
613            i++)
614         ppc_supply_reg (regcache, i, (const gdb_byte *) vsxregs, 0, 8);
615
616       return;
617     }
618   else
619     ppc_supply_reg (regcache, regnum, (const gdb_byte *) vsxregs, 0, 8);
620 }
621
622 /* Supply register REGNUM in the Altivec register set REGSET
623    from the buffer specified by VRREGS and LEN to register cache
624    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
625
626 void
627 ppc_supply_vrregset (const struct regset *regset, struct regcache *regcache,
628                      int regnum, const void *vrregs, size_t len)
629 {
630   struct gdbarch *gdbarch = get_regcache_arch (regcache);
631   struct gdbarch_tdep *tdep;
632   const struct ppc_reg_offsets *offsets;
633   size_t offset;
634
635   if (!ppc_altivec_support_p (gdbarch))
636     return;
637
638   tdep = gdbarch_tdep (gdbarch);
639   offsets = (const struct ppc_reg_offsets *) regset->regmap;
640   if (regnum == -1)
641     {
642       int i;
643
644       for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
645            i < tdep->ppc_vr0_regnum + ppc_num_vrs;
646            i++, offset += 16)
647         ppc_supply_reg (regcache, i, (const gdb_byte *) vrregs, offset, 16);
648
649       ppc_supply_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
650                       (const gdb_byte *) vrregs, offsets->vscr_offset, 4);
651
652       ppc_supply_reg (regcache, tdep->ppc_vrsave_regnum,
653                       (const gdb_byte *) vrregs, offsets->vrsave_offset, 4);
654       return;
655     }
656
657   offset = ppc_vrreg_offset (tdep, offsets, regnum);
658   if (regnum != tdep->ppc_vrsave_regnum
659       && regnum != tdep->ppc_vrsave_regnum - 1)
660     ppc_supply_reg (regcache, regnum, (const gdb_byte *) vrregs, offset, 16);
661   else
662     ppc_supply_reg (regcache, regnum,
663                     (const gdb_byte *) vrregs, offset, 4);
664 }
665
666 /* Collect register REGNUM in the general-purpose register set
667    REGSET from register cache REGCACHE into the buffer specified by
668    GREGS and LEN.  If REGNUM is -1, do this for all registers in
669    REGSET.  */
670
671 void
672 ppc_collect_gregset (const struct regset *regset,
673                      const struct regcache *regcache,
674                      int regnum, void *gregs, size_t len)
675 {
676   struct gdbarch *gdbarch = get_regcache_arch (regcache);
677   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
678   const struct ppc_reg_offsets *offsets
679     = (const struct ppc_reg_offsets *) regset->regmap;
680   size_t offset;
681   int regsize;
682
683   if (regnum == -1)
684     {
685       int i;
686       int gpr_size = offsets->gpr_size;
687
688       for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
689            i < tdep->ppc_gp0_regnum + ppc_num_gprs;
690            i++, offset += gpr_size)
691         ppc_collect_reg (regcache, i, (gdb_byte *) gregs, offset, gpr_size);
692
693       ppc_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
694                        (gdb_byte *) gregs, offsets->pc_offset, gpr_size);
695       ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
696                        (gdb_byte *) gregs, offsets->ps_offset, gpr_size);
697       ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
698                        (gdb_byte *) gregs, offsets->lr_offset, gpr_size);
699       ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
700                        (gdb_byte *) gregs, offsets->ctr_offset, gpr_size);
701       ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
702                        (gdb_byte *) gregs, offsets->cr_offset,
703                        offsets->xr_size);
704       ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
705                        (gdb_byte *) gregs, offsets->xer_offset,
706                        offsets->xr_size);
707       ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
708                        (gdb_byte *) gregs, offsets->mq_offset,
709                        offsets->xr_size);
710       return;
711     }
712
713   offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
714   ppc_collect_reg (regcache, regnum, (gdb_byte *) gregs, offset, regsize);
715 }
716
717 /* Collect register REGNUM in the floating-point register set
718    REGSET from register cache REGCACHE into the buffer specified by
719    FPREGS and LEN.  If REGNUM is -1, do this for all registers in
720    REGSET.  */
721
722 void
723 ppc_collect_fpregset (const struct regset *regset,
724                       const struct regcache *regcache,
725                       int regnum, void *fpregs, size_t len)
726 {
727   struct gdbarch *gdbarch = get_regcache_arch (regcache);
728   struct gdbarch_tdep *tdep;
729   const struct ppc_reg_offsets *offsets;
730   size_t offset;
731
732   if (!ppc_floating_point_unit_p (gdbarch))
733     return;
734
735   tdep = gdbarch_tdep (gdbarch);
736   offsets = (const struct ppc_reg_offsets *) regset->regmap;
737   if (regnum == -1)
738     {
739       int i;
740
741       for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
742            i < tdep->ppc_fp0_regnum + ppc_num_fprs;
743            i++, offset += 8)
744         ppc_collect_reg (regcache, i, (gdb_byte *) fpregs, offset, 8);
745
746       ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
747                        (gdb_byte *) fpregs, offsets->fpscr_offset,
748                        offsets->fpscr_size);
749       return;
750     }
751
752   offset = ppc_fpreg_offset (tdep, offsets, regnum);
753   ppc_collect_reg (regcache, regnum, (gdb_byte *) fpregs, offset,
754                    regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
755 }
756
757 /* Collect register REGNUM in the VSX register set
758    REGSET from register cache REGCACHE into the buffer specified by
759    VSXREGS and LEN.  If REGNUM is -1, do this for all registers in
760    REGSET.  */
761
762 void
763 ppc_collect_vsxregset (const struct regset *regset,
764                       const struct regcache *regcache,
765                       int regnum, void *vsxregs, size_t len)
766 {
767   struct gdbarch *gdbarch = get_regcache_arch (regcache);
768   struct gdbarch_tdep *tdep;
769
770   if (!ppc_vsx_support_p (gdbarch))
771     return;
772
773   tdep = gdbarch_tdep (gdbarch);
774
775   if (regnum == -1)
776     {
777       int i;
778
779       for (i = tdep->ppc_vsr0_upper_regnum;
780            i < tdep->ppc_vsr0_upper_regnum + 32;
781            i++)
782         ppc_collect_reg (regcache, i, (gdb_byte *) vsxregs, 0, 8);
783
784       return;
785     }
786   else
787     ppc_collect_reg (regcache, regnum, (gdb_byte *) vsxregs, 0, 8);
788 }
789
790
791 /* Collect register REGNUM in the Altivec register set
792    REGSET from register cache REGCACHE into the buffer specified by
793    VRREGS and LEN.  If REGNUM is -1, do this for all registers in
794    REGSET.  */
795
796 void
797 ppc_collect_vrregset (const struct regset *regset,
798                       const struct regcache *regcache,
799                       int regnum, void *vrregs, size_t len)
800 {
801   struct gdbarch *gdbarch = get_regcache_arch (regcache);
802   struct gdbarch_tdep *tdep;
803   const struct ppc_reg_offsets *offsets;
804   size_t offset;
805
806   if (!ppc_altivec_support_p (gdbarch))
807     return;
808
809   tdep = gdbarch_tdep (gdbarch);
810   offsets = (const struct ppc_reg_offsets *) regset->regmap;
811   if (regnum == -1)
812     {
813       int i;
814
815       for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
816            i < tdep->ppc_vr0_regnum + ppc_num_vrs;
817            i++, offset += 16)
818         ppc_collect_reg (regcache, i, (gdb_byte *) vrregs, offset, 16);
819
820       ppc_collect_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
821                        (gdb_byte *) vrregs, offsets->vscr_offset, 4);
822
823       ppc_collect_reg (regcache, tdep->ppc_vrsave_regnum,
824                        (gdb_byte *) vrregs, offsets->vrsave_offset, 4);
825       return;
826     }
827
828   offset = ppc_vrreg_offset (tdep, offsets, regnum);
829   if (regnum != tdep->ppc_vrsave_regnum
830       && regnum != tdep->ppc_vrsave_regnum - 1)
831     ppc_collect_reg (regcache, regnum, (gdb_byte *) vrregs, offset, 16);
832   else
833     ppc_collect_reg (regcache, regnum,
834                     (gdb_byte *) vrregs, offset, 4);
835 }
836 \f
837
838 static int
839 insn_changes_sp_or_jumps (unsigned long insn)
840 {
841   int opcode = (insn >> 26) & 0x03f;
842   int sd = (insn >> 21) & 0x01f;
843   int a = (insn >> 16) & 0x01f;
844   int subcode = (insn >> 1) & 0x3ff;
845
846   /* Changes the stack pointer.  */
847
848   /* NOTE: There are many ways to change the value of a given register.
849            The ways below are those used when the register is R1, the SP,
850            in a funtion's epilogue.  */
851
852   if (opcode == 31 && subcode == 444 && a == 1)
853     return 1;  /* mr R1,Rn */
854   if (opcode == 14 && sd == 1)
855     return 1;  /* addi R1,Rn,simm */
856   if (opcode == 58 && sd == 1)
857     return 1;  /* ld R1,ds(Rn) */
858
859   /* Transfers control.  */
860
861   if (opcode == 18)
862     return 1;  /* b */
863   if (opcode == 16)
864     return 1;  /* bc */
865   if (opcode == 19 && subcode == 16)
866     return 1;  /* bclr */
867   if (opcode == 19 && subcode == 528)
868     return 1;  /* bcctr */
869
870   return 0;
871 }
872
873 /* Return true if we are in the function's epilogue, i.e. after the
874    instruction that destroyed the function's stack frame.
875
876    1) scan forward from the point of execution:
877        a) If you find an instruction that modifies the stack pointer
878           or transfers control (except a return), execution is not in
879           an epilogue, return.
880        b) Stop scanning if you find a return instruction or reach the
881           end of the function or reach the hard limit for the size of
882           an epilogue.
883    2) scan backward from the point of execution:
884         a) If you find an instruction that modifies the stack pointer,
885             execution *is* in an epilogue, return.
886         b) Stop scanning if you reach an instruction that transfers
887            control or the beginning of the function or reach the hard
888            limit for the size of an epilogue.  */
889
890 static int
891 rs6000_in_function_epilogue_frame_p (struct frame_info *curfrm,
892                                      struct gdbarch *gdbarch, CORE_ADDR pc)
893 {
894   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
895   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
896   bfd_byte insn_buf[PPC_INSN_SIZE];
897   CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
898   unsigned long insn;
899
900   /* Find the search limits based on function boundaries and hard limit.  */
901
902   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
903     return 0;
904
905   epilogue_start = pc - PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
906   if (epilogue_start < func_start) epilogue_start = func_start;
907
908   epilogue_end = pc + PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
909   if (epilogue_end > func_end) epilogue_end = func_end;
910
911   /* Scan forward until next 'blr'.  */
912
913   for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += PPC_INSN_SIZE)
914     {
915       if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
916         return 0;
917       insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
918       if (insn == 0x4e800020)
919         break;
920       /* Assume a bctr is a tail call unless it points strictly within
921          this function.  */
922       if (insn == 0x4e800420)
923         {
924           CORE_ADDR ctr = get_frame_register_unsigned (curfrm,
925                                                        tdep->ppc_ctr_regnum);
926           if (ctr > func_start && ctr < func_end)
927             return 0;
928           else
929             break;
930         }
931       if (insn_changes_sp_or_jumps (insn))
932         return 0;
933     }
934
935   /* Scan backward until adjustment to stack pointer (R1).  */
936
937   for (scan_pc = pc - PPC_INSN_SIZE;
938        scan_pc >= epilogue_start;
939        scan_pc -= PPC_INSN_SIZE)
940     {
941       if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
942         return 0;
943       insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
944       if (insn_changes_sp_or_jumps (insn))
945         return 1;
946     }
947
948   return 0;
949 }
950
951 /* Implement the stack_frame_destroyed_p gdbarch method.  */
952
953 static int
954 rs6000_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
955 {
956   return rs6000_in_function_epilogue_frame_p (get_current_frame (),
957                                               gdbarch, pc);
958 }
959
960 /* Get the ith function argument for the current function.  */
961 static CORE_ADDR
962 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi, 
963                                struct type *type)
964 {
965   return get_frame_register_unsigned (frame, 3 + argi);
966 }
967
968 /* Sequence of bytes for breakpoint instruction.  */
969
970 constexpr gdb_byte big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
971 constexpr gdb_byte little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
972
973 typedef BP_MANIPULATION_ENDIAN (little_breakpoint, big_breakpoint)
974   rs6000_breakpoint;
975
976 /* Instruction masks for displaced stepping.  */
977 #define BRANCH_MASK 0xfc000000
978 #define BP_MASK 0xFC0007FE
979 #define B_INSN 0x48000000
980 #define BC_INSN 0x40000000
981 #define BXL_INSN 0x4c000000
982 #define BP_INSN 0x7C000008
983
984 /* Instruction masks used during single-stepping of atomic
985    sequences.  */
986 #define LWARX_MASK 0xfc0007fe
987 #define LWARX_INSTRUCTION 0x7c000028
988 #define LDARX_INSTRUCTION 0x7c0000A8
989 #define STWCX_MASK 0xfc0007ff
990 #define STWCX_INSTRUCTION 0x7c00012d
991 #define STDCX_INSTRUCTION 0x7c0001ad
992
993 /* We can't displaced step atomic sequences.  Otherwise this is just
994    like simple_displaced_step_copy_insn.  */
995
996 static struct displaced_step_closure *
997 ppc_displaced_step_copy_insn (struct gdbarch *gdbarch,
998                               CORE_ADDR from, CORE_ADDR to,
999                               struct regcache *regs)
1000 {
1001   size_t len = gdbarch_max_insn_length (gdbarch);
1002   gdb_byte *buf = (gdb_byte *) xmalloc (len);
1003   struct cleanup *old_chain = make_cleanup (xfree, buf);
1004   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1005   int insn;
1006
1007   read_memory (from, buf, len);
1008
1009   insn = extract_signed_integer (buf, PPC_INSN_SIZE, byte_order);
1010
1011   /* Assume all atomic sequences start with a lwarx/ldarx instruction.  */
1012   if ((insn & LWARX_MASK) == LWARX_INSTRUCTION
1013       || (insn & LWARX_MASK) == LDARX_INSTRUCTION)
1014     {
1015       if (debug_displaced)
1016         {
1017           fprintf_unfiltered (gdb_stdlog,
1018                               "displaced: can't displaced step "
1019                               "atomic sequence at %s\n",
1020                               paddress (gdbarch, from));
1021         }
1022       do_cleanups (old_chain);
1023       return NULL;
1024     }
1025
1026   write_memory (to, buf, len);
1027
1028   if (debug_displaced)
1029     {
1030       fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
1031                           paddress (gdbarch, from), paddress (gdbarch, to));
1032       displaced_step_dump_bytes (gdb_stdlog, buf, len);
1033     }
1034
1035   discard_cleanups (old_chain);
1036   return (struct displaced_step_closure *) buf;
1037 }
1038
1039 /* Fix up the state of registers and memory after having single-stepped
1040    a displaced instruction.  */
1041 static void
1042 ppc_displaced_step_fixup (struct gdbarch *gdbarch,
1043                           struct displaced_step_closure *closure,
1044                           CORE_ADDR from, CORE_ADDR to,
1045                           struct regcache *regs)
1046 {
1047   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1048   /* Our closure is a copy of the instruction.  */
1049   ULONGEST insn  = extract_unsigned_integer ((gdb_byte *) closure,
1050                                               PPC_INSN_SIZE, byte_order);
1051   ULONGEST opcode = 0;
1052   /* Offset for non PC-relative instructions.  */
1053   LONGEST offset = PPC_INSN_SIZE;
1054
1055   opcode = insn & BRANCH_MASK;
1056
1057   if (debug_displaced)
1058     fprintf_unfiltered (gdb_stdlog,
1059                         "displaced: (ppc) fixup (%s, %s)\n",
1060                         paddress (gdbarch, from), paddress (gdbarch, to));
1061
1062
1063   /* Handle PC-relative branch instructions.  */
1064   if (opcode == B_INSN || opcode == BC_INSN || opcode == BXL_INSN)
1065     {
1066       ULONGEST current_pc;
1067
1068       /* Read the current PC value after the instruction has been executed
1069          in a displaced location.  Calculate the offset to be applied to the
1070          original PC value before the displaced stepping.  */
1071       regcache_cooked_read_unsigned (regs, gdbarch_pc_regnum (gdbarch),
1072                                       &current_pc);
1073       offset = current_pc - to;
1074
1075       if (opcode != BXL_INSN)
1076         {
1077           /* Check for AA bit indicating whether this is an absolute
1078              addressing or PC-relative (1: absolute, 0: relative).  */
1079           if (!(insn & 0x2))
1080             {
1081               /* PC-relative addressing is being used in the branch.  */
1082               if (debug_displaced)
1083                 fprintf_unfiltered
1084                   (gdb_stdlog,
1085                    "displaced: (ppc) branch instruction: %s\n"
1086                    "displaced: (ppc) adjusted PC from %s to %s\n",
1087                    paddress (gdbarch, insn), paddress (gdbarch, current_pc),
1088                    paddress (gdbarch, from + offset));
1089
1090               regcache_cooked_write_unsigned (regs,
1091                                               gdbarch_pc_regnum (gdbarch),
1092                                               from + offset);
1093             }
1094         }
1095       else
1096         {
1097           /* If we're here, it means we have a branch to LR or CTR.  If the
1098              branch was taken, the offset is probably greater than 4 (the next
1099              instruction), so it's safe to assume that an offset of 4 means we
1100              did not take the branch.  */
1101           if (offset == PPC_INSN_SIZE)
1102             regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
1103                                             from + PPC_INSN_SIZE);
1104         }
1105
1106       /* Check for LK bit indicating whether we should set the link
1107          register to point to the next instruction
1108          (1: Set, 0: Don't set).  */
1109       if (insn & 0x1)
1110         {
1111           /* Link register needs to be set to the next instruction's PC.  */
1112           regcache_cooked_write_unsigned (regs,
1113                                           gdbarch_tdep (gdbarch)->ppc_lr_regnum,
1114                                           from + PPC_INSN_SIZE);
1115           if (debug_displaced)
1116                 fprintf_unfiltered (gdb_stdlog,
1117                                     "displaced: (ppc) adjusted LR to %s\n",
1118                                     paddress (gdbarch, from + PPC_INSN_SIZE));
1119
1120         }
1121     }
1122   /* Check for breakpoints in the inferior.  If we've found one, place the PC
1123      right at the breakpoint instruction.  */
1124   else if ((insn & BP_MASK) == BP_INSN)
1125     regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch), from);
1126   else
1127   /* Handle any other instructions that do not fit in the categories above.  */
1128     regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
1129                                     from + offset);
1130 }
1131
1132 /* Always use hardware single-stepping to execute the
1133    displaced instruction.  */
1134 static int
1135 ppc_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
1136                                   struct displaced_step_closure *closure)
1137 {
1138   return 1;
1139 }
1140
1141 /* Checks for an atomic sequence of instructions beginning with a LWARX/LDARX
1142    instruction and ending with a STWCX/STDCX instruction.  If such a sequence
1143    is found, attempt to step through it.  A breakpoint is placed at the end of 
1144    the sequence.  */
1145
1146 VEC (CORE_ADDR) *
1147 ppc_deal_with_atomic_sequence (struct regcache *regcache)
1148 {
1149   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1150   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1151   CORE_ADDR pc = regcache_read_pc (regcache);
1152   CORE_ADDR breaks[2] = {-1, -1};
1153   CORE_ADDR loc = pc;
1154   CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence.  */
1155   int insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
1156   int insn_count;
1157   int index;
1158   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */  
1159   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
1160   int bc_insn_count = 0; /* Conditional branch instruction count.  */
1161   VEC (CORE_ADDR) *next_pcs = NULL;
1162
1163   /* Assume all atomic sequences start with a lwarx/ldarx instruction.  */
1164   if ((insn & LWARX_MASK) != LWARX_INSTRUCTION
1165       && (insn & LWARX_MASK) != LDARX_INSTRUCTION)
1166     return NULL;
1167
1168   /* Assume that no atomic sequence is longer than "atomic_sequence_length" 
1169      instructions.  */
1170   for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
1171     {
1172       loc += PPC_INSN_SIZE;
1173       insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
1174
1175       /* Assume that there is at most one conditional branch in the atomic
1176          sequence.  If a conditional branch is found, put a breakpoint in 
1177          its destination address.  */
1178       if ((insn & BRANCH_MASK) == BC_INSN)
1179         {
1180           int immediate = ((insn & 0xfffc) ^ 0x8000) - 0x8000;
1181           int absolute = insn & 2;
1182
1183           if (bc_insn_count >= 1)
1184             return 0; /* More than one conditional branch found, fallback 
1185                          to the standard single-step code.  */
1186  
1187           if (absolute)
1188             breaks[1] = immediate;
1189           else
1190             breaks[1] = loc + immediate;
1191
1192           bc_insn_count++;
1193           last_breakpoint++;
1194         }
1195
1196       if ((insn & STWCX_MASK) == STWCX_INSTRUCTION
1197           || (insn & STWCX_MASK) == STDCX_INSTRUCTION)
1198         break;
1199     }
1200
1201   /* Assume that the atomic sequence ends with a stwcx/stdcx instruction.  */
1202   if ((insn & STWCX_MASK) != STWCX_INSTRUCTION
1203       && (insn & STWCX_MASK) != STDCX_INSTRUCTION)
1204     return NULL;
1205
1206   closing_insn = loc;
1207   loc += PPC_INSN_SIZE;
1208   insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
1209
1210   /* Insert a breakpoint right after the end of the atomic sequence.  */
1211   breaks[0] = loc;
1212
1213   /* Check for duplicated breakpoints.  Check also for a breakpoint
1214      placed (branch instruction's destination) anywhere in sequence.  */
1215   if (last_breakpoint
1216       && (breaks[1] == breaks[0]
1217           || (breaks[1] >= pc && breaks[1] <= closing_insn)))
1218     last_breakpoint = 0;
1219
1220   for (index = 0; index <= last_breakpoint; index++)
1221     VEC_safe_push (CORE_ADDR, next_pcs, breaks[index]);
1222
1223   return next_pcs;
1224 }
1225
1226
1227 #define SIGNED_SHORT(x)                                                 \
1228   ((sizeof (short) == 2)                                                \
1229    ? ((int)(short)(x))                                                  \
1230    : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
1231
1232 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
1233
1234 /* Limit the number of skipped non-prologue instructions, as the examining
1235    of the prologue is expensive.  */
1236 static int max_skip_non_prologue_insns = 10;
1237
1238 /* Return nonzero if the given instruction OP can be part of the prologue
1239    of a function and saves a parameter on the stack.  FRAMEP should be
1240    set if one of the previous instructions in the function has set the
1241    Frame Pointer.  */
1242
1243 static int
1244 store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
1245 {
1246   /* Move parameters from argument registers to temporary register.  */
1247   if ((op & 0xfc0007fe) == 0x7c000378)         /* mr(.)  Rx,Ry */
1248     {
1249       /* Rx must be scratch register r0.  */
1250       const int rx_regno = (op >> 16) & 31;
1251       /* Ry: Only r3 - r10 are used for parameter passing.  */
1252       const int ry_regno = GET_SRC_REG (op);
1253
1254       if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
1255         {
1256           *r0_contains_arg = 1;
1257           return 1;
1258         }
1259       else
1260         return 0;
1261     }
1262
1263   /* Save a General Purpose Register on stack.  */
1264
1265   if ((op & 0xfc1f0003) == 0xf8010000 ||       /* std  Rx,NUM(r1) */
1266       (op & 0xfc1f0000) == 0xd8010000)         /* stfd Rx,NUM(r1) */
1267     {
1268       /* Rx: Only r3 - r10 are used for parameter passing.  */
1269       const int rx_regno = GET_SRC_REG (op);
1270
1271       return (rx_regno >= 3 && rx_regno <= 10);
1272     }
1273            
1274   /* Save a General Purpose Register on stack via the Frame Pointer.  */
1275
1276   if (framep &&
1277       ((op & 0xfc1f0000) == 0x901f0000 ||     /* st rx,NUM(r31) */
1278        (op & 0xfc1f0000) == 0x981f0000 ||     /* stb Rx,NUM(r31) */
1279        (op & 0xfc1f0000) == 0xd81f0000))      /* stfd Rx,NUM(r31) */
1280     {
1281       /* Rx: Usually, only r3 - r10 are used for parameter passing.
1282          However, the compiler sometimes uses r0 to hold an argument.  */
1283       const int rx_regno = GET_SRC_REG (op);
1284
1285       return ((rx_regno >= 3 && rx_regno <= 10)
1286               || (rx_regno == 0 && *r0_contains_arg));
1287     }
1288
1289   if ((op & 0xfc1f0000) == 0xfc010000)         /* frsp, fp?,NUM(r1) */
1290     {
1291       /* Only f2 - f8 are used for parameter passing.  */
1292       const int src_regno = GET_SRC_REG (op);
1293
1294       return (src_regno >= 2 && src_regno <= 8);
1295     }
1296
1297   if (framep && ((op & 0xfc1f0000) == 0xfc1f0000))  /* frsp, fp?,NUM(r31) */
1298     {
1299       /* Only f2 - f8 are used for parameter passing.  */
1300       const int src_regno = GET_SRC_REG (op);
1301
1302       return (src_regno >= 2 && src_regno <= 8);
1303     }
1304
1305   /* Not an insn that saves a parameter on stack.  */
1306   return 0;
1307 }
1308
1309 /* Assuming that INSN is a "bl" instruction located at PC, return
1310    nonzero if the destination of the branch is a "blrl" instruction.
1311    
1312    This sequence is sometimes found in certain function prologues.
1313    It allows the function to load the LR register with a value that
1314    they can use to access PIC data using PC-relative offsets.  */
1315
1316 static int
1317 bl_to_blrl_insn_p (CORE_ADDR pc, int insn, enum bfd_endian byte_order)
1318 {
1319   CORE_ADDR dest;
1320   int immediate;
1321   int absolute;
1322   int dest_insn;
1323
1324   absolute = (int) ((insn >> 1) & 1);
1325   immediate = ((insn & ~3) << 6) >> 6;
1326   if (absolute)
1327     dest = immediate;
1328   else
1329     dest = pc + immediate;
1330
1331   dest_insn = read_memory_integer (dest, 4, byte_order);
1332   if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
1333     return 1;
1334
1335   return 0;
1336 }
1337
1338 /* Masks for decoding a branch-and-link (bl) instruction.
1339
1340    BL_MASK and BL_INSTRUCTION are used in combination with each other.
1341    The former is anded with the opcode in question; if the result of
1342    this masking operation is equal to BL_INSTRUCTION, then the opcode in
1343    question is a ``bl'' instruction.
1344    
1345    BL_DISPLACMENT_MASK is anded with the opcode in order to extract
1346    the branch displacement.  */
1347
1348 #define BL_MASK 0xfc000001
1349 #define BL_INSTRUCTION 0x48000001
1350 #define BL_DISPLACEMENT_MASK 0x03fffffc
1351
1352 static unsigned long
1353 rs6000_fetch_instruction (struct gdbarch *gdbarch, const CORE_ADDR pc)
1354 {
1355   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1356   gdb_byte buf[4];
1357   unsigned long op;
1358
1359   /* Fetch the instruction and convert it to an integer.  */
1360   if (target_read_memory (pc, buf, 4))
1361     return 0;
1362   op = extract_unsigned_integer (buf, 4, byte_order);
1363
1364   return op;
1365 }
1366
1367 /* GCC generates several well-known sequences of instructions at the begining
1368    of each function prologue when compiling with -fstack-check.  If one of
1369    such sequences starts at START_PC, then return the address of the
1370    instruction immediately past this sequence.  Otherwise, return START_PC.  */
1371    
1372 static CORE_ADDR
1373 rs6000_skip_stack_check (struct gdbarch *gdbarch, const CORE_ADDR start_pc)
1374 {
1375   CORE_ADDR pc = start_pc;
1376   unsigned long op = rs6000_fetch_instruction (gdbarch, pc);
1377
1378   /* First possible sequence: A small number of probes.
1379          stw 0, -<some immediate>(1)
1380          [repeat this instruction any (small) number of times].  */
1381   
1382   if ((op & 0xffff0000) == 0x90010000)
1383     {
1384       while ((op & 0xffff0000) == 0x90010000)
1385         {
1386           pc = pc + 4;
1387           op = rs6000_fetch_instruction (gdbarch, pc);
1388         }
1389       return pc;
1390     }
1391
1392   /* Second sequence: A probing loop.
1393          addi 12,1,-<some immediate>
1394          lis 0,-<some immediate>
1395          [possibly ori 0,0,<some immediate>]
1396          add 0,12,0
1397          cmpw 0,12,0
1398          beq 0,<disp>
1399          addi 12,12,-<some immediate>
1400          stw 0,0(12)
1401          b <disp>
1402          [possibly one last probe: stw 0,<some immediate>(12)].  */
1403
1404   while (1)
1405     {
1406       /* addi 12,1,-<some immediate> */
1407       if ((op & 0xffff0000) != 0x39810000)
1408         break;
1409
1410       /* lis 0,-<some immediate> */
1411       pc = pc + 4;
1412       op = rs6000_fetch_instruction (gdbarch, pc);
1413       if ((op & 0xffff0000) != 0x3c000000)
1414         break;
1415
1416       pc = pc + 4;
1417       op = rs6000_fetch_instruction (gdbarch, pc);
1418       /* [possibly ori 0,0,<some immediate>] */
1419       if ((op & 0xffff0000) == 0x60000000)
1420         {
1421           pc = pc + 4;
1422           op = rs6000_fetch_instruction (gdbarch, pc);
1423         }
1424       /* add 0,12,0 */
1425       if (op != 0x7c0c0214)
1426         break;
1427
1428       /* cmpw 0,12,0 */
1429       pc = pc + 4;
1430       op = rs6000_fetch_instruction (gdbarch, pc);
1431       if (op != 0x7c0c0000)
1432         break;
1433
1434       /* beq 0,<disp> */
1435       pc = pc + 4;
1436       op = rs6000_fetch_instruction (gdbarch, pc);
1437       if ((op & 0xff9f0001) != 0x41820000)
1438         break;
1439
1440       /* addi 12,12,-<some immediate> */
1441       pc = pc + 4;
1442       op = rs6000_fetch_instruction (gdbarch, pc);
1443       if ((op & 0xffff0000) != 0x398c0000)
1444         break;
1445
1446       /* stw 0,0(12) */
1447       pc = pc + 4;
1448       op = rs6000_fetch_instruction (gdbarch, pc);
1449       if (op != 0x900c0000)
1450         break;
1451
1452       /* b <disp> */
1453       pc = pc + 4;
1454       op = rs6000_fetch_instruction (gdbarch, pc);
1455       if ((op & 0xfc000001) != 0x48000000)
1456         break;
1457
1458       /* [possibly one last probe: stw 0,<some immediate>(12)].  */
1459       pc = pc + 4;
1460       op = rs6000_fetch_instruction (gdbarch, pc);
1461       if ((op & 0xffff0000) == 0x900c0000)
1462         {
1463           pc = pc + 4;
1464           op = rs6000_fetch_instruction (gdbarch, pc);
1465         }
1466
1467       /* We found a valid stack-check sequence, return the new PC.  */
1468       return pc;
1469     }
1470
1471   /* Third sequence: No probe; instead, a comparizon between the stack size
1472      limit (saved in a run-time global variable) and the current stack
1473      pointer:
1474
1475         addi 0,1,-<some immediate>
1476         lis 12,__gnat_stack_limit@ha
1477         lwz 12,__gnat_stack_limit@l(12)
1478         twllt 0,12
1479
1480      or, with a small variant in the case of a bigger stack frame:
1481         addis 0,1,<some immediate>
1482         addic 0,0,-<some immediate>
1483         lis 12,__gnat_stack_limit@ha
1484         lwz 12,__gnat_stack_limit@l(12)
1485         twllt 0,12
1486   */
1487   while (1)
1488     {
1489       /* addi 0,1,-<some immediate> */
1490       if ((op & 0xffff0000) != 0x38010000)
1491         {
1492           /* small stack frame variant not recognized; try the
1493              big stack frame variant: */
1494
1495           /* addis 0,1,<some immediate> */
1496           if ((op & 0xffff0000) != 0x3c010000)
1497             break;
1498
1499           /* addic 0,0,-<some immediate> */
1500           pc = pc + 4;
1501           op = rs6000_fetch_instruction (gdbarch, pc);
1502           if ((op & 0xffff0000) != 0x30000000)
1503             break;
1504         }
1505
1506       /* lis 12,<some immediate> */
1507       pc = pc + 4;
1508       op = rs6000_fetch_instruction (gdbarch, pc);
1509       if ((op & 0xffff0000) != 0x3d800000)
1510         break;
1511       
1512       /* lwz 12,<some immediate>(12) */
1513       pc = pc + 4;
1514       op = rs6000_fetch_instruction (gdbarch, pc);
1515       if ((op & 0xffff0000) != 0x818c0000)
1516         break;
1517
1518       /* twllt 0,12 */
1519       pc = pc + 4;
1520       op = rs6000_fetch_instruction (gdbarch, pc);
1521       if ((op & 0xfffffffe) != 0x7c406008)
1522         break;
1523
1524       /* We found a valid stack-check sequence, return the new PC.  */
1525       return pc;
1526     }
1527
1528   /* No stack check code in our prologue, return the start_pc.  */
1529   return start_pc;
1530 }
1531
1532 /* return pc value after skipping a function prologue and also return
1533    information about a function frame.
1534
1535    in struct rs6000_framedata fdata:
1536    - frameless is TRUE, if function does not have a frame.
1537    - nosavedpc is TRUE, if function does not save %pc value in its frame.
1538    - offset is the initial size of this stack frame --- the amount by
1539    which we decrement the sp to allocate the frame.
1540    - saved_gpr is the number of the first saved gpr.
1541    - saved_fpr is the number of the first saved fpr.
1542    - saved_vr is the number of the first saved vr.
1543    - saved_ev is the number of the first saved ev.
1544    - alloca_reg is the number of the register used for alloca() handling.
1545    Otherwise -1.
1546    - gpr_offset is the offset of the first saved gpr from the previous frame.
1547    - fpr_offset is the offset of the first saved fpr from the previous frame.
1548    - vr_offset is the offset of the first saved vr from the previous frame.
1549    - ev_offset is the offset of the first saved ev from the previous frame.
1550    - lr_offset is the offset of the saved lr
1551    - cr_offset is the offset of the saved cr
1552    - vrsave_offset is the offset of the saved vrsave register.  */
1553
1554 static CORE_ADDR
1555 skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
1556                struct rs6000_framedata *fdata)
1557 {
1558   CORE_ADDR orig_pc = pc;
1559   CORE_ADDR last_prologue_pc = pc;
1560   CORE_ADDR li_found_pc = 0;
1561   gdb_byte buf[4];
1562   unsigned long op;
1563   long offset = 0;
1564   long vr_saved_offset = 0;
1565   int lr_reg = -1;
1566   int cr_reg = -1;
1567   int vr_reg = -1;
1568   int ev_reg = -1;
1569   long ev_offset = 0;
1570   int vrsave_reg = -1;
1571   int reg;
1572   int framep = 0;
1573   int minimal_toc_loaded = 0;
1574   int prev_insn_was_prologue_insn = 1;
1575   int num_skip_non_prologue_insns = 0;
1576   int r0_contains_arg = 0;
1577   const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
1578   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1579   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1580
1581   memset (fdata, 0, sizeof (struct rs6000_framedata));
1582   fdata->saved_gpr = -1;
1583   fdata->saved_fpr = -1;
1584   fdata->saved_vr = -1;
1585   fdata->saved_ev = -1;
1586   fdata->alloca_reg = -1;
1587   fdata->frameless = 1;
1588   fdata->nosavedpc = 1;
1589   fdata->lr_register = -1;
1590
1591   pc = rs6000_skip_stack_check (gdbarch, pc);
1592   if (pc >= lim_pc)
1593     pc = lim_pc;
1594
1595   for (;; pc += 4)
1596     {
1597       /* Sometimes it isn't clear if an instruction is a prologue
1598          instruction or not.  When we encounter one of these ambiguous
1599          cases, we'll set prev_insn_was_prologue_insn to 0 (false).
1600          Otherwise, we'll assume that it really is a prologue instruction.  */
1601       if (prev_insn_was_prologue_insn)
1602         last_prologue_pc = pc;
1603
1604       /* Stop scanning if we've hit the limit.  */
1605       if (pc >= lim_pc)
1606         break;
1607
1608       prev_insn_was_prologue_insn = 1;
1609
1610       /* Fetch the instruction and convert it to an integer.  */
1611       if (target_read_memory (pc, buf, 4))
1612         break;
1613       op = extract_unsigned_integer (buf, 4, byte_order);
1614
1615       if ((op & 0xfc1fffff) == 0x7c0802a6)
1616         {                       /* mflr Rx */
1617           /* Since shared library / PIC code, which needs to get its
1618              address at runtime, can appear to save more than one link
1619              register vis:
1620
1621              *INDENT-OFF*
1622              stwu r1,-304(r1)
1623              mflr r3
1624              bl 0xff570d0 (blrl)
1625              stw r30,296(r1)
1626              mflr r30
1627              stw r31,300(r1)
1628              stw r3,308(r1);
1629              ...
1630              *INDENT-ON*
1631
1632              remember just the first one, but skip over additional
1633              ones.  */
1634           if (lr_reg == -1)
1635             lr_reg = (op & 0x03e00000) >> 21;
1636           if (lr_reg == 0)
1637             r0_contains_arg = 0;
1638           continue;
1639         }
1640       else if ((op & 0xfc1fffff) == 0x7c000026)
1641         {                       /* mfcr Rx */
1642           cr_reg = (op & 0x03e00000);
1643           if (cr_reg == 0)
1644             r0_contains_arg = 0;
1645           continue;
1646
1647         }
1648       else if ((op & 0xfc1f0000) == 0xd8010000)
1649         {                       /* stfd Rx,NUM(r1) */
1650           reg = GET_SRC_REG (op);
1651           if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
1652             {
1653               fdata->saved_fpr = reg;
1654               fdata->fpr_offset = SIGNED_SHORT (op) + offset;
1655             }
1656           continue;
1657
1658         }
1659       else if (((op & 0xfc1f0000) == 0xbc010000) ||     /* stm Rx, NUM(r1) */
1660                (((op & 0xfc1f0000) == 0x90010000 ||     /* st rx,NUM(r1) */
1661                  (op & 0xfc1f0003) == 0xf8010000) &&    /* std rx,NUM(r1) */
1662                 (op & 0x03e00000) >= 0x01a00000))       /* rx >= r13 */
1663         {
1664
1665           reg = GET_SRC_REG (op);
1666           if ((op & 0xfc1f0000) == 0xbc010000)
1667             fdata->gpr_mask |= ~((1U << reg) - 1);
1668           else
1669             fdata->gpr_mask |= 1U << reg;
1670           if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
1671             {
1672               fdata->saved_gpr = reg;
1673               if ((op & 0xfc1f0003) == 0xf8010000)
1674                 op &= ~3UL;
1675               fdata->gpr_offset = SIGNED_SHORT (op) + offset;
1676             }
1677           continue;
1678
1679         }
1680       else if ((op & 0xffff0000) == 0x3c4c0000
1681                || (op & 0xffff0000) == 0x3c400000
1682                || (op & 0xffff0000) == 0x38420000)
1683         {
1684           /* .  0:      addis 2,12,.TOC.-0b@ha
1685              .          addi 2,2,.TOC.-0b@l
1686              or
1687              .          lis 2,.TOC.@ha
1688              .          addi 2,2,.TOC.@l
1689              used by ELFv2 global entry points to set up r2.  */
1690           continue;
1691         }
1692       else if (op == 0x60000000)
1693         {
1694           /* nop */
1695           /* Allow nops in the prologue, but do not consider them to
1696              be part of the prologue unless followed by other prologue
1697              instructions.  */
1698           prev_insn_was_prologue_insn = 0;
1699           continue;
1700
1701         }
1702       else if ((op & 0xffff0000) == 0x3c000000)
1703         {                       /* addis 0,0,NUM, used for >= 32k frames */
1704           fdata->offset = (op & 0x0000ffff) << 16;
1705           fdata->frameless = 0;
1706           r0_contains_arg = 0;
1707           continue;
1708
1709         }
1710       else if ((op & 0xffff0000) == 0x60000000)
1711         {                       /* ori 0,0,NUM, 2nd half of >= 32k frames */
1712           fdata->offset |= (op & 0x0000ffff);
1713           fdata->frameless = 0;
1714           r0_contains_arg = 0;
1715           continue;
1716
1717         }
1718       else if (lr_reg >= 0 &&
1719                /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1720                (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
1721                 /* stw Rx, NUM(r1) */
1722                 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
1723                 /* stwu Rx, NUM(r1) */
1724                 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
1725         {       /* where Rx == lr */
1726           fdata->lr_offset = offset;
1727           fdata->nosavedpc = 0;
1728           /* Invalidate lr_reg, but don't set it to -1.
1729              That would mean that it had never been set.  */
1730           lr_reg = -2;
1731           if ((op & 0xfc000003) == 0xf8000000 ||        /* std */
1732               (op & 0xfc000000) == 0x90000000)          /* stw */
1733             {
1734               /* Does not update r1, so add displacement to lr_offset.  */
1735               fdata->lr_offset += SIGNED_SHORT (op);
1736             }
1737           continue;
1738
1739         }
1740       else if (cr_reg >= 0 &&
1741                /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1742                (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
1743                 /* stw Rx, NUM(r1) */
1744                 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
1745                 /* stwu Rx, NUM(r1) */
1746                 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
1747         {       /* where Rx == cr */
1748           fdata->cr_offset = offset;
1749           /* Invalidate cr_reg, but don't set it to -1.
1750              That would mean that it had never been set.  */
1751           cr_reg = -2;
1752           if ((op & 0xfc000003) == 0xf8000000 ||
1753               (op & 0xfc000000) == 0x90000000)
1754             {
1755               /* Does not update r1, so add displacement to cr_offset.  */
1756               fdata->cr_offset += SIGNED_SHORT (op);
1757             }
1758           continue;
1759
1760         }
1761       else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
1762         {
1763           /* bcl 20,xx,.+4 is used to get the current PC, with or without
1764              prediction bits.  If the LR has already been saved, we can
1765              skip it.  */
1766           continue;
1767         }
1768       else if (op == 0x48000005)
1769         {                       /* bl .+4 used in 
1770                                    -mrelocatable */
1771           fdata->used_bl = 1;
1772           continue;
1773
1774         }
1775       else if (op == 0x48000004)
1776         {                       /* b .+4 (xlc) */
1777           break;
1778
1779         }
1780       else if ((op & 0xffff0000) == 0x3fc00000 ||  /* addis 30,0,foo@ha, used
1781                                                       in V.4 -mminimal-toc */
1782                (op & 0xffff0000) == 0x3bde0000)
1783         {                       /* addi 30,30,foo@l */
1784           continue;
1785
1786         }
1787       else if ((op & 0xfc000001) == 0x48000001)
1788         {                       /* bl foo, 
1789                                    to save fprs???  */
1790
1791           fdata->frameless = 0;
1792
1793           /* If the return address has already been saved, we can skip
1794              calls to blrl (for PIC).  */
1795           if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op, byte_order))
1796             {
1797               fdata->used_bl = 1;
1798               continue;
1799             }
1800
1801           /* Don't skip over the subroutine call if it is not within
1802              the first three instructions of the prologue and either
1803              we have no line table information or the line info tells
1804              us that the subroutine call is not part of the line
1805              associated with the prologue.  */
1806           if ((pc - orig_pc) > 8)
1807             {
1808               struct symtab_and_line prologue_sal = find_pc_line (orig_pc, 0);
1809               struct symtab_and_line this_sal = find_pc_line (pc, 0);
1810
1811               if ((prologue_sal.line == 0)
1812                   || (prologue_sal.line != this_sal.line))
1813                 break;
1814             }
1815
1816           op = read_memory_integer (pc + 4, 4, byte_order);
1817
1818           /* At this point, make sure this is not a trampoline
1819              function (a function that simply calls another functions,
1820              and nothing else).  If the next is not a nop, this branch
1821              was part of the function prologue.  */
1822
1823           if (op == 0x4def7b82 || op == 0)      /* crorc 15, 15, 15 */
1824             break;              /* Don't skip over 
1825                                    this branch.  */
1826
1827           fdata->used_bl = 1;
1828           continue;
1829         }
1830       /* update stack pointer */
1831       else if ((op & 0xfc1f0000) == 0x94010000)
1832         {               /* stu rX,NUM(r1) ||  stwu rX,NUM(r1) */
1833           fdata->frameless = 0;
1834           fdata->offset = SIGNED_SHORT (op);
1835           offset = fdata->offset;
1836           continue;
1837         }
1838       else if ((op & 0xfc1f016a) == 0x7c01016e)
1839         {                       /* stwux rX,r1,rY */
1840           /* No way to figure out what r1 is going to be.  */
1841           fdata->frameless = 0;
1842           offset = fdata->offset;
1843           continue;
1844         }
1845       else if ((op & 0xfc1f0003) == 0xf8010001)
1846         {                       /* stdu rX,NUM(r1) */
1847           fdata->frameless = 0;
1848           fdata->offset = SIGNED_SHORT (op & ~3UL);
1849           offset = fdata->offset;
1850           continue;
1851         }
1852       else if ((op & 0xfc1f016a) == 0x7c01016a)
1853         {                       /* stdux rX,r1,rY */
1854           /* No way to figure out what r1 is going to be.  */
1855           fdata->frameless = 0;
1856           offset = fdata->offset;
1857           continue;
1858         }
1859       else if ((op & 0xffff0000) == 0x38210000)
1860         {                       /* addi r1,r1,SIMM */
1861           fdata->frameless = 0;
1862           fdata->offset += SIGNED_SHORT (op);
1863           offset = fdata->offset;
1864           continue;
1865         }
1866       /* Load up minimal toc pointer.  Do not treat an epilogue restore
1867          of r31 as a minimal TOC load.  */
1868       else if (((op >> 22) == 0x20f     ||      /* l r31,... or l r30,...  */
1869                (op >> 22) == 0x3af)             /* ld r31,... or ld r30,...  */
1870                && !framep
1871                && !minimal_toc_loaded)
1872         {
1873           minimal_toc_loaded = 1;
1874           continue;
1875
1876           /* move parameters from argument registers to local variable
1877              registers */
1878         }
1879       else if ((op & 0xfc0007fe) == 0x7c000378 &&       /* mr(.)  Rx,Ry */
1880                (((op >> 21) & 31) >= 3) &&              /* R3 >= Ry >= R10 */
1881                (((op >> 21) & 31) <= 10) &&
1882                ((long) ((op >> 16) & 31)
1883                 >= fdata->saved_gpr)) /* Rx: local var reg */
1884         {
1885           continue;
1886
1887           /* store parameters in stack */
1888         }
1889       /* Move parameters from argument registers to temporary register.  */
1890       else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
1891         {
1892           continue;
1893
1894           /* Set up frame pointer */
1895         }
1896       else if (op == 0x603d0000)       /* oril r29, r1, 0x0 */
1897         {
1898           fdata->frameless = 0;
1899           framep = 1;
1900           fdata->alloca_reg = (tdep->ppc_gp0_regnum + 29);
1901           continue;
1902
1903           /* Another way to set up the frame pointer.  */
1904         }
1905       else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
1906                || op == 0x7c3f0b78)
1907         {                       /* mr r31, r1 */
1908           fdata->frameless = 0;
1909           framep = 1;
1910           fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
1911           continue;
1912
1913           /* Another way to set up the frame pointer.  */
1914         }
1915       else if ((op & 0xfc1fffff) == 0x38010000)
1916         {                       /* addi rX, r1, 0x0 */
1917           fdata->frameless = 0;
1918           framep = 1;
1919           fdata->alloca_reg = (tdep->ppc_gp0_regnum
1920                                + ((op & ~0x38010000) >> 21));
1921           continue;
1922         }
1923       /* AltiVec related instructions.  */
1924       /* Store the vrsave register (spr 256) in another register for
1925          later manipulation, or load a register into the vrsave
1926          register.  2 instructions are used: mfvrsave and
1927          mtvrsave.  They are shorthand notation for mfspr Rn, SPR256
1928          and mtspr SPR256, Rn.  */
1929       /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1930          mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110  */
1931       else if ((op & 0xfc1fffff) == 0x7c0042a6)    /* mfvrsave Rn */
1932         {
1933           vrsave_reg = GET_SRC_REG (op);
1934           continue;
1935         }
1936       else if ((op & 0xfc1fffff) == 0x7c0043a6)     /* mtvrsave Rn */
1937         {
1938           continue;
1939         }
1940       /* Store the register where vrsave was saved to onto the stack:
1941          rS is the register where vrsave was stored in a previous
1942          instruction.  */
1943       /* 100100 sssss 00001 dddddddd dddddddd */
1944       else if ((op & 0xfc1f0000) == 0x90010000)     /* stw rS, d(r1) */
1945         {
1946           if (vrsave_reg == GET_SRC_REG (op))
1947             {
1948               fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1949               vrsave_reg = -1;
1950             }
1951           continue;
1952         }
1953       /* Compute the new value of vrsave, by modifying the register
1954          where vrsave was saved to.  */
1955       else if (((op & 0xfc000000) == 0x64000000)    /* oris Ra, Rs, UIMM */
1956                || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1957         {
1958           continue;
1959         }
1960       /* li r0, SIMM (short for addi r0, 0, SIMM).  This is the first
1961          in a pair of insns to save the vector registers on the
1962          stack.  */
1963       /* 001110 00000 00000 iiii iiii iiii iiii  */
1964       /* 001110 01110 00000 iiii iiii iiii iiii  */
1965       else if ((op & 0xffff0000) == 0x38000000         /* li r0, SIMM */
1966                || (op & 0xffff0000) == 0x39c00000)     /* li r14, SIMM */
1967         {
1968           if ((op & 0xffff0000) == 0x38000000)
1969             r0_contains_arg = 0;
1970           li_found_pc = pc;
1971           vr_saved_offset = SIGNED_SHORT (op);
1972
1973           /* This insn by itself is not part of the prologue, unless
1974              if part of the pair of insns mentioned above.  So do not
1975              record this insn as part of the prologue yet.  */
1976           prev_insn_was_prologue_insn = 0;
1977         }
1978       /* Store vector register S at (r31+r0) aligned to 16 bytes.  */      
1979       /* 011111 sssss 11111 00000 00111001110 */
1980       else if ((op & 0xfc1fffff) == 0x7c1f01ce)   /* stvx Vs, R31, R0 */
1981         {
1982           if (pc == (li_found_pc + 4))
1983             {
1984               vr_reg = GET_SRC_REG (op);
1985               /* If this is the first vector reg to be saved, or if
1986                  it has a lower number than others previously seen,
1987                  reupdate the frame info.  */
1988               if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1989                 {
1990                   fdata->saved_vr = vr_reg;
1991                   fdata->vr_offset = vr_saved_offset + offset;
1992                 }
1993               vr_saved_offset = -1;
1994               vr_reg = -1;
1995               li_found_pc = 0;
1996             }
1997         }
1998       /* End AltiVec related instructions.  */
1999
2000       /* Start BookE related instructions.  */
2001       /* Store gen register S at (r31+uimm).
2002          Any register less than r13 is volatile, so we don't care.  */
2003       /* 000100 sssss 11111 iiiii 01100100001 */
2004       else if (arch_info->mach == bfd_mach_ppc_e500
2005                && (op & 0xfc1f07ff) == 0x101f0321)    /* evstdd Rs,uimm(R31) */
2006         {
2007           if ((op & 0x03e00000) >= 0x01a00000)  /* Rs >= r13 */
2008             {
2009               unsigned int imm;
2010               ev_reg = GET_SRC_REG (op);
2011               imm = (op >> 11) & 0x1f;
2012               ev_offset = imm * 8;
2013               /* If this is the first vector reg to be saved, or if
2014                  it has a lower number than others previously seen,
2015                  reupdate the frame info.  */
2016               if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
2017                 {
2018                   fdata->saved_ev = ev_reg;
2019                   fdata->ev_offset = ev_offset + offset;
2020                 }
2021             }
2022           continue;
2023         }
2024       /* Store gen register rS at (r1+rB).  */
2025       /* 000100 sssss 00001 bbbbb 01100100000 */
2026       else if (arch_info->mach == bfd_mach_ppc_e500
2027                && (op & 0xffe007ff) == 0x13e00320)     /* evstddx RS,R1,Rb */
2028         {
2029           if (pc == (li_found_pc + 4))
2030             {
2031               ev_reg = GET_SRC_REG (op);
2032               /* If this is the first vector reg to be saved, or if
2033                  it has a lower number than others previously seen,
2034                  reupdate the frame info.  */
2035               /* We know the contents of rB from the previous instruction.  */
2036               if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
2037                 {
2038                   fdata->saved_ev = ev_reg;
2039                   fdata->ev_offset = vr_saved_offset + offset;
2040                 }
2041               vr_saved_offset = -1;
2042               ev_reg = -1;
2043               li_found_pc = 0;
2044             }
2045           continue;
2046         }
2047       /* Store gen register r31 at (rA+uimm).  */
2048       /* 000100 11111 aaaaa iiiii 01100100001 */
2049       else if (arch_info->mach == bfd_mach_ppc_e500
2050                && (op & 0xffe007ff) == 0x13e00321)   /* evstdd R31,Ra,UIMM */
2051         {
2052           /* Wwe know that the source register is 31 already, but
2053              it can't hurt to compute it.  */
2054           ev_reg = GET_SRC_REG (op);
2055           ev_offset = ((op >> 11) & 0x1f) * 8;
2056           /* If this is the first vector reg to be saved, or if
2057              it has a lower number than others previously seen,
2058              reupdate the frame info.  */
2059           if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
2060             {
2061               fdata->saved_ev = ev_reg;
2062               fdata->ev_offset = ev_offset + offset;
2063             }
2064
2065           continue;
2066         }
2067       /* Store gen register S at (r31+r0).
2068          Store param on stack when offset from SP bigger than 4 bytes.  */
2069       /* 000100 sssss 11111 00000 01100100000 */
2070       else if (arch_info->mach == bfd_mach_ppc_e500
2071                && (op & 0xfc1fffff) == 0x101f0320)     /* evstddx Rs,R31,R0 */
2072         {
2073           if (pc == (li_found_pc + 4))
2074             {
2075               if ((op & 0x03e00000) >= 0x01a00000)
2076                 {
2077                   ev_reg = GET_SRC_REG (op);
2078                   /* If this is the first vector reg to be saved, or if
2079                      it has a lower number than others previously seen,
2080                      reupdate the frame info.  */
2081                   /* We know the contents of r0 from the previous
2082                      instruction.  */
2083                   if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
2084                     {
2085                       fdata->saved_ev = ev_reg;
2086                       fdata->ev_offset = vr_saved_offset + offset;
2087                     }
2088                   ev_reg = -1;
2089                 }
2090               vr_saved_offset = -1;
2091               li_found_pc = 0;
2092               continue;
2093             }
2094         }
2095       /* End BookE related instructions.  */
2096
2097       else
2098         {
2099           unsigned int all_mask = ~((1U << fdata->saved_gpr) - 1);
2100
2101           /* Not a recognized prologue instruction.
2102              Handle optimizer code motions into the prologue by continuing
2103              the search if we have no valid frame yet or if the return
2104              address is not yet saved in the frame.  Also skip instructions
2105              if some of the GPRs expected to be saved are not yet saved.  */
2106           if (fdata->frameless == 0 && fdata->nosavedpc == 0
2107               && (fdata->gpr_mask & all_mask) == all_mask)
2108             break;
2109
2110           if (op == 0x4e800020          /* blr */
2111               || op == 0x4e800420)      /* bctr */
2112             /* Do not scan past epilogue in frameless functions or
2113                trampolines.  */
2114             break;
2115           if ((op & 0xf4000000) == 0x40000000) /* bxx */
2116             /* Never skip branches.  */
2117             break;
2118
2119           if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
2120             /* Do not scan too many insns, scanning insns is expensive with
2121                remote targets.  */
2122             break;
2123
2124           /* Continue scanning.  */
2125           prev_insn_was_prologue_insn = 0;
2126           continue;
2127         }
2128     }
2129
2130 #if 0
2131 /* I have problems with skipping over __main() that I need to address
2132  * sometime.  Previously, I used to use misc_function_vector which
2133  * didn't work as well as I wanted to be.  -MGO */
2134
2135   /* If the first thing after skipping a prolog is a branch to a function,
2136      this might be a call to an initializer in main(), introduced by gcc2.
2137      We'd like to skip over it as well.  Fortunately, xlc does some extra
2138      work before calling a function right after a prologue, thus we can
2139      single out such gcc2 behaviour.  */
2140
2141
2142   if ((op & 0xfc000001) == 0x48000001)
2143     {                           /* bl foo, an initializer function?  */
2144       op = read_memory_integer (pc + 4, 4, byte_order);
2145
2146       if (op == 0x4def7b82)
2147         {                       /* cror 0xf, 0xf, 0xf (nop) */
2148
2149           /* Check and see if we are in main.  If so, skip over this
2150              initializer function as well.  */
2151
2152           tmp = find_pc_misc_function (pc);
2153           if (tmp >= 0
2154               && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
2155             return pc + 8;
2156         }
2157     }
2158 #endif /* 0 */
2159
2160   if (pc == lim_pc && lr_reg >= 0)
2161     fdata->lr_register = lr_reg;
2162
2163   fdata->offset = -fdata->offset;
2164   return last_prologue_pc;
2165 }
2166
2167 static CORE_ADDR
2168 rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2169 {
2170   struct rs6000_framedata frame;
2171   CORE_ADDR limit_pc, func_addr, func_end_addr = 0;
2172
2173   /* See if we can determine the end of the prologue via the symbol table.
2174      If so, then return either PC, or the PC after the prologue, whichever
2175      is greater.  */
2176   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
2177     {
2178       CORE_ADDR post_prologue_pc
2179         = skip_prologue_using_sal (gdbarch, func_addr);
2180       if (post_prologue_pc != 0)
2181         return std::max (pc, post_prologue_pc);
2182     }
2183
2184   /* Can't determine prologue from the symbol table, need to examine
2185      instructions.  */
2186
2187   /* Find an upper limit on the function prologue using the debug
2188      information.  If the debug information could not be used to provide
2189      that bound, then use an arbitrary large number as the upper bound.  */
2190   limit_pc = skip_prologue_using_sal (gdbarch, pc);
2191   if (limit_pc == 0)
2192     limit_pc = pc + 100;          /* Magic.  */
2193
2194   /* Do not allow limit_pc to be past the function end, if we know
2195      where that end is...  */
2196   if (func_end_addr && limit_pc > func_end_addr)
2197     limit_pc = func_end_addr;
2198
2199   pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
2200   return pc;
2201 }
2202
2203 /* When compiling for EABI, some versions of GCC emit a call to __eabi
2204    in the prologue of main().
2205
2206    The function below examines the code pointed at by PC and checks to
2207    see if it corresponds to a call to __eabi.  If so, it returns the
2208    address of the instruction following that call.  Otherwise, it simply
2209    returns PC.  */
2210
2211 static CORE_ADDR
2212 rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2213 {
2214   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2215   gdb_byte buf[4];
2216   unsigned long op;
2217
2218   if (target_read_memory (pc, buf, 4))
2219     return pc;
2220   op = extract_unsigned_integer (buf, 4, byte_order);
2221
2222   if ((op & BL_MASK) == BL_INSTRUCTION)
2223     {
2224       CORE_ADDR displ = op & BL_DISPLACEMENT_MASK;
2225       CORE_ADDR call_dest = pc + 4 + displ;
2226       struct bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
2227
2228       /* We check for ___eabi (three leading underscores) in addition
2229          to __eabi in case the GCC option "-fleading-underscore" was
2230          used to compile the program.  */
2231       if (s.minsym != NULL
2232           && MSYMBOL_LINKAGE_NAME (s.minsym) != NULL
2233           && (strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "__eabi") == 0
2234               || strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "___eabi") == 0))
2235         pc += 4;
2236     }
2237   return pc;
2238 }
2239
2240 /* All the ABI's require 16 byte alignment.  */
2241 static CORE_ADDR
2242 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2243 {
2244   return (addr & -16);
2245 }
2246
2247 /* Return whether handle_inferior_event() should proceed through code
2248    starting at PC in function NAME when stepping.
2249
2250    The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2251    handle memory references that are too distant to fit in instructions
2252    generated by the compiler.  For example, if 'foo' in the following
2253    instruction:
2254
2255      lwz r9,foo(r2)
2256
2257    is greater than 32767, the linker might replace the lwz with a branch to
2258    somewhere in @FIX1 that does the load in 2 instructions and then branches
2259    back to where execution should continue.
2260
2261    GDB should silently step over @FIX code, just like AIX dbx does.
2262    Unfortunately, the linker uses the "b" instruction for the
2263    branches, meaning that the link register doesn't get set.
2264    Therefore, GDB's usual step_over_function () mechanism won't work.
2265
2266    Instead, use the gdbarch_skip_trampoline_code and
2267    gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2268    @FIX code.  */
2269
2270 static int
2271 rs6000_in_solib_return_trampoline (struct gdbarch *gdbarch,
2272                                    CORE_ADDR pc, const char *name)
2273 {
2274   return name && startswith (name, "@FIX");
2275 }
2276
2277 /* Skip code that the user doesn't want to see when stepping:
2278
2279    1. Indirect function calls use a piece of trampoline code to do context
2280    switching, i.e. to set the new TOC table.  Skip such code if we are on
2281    its first instruction (as when we have single-stepped to here).
2282
2283    2. Skip shared library trampoline code (which is different from
2284    indirect function call trampolines).
2285
2286    3. Skip bigtoc fixup code.
2287
2288    Result is desired PC to step until, or NULL if we are not in
2289    code that should be skipped.  */
2290
2291 static CORE_ADDR
2292 rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2293 {
2294   struct gdbarch *gdbarch = get_frame_arch (frame);
2295   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2296   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2297   unsigned int ii, op;
2298   int rel;
2299   CORE_ADDR solib_target_pc;
2300   struct bound_minimal_symbol msymbol;
2301
2302   static unsigned trampoline_code[] =
2303   {
2304     0x800b0000,                 /*     l   r0,0x0(r11)  */
2305     0x90410014,                 /*    st   r2,0x14(r1)  */
2306     0x7c0903a6,                 /* mtctr   r0           */
2307     0x804b0004,                 /*     l   r2,0x4(r11)  */
2308     0x816b0008,                 /*     l  r11,0x8(r11)  */
2309     0x4e800420,                 /*  bctr                */
2310     0x4e800020,                 /*    br                */
2311     0
2312   };
2313
2314   /* Check for bigtoc fixup code.  */
2315   msymbol = lookup_minimal_symbol_by_pc (pc);
2316   if (msymbol.minsym
2317       && rs6000_in_solib_return_trampoline (gdbarch, pc,
2318                                             MSYMBOL_LINKAGE_NAME (msymbol.minsym)))
2319     {
2320       /* Double-check that the third instruction from PC is relative "b".  */
2321       op = read_memory_integer (pc + 8, 4, byte_order);
2322       if ((op & 0xfc000003) == 0x48000000)
2323         {
2324           /* Extract bits 6-29 as a signed 24-bit relative word address and
2325              add it to the containing PC.  */
2326           rel = ((int)(op << 6) >> 6);
2327           return pc + 8 + rel;
2328         }
2329     }
2330
2331   /* If pc is in a shared library trampoline, return its target.  */
2332   solib_target_pc = find_solib_trampoline_target (frame, pc);
2333   if (solib_target_pc)
2334     return solib_target_pc;
2335
2336   for (ii = 0; trampoline_code[ii]; ++ii)
2337     {
2338       op = read_memory_integer (pc + (ii * 4), 4, byte_order);
2339       if (op != trampoline_code[ii])
2340         return 0;
2341     }
2342   ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination
2343                                                    addr.  */
2344   pc = read_memory_unsigned_integer (ii, tdep->wordsize, byte_order);
2345   return pc;
2346 }
2347
2348 /* ISA-specific vector types.  */
2349
2350 static struct type *
2351 rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2352 {
2353   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2354
2355   if (!tdep->ppc_builtin_type_vec64)
2356     {
2357       const struct builtin_type *bt = builtin_type (gdbarch);
2358
2359       /* The type we're building is this: */
2360 #if 0
2361       union __gdb_builtin_type_vec64
2362         {
2363           int64_t uint64;
2364           float v2_float[2];
2365           int32_t v2_int32[2];
2366           int16_t v4_int16[4];
2367           int8_t v8_int8[8];
2368         };
2369 #endif
2370
2371       struct type *t;
2372
2373       t = arch_composite_type (gdbarch,
2374                                "__ppc_builtin_type_vec64", TYPE_CODE_UNION);
2375       append_composite_type_field (t, "uint64", bt->builtin_int64);
2376       append_composite_type_field (t, "v2_float",
2377                                    init_vector_type (bt->builtin_float, 2));
2378       append_composite_type_field (t, "v2_int32",
2379                                    init_vector_type (bt->builtin_int32, 2));
2380       append_composite_type_field (t, "v4_int16",
2381                                    init_vector_type (bt->builtin_int16, 4));
2382       append_composite_type_field (t, "v8_int8",
2383                                    init_vector_type (bt->builtin_int8, 8));
2384
2385       TYPE_VECTOR (t) = 1;
2386       TYPE_NAME (t) = "ppc_builtin_type_vec64";
2387       tdep->ppc_builtin_type_vec64 = t;
2388     }
2389
2390   return tdep->ppc_builtin_type_vec64;
2391 }
2392
2393 /* Vector 128 type.  */
2394
2395 static struct type *
2396 rs6000_builtin_type_vec128 (struct gdbarch *gdbarch)
2397 {
2398   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2399
2400   if (!tdep->ppc_builtin_type_vec128)
2401     {
2402       const struct builtin_type *bt = builtin_type (gdbarch);
2403
2404       /* The type we're building is this
2405
2406          type = union __ppc_builtin_type_vec128 {
2407              uint128_t uint128;
2408              double v2_double[2];
2409              float v4_float[4];
2410              int32_t v4_int32[4];
2411              int16_t v8_int16[8];
2412              int8_t v16_int8[16];
2413          }
2414       */
2415
2416       struct type *t;
2417
2418       t = arch_composite_type (gdbarch,
2419                                "__ppc_builtin_type_vec128", TYPE_CODE_UNION);
2420       append_composite_type_field (t, "uint128", bt->builtin_uint128);
2421       append_composite_type_field (t, "v2_double",
2422                                    init_vector_type (bt->builtin_double, 2));
2423       append_composite_type_field (t, "v4_float",
2424                                    init_vector_type (bt->builtin_float, 4));
2425       append_composite_type_field (t, "v4_int32",
2426                                    init_vector_type (bt->builtin_int32, 4));
2427       append_composite_type_field (t, "v8_int16",
2428                                    init_vector_type (bt->builtin_int16, 8));
2429       append_composite_type_field (t, "v16_int8",
2430                                    init_vector_type (bt->builtin_int8, 16));
2431
2432       TYPE_VECTOR (t) = 1;
2433       TYPE_NAME (t) = "ppc_builtin_type_vec128";
2434       tdep->ppc_builtin_type_vec128 = t;
2435     }
2436
2437   return tdep->ppc_builtin_type_vec128;
2438 }
2439
2440 /* Return the name of register number REGNO, or the empty string if it
2441    is an anonymous register.  */
2442
2443 static const char *
2444 rs6000_register_name (struct gdbarch *gdbarch, int regno)
2445 {
2446   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2447
2448   /* The upper half "registers" have names in the XML description,
2449      but we present only the low GPRs and the full 64-bit registers
2450      to the user.  */
2451   if (tdep->ppc_ev0_upper_regnum >= 0
2452       && tdep->ppc_ev0_upper_regnum <= regno
2453       && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
2454     return "";
2455
2456   /* Hide the upper halves of the vs0~vs31 registers.  */
2457   if (tdep->ppc_vsr0_regnum >= 0
2458       && tdep->ppc_vsr0_upper_regnum <= regno
2459       && regno < tdep->ppc_vsr0_upper_regnum + ppc_num_gprs)
2460     return "";
2461
2462   /* Check if the SPE pseudo registers are available.  */
2463   if (IS_SPE_PSEUDOREG (tdep, regno))
2464     {
2465       static const char *const spe_regnames[] = {
2466         "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2467         "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2468         "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2469         "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2470       };
2471       return spe_regnames[regno - tdep->ppc_ev0_regnum];
2472     }
2473
2474   /* Check if the decimal128 pseudo-registers are available.  */
2475   if (IS_DFP_PSEUDOREG (tdep, regno))
2476     {
2477       static const char *const dfp128_regnames[] = {
2478         "dl0", "dl1", "dl2", "dl3",
2479         "dl4", "dl5", "dl6", "dl7",
2480         "dl8", "dl9", "dl10", "dl11",
2481         "dl12", "dl13", "dl14", "dl15"
2482       };
2483       return dfp128_regnames[regno - tdep->ppc_dl0_regnum];
2484     }
2485
2486   /* Check if this is a VSX pseudo-register.  */
2487   if (IS_VSX_PSEUDOREG (tdep, regno))
2488     {
2489       static const char *const vsx_regnames[] = {
2490         "vs0", "vs1", "vs2", "vs3", "vs4", "vs5", "vs6", "vs7",
2491         "vs8", "vs9", "vs10", "vs11", "vs12", "vs13", "vs14",
2492         "vs15", "vs16", "vs17", "vs18", "vs19", "vs20", "vs21",
2493         "vs22", "vs23", "vs24", "vs25", "vs26", "vs27", "vs28",
2494         "vs29", "vs30", "vs31", "vs32", "vs33", "vs34", "vs35",
2495         "vs36", "vs37", "vs38", "vs39", "vs40", "vs41", "vs42",
2496         "vs43", "vs44", "vs45", "vs46", "vs47", "vs48", "vs49",
2497         "vs50", "vs51", "vs52", "vs53", "vs54", "vs55", "vs56",
2498         "vs57", "vs58", "vs59", "vs60", "vs61", "vs62", "vs63"
2499       };
2500       return vsx_regnames[regno - tdep->ppc_vsr0_regnum];
2501     }
2502
2503   /* Check if the this is a Extended FP pseudo-register.  */
2504   if (IS_EFP_PSEUDOREG (tdep, regno))
2505     {
2506       static const char *const efpr_regnames[] = {
2507         "f32", "f33", "f34", "f35", "f36", "f37", "f38",
2508         "f39", "f40", "f41", "f42", "f43", "f44", "f45",
2509         "f46", "f47", "f48", "f49", "f50", "f51",
2510         "f52", "f53", "f54", "f55", "f56", "f57",
2511         "f58", "f59", "f60", "f61", "f62", "f63"
2512       };
2513       return efpr_regnames[regno - tdep->ppc_efpr0_regnum];
2514     }
2515
2516   return tdesc_register_name (gdbarch, regno);
2517 }
2518
2519 /* Return the GDB type object for the "standard" data type of data in
2520    register N.  */
2521
2522 static struct type *
2523 rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2524 {
2525   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2526
2527   /* These are the only pseudo-registers we support.  */
2528   gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2529               || IS_DFP_PSEUDOREG (tdep, regnum)
2530               || IS_VSX_PSEUDOREG (tdep, regnum)
2531               || IS_EFP_PSEUDOREG (tdep, regnum));
2532
2533   /* These are the e500 pseudo-registers.  */
2534   if (IS_SPE_PSEUDOREG (tdep, regnum))
2535     return rs6000_builtin_type_vec64 (gdbarch);
2536   else if (IS_DFP_PSEUDOREG (tdep, regnum))
2537     /* PPC decimal128 pseudo-registers.  */
2538     return builtin_type (gdbarch)->builtin_declong;
2539   else if (IS_VSX_PSEUDOREG (tdep, regnum))
2540     /* POWER7 VSX pseudo-registers.  */
2541     return rs6000_builtin_type_vec128 (gdbarch);
2542   else
2543     /* POWER7 Extended FP pseudo-registers.  */
2544     return builtin_type (gdbarch)->builtin_double;
2545 }
2546
2547 /* Is REGNUM a member of REGGROUP?  */
2548 static int
2549 rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2550                                    struct reggroup *group)
2551 {
2552   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2553
2554   /* These are the only pseudo-registers we support.  */
2555   gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2556               || IS_DFP_PSEUDOREG (tdep, regnum)
2557               || IS_VSX_PSEUDOREG (tdep, regnum)
2558               || IS_EFP_PSEUDOREG (tdep, regnum));
2559
2560   /* These are the e500 pseudo-registers or the POWER7 VSX registers.  */
2561   if (IS_SPE_PSEUDOREG (tdep, regnum) || IS_VSX_PSEUDOREG (tdep, regnum))
2562     return group == all_reggroup || group == vector_reggroup;
2563   else
2564     /* PPC decimal128 or Extended FP pseudo-registers.  */
2565     return group == all_reggroup || group == float_reggroup;
2566 }
2567
2568 /* The register format for RS/6000 floating point registers is always
2569    double, we need a conversion if the memory format is float.  */
2570
2571 static int
2572 rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2573                            struct type *type)
2574 {
2575   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2576
2577   return (tdep->ppc_fp0_regnum >= 0
2578           && regnum >= tdep->ppc_fp0_regnum
2579           && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs
2580           && TYPE_CODE (type) == TYPE_CODE_FLT
2581           && TYPE_LENGTH (type)
2582              != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double));
2583 }
2584
2585 static int
2586 rs6000_register_to_value (struct frame_info *frame,
2587                           int regnum,
2588                           struct type *type,
2589                           gdb_byte *to,
2590                           int *optimizedp, int *unavailablep)
2591 {
2592   struct gdbarch *gdbarch = get_frame_arch (frame);
2593   gdb_byte from[MAX_REGISTER_SIZE];
2594   
2595   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2596
2597   if (!get_frame_register_bytes (frame, regnum, 0,
2598                                  register_size (gdbarch, regnum),
2599                                  from, optimizedp, unavailablep))
2600     return 0;
2601
2602   convert_typed_floating (from, builtin_type (gdbarch)->builtin_double,
2603                           to, type);
2604   *optimizedp = *unavailablep = 0;
2605   return 1;
2606 }
2607
2608 static void
2609 rs6000_value_to_register (struct frame_info *frame,
2610                           int regnum,
2611                           struct type *type,
2612                           const gdb_byte *from)
2613 {
2614   struct gdbarch *gdbarch = get_frame_arch (frame);
2615   gdb_byte to[MAX_REGISTER_SIZE];
2616
2617   gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2618
2619   convert_typed_floating (from, type,
2620                           to, builtin_type (gdbarch)->builtin_double);
2621   put_frame_register (frame, regnum, to);
2622 }
2623
2624  /* The type of a function that moves the value of REG between CACHE
2625     or BUF --- in either direction.  */
2626 typedef enum register_status (*move_ev_register_func) (struct regcache *,
2627                                                        int, void *);
2628
2629 /* Move SPE vector register values between a 64-bit buffer and the two
2630    32-bit raw register halves in a regcache.  This function handles
2631    both splitting a 64-bit value into two 32-bit halves, and joining
2632    two halves into a whole 64-bit value, depending on the function
2633    passed as the MOVE argument.
2634
2635    EV_REG must be the number of an SPE evN vector register --- a
2636    pseudoregister.  REGCACHE must be a regcache, and BUFFER must be a
2637    64-bit buffer.
2638
2639    Call MOVE once for each 32-bit half of that register, passing
2640    REGCACHE, the number of the raw register corresponding to that
2641    half, and the address of the appropriate half of BUFFER.
2642
2643    For example, passing 'regcache_raw_read' as the MOVE function will
2644    fill BUFFER with the full 64-bit contents of EV_REG.  Or, passing
2645    'regcache_raw_supply' will supply the contents of BUFFER to the
2646    appropriate pair of raw registers in REGCACHE.
2647
2648    You may need to cast away some 'const' qualifiers when passing
2649    MOVE, since this function can't tell at compile-time which of
2650    REGCACHE or BUFFER is acting as the source of the data.  If C had
2651    co-variant type qualifiers, ...  */
2652
2653 static enum register_status
2654 e500_move_ev_register (move_ev_register_func move,
2655                        struct regcache *regcache, int ev_reg, void *buffer)
2656 {
2657   struct gdbarch *arch = get_regcache_arch (regcache);
2658   struct gdbarch_tdep *tdep = gdbarch_tdep (arch); 
2659   int reg_index;
2660   gdb_byte *byte_buffer = (gdb_byte *) buffer;
2661   enum register_status status;
2662
2663   gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2664
2665   reg_index = ev_reg - tdep->ppc_ev0_regnum;
2666
2667   if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2668     {
2669       status = move (regcache, tdep->ppc_ev0_upper_regnum + reg_index,
2670                      byte_buffer);
2671       if (status == REG_VALID)
2672         status = move (regcache, tdep->ppc_gp0_regnum + reg_index,
2673                        byte_buffer + 4);
2674     }
2675   else
2676     {
2677       status = move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer);
2678       if (status == REG_VALID)
2679         status = move (regcache, tdep->ppc_ev0_upper_regnum + reg_index,
2680                        byte_buffer + 4);
2681     }
2682
2683   return status;
2684 }
2685
2686 static enum register_status
2687 do_regcache_raw_read (struct regcache *regcache, int regnum, void *buffer)
2688 {
2689   return regcache_raw_read (regcache, regnum, (gdb_byte *) buffer);
2690 }
2691
2692 static enum register_status
2693 do_regcache_raw_write (struct regcache *regcache, int regnum, void *buffer)
2694 {
2695   regcache_raw_write (regcache, regnum, (const gdb_byte *) buffer);
2696
2697   return REG_VALID;
2698 }
2699
2700 static enum register_status
2701 e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2702                            int reg_nr, gdb_byte *buffer)
2703 {
2704   return e500_move_ev_register (do_regcache_raw_read, regcache, reg_nr, buffer);
2705 }
2706
2707 static void
2708 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2709                             int reg_nr, const gdb_byte *buffer)
2710 {
2711   e500_move_ev_register (do_regcache_raw_write, regcache,
2712                          reg_nr, (void *) buffer);
2713 }
2714
2715 /* Read method for DFP pseudo-registers.  */
2716 static enum register_status
2717 dfp_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2718                            int reg_nr, gdb_byte *buffer)
2719 {
2720   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2721   int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2722   enum register_status status;
2723
2724   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2725     {
2726       /* Read two FP registers to form a whole dl register.  */
2727       status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2728                                   2 * reg_index, buffer);
2729       if (status == REG_VALID)
2730         status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2731                                     2 * reg_index + 1, buffer + 8);
2732     }
2733   else
2734     {
2735       status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2736                                   2 * reg_index + 1, buffer);
2737       if (status == REG_VALID)
2738         status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2739                                     2 * reg_index, buffer + 8);
2740     }
2741
2742   return status;
2743 }
2744
2745 /* Write method for DFP pseudo-registers.  */
2746 static void
2747 dfp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2748                             int reg_nr, const gdb_byte *buffer)
2749 {
2750   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2751   int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2752
2753   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2754     {
2755       /* Write each half of the dl register into a separate
2756       FP register.  */
2757       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2758                           2 * reg_index, buffer);
2759       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2760                           2 * reg_index + 1, buffer + 8);
2761     }
2762   else
2763     {
2764       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2765                           2 * reg_index + 1, buffer);
2766       regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2767                           2 * reg_index, buffer + 8);
2768     }
2769 }
2770
2771 /* Read method for POWER7 VSX pseudo-registers.  */
2772 static enum register_status
2773 vsx_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2774                            int reg_nr, gdb_byte *buffer)
2775 {
2776   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2777   int reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2778   enum register_status status;
2779
2780   /* Read the portion that overlaps the VMX registers.  */
2781   if (reg_index > 31)
2782     status = regcache_raw_read (regcache, tdep->ppc_vr0_regnum +
2783                                 reg_index - 32, buffer);
2784   else
2785     /* Read the portion that overlaps the FPR registers.  */
2786     if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2787       {
2788         status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2789                                     reg_index, buffer);
2790         if (status == REG_VALID)
2791           status = regcache_raw_read (regcache, tdep->ppc_vsr0_upper_regnum +
2792                                       reg_index, buffer + 8);
2793       }
2794     else
2795       {
2796         status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2797                                     reg_index, buffer + 8);
2798         if (status == REG_VALID)
2799           status = regcache_raw_read (regcache, tdep->ppc_vsr0_upper_regnum +
2800                                       reg_index, buffer);
2801       }
2802
2803   return status;
2804 }
2805
2806 /* Write method for POWER7 VSX pseudo-registers.  */
2807 static void
2808 vsx_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2809                             int reg_nr, const gdb_byte *buffer)
2810 {
2811   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2812   int reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2813
2814   /* Write the portion that overlaps the VMX registers.  */
2815   if (reg_index > 31)
2816     regcache_raw_write (regcache, tdep->ppc_vr0_regnum +
2817                         reg_index - 32, buffer);
2818   else
2819     /* Write the portion that overlaps the FPR registers.  */
2820     if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2821       {
2822         regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2823                         reg_index, buffer);
2824         regcache_raw_write (regcache, tdep->ppc_vsr0_upper_regnum +
2825                         reg_index, buffer + 8);
2826       }
2827     else
2828       {
2829         regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2830                         reg_index, buffer + 8);
2831         regcache_raw_write (regcache, tdep->ppc_vsr0_upper_regnum +
2832                         reg_index, buffer);
2833       }
2834 }
2835
2836 /* Read method for POWER7 Extended FP pseudo-registers.  */
2837 static enum register_status
2838 efpr_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2839                            int reg_nr, gdb_byte *buffer)
2840 {
2841   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2842   int reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2843   int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
2844
2845   /* Read the portion that overlaps the VMX register.  */
2846   return regcache_raw_read_part (regcache, tdep->ppc_vr0_regnum + reg_index,
2847                                  offset, register_size (gdbarch, reg_nr),
2848                                  buffer);
2849 }
2850
2851 /* Write method for POWER7 Extended FP pseudo-registers.  */
2852 static void
2853 efpr_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2854                             int reg_nr, const gdb_byte *buffer)
2855 {
2856   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2857   int reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2858   int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
2859
2860   /* Write the portion that overlaps the VMX register.  */
2861   regcache_raw_write_part (regcache, tdep->ppc_vr0_regnum + reg_index,
2862                            offset, register_size (gdbarch, reg_nr),
2863                            buffer);
2864 }
2865
2866 static enum register_status
2867 rs6000_pseudo_register_read (struct gdbarch *gdbarch,
2868                              struct regcache *regcache,
2869                              int reg_nr, gdb_byte *buffer)
2870 {
2871   struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2872   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 
2873
2874   gdb_assert (regcache_arch == gdbarch);
2875
2876   if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2877     return e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2878   else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2879     return dfp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2880   else if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2881     return vsx_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2882   else if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2883     return efpr_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2884   else
2885     internal_error (__FILE__, __LINE__,
2886                     _("rs6000_pseudo_register_read: "
2887                     "called on unexpected register '%s' (%d)"),
2888                     gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2889 }
2890
2891 static void
2892 rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2893                               struct regcache *regcache,
2894                               int reg_nr, const gdb_byte *buffer)
2895 {
2896   struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2897   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 
2898
2899   gdb_assert (regcache_arch == gdbarch);
2900
2901   if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2902     e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2903   else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2904     dfp_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2905   else if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2906     vsx_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2907   else if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2908     efpr_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2909   else
2910     internal_error (__FILE__, __LINE__,
2911                     _("rs6000_pseudo_register_write: "
2912                     "called on unexpected register '%s' (%d)"),
2913                     gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2914 }
2915
2916 static int
2917 rs6000_ax_pseudo_register_collect (struct gdbarch *gdbarch,
2918                                    struct agent_expr *ax, int reg_nr)
2919 {
2920   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2921   if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2922     {
2923       int reg_index = reg_nr - tdep->ppc_ev0_regnum;
2924       ax_reg_mask (ax, tdep->ppc_gp0_regnum + reg_index);
2925       ax_reg_mask (ax, tdep->ppc_ev0_upper_regnum + reg_index);
2926     }
2927   else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2928     {
2929       int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2930       ax_reg_mask (ax, tdep->ppc_fp0_regnum + 2 * reg_index);
2931       ax_reg_mask (ax, tdep->ppc_fp0_regnum + 2 * reg_index + 1);
2932     }
2933   else if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2934     {
2935       int reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2936       if (reg_index > 31)
2937         {
2938           ax_reg_mask (ax, tdep->ppc_vr0_regnum + reg_index - 32);
2939         }
2940       else
2941         {
2942           ax_reg_mask (ax, tdep->ppc_fp0_regnum + reg_index);
2943           ax_reg_mask (ax, tdep->ppc_vsr0_upper_regnum + reg_index);
2944         }
2945     }
2946   else if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2947     {
2948       int reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2949       ax_reg_mask (ax, tdep->ppc_vr0_regnum + reg_index);
2950     }
2951   else
2952     internal_error (__FILE__, __LINE__,
2953                     _("rs6000_pseudo_register_collect: "
2954                     "called on unexpected register '%s' (%d)"),
2955                     gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2956   return 0;
2957 }
2958
2959
2960 static void
2961 rs6000_gen_return_address (struct gdbarch *gdbarch,
2962                            struct agent_expr *ax, struct axs_value *value,
2963                            CORE_ADDR scope)
2964 {
2965   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2966   value->type = register_type (gdbarch, tdep->ppc_lr_regnum);
2967   value->kind = axs_lvalue_register;
2968   value->u.reg = tdep->ppc_lr_regnum;
2969 }
2970
2971
2972 /* Convert a DBX STABS register number to a GDB register number.  */
2973 static int
2974 rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
2975 {
2976   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2977
2978   if (0 <= num && num <= 31)
2979     return tdep->ppc_gp0_regnum + num;
2980   else if (32 <= num && num <= 63)
2981     /* FIXME: jimb/2004-05-05: What should we do when the debug info
2982        specifies registers the architecture doesn't have?  Our
2983        callers don't check the value we return.  */
2984     return tdep->ppc_fp0_regnum + (num - 32);
2985   else if (77 <= num && num <= 108)
2986     return tdep->ppc_vr0_regnum + (num - 77);
2987   else if (1200 <= num && num < 1200 + 32)
2988     return tdep->ppc_ev0_upper_regnum + (num - 1200);
2989   else
2990     switch (num)
2991       {
2992       case 64: 
2993         return tdep->ppc_mq_regnum;
2994       case 65:
2995         return tdep->ppc_lr_regnum;
2996       case 66: 
2997         return tdep->ppc_ctr_regnum;
2998       case 76: 
2999         return tdep->ppc_xer_regnum;
3000       case 109:
3001         return tdep->ppc_vrsave_regnum;
3002       case 110:
3003         return tdep->ppc_vrsave_regnum - 1; /* vscr */
3004       case 111:
3005         return tdep->ppc_acc_regnum;
3006       case 112:
3007         return tdep->ppc_spefscr_regnum;
3008       default: 
3009         return num;
3010       }
3011 }
3012
3013
3014 /* Convert a Dwarf 2 register number to a GDB register number.  */
3015 static int
3016 rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
3017 {
3018   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3019
3020   if (0 <= num && num <= 31)
3021     return tdep->ppc_gp0_regnum + num;
3022   else if (32 <= num && num <= 63)
3023     /* FIXME: jimb/2004-05-05: What should we do when the debug info
3024        specifies registers the architecture doesn't have?  Our
3025        callers don't check the value we return.  */
3026     return tdep->ppc_fp0_regnum + (num - 32);
3027   else if (1124 <= num && num < 1124 + 32)
3028     return tdep->ppc_vr0_regnum + (num - 1124);
3029   else if (1200 <= num && num < 1200 + 32)
3030     return tdep->ppc_ev0_upper_regnum + (num - 1200);
3031   else
3032     switch (num)
3033       {
3034       case 64:
3035         return tdep->ppc_cr_regnum;
3036       case 67:
3037         return tdep->ppc_vrsave_regnum - 1; /* vscr */
3038       case 99:
3039         return tdep->ppc_acc_regnum;
3040       case 100:
3041         return tdep->ppc_mq_regnum;
3042       case 101:
3043         return tdep->ppc_xer_regnum;
3044       case 108:
3045         return tdep->ppc_lr_regnum;
3046       case 109:
3047         return tdep->ppc_ctr_regnum;
3048       case 356:
3049         return tdep->ppc_vrsave_regnum;
3050       case 612:
3051         return tdep->ppc_spefscr_regnum;
3052       default:
3053         return num;
3054       }
3055 }
3056
3057 /* Translate a .eh_frame register to DWARF register, or adjust a
3058    .debug_frame register.  */
3059
3060 static int
3061 rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
3062 {
3063   /* GCC releases before 3.4 use GCC internal register numbering in
3064      .debug_frame (and .debug_info, et cetera).  The numbering is
3065      different from the standard SysV numbering for everything except
3066      for GPRs and FPRs.  We can not detect this problem in most cases
3067      - to get accurate debug info for variables living in lr, ctr, v0,
3068      et cetera, use a newer version of GCC.  But we must detect
3069      one important case - lr is in column 65 in .debug_frame output,
3070      instead of 108.
3071
3072      GCC 3.4, and the "hammer" branch, have a related problem.  They
3073      record lr register saves in .debug_frame as 108, but still record
3074      the return column as 65.  We fix that up too.
3075
3076      We can do this because 65 is assigned to fpsr, and GCC never
3077      generates debug info referring to it.  To add support for
3078      handwritten debug info that restores fpsr, we would need to add a
3079      producer version check to this.  */
3080   if (!eh_frame_p)
3081     {
3082       if (num == 65)
3083         return 108;
3084       else
3085         return num;
3086     }
3087
3088   /* .eh_frame is GCC specific.  For binary compatibility, it uses GCC
3089      internal register numbering; translate that to the standard DWARF2
3090      register numbering.  */
3091   if (0 <= num && num <= 63)    /* r0-r31,fp0-fp31 */
3092     return num;
3093   else if (68 <= num && num <= 75) /* cr0-cr8 */
3094     return num - 68 + 86;
3095   else if (77 <= num && num <= 108) /* vr0-vr31 */
3096     return num - 77 + 1124;
3097   else
3098     switch (num)
3099       {
3100       case 64: /* mq */
3101         return 100;
3102       case 65: /* lr */
3103         return 108;
3104       case 66: /* ctr */
3105         return 109;
3106       case 76: /* xer */
3107         return 101;
3108       case 109: /* vrsave */
3109         return 356;
3110       case 110: /* vscr */
3111         return 67;
3112       case 111: /* spe_acc */
3113         return 99;
3114       case 112: /* spefscr */
3115         return 612;
3116       default:
3117         return num;
3118       }
3119 }
3120 \f
3121
3122 /* Handling the various POWER/PowerPC variants.  */
3123
3124 /* Information about a particular processor variant.  */
3125
3126 struct variant
3127   {
3128     /* Name of this variant.  */
3129     char *name;
3130
3131     /* English description of the variant.  */
3132     char *description;
3133
3134     /* bfd_arch_info.arch corresponding to variant.  */
3135     enum bfd_architecture arch;
3136
3137     /* bfd_arch_info.mach corresponding to variant.  */
3138     unsigned long mach;
3139
3140     /* Target description for this variant.  */
3141     struct target_desc **tdesc;
3142   };
3143
3144 static struct variant variants[] =
3145 {
3146   {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
3147    bfd_mach_ppc, &tdesc_powerpc_altivec32},
3148   {"power", "POWER user-level", bfd_arch_rs6000,
3149    bfd_mach_rs6k, &tdesc_rs6000},
3150   {"403", "IBM PowerPC 403", bfd_arch_powerpc,
3151    bfd_mach_ppc_403, &tdesc_powerpc_403},
3152   {"405", "IBM PowerPC 405", bfd_arch_powerpc,
3153    bfd_mach_ppc_405, &tdesc_powerpc_405},
3154   {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
3155    bfd_mach_ppc_601, &tdesc_powerpc_601},
3156   {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
3157    bfd_mach_ppc_602, &tdesc_powerpc_602},
3158   {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
3159    bfd_mach_ppc_603, &tdesc_powerpc_603},
3160   {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
3161    604, &tdesc_powerpc_604},
3162   {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
3163    bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
3164   {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
3165    bfd_mach_ppc_505, &tdesc_powerpc_505},
3166   {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
3167    bfd_mach_ppc_860, &tdesc_powerpc_860},
3168   {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
3169    bfd_mach_ppc_750, &tdesc_powerpc_750},
3170   {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
3171    bfd_mach_ppc_7400, &tdesc_powerpc_7400},
3172   {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
3173    bfd_mach_ppc_e500, &tdesc_powerpc_e500},
3174
3175   /* 64-bit */
3176   {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
3177    bfd_mach_ppc64, &tdesc_powerpc_altivec64},
3178   {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
3179    bfd_mach_ppc_620, &tdesc_powerpc_64},
3180   {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
3181    bfd_mach_ppc_630, &tdesc_powerpc_64},
3182   {"a35", "PowerPC A35", bfd_arch_powerpc,
3183    bfd_mach_ppc_a35, &tdesc_powerpc_64},
3184   {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
3185    bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
3186   {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
3187    bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
3188
3189   /* FIXME: I haven't checked the register sets of the following.  */
3190   {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
3191    bfd_mach_rs6k_rs1, &tdesc_rs6000},
3192   {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
3193    bfd_mach_rs6k_rsc, &tdesc_rs6000},
3194   {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
3195    bfd_mach_rs6k_rs2, &tdesc_rs6000},
3196
3197   {0, 0, (enum bfd_architecture) 0, 0, 0}
3198 };
3199
3200 /* Return the variant corresponding to architecture ARCH and machine number
3201    MACH.  If no such variant exists, return null.  */
3202
3203 static const struct variant *
3204 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
3205 {
3206   const struct variant *v;
3207
3208   for (v = variants; v->name; v++)
3209     if (arch == v->arch && mach == v->mach)
3210       return v;
3211
3212   return NULL;
3213 }
3214
3215 static int
3216 gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
3217 {
3218   if (info->endian == BFD_ENDIAN_BIG)
3219     return print_insn_big_powerpc (memaddr, info);
3220   else
3221     return print_insn_little_powerpc (memaddr, info);
3222 }
3223 \f
3224 static CORE_ADDR
3225 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3226 {
3227   return frame_unwind_register_unsigned (next_frame,
3228                                          gdbarch_pc_regnum (gdbarch));
3229 }
3230
3231 static struct frame_id
3232 rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3233 {
3234   return frame_id_build (get_frame_register_unsigned
3235                           (this_frame, gdbarch_sp_regnum (gdbarch)),
3236                          get_frame_pc (this_frame));
3237 }
3238
3239 struct rs6000_frame_cache
3240 {
3241   CORE_ADDR base;
3242   CORE_ADDR initial_sp;
3243   struct trad_frame_saved_reg *saved_regs;
3244
3245   /* Set BASE_P to true if this frame cache is properly initialized.
3246      Otherwise set to false because some registers or memory cannot
3247      collected.  */
3248   int base_p;
3249   /* Cache PC for building unavailable frame.  */
3250   CORE_ADDR pc;
3251 };
3252
3253 static struct rs6000_frame_cache *
3254 rs6000_frame_cache (struct frame_info *this_frame, void **this_cache)
3255 {
3256   struct rs6000_frame_cache *cache;
3257   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3258   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3259   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3260   struct rs6000_framedata fdata;
3261   int wordsize = tdep->wordsize;
3262   CORE_ADDR func = 0, pc = 0;
3263
3264   if ((*this_cache) != NULL)
3265     return (struct rs6000_frame_cache *) (*this_cache);
3266   cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3267   (*this_cache) = cache;
3268   cache->pc = 0;
3269   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3270
3271   TRY
3272     {
3273       func = get_frame_func (this_frame);
3274       cache->pc = func;
3275       pc = get_frame_pc (this_frame);
3276       skip_prologue (gdbarch, func, pc, &fdata);
3277
3278       /* Figure out the parent's stack pointer.  */
3279
3280       /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
3281          address of the current frame.  Things might be easier if the
3282          ->frame pointed to the outer-most address of the frame.  In
3283          the mean time, the address of the prev frame is used as the
3284          base address of this frame.  */
3285       cache->base = get_frame_register_unsigned
3286         (this_frame, gdbarch_sp_regnum (gdbarch));
3287     }
3288   CATCH (ex, RETURN_MASK_ERROR)
3289     {
3290       if (ex.error != NOT_AVAILABLE_ERROR)
3291         throw_exception (ex);
3292       return (struct rs6000_frame_cache *) (*this_cache);
3293     }
3294   END_CATCH
3295
3296   /* If the function appears to be frameless, check a couple of likely
3297      indicators that we have simply failed to find the frame setup.
3298      Two common cases of this are missing symbols (i.e.
3299      get_frame_func returns the wrong address or 0), and assembly
3300      stubs which have a fast exit path but set up a frame on the slow
3301      path.
3302
3303      If the LR appears to return to this function, then presume that
3304      we have an ABI compliant frame that we failed to find.  */
3305   if (fdata.frameless && fdata.lr_offset == 0)
3306     {
3307       CORE_ADDR saved_lr;
3308       int make_frame = 0;
3309
3310       saved_lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3311       if (func == 0 && saved_lr == pc)
3312         make_frame = 1;
3313       else if (func != 0)
3314         {
3315           CORE_ADDR saved_func = get_pc_function_start (saved_lr);
3316           if (func == saved_func)
3317             make_frame = 1;
3318         }
3319
3320       if (make_frame)
3321         {
3322           fdata.frameless = 0;
3323           fdata.lr_offset = tdep->lr_frame_offset;
3324         }
3325     }
3326
3327   if (!fdata.frameless)
3328     {
3329       /* Frameless really means stackless.  */
3330       ULONGEST backchain;
3331
3332       if (safe_read_memory_unsigned_integer (cache->base, wordsize,
3333                                              byte_order, &backchain))
3334         cache->base = (CORE_ADDR) backchain;
3335     }
3336
3337   trad_frame_set_value (cache->saved_regs,
3338                         gdbarch_sp_regnum (gdbarch), cache->base);
3339
3340   /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3341      All fpr's from saved_fpr to fp31 are saved.  */
3342
3343   if (fdata.saved_fpr >= 0)
3344     {
3345       int i;
3346       CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
3347
3348       /* If skip_prologue says floating-point registers were saved,
3349          but the current architecture has no floating-point registers,
3350          then that's strange.  But we have no indices to even record
3351          the addresses under, so we just ignore it.  */
3352       if (ppc_floating_point_unit_p (gdbarch))
3353         for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
3354           {
3355             cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3356             fpr_addr += 8;
3357           }
3358     }
3359
3360   /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3361      All gpr's from saved_gpr to gpr31 are saved (except during the
3362      prologue).  */
3363
3364   if (fdata.saved_gpr >= 0)
3365     {
3366       int i;
3367       CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
3368       for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
3369         {
3370           if (fdata.gpr_mask & (1U << i))
3371             cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
3372           gpr_addr += wordsize;
3373         }
3374     }
3375
3376   /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3377      All vr's from saved_vr to vr31 are saved.  */
3378   if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
3379     {
3380       if (fdata.saved_vr >= 0)
3381         {
3382           int i;
3383           CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
3384           for (i = fdata.saved_vr; i < 32; i++)
3385             {
3386               cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
3387               vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
3388             }
3389         }
3390     }
3391
3392   /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3393      All vr's from saved_ev to ev31 are saved. ?????  */
3394   if (tdep->ppc_ev0_regnum != -1)
3395     {
3396       if (fdata.saved_ev >= 0)
3397         {
3398           int i;
3399           CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
3400           CORE_ADDR off = (byte_order == BFD_ENDIAN_BIG ? 4 : 0);
3401
3402           for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
3403             {
3404               cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
3405               cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + off;
3406               ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
3407             }
3408         }
3409     }
3410
3411   /* If != 0, fdata.cr_offset is the offset from the frame that
3412      holds the CR.  */
3413   if (fdata.cr_offset != 0)
3414     cache->saved_regs[tdep->ppc_cr_regnum].addr
3415       = cache->base + fdata.cr_offset;
3416
3417   /* If != 0, fdata.lr_offset is the offset from the frame that
3418      holds the LR.  */
3419   if (fdata.lr_offset != 0)
3420     cache->saved_regs[tdep->ppc_lr_regnum].addr
3421       = cache->base + fdata.lr_offset;
3422   else if (fdata.lr_register != -1)
3423     cache->saved_regs[tdep->ppc_lr_regnum].realreg = fdata.lr_register;
3424   /* The PC is found in the link register.  */
3425   cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3426     cache->saved_regs[tdep->ppc_lr_regnum];
3427
3428   /* If != 0, fdata.vrsave_offset is the offset from the frame that
3429      holds the VRSAVE.  */
3430   if (fdata.vrsave_offset != 0)
3431     cache->saved_regs[tdep->ppc_vrsave_regnum].addr
3432       = cache->base + fdata.vrsave_offset;
3433
3434   if (fdata.alloca_reg < 0)
3435     /* If no alloca register used, then fi->frame is the value of the
3436        %sp for this frame, and it is good enough.  */
3437     cache->initial_sp
3438       = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3439   else
3440     cache->initial_sp
3441       = get_frame_register_unsigned (this_frame, fdata.alloca_reg);
3442
3443   cache->base_p = 1;
3444   return cache;
3445 }
3446
3447 static void
3448 rs6000_frame_this_id (struct frame_info *this_frame, void **this_cache,
3449                       struct frame_id *this_id)
3450 {
3451   struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3452                                                         this_cache);
3453
3454   if (!info->base_p)
3455     {
3456       (*this_id) = frame_id_build_unavailable_stack (info->pc);
3457       return;
3458     }
3459
3460   /* This marks the outermost frame.  */
3461   if (info->base == 0)
3462     return;
3463
3464   (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3465 }
3466
3467 static struct value *
3468 rs6000_frame_prev_register (struct frame_info *this_frame,
3469                             void **this_cache, int regnum)
3470 {
3471   struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3472                                                         this_cache);
3473   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3474 }
3475
3476 static const struct frame_unwind rs6000_frame_unwind =
3477 {
3478   NORMAL_FRAME,
3479   default_frame_unwind_stop_reason,
3480   rs6000_frame_this_id,
3481   rs6000_frame_prev_register,
3482   NULL,
3483   default_frame_sniffer
3484 };
3485
3486 /* Allocate and initialize a frame cache for an epilogue frame.
3487    SP is restored and prev-PC is stored in LR.  */
3488
3489 static struct rs6000_frame_cache *
3490 rs6000_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
3491 {
3492   struct rs6000_frame_cache *cache;
3493   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3494   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3495
3496   if (*this_cache)
3497     return (struct rs6000_frame_cache *) *this_cache;
3498
3499   cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3500   (*this_cache) = cache;
3501   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3502
3503   TRY
3504     {
3505       /* At this point the stack looks as if we just entered the
3506          function, and the return address is stored in LR.  */
3507       CORE_ADDR sp, lr;
3508
3509       sp = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3510       lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3511
3512       cache->base = sp;
3513       cache->initial_sp = sp;
3514
3515       trad_frame_set_value (cache->saved_regs,
3516                             gdbarch_pc_regnum (gdbarch), lr);
3517     }
3518   CATCH (ex, RETURN_MASK_ERROR)
3519     {
3520       if (ex.error != NOT_AVAILABLE_ERROR)
3521         throw_exception (ex);
3522     }
3523   END_CATCH
3524
3525   return cache;
3526 }
3527
3528 /* Implementation of frame_unwind.this_id, as defined in frame_unwind.h.
3529    Return the frame ID of an epilogue frame.  */
3530
3531 static void
3532 rs6000_epilogue_frame_this_id (struct frame_info *this_frame,
3533                                void **this_cache, struct frame_id *this_id)
3534 {
3535   CORE_ADDR pc;
3536   struct rs6000_frame_cache *info =
3537     rs6000_epilogue_frame_cache (this_frame, this_cache);
3538
3539   pc = get_frame_func (this_frame);
3540   if (info->base == 0)
3541     (*this_id) = frame_id_build_unavailable_stack (pc);
3542   else
3543     (*this_id) = frame_id_build (info->base, pc);
3544 }
3545
3546 /* Implementation of frame_unwind.prev_register, as defined in frame_unwind.h.
3547    Return the register value of REGNUM in previous frame.  */
3548
3549 static struct value *
3550 rs6000_epilogue_frame_prev_register (struct frame_info *this_frame,
3551                                      void **this_cache, int regnum)
3552 {
3553   struct rs6000_frame_cache *info =
3554     rs6000_epilogue_frame_cache (this_frame, this_cache);
3555   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3556 }
3557
3558 /* Implementation of frame_unwind.sniffer, as defined in frame_unwind.h.
3559    Check whether this an epilogue frame.  */
3560
3561 static int
3562 rs6000_epilogue_frame_sniffer (const struct frame_unwind *self,
3563                                struct frame_info *this_frame,
3564                                void **this_prologue_cache)
3565 {
3566   if (frame_relative_level (this_frame) == 0)
3567     return rs6000_in_function_epilogue_frame_p (this_frame,
3568                                                 get_frame_arch (this_frame),
3569                                                 get_frame_pc (this_frame));
3570   else
3571     return 0;
3572 }
3573
3574 /* Frame unwinder for epilogue frame.  This is required for reverse step-over
3575    a function without debug information.  */
3576
3577 static const struct frame_unwind rs6000_epilogue_frame_unwind =
3578 {
3579   NORMAL_FRAME,
3580   default_frame_unwind_stop_reason,
3581   rs6000_epilogue_frame_this_id, rs6000_epilogue_frame_prev_register,
3582   NULL,
3583   rs6000_epilogue_frame_sniffer
3584 };
3585 \f
3586
3587 static CORE_ADDR
3588 rs6000_frame_base_address (struct frame_info *this_frame, void **this_cache)
3589 {
3590   struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3591                                                         this_cache);
3592   return info->initial_sp;
3593 }
3594
3595 static const struct frame_base rs6000_frame_base = {
3596   &rs6000_frame_unwind,
3597   rs6000_frame_base_address,
3598   rs6000_frame_base_address,
3599   rs6000_frame_base_address
3600 };
3601
3602 static const struct frame_base *
3603 rs6000_frame_base_sniffer (struct frame_info *this_frame)
3604 {
3605   return &rs6000_frame_base;
3606 }
3607
3608 /* DWARF-2 frame support.  Used to handle the detection of
3609   clobbered registers during function calls.  */
3610
3611 static void
3612 ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3613                             struct dwarf2_frame_state_reg *reg,
3614                             struct frame_info *this_frame)
3615 {
3616   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3617
3618   /* PPC32 and PPC64 ABI's are the same regarding volatile and
3619      non-volatile registers.  We will use the same code for both.  */
3620
3621   /* Call-saved GP registers.  */
3622   if ((regnum >= tdep->ppc_gp0_regnum + 14
3623       && regnum <= tdep->ppc_gp0_regnum + 31)
3624       || (regnum == tdep->ppc_gp0_regnum + 1))
3625     reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3626
3627   /* Call-clobbered GP registers.  */
3628   if ((regnum >= tdep->ppc_gp0_regnum + 3
3629       && regnum <= tdep->ppc_gp0_regnum + 12)
3630       || (regnum == tdep->ppc_gp0_regnum))
3631     reg->how = DWARF2_FRAME_REG_UNDEFINED;
3632
3633   /* Deal with FP registers, if supported.  */
3634   if (tdep->ppc_fp0_regnum >= 0)
3635     {
3636       /* Call-saved FP registers.  */
3637       if ((regnum >= tdep->ppc_fp0_regnum + 14
3638           && regnum <= tdep->ppc_fp0_regnum + 31))
3639         reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3640
3641       /* Call-clobbered FP registers.  */
3642       if ((regnum >= tdep->ppc_fp0_regnum
3643           && regnum <= tdep->ppc_fp0_regnum + 13))
3644         reg->how = DWARF2_FRAME_REG_UNDEFINED;
3645     }
3646
3647   /* Deal with ALTIVEC registers, if supported.  */
3648   if (tdep->ppc_vr0_regnum > 0 && tdep->ppc_vrsave_regnum > 0)
3649     {
3650       /* Call-saved Altivec registers.  */
3651       if ((regnum >= tdep->ppc_vr0_regnum + 20
3652           && regnum <= tdep->ppc_vr0_regnum + 31)
3653           || regnum == tdep->ppc_vrsave_regnum)
3654         reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3655
3656       /* Call-clobbered Altivec registers.  */
3657       if ((regnum >= tdep->ppc_vr0_regnum
3658           && regnum <= tdep->ppc_vr0_regnum + 19))
3659         reg->how = DWARF2_FRAME_REG_UNDEFINED;
3660     }
3661
3662   /* Handle PC register and Stack Pointer correctly.  */
3663   if (regnum == gdbarch_pc_regnum (gdbarch))
3664     reg->how = DWARF2_FRAME_REG_RA;
3665   else if (regnum == gdbarch_sp_regnum (gdbarch))
3666     reg->how = DWARF2_FRAME_REG_CFA;
3667 }
3668
3669
3670 /* Return true if a .gnu_attributes section exists in BFD and it
3671    indicates we are using SPE extensions OR if a .PPC.EMB.apuinfo
3672    section exists in BFD and it indicates that SPE extensions are in
3673    use.  Check the .gnu.attributes section first, as the binary might be
3674    compiled for SPE, but not actually using SPE instructions.  */
3675
3676 static int
3677 bfd_uses_spe_extensions (bfd *abfd)
3678 {
3679   asection *sect;
3680   gdb_byte *contents = NULL;
3681   bfd_size_type size;
3682   gdb_byte *ptr;
3683   int success = 0;
3684   int vector_abi;
3685
3686   if (!abfd)
3687     return 0;
3688
3689 #ifdef HAVE_ELF
3690   /* Using Tag_GNU_Power_ABI_Vector here is a bit of a hack, as the user
3691      could be using the SPE vector abi without actually using any spe
3692      bits whatsoever.  But it's close enough for now.  */
3693   vector_abi = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_GNU,
3694                                          Tag_GNU_Power_ABI_Vector);
3695   if (vector_abi == 3)
3696     return 1;
3697 #endif
3698
3699   sect = bfd_get_section_by_name (abfd, ".PPC.EMB.apuinfo");
3700   if (!sect)
3701     return 0;
3702
3703   size = bfd_get_section_size (sect);
3704   contents = (gdb_byte *) xmalloc (size);
3705   if (!bfd_get_section_contents (abfd, sect, contents, 0, size))
3706     {
3707       xfree (contents);
3708       return 0;
3709     }
3710
3711   /* Parse the .PPC.EMB.apuinfo section.  The layout is as follows:
3712
3713      struct {
3714        uint32 name_len;
3715        uint32 data_len;
3716        uint32 type;
3717        char name[name_len rounded up to 4-byte alignment];
3718        char data[data_len];
3719      };
3720
3721      Technically, there's only supposed to be one such structure in a
3722      given apuinfo section, but the linker is not always vigilant about
3723      merging apuinfo sections from input files.  Just go ahead and parse
3724      them all, exiting early when we discover the binary uses SPE
3725      insns.
3726
3727      It's not specified in what endianness the information in this
3728      section is stored.  Assume that it's the endianness of the BFD.  */
3729   ptr = contents;
3730   while (1)
3731     {
3732       unsigned int name_len;
3733       unsigned int data_len;
3734       unsigned int type;
3735
3736       /* If we can't read the first three fields, we're done.  */
3737       if (size < 12)
3738         break;
3739
3740       name_len = bfd_get_32 (abfd, ptr);
3741       name_len = (name_len + 3) & ~3U; /* Round to 4 bytes.  */
3742       data_len = bfd_get_32 (abfd, ptr + 4);
3743       type = bfd_get_32 (abfd, ptr + 8);
3744       ptr += 12;
3745
3746       /* The name must be "APUinfo\0".  */
3747       if (name_len != 8
3748           && strcmp ((const char *) ptr, "APUinfo") != 0)
3749         break;
3750       ptr += name_len;
3751
3752       /* The type must be 2.  */
3753       if (type != 2)
3754         break;
3755
3756       /* The data is stored as a series of uint32.  The upper half of
3757          each uint32 indicates the particular APU used and the lower
3758          half indicates the revision of that APU.  We just care about
3759          the upper half.  */
3760
3761       /* Not 4-byte quantities.  */
3762       if (data_len & 3U)
3763         break;
3764
3765       while (data_len)
3766         {
3767           unsigned int apuinfo = bfd_get_32 (abfd, ptr);
3768           unsigned int apu = apuinfo >> 16;
3769           ptr += 4;
3770           data_len -= 4;
3771
3772           /* The SPE APU is 0x100; the SPEFP APU is 0x101.  Accept
3773              either.  */
3774           if (apu == 0x100 || apu == 0x101)
3775             {
3776               success = 1;
3777               data_len = 0;
3778             }
3779         }
3780
3781       if (success)
3782         break;
3783     }
3784
3785   xfree (contents);
3786   return success;
3787 }
3788
3789 /* These are macros for parsing instruction fields (I.1.6.28)  */
3790
3791 #define PPC_FIELD(value, from, len) \
3792         (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1))
3793 #define PPC_SEXT(v, bs) \
3794         ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \
3795           ^ ((CORE_ADDR) 1 << ((bs) - 1))) \
3796          - ((CORE_ADDR) 1 << ((bs) - 1)))
3797 #define PPC_OP6(insn)   PPC_FIELD (insn, 0, 6)
3798 #define PPC_EXTOP(insn) PPC_FIELD (insn, 21, 10)
3799 #define PPC_RT(insn)    PPC_FIELD (insn, 6, 5)
3800 #define PPC_RS(insn)    PPC_FIELD (insn, 6, 5)
3801 #define PPC_RA(insn)    PPC_FIELD (insn, 11, 5)
3802 #define PPC_RB(insn)    PPC_FIELD (insn, 16, 5)
3803 #define PPC_NB(insn)    PPC_FIELD (insn, 16, 5)
3804 #define PPC_VRT(insn)   PPC_FIELD (insn, 6, 5)
3805 #define PPC_FRT(insn)   PPC_FIELD (insn, 6, 5)
3806 #define PPC_SPR(insn)   (PPC_FIELD (insn, 11, 5) \
3807                         | (PPC_FIELD (insn, 16, 5) << 5))
3808 #define PPC_BO(insn)    PPC_FIELD (insn, 6, 5)
3809 #define PPC_T(insn)     PPC_FIELD (insn, 6, 5)
3810 #define PPC_D(insn)     PPC_SEXT (PPC_FIELD (insn, 16, 16), 16)
3811 #define PPC_DS(insn)    PPC_SEXT (PPC_FIELD (insn, 16, 14), 14)
3812 #define PPC_DQ(insn)    PPC_SEXT (PPC_FIELD (insn, 16, 12), 12)
3813 #define PPC_BIT(insn,n) ((insn & (1 << (31 - (n)))) ? 1 : 0)
3814 #define PPC_OE(insn)    PPC_BIT (insn, 21)
3815 #define PPC_RC(insn)    PPC_BIT (insn, 31)
3816 #define PPC_Rc(insn)    PPC_BIT (insn, 21)
3817 #define PPC_LK(insn)    PPC_BIT (insn, 31)
3818 #define PPC_TX(insn)    PPC_BIT (insn, 31)
3819 #define PPC_LEV(insn)   PPC_FIELD (insn, 20, 7)
3820
3821 #define PPC_XT(insn)    ((PPC_TX (insn) << 5) | PPC_T (insn))
3822 #define PPC_XER_NB(xer) (xer & 0x7f)
3823
3824 /* Record Vector-Scalar Registers.
3825    For VSR less than 32, it's represented by an FPR and an VSR-upper register.
3826    Otherwise, it's just a VR register.  Record them accordingly.  */
3827
3828 static int
3829 ppc_record_vsr (struct regcache *regcache, struct gdbarch_tdep *tdep, int vsr)
3830 {
3831   if (vsr < 0 || vsr >= 64)
3832     return -1;
3833
3834   if (vsr >= 32)
3835     {
3836       if (tdep->ppc_vr0_regnum >= 0)
3837         record_full_arch_list_add_reg (regcache, tdep->ppc_vr0_regnum + vsr - 32);
3838     }
3839   else
3840     {
3841       if (tdep->ppc_fp0_regnum >= 0)
3842         record_full_arch_list_add_reg (regcache, tdep->ppc_fp0_regnum + vsr);
3843       if (tdep->ppc_vsr0_upper_regnum >= 0)
3844         record_full_arch_list_add_reg (regcache,
3845                                        tdep->ppc_vsr0_upper_regnum + vsr);
3846     }
3847
3848   return 0;
3849 }
3850
3851 /* Parse and record instructions primary opcode-4 at ADDR.
3852    Return 0 if successful.  */
3853
3854 static int
3855 ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
3856                         CORE_ADDR addr, uint32_t insn)
3857 {
3858   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3859   int ext = PPC_FIELD (insn, 21, 11);
3860   int vra = PPC_FIELD (insn, 11, 5);
3861
3862   switch (ext & 0x3f)
3863     {
3864     case 32:            /* Vector Multiply-High-Add Signed Halfword Saturate */
3865     case 33:            /* Vector Multiply-High-Round-Add Signed Halfword Saturate */
3866     case 39:            /* Vector Multiply-Sum Unsigned Halfword Saturate */
3867     case 41:            /* Vector Multiply-Sum Signed Halfword Saturate */
3868       record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
3869       /* FALL-THROUGH */
3870     case 42:            /* Vector Select */
3871     case 43:            /* Vector Permute */
3872     case 59:            /* Vector Permute Right-indexed */
3873     case 44:            /* Vector Shift Left Double by Octet Immediate */
3874     case 45:            /* Vector Permute and Exclusive-OR */
3875     case 60:            /* Vector Add Extended Unsigned Quadword Modulo */
3876     case 61:            /* Vector Add Extended & write Carry Unsigned Quadword */
3877     case 62:            /* Vector Subtract Extended Unsigned Quadword Modulo */
3878     case 63:            /* Vector Subtract Extended & write Carry Unsigned Quadword */
3879     case 34:            /* Vector Multiply-Low-Add Unsigned Halfword Modulo */
3880     case 35:            /* Vector Multiply-Sum Unsigned Doubleword Modulo */
3881     case 36:            /* Vector Multiply-Sum Unsigned Byte Modulo */
3882     case 37:            /* Vector Multiply-Sum Mixed Byte Modulo */
3883     case 38:            /* Vector Multiply-Sum Unsigned Halfword Modulo */
3884     case 40:            /* Vector Multiply-Sum Signed Halfword Modulo */
3885     case 46:            /* Vector Multiply-Add Single-Precision */
3886     case 47:            /* Vector Negative Multiply-Subtract Single-Precision */
3887       record_full_arch_list_add_reg (regcache,
3888                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
3889       return 0;
3890
3891     case 48:            /* Multiply-Add High Doubleword */
3892     case 49:            /* Multiply-Add High Doubleword Unsigned */
3893     case 51:            /* Multiply-Add Low Doubleword */
3894       record_full_arch_list_add_reg (regcache,
3895                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
3896       return 0;
3897     }
3898
3899   switch ((ext & 0x1ff))
3900     {
3901     case 385:
3902       if (vra != 0      /* Decimal Convert To Signed Quadword */
3903           && vra != 2   /* Decimal Convert From Signed Quadword */
3904           && vra != 4   /* Decimal Convert To Zoned */
3905           && vra != 5   /* Decimal Convert To National */
3906           && vra != 6   /* Decimal Convert From Zoned */
3907           && vra != 7   /* Decimal Convert From National */
3908           && vra != 31) /* Decimal Set Sign */
3909         break;
3910                         /* 5.16 Decimal Integer Arithmetic Instructions */
3911     case 1:             /* Decimal Add Modulo */
3912     case 65:            /* Decimal Subtract Modulo */
3913
3914     case 193:           /* Decimal Shift */
3915     case 129:           /* Decimal Unsigned Shift */
3916     case 449:           /* Decimal Shift and Round */
3917
3918     case 257:           /* Decimal Truncate */
3919     case 321:           /* Decimal Unsigned Truncate */
3920
3921       /* Bit-21 should be set.  */
3922       if (!PPC_BIT (insn, 21))
3923         break;
3924
3925       record_full_arch_list_add_reg (regcache,
3926                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
3927       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
3928       return 0;
3929     }
3930
3931   /* Bit-21 is used for RC */
3932   switch (ext & 0x3ff)
3933     {
3934     case 6:             /* Vector Compare Equal To Unsigned Byte */
3935     case 70:            /* Vector Compare Equal To Unsigned Halfword */
3936     case 134:           /* Vector Compare Equal To Unsigned Word */
3937     case 199:           /* Vector Compare Equal To Unsigned Doubleword */
3938     case 774:           /* Vector Compare Greater Than Signed Byte */
3939     case 838:           /* Vector Compare Greater Than Signed Halfword */
3940     case 902:           /* Vector Compare Greater Than Signed Word */
3941     case 967:           /* Vector Compare Greater Than Signed Doubleword */
3942     case 518:           /* Vector Compare Greater Than Unsigned Byte */
3943     case 646:           /* Vector Compare Greater Than Unsigned Word */
3944     case 582:           /* Vector Compare Greater Than Unsigned Halfword */
3945     case 711:           /* Vector Compare Greater Than Unsigned Doubleword */
3946     case 966:           /* Vector Compare Bounds Single-Precision */
3947     case 198:           /* Vector Compare Equal To Single-Precision */
3948     case 454:           /* Vector Compare Greater Than or Equal To Single-Precision */
3949     case 710:           /* Vector Compare Greater Than Single-Precision */
3950     case 7:             /* Vector Compare Not Equal Byte */
3951     case 71:            /* Vector Compare Not Equal Halfword */
3952     case 135:           /* Vector Compare Not Equal Word */
3953     case 263:           /* Vector Compare Not Equal or Zero Byte */
3954     case 327:           /* Vector Compare Not Equal or Zero Halfword */
3955     case 391:           /* Vector Compare Not Equal or Zero Word */
3956       if (PPC_Rc (insn))
3957         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
3958       record_full_arch_list_add_reg (regcache,
3959                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
3960       return 0;
3961     }
3962
3963   if (ext  == 1538)
3964     {
3965       switch (vra)
3966         {
3967         case 0:         /* Vector Count Leading Zero Least-Significant Bits
3968                            Byte */
3969         case 1:         /* Vector Count Trailing Zero Least-Significant Bits
3970                            Byte */
3971           record_full_arch_list_add_reg (regcache,
3972                                          tdep->ppc_gp0_regnum + PPC_RT (insn));
3973           return 0;
3974
3975         case 6:         /* Vector Negate Word */
3976         case 7:         /* Vector Negate Doubleword */
3977         case 8:         /* Vector Parity Byte Word */
3978         case 9:         /* Vector Parity Byte Doubleword */
3979         case 10:        /* Vector Parity Byte Quadword */
3980         case 16:        /* Vector Extend Sign Byte To Word */
3981         case 17:        /* Vector Extend Sign Halfword To Word */
3982         case 24:        /* Vector Extend Sign Byte To Doubleword */
3983         case 25:        /* Vector Extend Sign Halfword To Doubleword */
3984         case 26:        /* Vector Extend Sign Word To Doubleword */
3985         case 28:        /* Vector Count Trailing Zeros Byte */
3986         case 29:        /* Vector Count Trailing Zeros Halfword */
3987         case 30:        /* Vector Count Trailing Zeros Word */
3988         case 31:        /* Vector Count Trailing Zeros Doubleword */
3989           record_full_arch_list_add_reg (regcache,
3990                                          tdep->ppc_vr0_regnum + PPC_VRT (insn));
3991           return 0;
3992         }
3993     }
3994
3995   switch (ext)
3996     {
3997     case 142:           /* Vector Pack Unsigned Halfword Unsigned Saturate */
3998     case 206:           /* Vector Pack Unsigned Word Unsigned Saturate */
3999     case 270:           /* Vector Pack Signed Halfword Unsigned Saturate */
4000     case 334:           /* Vector Pack Signed Word Unsigned Saturate */
4001     case 398:           /* Vector Pack Signed Halfword Signed Saturate */
4002     case 462:           /* Vector Pack Signed Word Signed Saturate */
4003     case 1230:          /* Vector Pack Unsigned Doubleword Unsigned Saturate */
4004     case 1358:          /* Vector Pack Signed Doubleword Unsigned Saturate */
4005     case 1486:          /* Vector Pack Signed Doubleword Signed Saturate */
4006     case 512:           /* Vector Add Unsigned Byte Saturate */
4007     case 576:           /* Vector Add Unsigned Halfword Saturate */
4008     case 640:           /* Vector Add Unsigned Word Saturate */
4009     case 768:           /* Vector Add Signed Byte Saturate */
4010     case 832:           /* Vector Add Signed Halfword Saturate */
4011     case 896:           /* Vector Add Signed Word Saturate */
4012     case 1536:          /* Vector Subtract Unsigned Byte Saturate */
4013     case 1600:          /* Vector Subtract Unsigned Halfword Saturate */
4014     case 1664:          /* Vector Subtract Unsigned Word Saturate */
4015     case 1792:          /* Vector Subtract Signed Byte Saturate */
4016     case 1856:          /* Vector Subtract Signed Halfword Saturate */
4017     case 1920:          /* Vector Subtract Signed Word Saturate */
4018
4019     case 1544:          /* Vector Sum across Quarter Unsigned Byte Saturate */
4020     case 1800:          /* Vector Sum across Quarter Signed Byte Saturate */
4021     case 1608:          /* Vector Sum across Quarter Signed Halfword Saturate */
4022     case 1672:          /* Vector Sum across Half Signed Word Saturate */
4023     case 1928:          /* Vector Sum across Signed Word Saturate */
4024     case 970:           /* Vector Convert To Signed Fixed-Point Word Saturate */
4025     case 906:           /* Vector Convert To Unsigned Fixed-Point Word Saturate */
4026       record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
4027       /* FALL-THROUGH */
4028     case 12:            /* Vector Merge High Byte */
4029     case 14:            /* Vector Pack Unsigned Halfword Unsigned Modulo */
4030     case 76:            /* Vector Merge High Halfword */
4031     case 78:            /* Vector Pack Unsigned Word Unsigned Modulo */
4032     case 140:           /* Vector Merge High Word */
4033     case 268:           /* Vector Merge Low Byte */
4034     case 332:           /* Vector Merge Low Halfword */
4035     case 396:           /* Vector Merge Low Word */
4036     case 526:           /* Vector Unpack High Signed Byte */
4037     case 590:           /* Vector Unpack High Signed Halfword */
4038     case 654:           /* Vector Unpack Low Signed Byte */
4039     case 718:           /* Vector Unpack Low Signed Halfword */
4040     case 782:           /* Vector Pack Pixel */
4041     case 846:           /* Vector Unpack High Pixel */
4042     case 974:           /* Vector Unpack Low Pixel */
4043     case 1102:          /* Vector Pack Unsigned Doubleword Unsigned Modulo */
4044     case 1614:          /* Vector Unpack High Signed Word */
4045     case 1676:          /* Vector Merge Odd Word */
4046     case 1742:          /* Vector Unpack Low Signed Word */
4047     case 1932:          /* Vector Merge Even Word */
4048     case 524:           /* Vector Splat Byte */
4049     case 588:           /* Vector Splat Halfword */
4050     case 652:           /* Vector Splat Word */
4051     case 780:           /* Vector Splat Immediate Signed Byte */
4052     case 844:           /* Vector Splat Immediate Signed Halfword */
4053     case 908:           /* Vector Splat Immediate Signed Word */
4054     case 452:           /* Vector Shift Left */
4055     case 708:           /* Vector Shift Right */
4056     case 1036:          /* Vector Shift Left by Octet */
4057     case 1100:          /* Vector Shift Right by Octet */
4058     case 0:             /* Vector Add Unsigned Byte Modulo */
4059     case 64:            /* Vector Add Unsigned Halfword Modulo */
4060     case 128:           /* Vector Add Unsigned Word Modulo */
4061     case 192:           /* Vector Add Unsigned Doubleword Modulo */
4062     case 256:           /* Vector Add Unsigned Quadword Modulo */
4063     case 320:           /* Vector Add & write Carry Unsigned Quadword */
4064     case 384:           /* Vector Add and Write Carry-Out Unsigned Word */
4065     case 8:             /* Vector Multiply Odd Unsigned Byte */
4066     case 72:            /* Vector Multiply Odd Unsigned Halfword */
4067     case 136:           /* Vector Multiply Odd Unsigned Word */
4068     case 264:           /* Vector Multiply Odd Signed Byte */
4069     case 328:           /* Vector Multiply Odd Signed Halfword */
4070     case 392:           /* Vector Multiply Odd Signed Word */
4071     case 520:           /* Vector Multiply Even Unsigned Byte */
4072     case 584:           /* Vector Multiply Even Unsigned Halfword */
4073     case 648:           /* Vector Multiply Even Unsigned Word */
4074     case 776:           /* Vector Multiply Even Signed Byte */
4075     case 840:           /* Vector Multiply Even Signed Halfword */
4076     case 904:           /* Vector Multiply Even Signed Word */
4077     case 137:           /* Vector Multiply Unsigned Word Modulo */
4078     case 1024:          /* Vector Subtract Unsigned Byte Modulo */
4079     case 1088:          /* Vector Subtract Unsigned Halfword Modulo */
4080     case 1152:          /* Vector Subtract Unsigned Word Modulo */
4081     case 1216:          /* Vector Subtract Unsigned Doubleword Modulo */
4082     case 1280:          /* Vector Subtract Unsigned Quadword Modulo */
4083     case 1344:          /* Vector Subtract & write Carry Unsigned Quadword */
4084     case 1408:          /* Vector Subtract and Write Carry-Out Unsigned Word */
4085     case 1282:          /* Vector Average Signed Byte */
4086     case 1346:          /* Vector Average Signed Halfword */
4087     case 1410:          /* Vector Average Signed Word */
4088     case 1026:          /* Vector Average Unsigned Byte */
4089     case 1090:          /* Vector Average Unsigned Halfword */
4090     case 1154:          /* Vector Average Unsigned Word */
4091     case 258:           /* Vector Maximum Signed Byte */
4092     case 322:           /* Vector Maximum Signed Halfword */
4093     case 386:           /* Vector Maximum Signed Word */
4094     case 450:           /* Vector Maximum Signed Doubleword */
4095     case 2:             /* Vector Maximum Unsigned Byte */
4096     case 66:            /* Vector Maximum Unsigned Halfword */
4097     case 130:           /* Vector Maximum Unsigned Word */
4098     case 194:           /* Vector Maximum Unsigned Doubleword */
4099     case 770:           /* Vector Minimum Signed Byte */
4100     case 834:           /* Vector Minimum Signed Halfword */
4101     case 898:           /* Vector Minimum Signed Word */
4102     case 962:           /* Vector Minimum Signed Doubleword */
4103     case 514:           /* Vector Minimum Unsigned Byte */
4104     case 578:           /* Vector Minimum Unsigned Halfword */
4105     case 642:           /* Vector Minimum Unsigned Word */
4106     case 706:           /* Vector Minimum Unsigned Doubleword */
4107     case 1028:          /* Vector Logical AND */
4108     case 1668:          /* Vector Logical Equivalent */
4109     case 1092:          /* Vector Logical AND with Complement */
4110     case 1412:          /* Vector Logical NAND */
4111     case 1348:          /* Vector Logical OR with Complement */
4112     case 1156:          /* Vector Logical OR */
4113     case 1284:          /* Vector Logical NOR */
4114     case 1220:          /* Vector Logical XOR */
4115     case 4:             /* Vector Rotate Left Byte */
4116     case 132:           /* Vector Rotate Left Word VX-form */
4117     case 68:            /* Vector Rotate Left Halfword */
4118     case 196:           /* Vector Rotate Left Doubleword */
4119     case 260:           /* Vector Shift Left Byte */
4120     case 388:           /* Vector Shift Left Word */
4121     case 324:           /* Vector Shift Left Halfword */
4122     case 1476:          /* Vector Shift Left Doubleword */
4123     case 516:           /* Vector Shift Right Byte */
4124     case 644:           /* Vector Shift Right Word */
4125     case 580:           /* Vector Shift Right Halfword */
4126     case 1732:          /* Vector Shift Right Doubleword */
4127     case 772:           /* Vector Shift Right Algebraic Byte */
4128     case 900:           /* Vector Shift Right Algebraic Word */
4129     case 836:           /* Vector Shift Right Algebraic Halfword */
4130     case 964:           /* Vector Shift Right Algebraic Doubleword */
4131     case 10:            /* Vector Add Single-Precision */
4132     case 74:            /* Vector Subtract Single-Precision */
4133     case 1034:          /* Vector Maximum Single-Precision */
4134     case 1098:          /* Vector Minimum Single-Precision */
4135     case 842:           /* Vector Convert From Signed Fixed-Point Word */
4136     case 778:           /* Vector Convert From Unsigned Fixed-Point Word */
4137     case 714:           /* Vector Round to Single-Precision Integer toward -Infinity */
4138     case 522:           /* Vector Round to Single-Precision Integer Nearest */
4139     case 650:           /* Vector Round to Single-Precision Integer toward +Infinity */
4140     case 586:           /* Vector Round to Single-Precision Integer toward Zero */
4141     case 394:           /* Vector 2 Raised to the Exponent Estimate Floating-Point */
4142     case 458:           /* Vector Log Base 2 Estimate Floating-Point */
4143     case 266:           /* Vector Reciprocal Estimate Single-Precision */
4144     case 330:           /* Vector Reciprocal Square Root Estimate Single-Precision */
4145     case 1288:          /* Vector AES Cipher */
4146     case 1289:          /* Vector AES Cipher Last */
4147     case 1352:          /* Vector AES Inverse Cipher */
4148     case 1353:          /* Vector AES Inverse Cipher Last */
4149     case 1480:          /* Vector AES SubBytes */
4150     case 1730:          /* Vector SHA-512 Sigma Doubleword */
4151     case 1666:          /* Vector SHA-256 Sigma Word */
4152     case 1032:          /* Vector Polynomial Multiply-Sum Byte */
4153     case 1160:          /* Vector Polynomial Multiply-Sum Word */
4154     case 1096:          /* Vector Polynomial Multiply-Sum Halfword */
4155     case 1224:          /* Vector Polynomial Multiply-Sum Doubleword */
4156     case 1292:          /* Vector Gather Bits by Bytes by Doubleword */
4157     case 1794:          /* Vector Count Leading Zeros Byte */
4158     case 1858:          /* Vector Count Leading Zeros Halfword */
4159     case 1922:          /* Vector Count Leading Zeros Word */
4160     case 1986:          /* Vector Count Leading Zeros Doubleword */
4161     case 1795:          /* Vector Population Count Byte */
4162     case 1859:          /* Vector Population Count Halfword */
4163     case 1923:          /* Vector Population Count Word */
4164     case 1987:          /* Vector Population Count Doubleword */
4165     case 1356:          /* Vector Bit Permute Quadword */
4166     case 1484:          /* Vector Bit Permute Doubleword */
4167     case 513:           /* Vector Multiply-by-10 Unsigned Quadword */
4168     case 1:             /* Vector Multiply-by-10 & write Carry Unsigned
4169                            Quadword */
4170     case 577:           /* Vector Multiply-by-10 Extended Unsigned Quadword */
4171     case 65:            /* Vector Multiply-by-10 Extended & write Carry
4172                            Unsigned Quadword */
4173     case 1027:          /* Vector Absolute Difference Unsigned Byte */
4174     case 1091:          /* Vector Absolute Difference Unsigned Halfword */
4175     case 1155:          /* Vector Absolute Difference Unsigned Word */
4176     case 1796:          /* Vector Shift Right Variable */
4177     case 1860:          /* Vector Shift Left Variable */
4178     case 133:           /* Vector Rotate Left Word then Mask Insert */
4179     case 197:           /* Vector Rotate Left Doubleword then Mask Insert */
4180     case 389:           /* Vector Rotate Left Word then AND with Mask */
4181     case 453:           /* Vector Rotate Left Doubleword then AND with Mask */
4182     case 525:           /* Vector Extract Unsigned Byte */
4183     case 589:           /* Vector Extract Unsigned Halfword */
4184     case 653:           /* Vector Extract Unsigned Word */
4185     case 717:           /* Vector Extract Doubleword */
4186     case 781:           /* Vector Insert Byte */
4187     case 845:           /* Vector Insert Halfword */
4188     case 909:           /* Vector Insert Word */
4189     case 973:           /* Vector Insert Doubleword */
4190       record_full_arch_list_add_reg (regcache,
4191                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
4192       return 0;
4193
4194     case 1549:          /* Vector Extract Unsigned Byte Left-Indexed */
4195     case 1613:          /* Vector Extract Unsigned Halfword Left-Indexed */
4196     case 1677:          /* Vector Extract Unsigned Word Left-Indexed */
4197     case 1805:          /* Vector Extract Unsigned Byte Right-Indexed */
4198     case 1869:          /* Vector Extract Unsigned Halfword Right-Indexed */
4199     case 1933:          /* Vector Extract Unsigned Word Right-Indexed */
4200       record_full_arch_list_add_reg (regcache,
4201                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4202       return 0;
4203
4204     case 1604:          /* Move To Vector Status and Control Register */
4205       record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
4206       return 0;
4207     case 1540:          /* Move From Vector Status and Control Register */
4208       record_full_arch_list_add_reg (regcache,
4209                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
4210       return 0;
4211     case 833:           /* Decimal Copy Sign */
4212       record_full_arch_list_add_reg (regcache,
4213                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
4214       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4215       return 0;
4216     }
4217
4218   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4219                       "at %s, 4-%d.\n", insn, paddress (gdbarch, addr), ext);
4220   return -1;
4221 }
4222
4223 /* Parse and record instructions of primary opcode-19 at ADDR.
4224    Return 0 if successful.  */
4225
4226 static int
4227 ppc_process_record_op19 (struct gdbarch *gdbarch, struct regcache *regcache,
4228                            CORE_ADDR addr, uint32_t insn)
4229 {
4230   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4231   int ext = PPC_EXTOP (insn);
4232
4233   switch (ext & 0x01f)
4234     {
4235     case 2:             /* Add PC Immediate Shifted */
4236       record_full_arch_list_add_reg (regcache,
4237                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4238       return 0;
4239     }
4240
4241   switch (ext)
4242     {
4243     case 0:             /* Move Condition Register Field */
4244     case 33:            /* Condition Register NOR */
4245     case 129:           /* Condition Register AND with Complement */
4246     case 193:           /* Condition Register XOR */
4247     case 225:           /* Condition Register NAND */
4248     case 257:           /* Condition Register AND */
4249     case 289:           /* Condition Register Equivalent */
4250     case 417:           /* Condition Register OR with Complement */
4251     case 449:           /* Condition Register OR */
4252       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4253       return 0;
4254
4255     case 16:            /* Branch Conditional */
4256     case 560:           /* Branch Conditional to Branch Target Address Register */
4257       if ((PPC_BO (insn) & 0x4) == 0)
4258         record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
4259       /* FALL-THROUGH */
4260     case 528:           /* Branch Conditional to Count Register */
4261       if (PPC_LK (insn))
4262         record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
4263       return 0;
4264
4265     case 150:           /* Instruction Synchronize */
4266       /* Do nothing.  */
4267       return 0;
4268     }
4269
4270   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4271                       "at %s, 19-%d.\n", insn, paddress (gdbarch, addr), ext);
4272   return -1;
4273 }
4274
4275 /* Parse and record instructions of primary opcode-31 at ADDR.
4276    Return 0 if successful.  */
4277
4278 static int
4279 ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
4280                            CORE_ADDR addr, uint32_t insn)
4281 {
4282   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4283   int ext = PPC_EXTOP (insn);
4284   int tmp, nr, nb, i;
4285   CORE_ADDR at_dcsz, ea = 0;
4286   ULONGEST rb, ra, xer;
4287   int size = 0;
4288
4289   /* These instructions have OE bit.  */
4290   switch (ext & 0x1ff)
4291     {
4292     /* These write RT and XER.  Update CR if RC is set.  */
4293     case 8:             /* Subtract from carrying */
4294     case 10:            /* Add carrying */
4295     case 136:           /* Subtract from extended */
4296     case 138:           /* Add extended */
4297     case 200:           /* Subtract from zero extended */
4298     case 202:           /* Add to zero extended */
4299     case 232:           /* Subtract from minus one extended */
4300     case 234:           /* Add to minus one extended */
4301       /* CA is always altered, but SO/OV are only altered when OE=1.
4302          In any case, XER is always altered.  */
4303       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4304       if (PPC_RC (insn))
4305         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4306       record_full_arch_list_add_reg (regcache,
4307                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4308       return 0;
4309
4310     /* These write RT.  Update CR if RC is set and update XER if OE is set.  */
4311     case 40:            /* Subtract from */
4312     case 104:           /* Negate */
4313     case 233:           /* Multiply low doubleword */
4314     case 235:           /* Multiply low word */
4315     case 266:           /* Add */
4316     case 393:           /* Divide Doubleword Extended Unsigned */
4317     case 395:           /* Divide Word Extended Unsigned */
4318     case 425:           /* Divide Doubleword Extended */
4319     case 427:           /* Divide Word Extended */
4320     case 457:           /* Divide Doubleword Unsigned */
4321     case 459:           /* Divide Word Unsigned */
4322     case 489:           /* Divide Doubleword */
4323     case 491:           /* Divide Word */
4324       if (PPC_OE (insn))
4325         record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4326       /* FALL-THROUGH */
4327     case 9:             /* Multiply High Doubleword Unsigned */
4328     case 11:            /* Multiply High Word Unsigned */
4329     case 73:            /* Multiply High Doubleword */
4330     case 75:            /* Multiply High Word */
4331       if (PPC_RC (insn))
4332         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4333       record_full_arch_list_add_reg (regcache,
4334                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4335       return 0;
4336     }
4337
4338   if ((ext & 0x1f) == 15)
4339     {
4340       /* Integer Select. bit[16:20] is used for BC.  */
4341       record_full_arch_list_add_reg (regcache,
4342                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4343       return 0;
4344     }
4345
4346   if ((ext & 0xff) == 170)
4347     {
4348       /* Add Extended using alternate carry bits */
4349       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4350       record_full_arch_list_add_reg (regcache,
4351                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4352       return 0;
4353     }
4354
4355   switch (ext)
4356     {
4357     case 78:            /* Determine Leftmost Zero Byte */
4358       if (PPC_RC (insn))
4359         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4360       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4361       record_full_arch_list_add_reg (regcache,
4362                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4363       return 0;
4364
4365     /* These only write RT.  */
4366     case 19:            /* Move from condition register */
4367                         /* Move From One Condition Register Field */
4368     case 74:            /* Add and Generate Sixes */
4369     case 74 | 0x200:    /* Add and Generate Sixes (bit-21 dont-care) */
4370     case 302:           /* Move From Branch History Rolling Buffer */
4371     case 339:           /* Move From Special Purpose Register */
4372     case 371:           /* Move From Time Base [Phased-Out]  */
4373     case 309:           /* Load Doubleword Monitored Indexed  */
4374     case 128:           /* Set Boolean */
4375     case 755:           /* Deliver A Random Number */
4376       record_full_arch_list_add_reg (regcache,
4377                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4378       return 0;
4379
4380     /* These only write to RA.  */
4381     case 51:            /* Move From VSR Doubleword */
4382     case 115:           /* Move From VSR Word and Zero */
4383     case 122:           /* Population count bytes */
4384     case 378:           /* Population count words */
4385     case 506:           /* Population count doublewords */
4386     case 154:           /* Parity Word */
4387     case 186:           /* Parity Doubleword */
4388     case 252:           /* Bit Permute Doubleword */
4389     case 282:           /* Convert Declets To Binary Coded Decimal */
4390     case 314:           /* Convert Binary Coded Decimal To Declets */
4391     case 508:           /* Compare bytes */
4392     case 307:           /* Move From VSR Lower Doubleword */
4393       record_full_arch_list_add_reg (regcache,
4394                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
4395       return 0;
4396
4397     /* These write CR and optional RA.  */
4398     case 792:           /* Shift Right Algebraic Word */
4399     case 794:           /* Shift Right Algebraic Doubleword */
4400     case 824:           /* Shift Right Algebraic Word Immediate */
4401     case 826:           /* Shift Right Algebraic Doubleword Immediate (413) */
4402     case 826 | 1:       /* Shift Right Algebraic Doubleword Immediate (413) */
4403       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4404       record_full_arch_list_add_reg (regcache,
4405                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
4406       /* FALL-THROUGH */
4407     case 0:             /* Compare */
4408     case 32:            /* Compare logical */
4409     case 144:           /* Move To Condition Register Fields */
4410                         /* Move To One Condition Register Field */
4411     case 192:           /* Compare Ranged Byte */
4412     case 224:           /* Compare Equal Byte */
4413     case 576:           /* Move XER to CR Extended */
4414     case 902:           /* Paste (should always fail due to single-stepping and
4415                            the memory location might not be accessible, so
4416                            record only CR) */
4417       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4418       return 0;
4419
4420     /* These write to RT.  Update RA if 'update indexed.'  */
4421     case 53:            /* Load Doubleword with Update Indexed */
4422     case 119:           /* Load Byte and Zero with Update Indexed */
4423     case 311:           /* Load Halfword and Zero with Update Indexed */
4424     case 55:            /* Load Word and Zero with Update Indexed */
4425     case 375:           /* Load Halfword Algebraic with Update Indexed */
4426     case 373:           /* Load Word Algebraic with Update Indexed */
4427       record_full_arch_list_add_reg (regcache,
4428                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
4429       /* FALL-THROUGH */
4430     case 21:            /* Load Doubleword Indexed */
4431     case 52:            /* Load Byte And Reserve Indexed */
4432     case 116:           /* Load Halfword And Reserve Indexed */
4433     case 20:            /* Load Word And Reserve Indexed */
4434     case 84:            /* Load Doubleword And Reserve Indexed */
4435     case 87:            /* Load Byte and Zero Indexed */
4436     case 279:           /* Load Halfword and Zero Indexed */
4437     case 23:            /* Load Word and Zero Indexed */
4438     case 343:           /* Load Halfword Algebraic Indexed */
4439     case 341:           /* Load Word Algebraic Indexed */
4440     case 790:           /* Load Halfword Byte-Reverse Indexed */
4441     case 534:           /* Load Word Byte-Reverse Indexed */
4442     case 532:           /* Load Doubleword Byte-Reverse Indexed */
4443     case 582:           /* Load Word Atomic */
4444     case 614:           /* Load Doubleword Atomic */
4445     case 265:           /* Modulo Unsigned Doubleword */
4446     case 777:           /* Modulo Signed Doubleword */
4447     case 267:           /* Modulo Unsigned Word */
4448     case 779:           /* Modulo Signed Word */
4449       record_full_arch_list_add_reg (regcache,
4450                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
4451       return 0;
4452
4453     case 597:           /* Load String Word Immediate */
4454     case 533:           /* Load String Word Indexed */
4455       if (ext == 597)
4456         {
4457         nr = PPC_NB (insn);
4458         if (nr == 0)
4459           nr = 32;
4460         }
4461       else
4462         {
4463           regcache_raw_read_unsigned (regcache, tdep->ppc_xer_regnum, &xer);
4464           nr = PPC_XER_NB (xer);
4465         }
4466
4467       nr = (nr + 3) >> 2;
4468
4469       /* If n=0, the contents of register RT are undefined.  */
4470       if (nr == 0)
4471         nr = 1;
4472
4473       for (i = 0; i < nr; i++)
4474         record_full_arch_list_add_reg (regcache,
4475                                        tdep->ppc_gp0_regnum
4476                                        + ((PPC_RT (insn) + i) & 0x1f));
4477       return 0;
4478
4479     case 276:           /* Load Quadword And Reserve Indexed */
4480       tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn) & ~1);
4481       record_full_arch_list_add_reg (regcache, tmp);
4482       record_full_arch_list_add_reg (regcache, tmp + 1);
4483       return 0;
4484
4485     /* These write VRT.  */
4486     case 6:             /* Load Vector for Shift Left Indexed */
4487     case 38:            /* Load Vector for Shift Right Indexed */
4488     case 7:             /* Load Vector Element Byte Indexed */
4489     case 39:            /* Load Vector Element Halfword Indexed */
4490     case 71:            /* Load Vector Element Word Indexed */
4491     case 103:           /* Load Vector Indexed */
4492     case 359:           /* Load Vector Indexed LRU */
4493       record_full_arch_list_add_reg (regcache,
4494                                      tdep->ppc_vr0_regnum + PPC_VRT (insn));
4495       return 0;
4496
4497     /* These write FRT.  Update RA if 'update indexed.'  */
4498     case 567:           /* Load Floating-Point Single with Update Indexed */
4499     case 631:           /* Load Floating-Point Double with Update Indexed */
4500       record_full_arch_list_add_reg (regcache,
4501                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
4502       /* FALL-THROUGH */
4503     case 535:           /* Load Floating-Point Single Indexed */
4504     case 599:           /* Load Floating-Point Double Indexed */
4505     case 855:           /* Load Floating-Point as Integer Word Algebraic Indexed */
4506     case 887:           /* Load Floating-Point as Integer Word and Zero Indexed */
4507       record_full_arch_list_add_reg (regcache,
4508                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
4509       return 0;
4510
4511     case 791:           /* Load Floating-Point Double Pair Indexed */
4512       tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
4513       record_full_arch_list_add_reg (regcache, tmp);
4514       record_full_arch_list_add_reg (regcache, tmp + 1);
4515       return 0;
4516
4517     case 179:           /* Move To VSR Doubleword */
4518     case 211:           /* Move To VSR Word Algebraic */
4519     case 243:           /* Move To VSR Word and Zero */
4520     case 588:           /* Load VSX Scalar Doubleword Indexed */
4521     case 524:           /* Load VSX Scalar Single-Precision Indexed */
4522     case 76:            /* Load VSX Scalar as Integer Word Algebraic Indexed */
4523     case 12:            /* Load VSX Scalar as Integer Word and Zero Indexed */
4524     case 844:           /* Load VSX Vector Doubleword*2 Indexed */
4525     case 332:           /* Load VSX Vector Doubleword & Splat Indexed */
4526     case 780:           /* Load VSX Vector Word*4 Indexed */
4527     case 268:           /* Load VSX Vector Indexed */
4528     case 364:           /* Load VSX Vector Word & Splat Indexed */
4529     case 812:           /* Load VSX Vector Halfword*8 Indexed */
4530     case 876:           /* Load VSX Vector Byte*16 Indexed */
4531     case 269:           /* Load VSX Vector with Length */
4532     case 301:           /* Load VSX Vector Left-justified with Length */
4533     case 781:           /* Load VSX Scalar as Integer Byte & Zero Indexed */
4534     case 813:           /* Load VSX Scalar as Integer Halfword & Zero Indexed */
4535     case 403:           /* Move To VSR Word & Splat */
4536     case 435:           /* Move To VSR Double Doubleword */
4537       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
4538       return 0;
4539
4540     /* These write RA.  Update CR if RC is set.  */
4541     case 24:            /* Shift Left Word */
4542     case 26:            /* Count Leading Zeros Word */
4543     case 27:            /* Shift Left Doubleword */
4544     case 28:            /* AND */
4545     case 58:            /* Count Leading Zeros Doubleword */
4546     case 60:            /* AND with Complement */
4547     case 124:           /* NOR */
4548     case 284:           /* Equivalent */
4549     case 316:           /* XOR */
4550     case 476:           /* NAND */
4551     case 412:           /* OR with Complement */
4552     case 444:           /* OR */
4553     case 536:           /* Shift Right Word */
4554     case 539:           /* Shift Right Doubleword */
4555     case 922:           /* Extend Sign Halfword */
4556     case 954:           /* Extend Sign Byte */
4557     case 986:           /* Extend Sign Word */
4558     case 538:           /* Count Trailing Zeros Word */
4559     case 570:           /* Count Trailing Zeros Doubleword */
4560     case 890:           /* Extend-Sign Word and Shift Left Immediate (445) */
4561     case 890 | 1:       /* Extend-Sign Word and Shift Left Immediate (445) */
4562       if (PPC_RC (insn))
4563         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4564       record_full_arch_list_add_reg (regcache,
4565                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
4566       return 0;
4567
4568     /* Store memory.  */
4569     case 181:           /* Store Doubleword with Update Indexed */
4570     case 183:           /* Store Word with Update Indexed */
4571     case 247:           /* Store Byte with Update Indexed */
4572     case 439:           /* Store Half Word with Update Indexed */
4573     case 695:           /* Store Floating-Point Single with Update Indexed */
4574     case 759:           /* Store Floating-Point Double with Update Indexed */
4575       record_full_arch_list_add_reg (regcache,
4576                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
4577       /* FALL-THROUGH */
4578     case 135:           /* Store Vector Element Byte Indexed */
4579     case 167:           /* Store Vector Element Halfword Indexed */
4580     case 199:           /* Store Vector Element Word Indexed */
4581     case 231:           /* Store Vector Indexed */
4582     case 487:           /* Store Vector Indexed LRU */
4583     case 716:           /* Store VSX Scalar Doubleword Indexed */
4584     case 140:           /* Store VSX Scalar as Integer Word Indexed */
4585     case 652:           /* Store VSX Scalar Single-Precision Indexed */
4586     case 972:           /* Store VSX Vector Doubleword*2 Indexed */
4587     case 908:           /* Store VSX Vector Word*4 Indexed */
4588     case 149:           /* Store Doubleword Indexed */
4589     case 151:           /* Store Word Indexed */
4590     case 215:           /* Store Byte Indexed */
4591     case 407:           /* Store Half Word Indexed */
4592     case 694:           /* Store Byte Conditional Indexed */
4593     case 726:           /* Store Halfword Conditional Indexed */
4594     case 150:           /* Store Word Conditional Indexed */
4595     case 214:           /* Store Doubleword Conditional Indexed */
4596     case 182:           /* Store Quadword Conditional Indexed */
4597     case 662:           /* Store Word Byte-Reverse Indexed */
4598     case 918:           /* Store Halfword Byte-Reverse Indexed */
4599     case 660:           /* Store Doubleword Byte-Reverse Indexed */
4600     case 663:           /* Store Floating-Point Single Indexed */
4601     case 727:           /* Store Floating-Point Double Indexed */
4602     case 919:           /* Store Floating-Point Double Pair Indexed */
4603     case 983:           /* Store Floating-Point as Integer Word Indexed */
4604     case 396:           /* Store VSX Vector Indexed */
4605     case 940:           /* Store VSX Vector Halfword*8 Indexed */
4606     case 1004:          /* Store VSX Vector Byte*16 Indexed */
4607     case 909:           /* Store VSX Scalar as Integer Byte Indexed */
4608     case 941:           /* Store VSX Scalar as Integer Halfword Indexed */
4609       if (ext == 694 || ext == 726 || ext == 150 || ext == 214 || ext == 182)
4610         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4611
4612       ra = 0;
4613       if (PPC_RA (insn) != 0)
4614         regcache_raw_read_unsigned (regcache,
4615                                     tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4616       regcache_raw_read_unsigned (regcache,
4617                                   tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4618       ea = ra + rb;
4619
4620       switch (ext)
4621         {
4622         case 183:       /* Store Word with Update Indexed */
4623         case 199:       /* Store Vector Element Word Indexed */
4624         case 140:       /* Store VSX Scalar as Integer Word Indexed */
4625         case 652:       /* Store VSX Scalar Single-Precision Indexed */
4626         case 151:       /* Store Word Indexed */
4627         case 150:       /* Store Word Conditional Indexed */
4628         case 662:       /* Store Word Byte-Reverse Indexed */
4629         case 663:       /* Store Floating-Point Single Indexed */
4630         case 695:       /* Store Floating-Point Single with Update Indexed */
4631         case 983:       /* Store Floating-Point as Integer Word Indexed */
4632           size = 4;
4633           break;
4634         case 247:       /* Store Byte with Update Indexed */
4635         case 135:       /* Store Vector Element Byte Indexed */
4636         case 215:       /* Store Byte Indexed */
4637         case 694:       /* Store Byte Conditional Indexed */
4638         case 909:       /* Store VSX Scalar as Integer Byte Indexed */
4639           size = 1;
4640           break;
4641         case 439:       /* Store Halfword with Update Indexed */
4642         case 167:       /* Store Vector Element Halfword Indexed */
4643         case 407:       /* Store Halfword Indexed */
4644         case 726:       /* Store Halfword Conditional Indexed */
4645         case 918:       /* Store Halfword Byte-Reverse Indexed */
4646         case 941:       /* Store VSX Scalar as Integer Halfword Indexed */
4647           size = 2;
4648           break;
4649         case 181:       /* Store Doubleword with Update Indexed */
4650         case 716:       /* Store VSX Scalar Doubleword Indexed */
4651         case 149:       /* Store Doubleword Indexed */
4652         case 214:       /* Store Doubleword Conditional Indexed */
4653         case 660:       /* Store Doubleword Byte-Reverse Indexed */
4654         case 727:       /* Store Floating-Point Double Indexed */
4655         case 759:       /* Store Floating-Point Double with Update Indexed */
4656           size = 8;
4657           break;
4658         case 972:       /* Store VSX Vector Doubleword*2 Indexed */
4659         case 908:       /* Store VSX Vector Word*4 Indexed */
4660         case 182:       /* Store Quadword Conditional Indexed */
4661         case 231:       /* Store Vector Indexed */
4662         case 487:       /* Store Vector Indexed LRU */
4663         case 919:       /* Store Floating-Point Double Pair Indexed */
4664         case 396:       /* Store VSX Vector Indexed */
4665         case 940:       /* Store VSX Vector Halfword*8 Indexed */
4666         case 1004:      /* Store VSX Vector Byte*16 Indexed */
4667           size = 16;
4668           break;
4669         default:
4670           gdb_assert (0);
4671         }
4672
4673       /* Align address for Store Vector instructions.  */
4674       switch (ext)
4675         {
4676         case 167:       /* Store Vector Element Halfword Indexed */
4677           addr = addr & ~0x1ULL;
4678           break;
4679
4680         case 199:       /* Store Vector Element Word Indexed */
4681           addr = addr & ~0x3ULL;
4682           break;
4683
4684         case 231:       /* Store Vector Indexed */
4685         case 487:       /* Store Vector Indexed LRU */
4686           addr = addr & ~0xfULL;
4687           break;
4688         }
4689
4690       record_full_arch_list_add_mem (addr, size);
4691       return 0;
4692
4693     case 397:           /* Store VSX Vector with Length */
4694     case 429:           /* Store VSX Vector Left-justified with Length */
4695       ra = 0;
4696       if (PPC_RA (insn) != 0)
4697         regcache_raw_read_unsigned (regcache,
4698                                     tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4699       ea = ra;
4700       regcache_raw_read_unsigned (regcache,
4701                                   tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4702       /* Store up to 16 bytes.  */
4703       nb = (rb & 0xff) > 16 ? 16 : (rb & 0xff);
4704       if (nb > 0)
4705         record_full_arch_list_add_mem (ea, nb);
4706       return 0;
4707
4708     case 710:           /* Store Word Atomic */
4709     case 742:           /* Store Doubleword Atomic */
4710       ra = 0;
4711       if (PPC_RA (insn) != 0)
4712         regcache_raw_read_unsigned (regcache,
4713                                     tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4714       ea = ra;
4715       switch (ext)
4716         {
4717         case 710:       /* Store Word Atomic */
4718           size = 8;
4719           break;
4720         case 742:       /* Store Doubleword Atomic */
4721           size = 16;
4722           break;
4723         default:
4724           gdb_assert (0);
4725         }
4726       record_full_arch_list_add_mem (ea, size);
4727       return 0;
4728
4729     case 725:           /* Store String Word Immediate */
4730       ra = 0;
4731       if (PPC_RA (insn) != 0)
4732         regcache_raw_read_unsigned (regcache,
4733                                     tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4734       ea += ra;
4735
4736       nb = PPC_NB (insn);
4737       if (nb == 0)
4738         nb = 32;
4739
4740       record_full_arch_list_add_mem (ea, nb);
4741
4742       return 0;
4743
4744     case 661:           /* Store String Word Indexed */
4745       ra = 0;
4746       if (PPC_RA (insn) != 0)
4747         regcache_raw_read_unsigned (regcache,
4748                                     tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4749       ea += ra;
4750
4751       regcache_raw_read_unsigned (regcache, tdep->ppc_xer_regnum, &xer);
4752       nb = PPC_XER_NB (xer);
4753
4754       if (nb != 0)
4755         {
4756           regcache_raw_read_unsigned (regcache,
4757                                       tdep->ppc_gp0_regnum + PPC_RB (insn),
4758                                       &rb);
4759           ea += rb;
4760           record_full_arch_list_add_mem (ea, nb);
4761         }
4762
4763       return 0;
4764
4765     case 467:           /* Move To Special Purpose Register */
4766       switch (PPC_SPR (insn))
4767         {
4768         case 1:                 /* XER */
4769           record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4770           return 0;
4771         case 8:                 /* LR */
4772           record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
4773           return 0;
4774         case 9:                 /* CTR */
4775           record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
4776           return 0;
4777         case 256:               /* VRSAVE */
4778           record_full_arch_list_add_reg (regcache, tdep->ppc_vrsave_regnum);
4779           return 0;
4780         }
4781
4782       goto UNKNOWN_OP;
4783
4784     case 147:           /* Move To Split Little Endian */
4785       record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
4786       return 0;
4787
4788     case 512:           /* Move to Condition Register from XER */
4789       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4790       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4791       return 0;
4792
4793     case 4:             /* Trap Word */
4794     case 68:            /* Trap Doubleword */
4795     case 430:           /* Clear BHRB */
4796     case 598:           /* Synchronize */
4797     case 62:            /* Wait for Interrupt */
4798     case 30:            /* Wait */
4799     case 22:            /* Instruction Cache Block Touch */
4800     case 854:           /* Enforce In-order Execution of I/O */
4801     case 246:           /* Data Cache Block Touch for Store */
4802     case 54:            /* Data Cache Block Store */
4803     case 86:            /* Data Cache Block Flush */
4804     case 278:           /* Data Cache Block Touch */
4805     case 758:           /* Data Cache Block Allocate */
4806     case 982:           /* Instruction Cache Block Invalidate */
4807     case 774:           /* Copy */
4808     case 838:           /* CP_Abort */
4809       return 0;
4810
4811     case 654:           /* Transaction Begin */
4812     case 686:           /* Transaction End */
4813     case 750:           /* Transaction Suspend or Resume */
4814     case 782:           /* Transaction Abort Word Conditional */
4815     case 814:           /* Transaction Abort Doubleword Conditional */
4816     case 846:           /* Transaction Abort Word Conditional Immediate */
4817     case 878:           /* Transaction Abort Doubleword Conditional Immediate */
4818     case 910:           /* Transaction Abort */
4819       record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
4820       /* FALL-THROUGH */
4821     case 718:           /* Transaction Check */
4822       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4823       return 0;
4824
4825     case 1014:          /* Data Cache Block set to Zero */
4826       if (target_auxv_search (&current_target, AT_DCACHEBSIZE, &at_dcsz) <= 0
4827           || at_dcsz == 0)
4828         at_dcsz = 128; /* Assume 128-byte cache line size (POWER8)  */
4829
4830       ra = 0;
4831       if (PPC_RA (insn) != 0)
4832         regcache_raw_read_unsigned (regcache,
4833                                     tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4834       regcache_raw_read_unsigned (regcache,
4835                                   tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4836       ea = (ra + rb) & ~((ULONGEST) (at_dcsz - 1));
4837       record_full_arch_list_add_mem (ea, at_dcsz);
4838       return 0;
4839     }
4840
4841 UNKNOWN_OP:
4842   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4843                       "at %s, 31-%d.\n", insn, paddress (gdbarch, addr), ext);
4844   return -1;
4845 }
4846
4847 /* Parse and record instructions of primary opcode-59 at ADDR.
4848    Return 0 if successful.  */
4849
4850 static int
4851 ppc_process_record_op59 (struct gdbarch *gdbarch, struct regcache *regcache,
4852                            CORE_ADDR addr, uint32_t insn)
4853 {
4854   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4855   int ext = PPC_EXTOP (insn);
4856
4857   switch (ext & 0x1f)
4858     {
4859     case 18:            /* Floating Divide */
4860     case 20:            /* Floating Subtract */
4861     case 21:            /* Floating Add */
4862     case 22:            /* Floating Square Root */
4863     case 24:            /* Floating Reciprocal Estimate */
4864     case 25:            /* Floating Multiply */
4865     case 26:            /* Floating Reciprocal Square Root Estimate */
4866     case 28:            /* Floating Multiply-Subtract */
4867     case 29:            /* Floating Multiply-Add */
4868     case 30:            /* Floating Negative Multiply-Subtract */
4869     case 31:            /* Floating Negative Multiply-Add */
4870       record_full_arch_list_add_reg (regcache,
4871                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
4872       if (PPC_RC (insn))
4873         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4874       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
4875
4876       return 0;
4877     }
4878
4879   switch (ext)
4880     {
4881     case 2:             /* DFP Add */
4882     case 3:             /* DFP Quantize */
4883     case 34:            /* DFP Multiply */
4884     case 35:            /* DFP Reround */
4885     case 67:            /* DFP Quantize Immediate */
4886     case 99:            /* DFP Round To FP Integer With Inexact */
4887     case 227:           /* DFP Round To FP Integer Without Inexact */
4888     case 258:           /* DFP Convert To DFP Long! */
4889     case 290:           /* DFP Convert To Fixed */
4890     case 514:           /* DFP Subtract */
4891     case 546:           /* DFP Divide */
4892     case 770:           /* DFP Round To DFP Short! */
4893     case 802:           /* DFP Convert From Fixed */
4894     case 834:           /* DFP Encode BCD To DPD */
4895       if (PPC_RC (insn))
4896         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4897       record_full_arch_list_add_reg (regcache,
4898                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
4899       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
4900       return 0;
4901
4902     case 130:           /* DFP Compare Ordered */
4903     case 162:           /* DFP Test Exponent */
4904     case 194:           /* DFP Test Data Class */
4905     case 226:           /* DFP Test Data Group */
4906     case 642:           /* DFP Compare Unordered */
4907     case 674:           /* DFP Test Significance */
4908     case 675:           /* DFP Test Significance Immediate */
4909       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4910       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
4911       return 0;
4912
4913     case 66:            /* DFP Shift Significand Left Immediate */
4914     case 98:            /* DFP Shift Significand Right Immediate */
4915     case 322:           /* DFP Decode DPD To BCD */
4916     case 354:           /* DFP Extract Biased Exponent */
4917     case 866:           /* DFP Insert Biased Exponent */
4918       record_full_arch_list_add_reg (regcache,
4919                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
4920       if (PPC_RC (insn))
4921         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4922       return 0;
4923
4924     case 846:           /* Floating Convert From Integer Doubleword Single */
4925     case 974:           /* Floating Convert From Integer Doubleword Unsigned
4926                            Single */
4927       record_full_arch_list_add_reg (regcache,
4928                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
4929       if (PPC_RC (insn))
4930         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4931       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
4932
4933       return 0;
4934     }
4935
4936   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4937                       "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
4938   return -1;
4939 }
4940
4941 /* Parse and record instructions of primary opcode-60 at ADDR.
4942    Return 0 if successful.  */
4943
4944 static int
4945 ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
4946                            CORE_ADDR addr, uint32_t insn)
4947 {
4948   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4949   int ext = PPC_EXTOP (insn);
4950
4951   switch (ext >> 2)
4952     {
4953     case 0:             /* VSX Scalar Add Single-Precision */
4954     case 32:            /* VSX Scalar Add Double-Precision */
4955     case 24:            /* VSX Scalar Divide Single-Precision */
4956     case 56:            /* VSX Scalar Divide Double-Precision */
4957     case 176:           /* VSX Scalar Copy Sign Double-Precision */
4958     case 33:            /* VSX Scalar Multiply-Add Double-Precision */
4959     case 41:            /* ditto */
4960     case 1:             /* VSX Scalar Multiply-Add Single-Precision */
4961     case 9:             /* ditto */
4962     case 160:           /* VSX Scalar Maximum Double-Precision */
4963     case 168:           /* VSX Scalar Minimum Double-Precision */
4964     case 49:            /* VSX Scalar Multiply-Subtract Double-Precision */
4965     case 57:            /* ditto */
4966     case 17:            /* VSX Scalar Multiply-Subtract Single-Precision */
4967     case 25:            /* ditto */
4968     case 48:            /* VSX Scalar Multiply Double-Precision */
4969     case 16:            /* VSX Scalar Multiply Single-Precision */
4970     case 161:           /* VSX Scalar Negative Multiply-Add Double-Precision */
4971     case 169:           /* ditto */
4972     case 129:           /* VSX Scalar Negative Multiply-Add Single-Precision */
4973     case 137:           /* ditto */
4974     case 177:           /* VSX Scalar Negative Multiply-Subtract Double-Precision */
4975     case 185:           /* ditto */
4976     case 145:           /* VSX Scalar Negative Multiply-Subtract Single-Precision */
4977     case 153:           /* ditto */
4978     case 40:            /* VSX Scalar Subtract Double-Precision */
4979     case 8:             /* VSX Scalar Subtract Single-Precision */
4980     case 96:            /* VSX Vector Add Double-Precision */
4981     case 64:            /* VSX Vector Add Single-Precision */
4982     case 120:           /* VSX Vector Divide Double-Precision */
4983     case 88:            /* VSX Vector Divide Single-Precision */
4984     case 97:            /* VSX Vector Multiply-Add Double-Precision */
4985     case 105:           /* ditto */
4986     case 65:            /* VSX Vector Multiply-Add Single-Precision */
4987     case 73:            /* ditto */
4988     case 224:           /* VSX Vector Maximum Double-Precision */
4989     case 192:           /* VSX Vector Maximum Single-Precision */
4990     case 232:           /* VSX Vector Minimum Double-Precision */
4991     case 200:           /* VSX Vector Minimum Single-Precision */
4992     case 113:           /* VSX Vector Multiply-Subtract Double-Precision */
4993     case 121:           /* ditto */
4994     case 81:            /* VSX Vector Multiply-Subtract Single-Precision */
4995     case 89:            /* ditto */
4996     case 112:           /* VSX Vector Multiply Double-Precision */
4997     case 80:            /* VSX Vector Multiply Single-Precision */
4998     case 225:           /* VSX Vector Negative Multiply-Add Double-Precision */
4999     case 233:           /* ditto */
5000     case 193:           /* VSX Vector Negative Multiply-Add Single-Precision */
5001     case 201:           /* ditto */
5002     case 241:           /* VSX Vector Negative Multiply-Subtract Double-Precision */
5003     case 249:           /* ditto */
5004     case 209:           /* VSX Vector Negative Multiply-Subtract Single-Precision */
5005     case 217:           /* ditto */
5006     case 104:           /* VSX Vector Subtract Double-Precision */
5007     case 72:            /* VSX Vector Subtract Single-Precision */
5008     case 128:           /* VSX Scalar Maximum Type-C Double-Precision */
5009     case 136:           /* VSX Scalar Minimum Type-C Double-Precision */
5010     case 144:           /* VSX Scalar Maximum Type-J Double-Precision */
5011     case 152:           /* VSX Scalar Minimum Type-J Double-Precision */
5012     case 3:             /* VSX Scalar Compare Equal Double-Precision */
5013     case 11:            /* VSX Scalar Compare Greater Than Double-Precision */
5014     case 19:            /* VSX Scalar Compare Greater Than or Equal
5015                            Double-Precision */
5016       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5017       /* FALL-THROUGH */
5018     case 240:           /* VSX Vector Copy Sign Double-Precision */
5019     case 208:           /* VSX Vector Copy Sign Single-Precision */
5020     case 130:           /* VSX Logical AND */
5021     case 138:           /* VSX Logical AND with Complement */
5022     case 186:           /* VSX Logical Equivalence */
5023     case 178:           /* VSX Logical NAND */
5024     case 170:           /* VSX Logical OR with Complement */
5025     case 162:           /* VSX Logical NOR */
5026     case 146:           /* VSX Logical OR */
5027     case 154:           /* VSX Logical XOR */
5028     case 18:            /* VSX Merge High Word */
5029     case 50:            /* VSX Merge Low Word */
5030     case 10:            /* VSX Permute Doubleword Immediate (DM=0) */
5031     case 10 | 0x20:     /* VSX Permute Doubleword Immediate (DM=1) */
5032     case 10 | 0x40:     /* VSX Permute Doubleword Immediate (DM=2) */
5033     case 10 | 0x60:     /* VSX Permute Doubleword Immediate (DM=3) */
5034     case 2:             /* VSX Shift Left Double by Word Immediate (SHW=0) */
5035     case 2 | 0x20:      /* VSX Shift Left Double by Word Immediate (SHW=1) */
5036     case 2 | 0x40:      /* VSX Shift Left Double by Word Immediate (SHW=2) */
5037     case 2 | 0x60:      /* VSX Shift Left Double by Word Immediate (SHW=3) */
5038     case 216:           /* VSX Vector Insert Exponent Single-Precision */
5039     case 248:           /* VSX Vector Insert Exponent Double-Precision */
5040     case 26:            /* VSX Vector Permute */
5041     case 58:            /* VSX Vector Permute Right-indexed */
5042     case 213:           /* VSX Vector Test Data Class Single-Precision (DC=0) */
5043     case 213 | 0x8:     /* VSX Vector Test Data Class Single-Precision (DC=1) */
5044     case 245:           /* VSX Vector Test Data Class Double-Precision (DC=0) */
5045     case 245 | 0x8:     /* VSX Vector Test Data Class Double-Precision (DC=1) */
5046       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5047       return 0;
5048
5049     case 61:            /* VSX Scalar Test for software Divide Double-Precision */
5050     case 125:           /* VSX Vector Test for software Divide Double-Precision */
5051     case 93:            /* VSX Vector Test for software Divide Single-Precision */
5052       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5053       return 0;
5054
5055     case 35:            /* VSX Scalar Compare Unordered Double-Precision */
5056     case 43:            /* VSX Scalar Compare Ordered Double-Precision */
5057     case 59:            /* VSX Scalar Compare Exponents Double-Precision */
5058       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5059       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5060       return 0;
5061     }
5062
5063   switch ((ext >> 2) & 0x7f) /* Mask out Rc-bit.  */
5064     {
5065     case 99:            /* VSX Vector Compare Equal To Double-Precision */
5066     case 67:            /* VSX Vector Compare Equal To Single-Precision */
5067     case 115:           /* VSX Vector Compare Greater Than or
5068                            Equal To Double-Precision */
5069     case 83:            /* VSX Vector Compare Greater Than or
5070                            Equal To Single-Precision */
5071     case 107:           /* VSX Vector Compare Greater Than Double-Precision */
5072     case 75:            /* VSX Vector Compare Greater Than Single-Precision */
5073       if (PPC_Rc (insn))
5074         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5075       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5076       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5077       return 0;
5078     }
5079
5080   switch (ext >> 1)
5081     {
5082     case 265:           /* VSX Scalar round Double-Precision to
5083                            Single-Precision and Convert to
5084                            Single-Precision format */
5085     case 344:           /* VSX Scalar truncate Double-Precision to
5086                            Integer and Convert to Signed Integer
5087                            Doubleword format with Saturate */
5088     case 88:            /* VSX Scalar truncate Double-Precision to
5089                            Integer and Convert to Signed Integer Word
5090                            Format with Saturate */
5091     case 328:           /* VSX Scalar truncate Double-Precision integer
5092                            and Convert to Unsigned Integer Doubleword
5093                            Format with Saturate */
5094     case 72:            /* VSX Scalar truncate Double-Precision to
5095                            Integer and Convert to Unsigned Integer Word
5096                            Format with Saturate */
5097     case 329:           /* VSX Scalar Convert Single-Precision to
5098                            Double-Precision format */
5099     case 376:           /* VSX Scalar Convert Signed Integer
5100                            Doubleword to floating-point format and
5101                            Round to Double-Precision format */
5102     case 312:           /* VSX Scalar Convert Signed Integer
5103                            Doubleword to floating-point format and
5104                            round to Single-Precision */
5105     case 360:           /* VSX Scalar Convert Unsigned Integer
5106                            Doubleword to floating-point format and
5107                            Round to Double-Precision format */
5108     case 296:           /* VSX Scalar Convert Unsigned Integer
5109                            Doubleword to floating-point format and
5110                            Round to Single-Precision */
5111     case 73:            /* VSX Scalar Round to Double-Precision Integer
5112                            Using Round to Nearest Away */
5113     case 107:           /* VSX Scalar Round to Double-Precision Integer
5114                            Exact using Current rounding mode */
5115     case 121:           /* VSX Scalar Round to Double-Precision Integer
5116                            Using Round toward -Infinity */
5117     case 105:           /* VSX Scalar Round to Double-Precision Integer
5118                            Using Round toward +Infinity */
5119     case 89:            /* VSX Scalar Round to Double-Precision Integer
5120                            Using Round toward Zero */
5121     case 90:            /* VSX Scalar Reciprocal Estimate Double-Precision */
5122     case 26:            /* VSX Scalar Reciprocal Estimate Single-Precision */
5123     case 281:           /* VSX Scalar Round to Single-Precision */
5124     case 74:            /* VSX Scalar Reciprocal Square Root Estimate
5125                            Double-Precision */
5126     case 10:            /* VSX Scalar Reciprocal Square Root Estimate
5127                            Single-Precision */
5128     case 75:            /* VSX Scalar Square Root Double-Precision */
5129     case 11:            /* VSX Scalar Square Root Single-Precision */
5130     case 393:           /* VSX Vector round Double-Precision to
5131                            Single-Precision and Convert to
5132                            Single-Precision format */
5133     case 472:           /* VSX Vector truncate Double-Precision to
5134                            Integer and Convert to Signed Integer
5135                            Doubleword format with Saturate */
5136     case 216:           /* VSX Vector truncate Double-Precision to
5137                            Integer and Convert to Signed Integer Word
5138                            Format with Saturate */
5139     case 456:           /* VSX Vector truncate Double-Precision to
5140                            Integer and Convert to Unsigned Integer
5141                            Doubleword format with Saturate */
5142     case 200:           /* VSX Vector truncate Double-Precision to
5143                            Integer and Convert to Unsigned Integer Word
5144                            Format with Saturate */
5145     case 457:           /* VSX Vector Convert Single-Precision to
5146                            Double-Precision format */
5147     case 408:           /* VSX Vector truncate Single-Precision to
5148                            Integer and Convert to Signed Integer
5149                            Doubleword format with Saturate */
5150     case 152:           /* VSX Vector truncate Single-Precision to
5151                            Integer and Convert to Signed Integer Word
5152                            Format with Saturate */
5153     case 392:           /* VSX Vector truncate Single-Precision to
5154                            Integer and Convert to Unsigned Integer
5155                            Doubleword format with Saturate */
5156     case 136:           /* VSX Vector truncate Single-Precision to
5157                            Integer and Convert to Unsigned Integer Word
5158                            Format with Saturate */
5159     case 504:           /* VSX Vector Convert and round Signed Integer
5160                            Doubleword to Double-Precision format */
5161     case 440:           /* VSX Vector Convert and round Signed Integer
5162                            Doubleword to Single-Precision format */
5163     case 248:           /* VSX Vector Convert Signed Integer Word to
5164                            Double-Precision format */
5165     case 184:           /* VSX Vector Convert and round Signed Integer
5166                            Word to Single-Precision format */
5167     case 488:           /* VSX Vector Convert and round Unsigned
5168                            Integer Doubleword to Double-Precision format */
5169     case 424:           /* VSX Vector Convert and round Unsigned
5170                            Integer Doubleword to Single-Precision format */
5171     case 232:           /* VSX Vector Convert and round Unsigned
5172                            Integer Word to Double-Precision format */
5173     case 168:           /* VSX Vector Convert and round Unsigned
5174                            Integer Word to Single-Precision format */
5175     case 201:           /* VSX Vector Round to Double-Precision
5176                            Integer using round to Nearest Away */
5177     case 235:           /* VSX Vector Round to Double-Precision
5178                            Integer Exact using Current rounding mode */
5179     case 249:           /* VSX Vector Round to Double-Precision
5180                            Integer using round toward -Infinity */
5181     case 233:           /* VSX Vector Round to Double-Precision
5182                            Integer using round toward +Infinity */
5183     case 217:           /* VSX Vector Round to Double-Precision
5184                            Integer using round toward Zero */
5185     case 218:           /* VSX Vector Reciprocal Estimate Double-Precision */
5186     case 154:           /* VSX Vector Reciprocal Estimate Single-Precision */
5187     case 137:           /* VSX Vector Round to Single-Precision Integer
5188                            Using Round to Nearest Away */
5189     case 171:           /* VSX Vector Round to Single-Precision Integer
5190                            Exact Using Current rounding mode */
5191     case 185:           /* VSX Vector Round to Single-Precision Integer
5192                            Using Round toward -Infinity */
5193     case 169:           /* VSX Vector Round to Single-Precision Integer
5194                            Using Round toward +Infinity */
5195     case 153:           /* VSX Vector Round to Single-Precision Integer
5196                            Using round toward Zero */
5197     case 202:           /* VSX Vector Reciprocal Square Root Estimate
5198                            Double-Precision */
5199     case 138:           /* VSX Vector Reciprocal Square Root Estimate
5200                            Single-Precision */
5201     case 203:           /* VSX Vector Square Root Double-Precision */
5202     case 139:           /* VSX Vector Square Root Single-Precision */
5203       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5204       /* FALL-THROUGH */
5205     case 345:           /* VSX Scalar Absolute Value Double-Precision */
5206     case 267:           /* VSX Scalar Convert Scalar Single-Precision to
5207                            Vector Single-Precision format Non-signalling */
5208     case 331:           /* VSX Scalar Convert Single-Precision to
5209                            Double-Precision format Non-signalling */
5210     case 361:           /* VSX Scalar Negative Absolute Value Double-Precision */
5211     case 377:           /* VSX Scalar Negate Double-Precision */
5212     case 473:           /* VSX Vector Absolute Value Double-Precision */
5213     case 409:           /* VSX Vector Absolute Value Single-Precision */
5214     case 489:           /* VSX Vector Negative Absolute Value Double-Precision */
5215     case 425:           /* VSX Vector Negative Absolute Value Single-Precision */
5216     case 505:           /* VSX Vector Negate Double-Precision */
5217     case 441:           /* VSX Vector Negate Single-Precision */
5218     case 164:           /* VSX Splat Word */
5219     case 165:           /* VSX Vector Extract Unsigned Word */
5220     case 181:           /* VSX Vector Insert Word */
5221       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5222       return 0;
5223
5224     case 298:           /* VSX Scalar Test Data Class Single-Precision */
5225     case 362:           /* VSX Scalar Test Data Class Double-Precision */
5226       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5227       /* FALL-THROUGH */
5228     case 106:           /* VSX Scalar Test for software Square Root
5229                            Double-Precision */
5230     case 234:           /* VSX Vector Test for software Square Root
5231                            Double-Precision */
5232     case 170:           /* VSX Vector Test for software Square Root
5233                            Single-Precision */
5234       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5235       return 0;
5236
5237     case 347:
5238       switch (PPC_FIELD (insn, 11, 5))
5239         {
5240         case 0:         /* VSX Scalar Extract Exponent Double-Precision */
5241         case 1:         /* VSX Scalar Extract Significand Double-Precision */
5242           record_full_arch_list_add_reg (regcache,
5243                                          tdep->ppc_gp0_regnum + PPC_RT (insn));
5244           return 0;
5245         case 16:        /* VSX Scalar Convert Half-Precision format to
5246                            Double-Precision format */
5247         case 17:        /* VSX Scalar round & Convert Double-Precision format
5248                            to Half-Precision format */
5249           record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5250           ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5251           return 0;
5252         }
5253       break;
5254
5255     case 475:
5256       switch (PPC_FIELD (insn, 11, 5))
5257         {
5258         case 24:        /* VSX Vector Convert Half-Precision format to
5259                            Single-Precision format */
5260         case 25:        /* VSX Vector round and Convert Single-Precision format
5261                            to Half-Precision format */
5262           record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5263           /* FALL-THROUGH */
5264         case 0:         /* VSX Vector Extract Exponent Double-Precision */
5265         case 1:         /* VSX Vector Extract Significand Double-Precision */
5266         case 7:         /* VSX Vector Byte-Reverse Halfword */
5267         case 8:         /* VSX Vector Extract Exponent Single-Precision */
5268         case 9:         /* VSX Vector Extract Significand Single-Precision */
5269         case 15:        /* VSX Vector Byte-Reverse Word */
5270         case 23:        /* VSX Vector Byte-Reverse Doubleword */
5271         case 31:        /* VSX Vector Byte-Reverse Quadword */
5272           ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5273           return 0;
5274         }
5275       break;
5276     }
5277
5278   switch (ext)
5279     {
5280     case 360:           /* VSX Vector Splat Immediate Byte */
5281       if (PPC_FIELD (insn, 11, 2) == 0)
5282         {
5283           ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5284           return 0;
5285         }
5286       break;
5287     case 918:           /* VSX Scalar Insert Exponent Double-Precision */
5288       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5289       return 0;
5290     }
5291
5292   if (((ext >> 3) & 0x3) == 3)  /* VSX Select */
5293     {
5294       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5295       return 0;
5296     }
5297
5298   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5299                       "at %s, 60-%d.\n", insn, paddress (gdbarch, addr), ext);
5300   return -1;
5301 }
5302
5303 /* Parse and record instructions of primary opcode-61 at ADDR.
5304    Return 0 if successful.  */
5305
5306 static int
5307 ppc_process_record_op61 (struct gdbarch *gdbarch, struct regcache *regcache,
5308                            CORE_ADDR addr, uint32_t insn)
5309 {
5310   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5311   ULONGEST ea = 0;
5312   int size;
5313
5314   switch (insn & 0x3)
5315     {
5316     case 0:             /* Store Floating-Point Double Pair */
5317     case 2:             /* Store VSX Scalar Doubleword */
5318     case 3:             /* Store VSX Scalar Single */
5319       if (PPC_RA (insn) != 0)
5320         regcache_raw_read_unsigned (regcache,
5321                                     tdep->ppc_gp0_regnum + PPC_RA (insn),
5322                                     &ea);
5323       ea += PPC_DS (insn) << 2;
5324       switch (insn & 0x3)
5325         {
5326         case 0:         /* Store Floating-Point Double Pair */
5327           size = 16;
5328           break;
5329         case 2:         /* Store VSX Scalar Doubleword */
5330           size = 8;
5331           break;
5332         case 3:         /* Store VSX Scalar Single */
5333           size = 4;
5334           break;
5335         default:
5336           gdb_assert (0);
5337         }
5338       record_full_arch_list_add_mem (ea, size);
5339       return 0;
5340     }
5341
5342   switch (insn & 0x7)
5343     {
5344     case 1:             /* Load VSX Vector */
5345       ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5346       return 0;
5347     case 5:             /* Store VSX Vector */
5348       if (PPC_RA (insn) != 0)
5349         regcache_raw_read_unsigned (regcache,
5350                                     tdep->ppc_gp0_regnum + PPC_RA (insn),
5351                                     &ea);
5352       ea += PPC_DQ (insn) << 4;
5353       record_full_arch_list_add_mem (ea, 16);
5354       return 0;
5355     }
5356
5357   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5358                       "at %s.\n", insn, paddress (gdbarch, addr));
5359   return -1;
5360 }
5361
5362 /* Parse and record instructions of primary opcode-63 at ADDR.
5363    Return 0 if successful.  */
5364
5365 static int
5366 ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
5367                            CORE_ADDR addr, uint32_t insn)
5368 {
5369   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5370   int ext = PPC_EXTOP (insn);
5371   int tmp;
5372
5373   switch (ext & 0x1f)
5374     {
5375     case 18:            /* Floating Divide */
5376     case 20:            /* Floating Subtract */
5377     case 21:            /* Floating Add */
5378     case 22:            /* Floating Square Root */
5379     case 24:            /* Floating Reciprocal Estimate */
5380     case 25:            /* Floating Multiply */
5381     case 26:            /* Floating Reciprocal Square Root Estimate */
5382     case 28:            /* Floating Multiply-Subtract */
5383     case 29:            /* Floating Multiply-Add */
5384     case 30:            /* Floating Negative Multiply-Subtract */
5385     case 31:            /* Floating Negative Multiply-Add */
5386       record_full_arch_list_add_reg (regcache,
5387                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5388       if (PPC_RC (insn))
5389         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5390       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5391       return 0;
5392
5393     case 23:            /* Floating Select */
5394       record_full_arch_list_add_reg (regcache,
5395                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5396       if (PPC_RC (insn))
5397         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5398       return 0;
5399     }
5400
5401   switch (ext & 0xff)
5402     {
5403     case 5:             /* VSX Scalar Round to Quad-Precision Integer */
5404     case 37:            /* VSX Scalar Round Quad-Precision to Double-Extended
5405                            Precision */
5406       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5407       ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5408       return 0;
5409     }
5410
5411   switch (ext)
5412     {
5413     case 2:             /* DFP Add Quad */
5414     case 3:             /* DFP Quantize Quad */
5415     case 34:            /* DFP Multiply Quad */
5416     case 35:            /* DFP Reround Quad */
5417     case 67:            /* DFP Quantize Immediate Quad */
5418     case 99:            /* DFP Round To FP Integer With Inexact Quad */
5419     case 227:           /* DFP Round To FP Integer Without Inexact Quad */
5420     case 258:           /* DFP Convert To DFP Extended Quad */
5421     case 514:           /* DFP Subtract Quad */
5422     case 546:           /* DFP Divide Quad */
5423     case 770:           /* DFP Round To DFP Long Quad */
5424     case 802:           /* DFP Convert From Fixed Quad */
5425     case 834:           /* DFP Encode BCD To DPD Quad */
5426       if (PPC_RC (insn))
5427         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5428       tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
5429       record_full_arch_list_add_reg (regcache, tmp);
5430       record_full_arch_list_add_reg (regcache, tmp + 1);
5431       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5432       return 0;
5433
5434     case 130:           /* DFP Compare Ordered Quad */
5435     case 162:           /* DFP Test Exponent Quad */
5436     case 194:           /* DFP Test Data Class Quad */
5437     case 226:           /* DFP Test Data Group Quad */
5438     case 642:           /* DFP Compare Unordered Quad */
5439     case 674:           /* DFP Test Significance Quad */
5440     case 675:           /* DFP Test Significance Immediate Quad */
5441       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5442       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5443       return 0;
5444
5445     case 66:            /* DFP Shift Significand Left Immediate Quad */
5446     case 98:            /* DFP Shift Significand Right Immediate Quad */
5447     case 322:           /* DFP Decode DPD To BCD Quad */
5448     case 866:           /* DFP Insert Biased Exponent Quad */
5449       tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
5450       record_full_arch_list_add_reg (regcache, tmp);
5451       record_full_arch_list_add_reg (regcache, tmp + 1);
5452       if (PPC_RC (insn))
5453         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5454       return 0;
5455
5456     case 290:           /* DFP Convert To Fixed Quad */
5457       record_full_arch_list_add_reg (regcache,
5458                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5459       if (PPC_RC (insn))
5460         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5461       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5462       return 0;
5463
5464     case 354:           /* DFP Extract Biased Exponent Quad */
5465       record_full_arch_list_add_reg (regcache,
5466                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5467       if (PPC_RC (insn))
5468         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5469       return 0;
5470
5471     case 12:            /* Floating Round to Single-Precision */
5472     case 14:            /* Floating Convert To Integer Word */
5473     case 15:            /* Floating Convert To Integer Word
5474                            with round toward Zero */
5475     case 142:           /* Floating Convert To Integer Word Unsigned */
5476     case 143:           /* Floating Convert To Integer Word Unsigned
5477                            with round toward Zero */
5478     case 392:           /* Floating Round to Integer Nearest */
5479     case 424:           /* Floating Round to Integer Toward Zero */
5480     case 456:           /* Floating Round to Integer Plus */
5481     case 488:           /* Floating Round to Integer Minus */
5482     case 814:           /* Floating Convert To Integer Doubleword */
5483     case 815:           /* Floating Convert To Integer Doubleword
5484                            with round toward Zero */
5485     case 846:           /* Floating Convert From Integer Doubleword */
5486     case 942:           /* Floating Convert To Integer Doubleword Unsigned */
5487     case 943:           /* Floating Convert To Integer Doubleword Unsigned
5488                            with round toward Zero */
5489     case 974:           /* Floating Convert From Integer Doubleword Unsigned */
5490       record_full_arch_list_add_reg (regcache,
5491                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5492       if (PPC_RC (insn))
5493         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5494       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5495       return 0;
5496
5497     case 583:
5498       switch (PPC_FIELD (insn, 11, 5))
5499         {
5500           case 1:       /* Move From FPSCR & Clear Enables */
5501           case 20:      /* Move From FPSCR Control & set DRN */
5502           case 21:      /* Move From FPSCR Control & set DRN Immediate */
5503           case 22:      /* Move From FPSCR Control & set RN */
5504           case 23:      /* Move From FPSCR Control & set RN Immediate */
5505             record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5506           case 0:       /* Move From FPSCR */
5507           case 24:      /* Move From FPSCR Lightweight */
5508             if (PPC_FIELD (insn, 11, 5) == 0 && PPC_RC (insn))
5509               record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5510             record_full_arch_list_add_reg (regcache,
5511                                            tdep->ppc_fp0_regnum
5512                                            + PPC_FRT (insn));
5513             return 0;
5514         }
5515       break;
5516
5517     case 8:             /* Floating Copy Sign */
5518     case 40:            /* Floating Negate */
5519     case 72:            /* Floating Move Register */
5520     case 136:           /* Floating Negative Absolute Value */
5521     case 264:           /* Floating Absolute Value */
5522       record_full_arch_list_add_reg (regcache,
5523                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5524       if (PPC_RC (insn))
5525         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5526       return 0;
5527
5528     case 838:           /* Floating Merge Odd Word */
5529     case 966:           /* Floating Merge Even Word */
5530       record_full_arch_list_add_reg (regcache,
5531                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5532       return 0;
5533
5534     case 38:            /* Move To FPSCR Bit 1 */
5535     case 70:            /* Move To FPSCR Bit 0 */
5536     case 134:           /* Move To FPSCR Field Immediate */
5537     case 711:           /* Move To FPSCR Fields */
5538       if (PPC_RC (insn))
5539         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5540       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5541       return 0;
5542
5543     case 0:             /* Floating Compare Unordered */
5544     case 32:            /* Floating Compare Ordered */
5545     case 64:            /* Move to Condition Register from FPSCR */
5546     case 132:           /* VSX Scalar Compare Ordered Quad-Precision */
5547     case 164:           /* VSX Scalar Compare Exponents Quad-Precision */
5548     case 644:           /* VSX Scalar Compare Unordered Quad-Precision */
5549     case 708:           /* VSX Scalar Test Data Class Quad-Precision */
5550       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5551       /* FALL-THROUGH */
5552     case 128:           /* Floating Test for software Divide */
5553     case 160:           /* Floating Test for software Square Root */
5554       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5555       return 0;
5556
5557     case 4:             /* VSX Scalar Add Quad-Precision */
5558     case 36:            /* VSX Scalar Multiply Quad-Precision */
5559     case 388:           /* VSX Scalar Multiply-Add Quad-Precision */
5560     case 420:           /* VSX Scalar Multiply-Subtract Quad-Precision */
5561     case 452:           /* VSX Scalar Negative Multiply-Add Quad-Precision */
5562     case 484:           /* VSX Scalar Negative Multiply-Subtract
5563                            Quad-Precision */
5564     case 516:           /* VSX Scalar Subtract Quad-Precision */
5565     case 548:           /* VSX Scalar Divide Quad-Precision */
5566       record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5567       /* FALL-THROUGH */
5568     case 100:           /* VSX Scalar Copy Sign Quad-Precision */
5569     case 868:           /* VSX Scalar Insert Exponent Quad-Precision */
5570       ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5571       return 0;
5572
5573     case 804:
5574       switch (PPC_FIELD (insn, 11, 5))
5575         {
5576         case 27:        /* VSX Scalar Square Root Quad-Precision */
5577           record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5578           /* FALL-THROUGH */
5579         case 0:         /* VSX Scalar Absolute Quad-Precision */
5580         case 2:         /* VSX Scalar Extract Exponent Quad-Precision */
5581         case 8:         /* VSX Scalar Negative Absolute Quad-Precision */
5582         case 16:        /* VSX Scalar Negate Quad-Precision */
5583         case 18:        /* VSX Scalar Extract Significand Quad-Precision */
5584           ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5585           return 0;
5586         }
5587       break;
5588
5589     case 836:
5590       switch (PPC_FIELD (insn, 11, 5))
5591         {
5592         case 1:         /* VSX Scalar truncate & Convert Quad-Precision format
5593                            to Unsigned Word format */
5594         case 2:         /* VSX Scalar Convert Unsigned Doubleword format to
5595                            Quad-Precision format */
5596         case 9:         /* VSX Scalar truncate & Convert Quad-Precision format
5597                            to Signed Word format */
5598         case 10:        /* VSX Scalar Convert Signed Doubleword format to
5599                            Quad-Precision format */
5600         case 17:        /* VSX Scalar truncate & Convert Quad-Precision format
5601                            to Unsigned Doubleword format */
5602         case 20:        /* VSX Scalar round & Convert Quad-Precision format to
5603                            Double-Precision format */
5604         case 22:        /* VSX Scalar Convert Double-Precision format to
5605                            Quad-Precision format */
5606         case 25:        /* VSX Scalar truncate & Convert Quad-Precision format
5607                            to Signed Doubleword format */
5608           record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5609           ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5610           return 0;
5611         }
5612     }
5613
5614   fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5615                       "at %s, 63-%d.\n", insn, paddress (gdbarch, addr), ext);
5616   return -1;
5617 }
5618
5619 /* Parse the current instruction and record the values of the registers and
5620    memory that will be changed in current instruction to "record_arch_list".
5621    Return -1 if something wrong.  */
5622
5623 int
5624 ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
5625                       CORE_ADDR addr)
5626 {
5627   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5628   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5629   uint32_t insn;
5630   int op6, tmp, i;
5631
5632   insn = read_memory_unsigned_integer (addr, 4, byte_order);
5633   op6 = PPC_OP6 (insn);
5634
5635   switch (op6)
5636     {
5637     case 2:             /* Trap Doubleword Immediate */
5638     case 3:             /* Trap Word Immediate */
5639       /* Do nothing.  */
5640       break;
5641
5642     case 4:
5643       if (ppc_process_record_op4 (gdbarch, regcache, addr, insn) != 0)
5644         return -1;
5645       break;
5646
5647     case 17:            /* System call */
5648       if (PPC_LEV (insn) != 0)
5649         goto UNKNOWN_OP;
5650
5651       if (tdep->ppc_syscall_record != NULL)
5652         {
5653           if (tdep->ppc_syscall_record (regcache) != 0)
5654             return -1;
5655         }
5656       else
5657         {
5658           printf_unfiltered (_("no syscall record support\n"));
5659           return -1;
5660         }
5661       break;
5662
5663     case 7:             /* Multiply Low Immediate */
5664       record_full_arch_list_add_reg (regcache,
5665                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
5666       break;
5667
5668     case 8:             /* Subtract From Immediate Carrying */
5669       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
5670       record_full_arch_list_add_reg (regcache,
5671                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
5672       break;
5673
5674     case 10:            /* Compare Logical Immediate  */
5675     case 11:            /* Compare Immediate */
5676       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5677       break;
5678
5679     case 13:            /* Add Immediate Carrying and Record */
5680       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5681       /* FALL-THROUGH */
5682     case 12:            /* Add Immediate Carrying */
5683       record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
5684       /* FALL-THROUGH */
5685     case 14:            /* Add Immediate */
5686     case 15:            /* Add Immediate Shifted */
5687       record_full_arch_list_add_reg (regcache,
5688                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
5689       break;
5690
5691     case 16:            /* Branch Conditional */
5692       if ((PPC_BO (insn) & 0x4) == 0)
5693         record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
5694       /* FALL-THROUGH */
5695     case 18:            /* Branch */
5696       if (PPC_LK (insn))
5697         record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
5698       break;
5699
5700     case 19:
5701       if (ppc_process_record_op19 (gdbarch, regcache, addr, insn) != 0)
5702         return -1;
5703       break;
5704
5705     case 20:            /* Rotate Left Word Immediate then Mask Insert */
5706     case 21:            /* Rotate Left Word Immediate then AND with Mask */
5707     case 23:            /* Rotate Left Word then AND with Mask */
5708     case 30:            /* Rotate Left Doubleword Immediate then Clear Left */
5709                         /* Rotate Left Doubleword Immediate then Clear Right */
5710                         /* Rotate Left Doubleword Immediate then Clear */
5711                         /* Rotate Left Doubleword then Clear Left */
5712                         /* Rotate Left Doubleword then Clear Right */
5713                         /* Rotate Left Doubleword Immediate then Mask Insert */
5714       if (PPC_RC (insn))
5715         record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5716       record_full_arch_list_add_reg (regcache,
5717                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
5718       break;
5719
5720     case 28:            /* AND Immediate */
5721     case 29:            /* AND Immediate Shifted */
5722       record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5723       /* FALL-THROUGH */
5724     case 24:            /* OR Immediate */
5725     case 25:            /* OR Immediate Shifted */
5726     case 26:            /* XOR Immediate */
5727     case 27:            /* XOR Immediate Shifted */
5728       record_full_arch_list_add_reg (regcache,
5729                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
5730       break;
5731
5732     case 31:
5733       if (ppc_process_record_op31 (gdbarch, regcache, addr, insn) != 0)
5734         return -1;
5735       break;
5736
5737     case 33:            /* Load Word and Zero with Update */
5738     case 35:            /* Load Byte and Zero with Update */
5739     case 41:            /* Load Halfword and Zero with Update */
5740     case 43:            /* Load Halfword Algebraic with Update */
5741       record_full_arch_list_add_reg (regcache,
5742                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
5743       /* FALL-THROUGH */
5744     case 32:            /* Load Word and Zero */
5745     case 34:            /* Load Byte and Zero */
5746     case 40:            /* Load Halfword and Zero */
5747     case 42:            /* Load Halfword Algebraic */
5748       record_full_arch_list_add_reg (regcache,
5749                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
5750       break;
5751
5752     case 46:            /* Load Multiple Word */
5753       for (i = PPC_RT (insn); i < 32; i++)
5754         record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum + i);
5755       break;
5756
5757     case 56:            /* Load Quadword */
5758       tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn) & ~1);
5759       record_full_arch_list_add_reg (regcache, tmp);
5760       record_full_arch_list_add_reg (regcache, tmp + 1);
5761       break;
5762
5763     case 49:            /* Load Floating-Point Single with Update */
5764     case 51:            /* Load Floating-Point Double with Update */
5765       record_full_arch_list_add_reg (regcache,
5766                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
5767       /* FALL-THROUGH */
5768     case 48:            /* Load Floating-Point Single */
5769     case 50:            /* Load Floating-Point Double */
5770       record_full_arch_list_add_reg (regcache,
5771                                      tdep->ppc_fp0_regnum + PPC_FRT (insn));
5772       break;
5773
5774     case 47:            /* Store Multiple Word */
5775         {
5776           ULONGEST addr = 0;
5777
5778           if (PPC_RA (insn) != 0)
5779             regcache_raw_read_unsigned (regcache,
5780                                         tdep->ppc_gp0_regnum + PPC_RA (insn),
5781                                         &addr);
5782
5783           addr += PPC_D (insn);
5784           record_full_arch_list_add_mem (addr, 4 * (32 - PPC_RS (insn)));
5785         }
5786       break;
5787
5788     case 37:            /* Store Word with Update */
5789     case 39:            /* Store Byte with Update */
5790     case 45:            /* Store Halfword with Update */
5791     case 53:            /* Store Floating-Point Single with Update */
5792     case 55:            /* Store Floating-Point Double with Update */
5793       record_full_arch_list_add_reg (regcache,
5794                                      tdep->ppc_gp0_regnum + PPC_RA (insn));
5795       /* FALL-THROUGH */
5796     case 36:            /* Store Word */
5797     case 38:            /* Store Byte */
5798     case 44:            /* Store Halfword */
5799     case 52:            /* Store Floating-Point Single */
5800     case 54:            /* Store Floating-Point Double */
5801         {
5802           ULONGEST addr = 0;
5803           int size = -1;
5804
5805           if (PPC_RA (insn) != 0)
5806             regcache_raw_read_unsigned (regcache,
5807                                         tdep->ppc_gp0_regnum + PPC_RA (insn),
5808                                         &addr);
5809           addr += PPC_D (insn);
5810
5811           if (op6 == 36 || op6 == 37 || op6 == 52 || op6 == 53)
5812             size = 4;
5813           else if (op6 == 54 || op6 == 55)
5814             size = 8;
5815           else if (op6 == 44 || op6 == 45)
5816             size = 2;
5817           else if (op6 == 38 || op6 == 39)
5818             size = 1;
5819           else
5820             gdb_assert (0);
5821
5822           record_full_arch_list_add_mem (addr, size);
5823         }
5824       break;
5825
5826     case 57:
5827       switch (insn & 0x3)
5828         {
5829         case 0:         /* Load Floating-Point Double Pair */
5830           tmp = tdep->ppc_fp0_regnum + (PPC_RT (insn) & ~1);
5831           record_full_arch_list_add_reg (regcache, tmp);
5832           record_full_arch_list_add_reg (regcache, tmp + 1);
5833           break;
5834         case 2:         /* Load VSX Scalar Doubleword */
5835         case 3:         /* Load VSX Scalar Single */
5836           ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5837           break;
5838         default:
5839           goto UNKNOWN_OP;
5840         }
5841       break;
5842
5843     case 58:            /* Load Doubleword */
5844                         /* Load Doubleword with Update */
5845                         /* Load Word Algebraic */
5846       if (PPC_FIELD (insn, 30, 2) > 2)
5847         goto UNKNOWN_OP;
5848
5849       record_full_arch_list_add_reg (regcache,
5850                                      tdep->ppc_gp0_regnum + PPC_RT (insn));
5851       if (PPC_BIT (insn, 31))
5852         record_full_arch_list_add_reg (regcache,
5853                                        tdep->ppc_gp0_regnum + PPC_RA (insn));
5854       break;
5855
5856     case 59:
5857       if (ppc_process_record_op59 (gdbarch, regcache, addr, insn) != 0)
5858         return -1;
5859       break;
5860
5861     case 60:
5862       if (ppc_process_record_op60 (gdbarch, regcache, addr, insn) != 0)
5863         return -1;
5864       break;
5865
5866     case 61:
5867       if (ppc_process_record_op61 (gdbarch, regcache, addr, insn) != 0)
5868         return -1;
5869       break;
5870
5871     case 62:            /* Store Doubleword */
5872                         /* Store Doubleword with Update */
5873                         /* Store Quadword with Update */
5874         {
5875           ULONGEST addr = 0;
5876           int size;
5877           int sub2 = PPC_FIELD (insn, 30, 2);
5878
5879           if (sub2 > 2)
5880             goto UNKNOWN_OP;
5881
5882           if (PPC_RA (insn) != 0)
5883             regcache_raw_read_unsigned (regcache,
5884                                         tdep->ppc_gp0_regnum + PPC_RA (insn),
5885                                         &addr);
5886
5887           size = (sub2 == 2) ? 16 : 8;
5888
5889           addr += PPC_DS (insn) << 2;
5890           record_full_arch_list_add_mem (addr, size);
5891
5892           if (op6 == 62 && sub2 == 1)
5893             record_full_arch_list_add_reg (regcache,
5894                                            tdep->ppc_gp0_regnum +
5895                                            PPC_RA (insn));
5896
5897           break;
5898         }
5899
5900     case 63:
5901       if (ppc_process_record_op63 (gdbarch, regcache, addr, insn) != 0)
5902         return -1;
5903       break;
5904
5905     default:
5906 UNKNOWN_OP:
5907       fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5908                           "at %s, %d.\n", insn, paddress (gdbarch, addr), op6);
5909       return -1;
5910     }
5911
5912   if (record_full_arch_list_add_reg (regcache, PPC_PC_REGNUM))
5913     return -1;
5914   if (record_full_arch_list_add_end ())
5915     return -1;
5916   return 0;
5917 }
5918
5919 /* Initialize the current architecture based on INFO.  If possible, re-use an
5920    architecture from ARCHES, which is a list of architectures already created
5921    during this debugging session.
5922
5923    Called e.g. at program startup, when reading a core file, and when reading
5924    a binary file.  */
5925
5926 static struct gdbarch *
5927 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
5928 {
5929   struct gdbarch *gdbarch;
5930   struct gdbarch_tdep *tdep;
5931   int wordsize, from_xcoff_exec, from_elf_exec;
5932   enum bfd_architecture arch;
5933   unsigned long mach;
5934   bfd abfd;
5935   enum auto_boolean soft_float_flag = powerpc_soft_float_global;
5936   int soft_float;
5937   enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
5938   enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
5939   int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0,
5940       have_vsx = 0;
5941   int tdesc_wordsize = -1;
5942   const struct target_desc *tdesc = info.target_desc;
5943   struct tdesc_arch_data *tdesc_data = NULL;
5944   int num_pseudoregs = 0;
5945   int cur_reg;
5946
5947   /* INFO may refer to a binary that is not of the PowerPC architecture,
5948      e.g. when debugging a stand-alone SPE executable on a Cell/B.E. system.
5949      In this case, we must not attempt to infer properties of the (PowerPC
5950      side) of the target system from properties of that executable.  Trust
5951      the target description instead.  */
5952   if (info.abfd
5953       && bfd_get_arch (info.abfd) != bfd_arch_powerpc
5954       && bfd_get_arch (info.abfd) != bfd_arch_rs6000)
5955     info.abfd = NULL;
5956
5957   from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
5958     bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
5959
5960   from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
5961     bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
5962
5963   /* Check word size.  If INFO is from a binary file, infer it from
5964      that, else choose a likely default.  */
5965   if (from_xcoff_exec)
5966     {
5967       if (bfd_xcoff_is_xcoff64 (info.abfd))
5968         wordsize = 8;
5969       else
5970         wordsize = 4;
5971     }
5972   else if (from_elf_exec)
5973     {
5974       if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
5975         wordsize = 8;
5976       else
5977         wordsize = 4;
5978     }
5979   else if (tdesc_has_registers (tdesc))
5980     wordsize = -1;
5981   else
5982     {
5983       if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
5984         wordsize = (info.bfd_arch_info->bits_per_word
5985                     / info.bfd_arch_info->bits_per_byte);
5986       else
5987         wordsize = 4;
5988     }
5989
5990   /* Get the architecture and machine from the BFD.  */
5991   arch = info.bfd_arch_info->arch;
5992   mach = info.bfd_arch_info->mach;
5993
5994   /* For e500 executables, the apuinfo section is of help here.  Such
5995      section contains the identifier and revision number of each
5996      Application-specific Processing Unit that is present on the
5997      chip.  The content of the section is determined by the assembler
5998      which looks at each instruction and determines which unit (and
5999      which version of it) can execute it.  Grovel through the section
6000      looking for relevant e500 APUs.  */
6001
6002   if (bfd_uses_spe_extensions (info.abfd))
6003     {
6004       arch = info.bfd_arch_info->arch;
6005       mach = bfd_mach_ppc_e500;
6006       bfd_default_set_arch_mach (&abfd, arch, mach);
6007       info.bfd_arch_info = bfd_get_arch_info (&abfd);
6008     }
6009
6010   /* Find a default target description which describes our register
6011      layout, if we do not already have one.  */
6012   if (! tdesc_has_registers (tdesc))
6013     {
6014       const struct variant *v;
6015
6016       /* Choose variant.  */
6017       v = find_variant_by_arch (arch, mach);
6018       if (!v)
6019         return NULL;
6020
6021       tdesc = *v->tdesc;
6022     }
6023
6024   gdb_assert (tdesc_has_registers (tdesc));
6025
6026   /* Check any target description for validity.  */
6027   if (tdesc_has_registers (tdesc))
6028     {
6029       static const char *const gprs[] = {
6030         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
6031         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
6032         "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
6033         "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
6034       };
6035       const struct tdesc_feature *feature;
6036       int i, valid_p;
6037       static const char *const msr_names[] = { "msr", "ps" };
6038       static const char *const cr_names[] = { "cr", "cnd" };
6039       static const char *const ctr_names[] = { "ctr", "cnt" };
6040
6041       feature = tdesc_find_feature (tdesc,
6042                                     "org.gnu.gdb.power.core");
6043       if (feature == NULL)
6044         return NULL;
6045
6046       tdesc_data = tdesc_data_alloc ();
6047
6048       valid_p = 1;
6049       for (i = 0; i < ppc_num_gprs; i++)
6050         valid_p &= tdesc_numbered_register (feature, tdesc_data, i, gprs[i]);
6051       valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_PC_REGNUM,
6052                                           "pc");
6053       valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_LR_REGNUM,
6054                                           "lr");
6055       valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_XER_REGNUM,
6056                                           "xer");
6057
6058       /* Allow alternate names for these registers, to accomodate GDB's
6059          historic naming.  */
6060       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6061                                                   PPC_MSR_REGNUM, msr_names);
6062       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6063                                                   PPC_CR_REGNUM, cr_names);
6064       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6065                                                   PPC_CTR_REGNUM, ctr_names);
6066
6067       if (!valid_p)
6068         {
6069           tdesc_data_cleanup (tdesc_data);
6070           return NULL;
6071         }
6072
6073       have_mq = tdesc_numbered_register (feature, tdesc_data, PPC_MQ_REGNUM,
6074                                          "mq");
6075
6076       tdesc_wordsize = tdesc_register_size (feature, "pc") / 8;
6077       if (wordsize == -1)
6078         wordsize = tdesc_wordsize;
6079
6080       feature = tdesc_find_feature (tdesc,
6081                                     "org.gnu.gdb.power.fpu");
6082       if (feature != NULL)
6083         {
6084           static const char *const fprs[] = {
6085             "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
6086             "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
6087             "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
6088             "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
6089           };
6090           valid_p = 1;
6091           for (i = 0; i < ppc_num_fprs; i++)
6092             valid_p &= tdesc_numbered_register (feature, tdesc_data,
6093                                                 PPC_F0_REGNUM + i, fprs[i]);
6094           valid_p &= tdesc_numbered_register (feature, tdesc_data,
6095                                               PPC_FPSCR_REGNUM, "fpscr");
6096
6097           if (!valid_p)
6098             {
6099               tdesc_data_cleanup (tdesc_data);
6100               return NULL;
6101             }
6102           have_fpu = 1;
6103         }
6104       else
6105         have_fpu = 0;
6106
6107       /* The DFP pseudo-registers will be available when there are floating
6108          point registers.  */
6109       have_dfp = have_fpu;
6110
6111       feature = tdesc_find_feature (tdesc,
6112                                     "org.gnu.gdb.power.altivec");
6113       if (feature != NULL)
6114         {
6115           static const char *const vector_regs[] = {
6116             "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
6117             "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
6118             "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
6119             "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
6120           };
6121
6122           valid_p = 1;
6123           for (i = 0; i < ppc_num_gprs; i++)
6124             valid_p &= tdesc_numbered_register (feature, tdesc_data,
6125                                                 PPC_VR0_REGNUM + i,
6126                                                 vector_regs[i]);
6127           valid_p &= tdesc_numbered_register (feature, tdesc_data,
6128                                               PPC_VSCR_REGNUM, "vscr");
6129           valid_p &= tdesc_numbered_register (feature, tdesc_data,
6130                                               PPC_VRSAVE_REGNUM, "vrsave");
6131
6132           if (have_spe || !valid_p)
6133             {
6134               tdesc_data_cleanup (tdesc_data);
6135               return NULL;
6136             }
6137           have_altivec = 1;
6138         }
6139       else
6140         have_altivec = 0;
6141
6142       /* Check for POWER7 VSX registers support.  */
6143       feature = tdesc_find_feature (tdesc,
6144                                     "org.gnu.gdb.power.vsx");
6145
6146       if (feature != NULL)
6147         {
6148           static const char *const vsx_regs[] = {
6149             "vs0h", "vs1h", "vs2h", "vs3h", "vs4h", "vs5h",
6150             "vs6h", "vs7h", "vs8h", "vs9h", "vs10h", "vs11h",
6151             "vs12h", "vs13h", "vs14h", "vs15h", "vs16h", "vs17h",
6152             "vs18h", "vs19h", "vs20h", "vs21h", "vs22h", "vs23h",
6153             "vs24h", "vs25h", "vs26h", "vs27h", "vs28h", "vs29h",
6154             "vs30h", "vs31h"
6155           };
6156
6157           valid_p = 1;
6158
6159           for (i = 0; i < ppc_num_vshrs; i++)
6160             valid_p &= tdesc_numbered_register (feature, tdesc_data,
6161                                                 PPC_VSR0_UPPER_REGNUM + i,
6162                                                 vsx_regs[i]);
6163           if (!valid_p)
6164             {
6165               tdesc_data_cleanup (tdesc_data);
6166               return NULL;
6167             }
6168
6169           have_vsx = 1;
6170         }
6171       else
6172         have_vsx = 0;
6173
6174       /* On machines supporting the SPE APU, the general-purpose registers
6175          are 64 bits long.  There are SIMD vector instructions to treat them
6176          as pairs of floats, but the rest of the instruction set treats them
6177          as 32-bit registers, and only operates on their lower halves.
6178
6179          In the GDB regcache, we treat their high and low halves as separate
6180          registers.  The low halves we present as the general-purpose
6181          registers, and then we have pseudo-registers that stitch together
6182          the upper and lower halves and present them as pseudo-registers.
6183
6184          Thus, the target description is expected to supply the upper
6185          halves separately.  */
6186
6187       feature = tdesc_find_feature (tdesc,
6188                                     "org.gnu.gdb.power.spe");
6189       if (feature != NULL)
6190         {
6191           static const char *const upper_spe[] = {
6192             "ev0h", "ev1h", "ev2h", "ev3h",
6193             "ev4h", "ev5h", "ev6h", "ev7h",
6194             "ev8h", "ev9h", "ev10h", "ev11h",
6195             "ev12h", "ev13h", "ev14h", "ev15h",
6196             "ev16h", "ev17h", "ev18h", "ev19h",
6197             "ev20h", "ev21h", "ev22h", "ev23h",
6198             "ev24h", "ev25h", "ev26h", "ev27h",
6199             "ev28h", "ev29h", "ev30h", "ev31h"
6200           };
6201
6202           valid_p = 1;
6203           for (i = 0; i < ppc_num_gprs; i++)
6204             valid_p &= tdesc_numbered_register (feature, tdesc_data,
6205                                                 PPC_SPE_UPPER_GP0_REGNUM + i,
6206                                                 upper_spe[i]);
6207           valid_p &= tdesc_numbered_register (feature, tdesc_data,
6208                                               PPC_SPE_ACC_REGNUM, "acc");
6209           valid_p &= tdesc_numbered_register (feature, tdesc_data,
6210                                               PPC_SPE_FSCR_REGNUM, "spefscr");
6211
6212           if (have_mq || have_fpu || !valid_p)
6213             {
6214               tdesc_data_cleanup (tdesc_data);
6215               return NULL;
6216             }
6217           have_spe = 1;
6218         }
6219       else
6220         have_spe = 0;
6221     }
6222
6223   /* If we have a 64-bit binary on a 32-bit target, complain.  Also
6224      complain for a 32-bit binary on a 64-bit target; we do not yet
6225      support that.  For instance, the 32-bit ABI routines expect
6226      32-bit GPRs.
6227
6228      As long as there isn't an explicit target description, we'll
6229      choose one based on the BFD architecture and get a word size
6230      matching the binary (probably powerpc:common or
6231      powerpc:common64).  So there is only trouble if a 64-bit target
6232      supplies a 64-bit description while debugging a 32-bit
6233      binary.  */
6234   if (tdesc_wordsize != -1 && tdesc_wordsize != wordsize)
6235     {
6236       tdesc_data_cleanup (tdesc_data);
6237       return NULL;
6238     }
6239
6240 #ifdef HAVE_ELF
6241   if (from_elf_exec)
6242     {
6243       switch (elf_elfheader (info.abfd)->e_flags & EF_PPC64_ABI)
6244         {
6245         case 1:
6246           elf_abi = POWERPC_ELF_V1;
6247           break;
6248         case 2:
6249           elf_abi = POWERPC_ELF_V2;
6250           break;
6251         default:
6252           break;
6253         }
6254     }
6255
6256   if (soft_float_flag == AUTO_BOOLEAN_AUTO && from_elf_exec)
6257     {
6258       switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6259                                         Tag_GNU_Power_ABI_FP))
6260         {
6261         case 1:
6262           soft_float_flag = AUTO_BOOLEAN_FALSE;
6263           break;
6264         case 2:
6265           soft_float_flag = AUTO_BOOLEAN_TRUE;
6266           break;
6267         default:
6268           break;
6269         }
6270     }
6271
6272   if (vector_abi == POWERPC_VEC_AUTO && from_elf_exec)
6273     {
6274       switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6275                                         Tag_GNU_Power_ABI_Vector))
6276         {
6277         case 1:
6278           vector_abi = POWERPC_VEC_GENERIC;
6279           break;
6280         case 2:
6281           vector_abi = POWERPC_VEC_ALTIVEC;
6282           break;
6283         case 3:
6284           vector_abi = POWERPC_VEC_SPE;
6285           break;
6286         default:
6287           break;
6288         }
6289     }
6290 #endif
6291
6292   /* At this point, the only supported ELF-based 64-bit little-endian
6293      operating system is GNU/Linux, and this uses the ELFv2 ABI by
6294      default.  All other supported ELF-based operating systems use the
6295      ELFv1 ABI by default.  Therefore, if the ABI marker is missing,
6296      e.g. because we run a legacy binary, or have attached to a process
6297      and have not found any associated binary file, set the default
6298      according to this heuristic.  */
6299   if (elf_abi == POWERPC_ELF_AUTO)
6300     {
6301       if (wordsize == 8 && info.byte_order == BFD_ENDIAN_LITTLE)
6302         elf_abi = POWERPC_ELF_V2;
6303       else
6304         elf_abi = POWERPC_ELF_V1;
6305     }
6306
6307   if (soft_float_flag == AUTO_BOOLEAN_TRUE)
6308     soft_float = 1;
6309   else if (soft_float_flag == AUTO_BOOLEAN_FALSE)
6310     soft_float = 0;
6311   else
6312     soft_float = !have_fpu;
6313
6314   /* If we have a hard float binary or setting but no floating point
6315      registers, downgrade to soft float anyway.  We're still somewhat
6316      useful in this scenario.  */
6317   if (!soft_float && !have_fpu)
6318     soft_float = 1;
6319
6320   /* Similarly for vector registers.  */
6321   if (vector_abi == POWERPC_VEC_ALTIVEC && !have_altivec)
6322     vector_abi = POWERPC_VEC_GENERIC;
6323
6324   if (vector_abi == POWERPC_VEC_SPE && !have_spe)
6325     vector_abi = POWERPC_VEC_GENERIC;
6326
6327   if (vector_abi == POWERPC_VEC_AUTO)
6328     {
6329       if (have_altivec)
6330         vector_abi = POWERPC_VEC_ALTIVEC;
6331       else if (have_spe)
6332         vector_abi = POWERPC_VEC_SPE;
6333       else
6334         vector_abi = POWERPC_VEC_GENERIC;
6335     }
6336
6337   /* Do not limit the vector ABI based on available hardware, since we
6338      do not yet know what hardware we'll decide we have.  Yuck!  FIXME!  */
6339
6340   /* Find a candidate among extant architectures.  */
6341   for (arches = gdbarch_list_lookup_by_info (arches, &info);
6342        arches != NULL;
6343        arches = gdbarch_list_lookup_by_info (arches->next, &info))
6344     {
6345       /* Word size in the various PowerPC bfd_arch_info structs isn't
6346          meaningful, because 64-bit CPUs can run in 32-bit mode.  So, perform
6347          separate word size check.  */
6348       tdep = gdbarch_tdep (arches->gdbarch);
6349       if (tdep && tdep->elf_abi != elf_abi)
6350         continue;
6351       if (tdep && tdep->soft_float != soft_float)
6352         continue;
6353       if (tdep && tdep->vector_abi != vector_abi)
6354         continue;
6355       if (tdep && tdep->wordsize == wordsize)
6356         {
6357           if (tdesc_data != NULL)
6358             tdesc_data_cleanup (tdesc_data);
6359           return arches->gdbarch;
6360         }
6361     }
6362
6363   /* None found, create a new architecture from INFO, whose bfd_arch_info
6364      validity depends on the source:
6365        - executable             useless
6366        - rs6000_host_arch()     good
6367        - core file              good
6368        - "set arch"             trust blindly
6369        - GDB startup            useless but harmless */
6370
6371   tdep = XCNEW (struct gdbarch_tdep);
6372   tdep->wordsize = wordsize;
6373   tdep->elf_abi = elf_abi;
6374   tdep->soft_float = soft_float;
6375   tdep->vector_abi = vector_abi;
6376
6377   gdbarch = gdbarch_alloc (&info, tdep);
6378
6379   tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
6380   tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
6381   tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
6382   tdep->ppc_cr_regnum = PPC_CR_REGNUM;
6383   tdep->ppc_lr_regnum = PPC_LR_REGNUM;
6384   tdep->ppc_ctr_regnum = PPC_CTR_REGNUM;
6385   tdep->ppc_xer_regnum = PPC_XER_REGNUM;
6386   tdep->ppc_mq_regnum = have_mq ? PPC_MQ_REGNUM : -1;
6387
6388   tdep->ppc_fp0_regnum = have_fpu ? PPC_F0_REGNUM : -1;
6389   tdep->ppc_fpscr_regnum = have_fpu ? PPC_FPSCR_REGNUM : -1;
6390   tdep->ppc_vsr0_upper_regnum = have_vsx ? PPC_VSR0_UPPER_REGNUM : -1;
6391   tdep->ppc_vr0_regnum = have_altivec ? PPC_VR0_REGNUM : -1;
6392   tdep->ppc_vrsave_regnum = have_altivec ? PPC_VRSAVE_REGNUM : -1;
6393   tdep->ppc_ev0_upper_regnum = have_spe ? PPC_SPE_UPPER_GP0_REGNUM : -1;
6394   tdep->ppc_acc_regnum = have_spe ? PPC_SPE_ACC_REGNUM : -1;
6395   tdep->ppc_spefscr_regnum = have_spe ? PPC_SPE_FSCR_REGNUM : -1;
6396
6397   set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
6398   set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
6399   set_gdbarch_fp0_regnum (gdbarch, tdep->ppc_fp0_regnum);
6400   set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
6401
6402   /* The XML specification for PowerPC sensibly calls the MSR "msr".
6403      GDB traditionally called it "ps", though, so let GDB add an
6404      alias.  */
6405   set_gdbarch_ps_regnum (gdbarch, tdep->ppc_ps_regnum);
6406
6407   if (wordsize == 8)
6408     set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
6409   else
6410     set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
6411
6412   /* Set lr_frame_offset.  */
6413   if (wordsize == 8)
6414     tdep->lr_frame_offset = 16;
6415   else
6416     tdep->lr_frame_offset = 4;
6417
6418   if (have_spe || have_dfp || have_vsx)
6419     {
6420       set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
6421       set_gdbarch_pseudo_register_write (gdbarch,
6422                                          rs6000_pseudo_register_write);
6423       set_gdbarch_ax_pseudo_register_collect (gdbarch,
6424               rs6000_ax_pseudo_register_collect);
6425     }
6426
6427   set_gdbarch_gen_return_address (gdbarch, rs6000_gen_return_address);
6428
6429   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
6430
6431   /* Select instruction printer.  */
6432   if (arch == bfd_arch_rs6000)
6433     set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
6434   else
6435     set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
6436
6437   set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
6438
6439   if (have_spe)
6440     num_pseudoregs += 32;
6441   if (have_dfp)
6442     num_pseudoregs += 16;
6443   if (have_vsx)
6444     /* Include both VSX and Extended FP registers.  */
6445     num_pseudoregs += 96;
6446
6447   set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
6448
6449   set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
6450   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
6451   set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
6452   set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
6453   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
6454   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
6455   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
6456   set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
6457   set_gdbarch_char_signed (gdbarch, 0);
6458
6459   set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
6460   if (wordsize == 8)
6461     /* PPC64 SYSV.  */
6462     set_gdbarch_frame_red_zone_size (gdbarch, 288);
6463
6464   set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
6465   set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
6466   set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
6467
6468   set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
6469   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
6470
6471   if (wordsize == 4)
6472     set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
6473   else if (wordsize == 8)
6474     set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
6475
6476   set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
6477   set_gdbarch_stack_frame_destroyed_p (gdbarch, rs6000_stack_frame_destroyed_p);
6478   set_gdbarch_skip_main_prologue (gdbarch, rs6000_skip_main_prologue);
6479
6480   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6481
6482   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
6483                                        rs6000_breakpoint::kind_from_pc);
6484   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
6485                                        rs6000_breakpoint::bp_from_kind);
6486
6487   /* The value of symbols of type N_SO and N_FUN maybe null when
6488      it shouldn't be.  */
6489   set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
6490
6491   /* Handles single stepping of atomic sequences.  */
6492   set_gdbarch_software_single_step (gdbarch, ppc_deal_with_atomic_sequence);
6493   
6494   /* Not sure on this.  FIXMEmgo */
6495   set_gdbarch_frame_args_skip (gdbarch, 8);
6496
6497   /* Helpers for function argument information.  */
6498   set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
6499
6500   /* Trampoline.  */
6501   set_gdbarch_in_solib_return_trampoline
6502     (gdbarch, rs6000_in_solib_return_trampoline);
6503   set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
6504
6505   /* Hook in the DWARF CFI frame unwinder.  */
6506   dwarf2_append_unwinders (gdbarch);
6507   dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
6508
6509   /* Frame handling.  */
6510   dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
6511
6512   /* Setup displaced stepping.  */
6513   set_gdbarch_displaced_step_copy_insn (gdbarch,
6514                                         ppc_displaced_step_copy_insn);
6515   set_gdbarch_displaced_step_hw_singlestep (gdbarch,
6516                                             ppc_displaced_step_hw_singlestep);
6517   set_gdbarch_displaced_step_fixup (gdbarch, ppc_displaced_step_fixup);
6518   set_gdbarch_displaced_step_free_closure (gdbarch,
6519                                            simple_displaced_step_free_closure);
6520   set_gdbarch_displaced_step_location (gdbarch,
6521                                        displaced_step_at_entry_point);
6522
6523   set_gdbarch_max_insn_length (gdbarch, PPC_INSN_SIZE);
6524
6525   /* Hook in ABI-specific overrides, if they have been registered.  */
6526   info.target_desc = tdesc;
6527   info.tdep_info = tdesc_data;
6528   gdbarch_init_osabi (info, gdbarch);
6529
6530   switch (info.osabi)
6531     {
6532     case GDB_OSABI_LINUX:
6533     case GDB_OSABI_NETBSD_AOUT:
6534     case GDB_OSABI_NETBSD_ELF:
6535     case GDB_OSABI_UNKNOWN:
6536       set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
6537       frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
6538       frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
6539       set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
6540       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
6541       break;
6542     default:
6543       set_gdbarch_believe_pcc_promotion (gdbarch, 1);
6544
6545       set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
6546       frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
6547       frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
6548       set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
6549       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
6550     }
6551
6552   set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
6553   set_tdesc_pseudo_register_reggroup_p (gdbarch,
6554                                         rs6000_pseudo_register_reggroup_p);
6555   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
6556
6557   /* Override the normal target description method to make the SPE upper
6558      halves anonymous.  */
6559   set_gdbarch_register_name (gdbarch, rs6000_register_name);
6560
6561   /* Choose register numbers for all supported pseudo-registers.  */
6562   tdep->ppc_ev0_regnum = -1;
6563   tdep->ppc_dl0_regnum = -1;
6564   tdep->ppc_vsr0_regnum = -1;
6565   tdep->ppc_efpr0_regnum = -1;
6566
6567   cur_reg = gdbarch_num_regs (gdbarch);
6568
6569   if (have_spe)
6570     {
6571       tdep->ppc_ev0_regnum = cur_reg;
6572       cur_reg += 32;
6573     }
6574   if (have_dfp)
6575     {
6576       tdep->ppc_dl0_regnum = cur_reg;
6577       cur_reg += 16;
6578     }
6579   if (have_vsx)
6580     {
6581       tdep->ppc_vsr0_regnum = cur_reg;
6582       cur_reg += 64;
6583       tdep->ppc_efpr0_regnum = cur_reg;
6584       cur_reg += 32;
6585     }
6586
6587   gdb_assert (gdbarch_num_regs (gdbarch)
6588               + gdbarch_num_pseudo_regs (gdbarch) == cur_reg);
6589
6590   /* Register the ravenscar_arch_ops.  */
6591   if (mach == bfd_mach_ppc_e500)
6592     register_e500_ravenscar_ops (gdbarch);
6593   else
6594     register_ppc_ravenscar_ops (gdbarch);
6595
6596   return gdbarch;
6597 }
6598
6599 static void
6600 rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
6601 {
6602   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
6603
6604   if (tdep == NULL)
6605     return;
6606
6607   /* FIXME: Dump gdbarch_tdep.  */
6608 }
6609
6610 /* PowerPC-specific commands.  */
6611
6612 static void
6613 set_powerpc_command (char *args, int from_tty)
6614 {
6615   printf_unfiltered (_("\
6616 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
6617   help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout);
6618 }
6619
6620 static void
6621 show_powerpc_command (char *args, int from_tty)
6622 {
6623   cmd_show_list (showpowerpccmdlist, from_tty, "");
6624 }
6625
6626 static void
6627 powerpc_set_soft_float (char *args, int from_tty,
6628                         struct cmd_list_element *c)
6629 {
6630   struct gdbarch_info info;
6631
6632   /* Update the architecture.  */
6633   gdbarch_info_init (&info);
6634   if (!gdbarch_update_p (info))
6635     internal_error (__FILE__, __LINE__, _("could not update architecture"));
6636 }
6637
6638 static void
6639 powerpc_set_vector_abi (char *args, int from_tty,
6640                         struct cmd_list_element *c)
6641 {
6642   struct gdbarch_info info;
6643   int vector_abi;
6644
6645   for (vector_abi = POWERPC_VEC_AUTO;
6646        vector_abi != POWERPC_VEC_LAST;
6647        vector_abi++)
6648     if (strcmp (powerpc_vector_abi_string,
6649                 powerpc_vector_strings[vector_abi]) == 0)
6650       {
6651         powerpc_vector_abi_global = (enum powerpc_vector_abi) vector_abi;
6652         break;
6653       }
6654
6655   if (vector_abi == POWERPC_VEC_LAST)
6656     internal_error (__FILE__, __LINE__, _("Invalid vector ABI accepted: %s."),
6657                     powerpc_vector_abi_string);
6658
6659   /* Update the architecture.  */
6660   gdbarch_info_init (&info);
6661   if (!gdbarch_update_p (info))
6662     internal_error (__FILE__, __LINE__, _("could not update architecture"));
6663 }
6664
6665 /* Show the current setting of the exact watchpoints flag.  */
6666
6667 static void
6668 show_powerpc_exact_watchpoints (struct ui_file *file, int from_tty,
6669                                 struct cmd_list_element *c,
6670                                 const char *value)
6671 {
6672   fprintf_filtered (file, _("Use of exact watchpoints is %s.\n"), value);
6673 }
6674
6675 /* Read a PPC instruction from memory.  */
6676
6677 static unsigned int
6678 read_insn (struct frame_info *frame, CORE_ADDR pc)
6679 {
6680   struct gdbarch *gdbarch = get_frame_arch (frame);
6681   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
6682
6683   return read_memory_unsigned_integer (pc, 4, byte_order);
6684 }
6685
6686 /* Return non-zero if the instructions at PC match the series
6687    described in PATTERN, or zero otherwise.  PATTERN is an array of
6688    'struct ppc_insn_pattern' objects, terminated by an entry whose
6689    mask is zero.
6690
6691    When the match is successful, fill INSN[i] with what PATTERN[i]
6692    matched.  If PATTERN[i] is optional, and the instruction wasn't
6693    present, set INSN[i] to 0 (which is not a valid PPC instruction).
6694    INSN should have as many elements as PATTERN.  Note that, if
6695    PATTERN contains optional instructions which aren't present in
6696    memory, then INSN will have holes, so INSN[i] isn't necessarily the
6697    i'th instruction in memory.  */
6698
6699 int
6700 ppc_insns_match_pattern (struct frame_info *frame, CORE_ADDR pc,
6701                          struct ppc_insn_pattern *pattern,
6702                          unsigned int *insns)
6703 {
6704   int i;
6705   unsigned int insn;
6706
6707   for (i = 0, insn = 0; pattern[i].mask; i++)
6708     {
6709       if (insn == 0)
6710         insn = read_insn (frame, pc);
6711       insns[i] = 0;
6712       if ((insn & pattern[i].mask) == pattern[i].data)
6713         {
6714           insns[i] = insn;
6715           pc += 4;
6716           insn = 0;
6717         }
6718       else if (!pattern[i].optional)
6719         return 0;
6720     }
6721
6722   return 1;
6723 }
6724
6725 /* Return the 'd' field of the d-form instruction INSN, properly
6726    sign-extended.  */
6727
6728 CORE_ADDR
6729 ppc_insn_d_field (unsigned int insn)
6730 {
6731   return ((((CORE_ADDR) insn & 0xffff) ^ 0x8000) - 0x8000);
6732 }
6733
6734 /* Return the 'ds' field of the ds-form instruction INSN, with the two
6735    zero bits concatenated at the right, and properly
6736    sign-extended.  */
6737
6738 CORE_ADDR
6739 ppc_insn_ds_field (unsigned int insn)
6740 {
6741   return ((((CORE_ADDR) insn & 0xfffc) ^ 0x8000) - 0x8000);
6742 }
6743
6744 /* Initialization code.  */
6745
6746 /* -Wmissing-prototypes */
6747 extern initialize_file_ftype _initialize_rs6000_tdep;
6748
6749 void
6750 _initialize_rs6000_tdep (void)
6751 {
6752   gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
6753   gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
6754
6755   /* Initialize the standard target descriptions.  */
6756   initialize_tdesc_powerpc_32 ();
6757   initialize_tdesc_powerpc_altivec32 ();
6758   initialize_tdesc_powerpc_vsx32 ();
6759   initialize_tdesc_powerpc_403 ();
6760   initialize_tdesc_powerpc_403gc ();
6761   initialize_tdesc_powerpc_405 ();
6762   initialize_tdesc_powerpc_505 ();
6763   initialize_tdesc_powerpc_601 ();
6764   initialize_tdesc_powerpc_602 ();
6765   initialize_tdesc_powerpc_603 ();
6766   initialize_tdesc_powerpc_604 ();
6767   initialize_tdesc_powerpc_64 ();
6768   initialize_tdesc_powerpc_altivec64 ();
6769   initialize_tdesc_powerpc_vsx64 ();
6770   initialize_tdesc_powerpc_7400 ();
6771   initialize_tdesc_powerpc_750 ();
6772   initialize_tdesc_powerpc_860 ();
6773   initialize_tdesc_powerpc_e500 ();
6774   initialize_tdesc_rs6000 ();
6775
6776   /* Add root prefix command for all "set powerpc"/"show powerpc"
6777      commands.  */
6778   add_prefix_cmd ("powerpc", no_class, set_powerpc_command,
6779                   _("Various PowerPC-specific commands."),
6780                   &setpowerpccmdlist, "set powerpc ", 0, &setlist);
6781
6782   add_prefix_cmd ("powerpc", no_class, show_powerpc_command,
6783                   _("Various PowerPC-specific commands."),
6784                   &showpowerpccmdlist, "show powerpc ", 0, &showlist);
6785
6786   /* Add a command to allow the user to force the ABI.  */
6787   add_setshow_auto_boolean_cmd ("soft-float", class_support,
6788                                 &powerpc_soft_float_global,
6789                                 _("Set whether to use a soft-float ABI."),
6790                                 _("Show whether to use a soft-float ABI."),
6791                                 NULL,
6792                                 powerpc_set_soft_float, NULL,
6793                                 &setpowerpccmdlist, &showpowerpccmdlist);
6794
6795   add_setshow_enum_cmd ("vector-abi", class_support, powerpc_vector_strings,
6796                         &powerpc_vector_abi_string,
6797                         _("Set the vector ABI."),
6798                         _("Show the vector ABI."),
6799                         NULL, powerpc_set_vector_abi, NULL,
6800                         &setpowerpccmdlist, &showpowerpccmdlist);
6801
6802   add_setshow_boolean_cmd ("exact-watchpoints", class_support,
6803                            &target_exact_watchpoints,
6804                            _("\
6805 Set whether to use just one debug register for watchpoints on scalars."),
6806                            _("\
6807 Show whether to use just one debug register for watchpoints on scalars."),
6808                            _("\
6809 If true, GDB will use only one debug register when watching a variable of\n\
6810 scalar type, thus assuming that the variable is accessed through the address\n\
6811 of its first byte."),
6812                            NULL, show_powerpc_exact_watchpoints,
6813                            &setpowerpccmdlist, &showpowerpccmdlist);
6814 }