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