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