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