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