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