1 /* Target-dependent code for GDB, the GNU debugger.
3 Copyright (C) 1986-2018 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
29 #include "arch-utils.h"
32 #include "target-float.h"
34 #include "parser-defs.h"
37 #include "sim-regno.h"
38 #include "gdb/sim-ppc.h"
39 #include "dwarf2-frame.h"
40 #include "target-descriptions.h"
41 #include "user-regs.h"
42 #include "record-full.h"
45 #include "coff/internal.h" /* for libcoff.h */
46 #include "libcoff.h" /* for xcoff_data */
47 #include "coff/xcoff.h"
52 #include "elf/ppc64.h"
54 #include "solib-svr4.h"
56 #include "ppc-ravenscar-thread.h"
60 #include "trad-frame.h"
61 #include "frame-unwind.h"
62 #include "frame-base.h"
68 #include "features/rs6000/powerpc-32.c"
69 #include "features/rs6000/powerpc-altivec32.c"
70 #include "features/rs6000/powerpc-vsx32.c"
71 #include "features/rs6000/powerpc-403.c"
72 #include "features/rs6000/powerpc-403gc.c"
73 #include "features/rs6000/powerpc-405.c"
74 #include "features/rs6000/powerpc-505.c"
75 #include "features/rs6000/powerpc-601.c"
76 #include "features/rs6000/powerpc-602.c"
77 #include "features/rs6000/powerpc-603.c"
78 #include "features/rs6000/powerpc-604.c"
79 #include "features/rs6000/powerpc-64.c"
80 #include "features/rs6000/powerpc-altivec64.c"
81 #include "features/rs6000/powerpc-vsx64.c"
82 #include "features/rs6000/powerpc-7400.c"
83 #include "features/rs6000/powerpc-750.c"
84 #include "features/rs6000/powerpc-860.c"
85 #include "features/rs6000/powerpc-e500.c"
86 #include "features/rs6000/rs6000.c"
88 /* Determine if regnum is an SPE pseudo-register. */
89 #define IS_SPE_PSEUDOREG(tdep, regnum) ((tdep)->ppc_ev0_regnum >= 0 \
90 && (regnum) >= (tdep)->ppc_ev0_regnum \
91 && (regnum) < (tdep)->ppc_ev0_regnum + 32)
93 /* Determine if regnum is a decimal float pseudo-register. */
94 #define IS_DFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_dl0_regnum >= 0 \
95 && (regnum) >= (tdep)->ppc_dl0_regnum \
96 && (regnum) < (tdep)->ppc_dl0_regnum + 16)
98 /* Determine if regnum is a POWER7 VSX register. */
99 #define IS_VSX_PSEUDOREG(tdep, regnum) ((tdep)->ppc_vsr0_regnum >= 0 \
100 && (regnum) >= (tdep)->ppc_vsr0_regnum \
101 && (regnum) < (tdep)->ppc_vsr0_regnum + ppc_num_vsrs)
103 /* Determine if regnum is a POWER7 Extended FP register. */
104 #define IS_EFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_efpr0_regnum >= 0 \
105 && (regnum) >= (tdep)->ppc_efpr0_regnum \
106 && (regnum) < (tdep)->ppc_efpr0_regnum + ppc_num_efprs)
108 /* Determine if regnum is a checkpointed decimal float
110 #define IS_CDFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_cdl0_regnum >= 0 \
111 && (regnum) >= (tdep)->ppc_cdl0_regnum \
112 && (regnum) < (tdep)->ppc_cdl0_regnum + 16)
114 /* Determine if regnum is a Checkpointed POWER7 VSX register. */
115 #define IS_CVSX_PSEUDOREG(tdep, regnum) ((tdep)->ppc_cvsr0_regnum >= 0 \
116 && (regnum) >= (tdep)->ppc_cvsr0_regnum \
117 && (regnum) < (tdep)->ppc_cvsr0_regnum + ppc_num_vsrs)
119 /* Determine if regnum is a Checkpointed POWER7 Extended FP register. */
120 #define IS_CEFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_cefpr0_regnum >= 0 \
121 && (regnum) >= (tdep)->ppc_cefpr0_regnum \
122 && (regnum) < (tdep)->ppc_cefpr0_regnum + ppc_num_efprs)
124 /* Holds the current set of options to be passed to the disassembler. */
125 static char *powerpc_disassembler_options;
127 /* The list of available "set powerpc ..." and "show powerpc ..."
129 static struct cmd_list_element *setpowerpccmdlist = NULL;
130 static struct cmd_list_element *showpowerpccmdlist = NULL;
132 static enum auto_boolean powerpc_soft_float_global = AUTO_BOOLEAN_AUTO;
134 /* The vector ABI to use. Keep this in sync with powerpc_vector_abi. */
135 static const char *const powerpc_vector_strings[] =
144 /* A variable that can be configured by the user. */
145 static enum powerpc_vector_abi powerpc_vector_abi_global = POWERPC_VEC_AUTO;
146 static const char *powerpc_vector_abi_string = "auto";
148 /* To be used by skip_prologue. */
150 struct rs6000_framedata
152 int offset; /* total size of frame --- the distance
153 by which we decrement sp to allocate
155 int saved_gpr; /* smallest # of saved gpr */
156 unsigned int gpr_mask; /* Each bit is an individual saved GPR. */
157 int saved_fpr; /* smallest # of saved fpr */
158 int saved_vr; /* smallest # of saved vr */
159 int saved_ev; /* smallest # of saved ev */
160 int alloca_reg; /* alloca register number (frame ptr) */
161 char frameless; /* true if frameless functions. */
162 char nosavedpc; /* true if pc not saved. */
163 char used_bl; /* true if link register clobbered */
164 int gpr_offset; /* offset of saved gprs from prev sp */
165 int fpr_offset; /* offset of saved fprs from prev sp */
166 int vr_offset; /* offset of saved vrs from prev sp */
167 int ev_offset; /* offset of saved evs from prev sp */
168 int lr_offset; /* offset of saved lr */
169 int lr_register; /* register of saved lr, if trustworthy */
170 int cr_offset; /* offset of saved cr */
171 int vrsave_offset; /* offset of saved vrsave register */
175 /* Is REGNO a VSX register? Return 1 if so, 0 otherwise. */
177 vsx_register_p (struct gdbarch *gdbarch, int regno)
179 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
180 if (tdep->ppc_vsr0_regnum < 0)
183 return (regno >= tdep->ppc_vsr0_upper_regnum && regno
184 <= tdep->ppc_vsr0_upper_regnum + 31);
187 /* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
189 altivec_register_p (struct gdbarch *gdbarch, int regno)
191 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
192 if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
195 return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
199 /* Return true if REGNO is an SPE register, false otherwise. */
201 spe_register_p (struct gdbarch *gdbarch, int regno)
203 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
205 /* Is it a reference to EV0 -- EV31, and do we have those? */
206 if (IS_SPE_PSEUDOREG (tdep, regno))
209 /* Is it a reference to one of the raw upper GPR halves? */
210 if (tdep->ppc_ev0_upper_regnum >= 0
211 && tdep->ppc_ev0_upper_regnum <= regno
212 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
215 /* Is it a reference to the 64-bit accumulator, and do we have that? */
216 if (tdep->ppc_acc_regnum >= 0
217 && tdep->ppc_acc_regnum == regno)
220 /* Is it a reference to the SPE floating-point status and control register,
221 and do we have that? */
222 if (tdep->ppc_spefscr_regnum >= 0
223 && tdep->ppc_spefscr_regnum == regno)
230 /* Return non-zero if the architecture described by GDBARCH has
231 floating-point registers (f0 --- f31 and fpscr). */
233 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
235 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
237 return (tdep->ppc_fp0_regnum >= 0
238 && tdep->ppc_fpscr_regnum >= 0);
241 /* Return non-zero if the architecture described by GDBARCH has
242 Altivec registers (vr0 --- vr31, vrsave and vscr). */
244 ppc_altivec_support_p (struct gdbarch *gdbarch)
246 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
248 return (tdep->ppc_vr0_regnum >= 0
249 && tdep->ppc_vrsave_regnum >= 0);
252 /* Check that TABLE[GDB_REGNO] is not already initialized, and then
255 This is a helper function for init_sim_regno_table, constructing
256 the table mapping GDB register numbers to sim register numbers; we
257 initialize every element in that table to -1 before we start
260 set_sim_regno (int *table, int gdb_regno, int sim_regno)
262 /* Make sure we don't try to assign any given GDB register a sim
263 register number more than once. */
264 gdb_assert (table[gdb_regno] == -1);
265 table[gdb_regno] = sim_regno;
269 /* Initialize ARCH->tdep->sim_regno, the table mapping GDB register
270 numbers to simulator register numbers, based on the values placed
271 in the ARCH->tdep->ppc_foo_regnum members. */
273 init_sim_regno_table (struct gdbarch *arch)
275 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
276 int total_regs = gdbarch_num_regs (arch);
277 int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int);
279 static const char *const segment_regs[] = {
280 "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
281 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
284 /* Presume that all registers not explicitly mentioned below are
285 unavailable from the sim. */
286 for (i = 0; i < total_regs; i++)
289 /* General-purpose registers. */
290 for (i = 0; i < ppc_num_gprs; i++)
291 set_sim_regno (sim_regno, tdep->ppc_gp0_regnum + i, sim_ppc_r0_regnum + i);
293 /* Floating-point registers. */
294 if (tdep->ppc_fp0_regnum >= 0)
295 for (i = 0; i < ppc_num_fprs; i++)
296 set_sim_regno (sim_regno,
297 tdep->ppc_fp0_regnum + i,
298 sim_ppc_f0_regnum + i);
299 if (tdep->ppc_fpscr_regnum >= 0)
300 set_sim_regno (sim_regno, tdep->ppc_fpscr_regnum, sim_ppc_fpscr_regnum);
302 set_sim_regno (sim_regno, gdbarch_pc_regnum (arch), sim_ppc_pc_regnum);
303 set_sim_regno (sim_regno, tdep->ppc_ps_regnum, sim_ppc_ps_regnum);
304 set_sim_regno (sim_regno, tdep->ppc_cr_regnum, sim_ppc_cr_regnum);
306 /* Segment registers. */
307 for (i = 0; i < ppc_num_srs; i++)
311 gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i], -1);
313 set_sim_regno (sim_regno, gdb_regno, sim_ppc_sr0_regnum + i);
316 /* Altivec registers. */
317 if (tdep->ppc_vr0_regnum >= 0)
319 for (i = 0; i < ppc_num_vrs; i++)
320 set_sim_regno (sim_regno,
321 tdep->ppc_vr0_regnum + i,
322 sim_ppc_vr0_regnum + i);
324 /* FIXME: jimb/2004-07-15: when we have tdep->ppc_vscr_regnum,
325 we can treat this more like the other cases. */
326 set_sim_regno (sim_regno,
327 tdep->ppc_vr0_regnum + ppc_num_vrs,
328 sim_ppc_vscr_regnum);
330 /* vsave is a special-purpose register, so the code below handles it. */
332 /* SPE APU (E500) registers. */
333 if (tdep->ppc_ev0_upper_regnum >= 0)
334 for (i = 0; i < ppc_num_gprs; i++)
335 set_sim_regno (sim_regno,
336 tdep->ppc_ev0_upper_regnum + i,
337 sim_ppc_rh0_regnum + i);
338 if (tdep->ppc_acc_regnum >= 0)
339 set_sim_regno (sim_regno, tdep->ppc_acc_regnum, sim_ppc_acc_regnum);
340 /* spefscr is a special-purpose register, so the code below handles it. */
343 /* Now handle all special-purpose registers. Verify that they
344 haven't mistakenly been assigned numbers by any of the above
346 for (i = 0; i < sim_ppc_num_sprs; i++)
348 const char *spr_name = sim_spr_register_name (i);
351 if (spr_name != NULL)
352 gdb_regno = user_reg_map_name_to_regnum (arch, spr_name, -1);
355 set_sim_regno (sim_regno, gdb_regno, sim_ppc_spr0_regnum + i);
359 /* Drop the initialized array into place. */
360 tdep->sim_regno = sim_regno;
364 /* Given a GDB register number REG, return the corresponding SIM
367 rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
369 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
372 if (tdep->sim_regno == NULL)
373 init_sim_regno_table (gdbarch);
375 gdb_assert (0 <= reg && reg <= gdbarch_num_cooked_regs (gdbarch));
376 sim_regno = tdep->sim_regno[reg];
381 return LEGACY_SIM_REGNO_IGNORE;
386 /* Register set support functions. */
388 /* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
389 Write the register to REGCACHE. */
392 ppc_supply_reg (struct regcache *regcache, int regnum,
393 const gdb_byte *regs, size_t offset, int regsize)
395 if (regnum != -1 && offset != -1)
399 struct gdbarch *gdbarch = regcache->arch ();
400 int gdb_regsize = register_size (gdbarch, regnum);
401 if (gdb_regsize < regsize
402 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
403 offset += regsize - gdb_regsize;
405 regcache->raw_supply (regnum, regs + offset);
409 /* Read register REGNUM from REGCACHE and store to REGS + OFFSET
410 in a field REGSIZE wide. Zero pad as necessary. */
413 ppc_collect_reg (const struct regcache *regcache, int regnum,
414 gdb_byte *regs, size_t offset, int regsize)
416 if (regnum != -1 && offset != -1)
420 struct gdbarch *gdbarch = regcache->arch ();
421 int gdb_regsize = register_size (gdbarch, regnum);
422 if (gdb_regsize < regsize)
424 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
426 memset (regs + offset, 0, regsize - gdb_regsize);
427 offset += regsize - gdb_regsize;
430 memset (regs + offset + regsize - gdb_regsize, 0,
431 regsize - gdb_regsize);
434 regcache->raw_collect (regnum, regs + offset);
439 ppc_greg_offset (struct gdbarch *gdbarch,
440 struct gdbarch_tdep *tdep,
441 const struct ppc_reg_offsets *offsets,
445 *regsize = offsets->gpr_size;
446 if (regnum >= tdep->ppc_gp0_regnum
447 && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs)
448 return (offsets->r0_offset
449 + (regnum - tdep->ppc_gp0_regnum) * offsets->gpr_size);
451 if (regnum == gdbarch_pc_regnum (gdbarch))
452 return offsets->pc_offset;
454 if (regnum == tdep->ppc_ps_regnum)
455 return offsets->ps_offset;
457 if (regnum == tdep->ppc_lr_regnum)
458 return offsets->lr_offset;
460 if (regnum == tdep->ppc_ctr_regnum)
461 return offsets->ctr_offset;
463 *regsize = offsets->xr_size;
464 if (regnum == tdep->ppc_cr_regnum)
465 return offsets->cr_offset;
467 if (regnum == tdep->ppc_xer_regnum)
468 return offsets->xer_offset;
470 if (regnum == tdep->ppc_mq_regnum)
471 return offsets->mq_offset;
477 ppc_fpreg_offset (struct gdbarch_tdep *tdep,
478 const struct ppc_reg_offsets *offsets,
481 if (regnum >= tdep->ppc_fp0_regnum
482 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
483 return offsets->f0_offset + (regnum - tdep->ppc_fp0_regnum) * 8;
485 if (regnum == tdep->ppc_fpscr_regnum)
486 return offsets->fpscr_offset;
491 /* Supply register REGNUM in the general-purpose register set REGSET
492 from the buffer specified by GREGS and LEN to register cache
493 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
496 ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
497 int regnum, const void *gregs, size_t len)
499 struct gdbarch *gdbarch = regcache->arch ();
500 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
501 const struct ppc_reg_offsets *offsets
502 = (const struct ppc_reg_offsets *) regset->regmap;
509 int gpr_size = offsets->gpr_size;
511 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
512 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
513 i++, offset += gpr_size)
514 ppc_supply_reg (regcache, i, (const gdb_byte *) gregs, offset,
517 ppc_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
518 (const gdb_byte *) gregs, offsets->pc_offset, gpr_size);
519 ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
520 (const gdb_byte *) gregs, offsets->ps_offset, gpr_size);
521 ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
522 (const gdb_byte *) gregs, offsets->lr_offset, gpr_size);
523 ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
524 (const gdb_byte *) gregs, offsets->ctr_offset, gpr_size);
525 ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
526 (const gdb_byte *) gregs, offsets->cr_offset,
528 ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
529 (const gdb_byte *) gregs, offsets->xer_offset,
531 ppc_supply_reg (regcache, tdep->ppc_mq_regnum,
532 (const gdb_byte *) gregs, offsets->mq_offset,
537 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, ®size);
538 ppc_supply_reg (regcache, regnum, (const gdb_byte *) gregs, offset, regsize);
541 /* Supply register REGNUM in the floating-point register set REGSET
542 from the buffer specified by FPREGS and LEN to register cache
543 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
546 ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
547 int regnum, const void *fpregs, size_t len)
549 struct gdbarch *gdbarch = regcache->arch ();
550 struct gdbarch_tdep *tdep;
551 const struct ppc_reg_offsets *offsets;
554 if (!ppc_floating_point_unit_p (gdbarch))
557 tdep = gdbarch_tdep (gdbarch);
558 offsets = (const struct ppc_reg_offsets *) regset->regmap;
563 for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
564 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
566 ppc_supply_reg (regcache, i, (const gdb_byte *) fpregs, offset, 8);
568 ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
569 (const gdb_byte *) fpregs, offsets->fpscr_offset,
570 offsets->fpscr_size);
574 offset = ppc_fpreg_offset (tdep, offsets, regnum);
575 ppc_supply_reg (regcache, regnum, (const gdb_byte *) fpregs, offset,
576 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
579 /* Collect register REGNUM in the general-purpose register set
580 REGSET from register cache REGCACHE into the buffer specified by
581 GREGS and LEN. If REGNUM is -1, do this for all registers in
585 ppc_collect_gregset (const struct regset *regset,
586 const struct regcache *regcache,
587 int regnum, void *gregs, size_t len)
589 struct gdbarch *gdbarch = regcache->arch ();
590 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
591 const struct ppc_reg_offsets *offsets
592 = (const struct ppc_reg_offsets *) regset->regmap;
599 int gpr_size = offsets->gpr_size;
601 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
602 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
603 i++, offset += gpr_size)
604 ppc_collect_reg (regcache, i, (gdb_byte *) gregs, offset, gpr_size);
606 ppc_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
607 (gdb_byte *) gregs, offsets->pc_offset, gpr_size);
608 ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
609 (gdb_byte *) gregs, offsets->ps_offset, gpr_size);
610 ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
611 (gdb_byte *) gregs, offsets->lr_offset, gpr_size);
612 ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
613 (gdb_byte *) gregs, offsets->ctr_offset, gpr_size);
614 ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
615 (gdb_byte *) gregs, offsets->cr_offset,
617 ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
618 (gdb_byte *) gregs, offsets->xer_offset,
620 ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
621 (gdb_byte *) gregs, offsets->mq_offset,
626 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, ®size);
627 ppc_collect_reg (regcache, regnum, (gdb_byte *) gregs, offset, regsize);
630 /* Collect register REGNUM in the floating-point register set
631 REGSET from register cache REGCACHE into the buffer specified by
632 FPREGS and LEN. If REGNUM is -1, do this for all registers in
636 ppc_collect_fpregset (const struct regset *regset,
637 const struct regcache *regcache,
638 int regnum, void *fpregs, size_t len)
640 struct gdbarch *gdbarch = regcache->arch ();
641 struct gdbarch_tdep *tdep;
642 const struct ppc_reg_offsets *offsets;
645 if (!ppc_floating_point_unit_p (gdbarch))
648 tdep = gdbarch_tdep (gdbarch);
649 offsets = (const struct ppc_reg_offsets *) regset->regmap;
654 for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
655 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
657 ppc_collect_reg (regcache, i, (gdb_byte *) fpregs, offset, 8);
659 ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
660 (gdb_byte *) fpregs, offsets->fpscr_offset,
661 offsets->fpscr_size);
665 offset = ppc_fpreg_offset (tdep, offsets, regnum);
666 ppc_collect_reg (regcache, regnum, (gdb_byte *) fpregs, offset,
667 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
671 insn_changes_sp_or_jumps (unsigned long insn)
673 int opcode = (insn >> 26) & 0x03f;
674 int sd = (insn >> 21) & 0x01f;
675 int a = (insn >> 16) & 0x01f;
676 int subcode = (insn >> 1) & 0x3ff;
678 /* Changes the stack pointer. */
680 /* NOTE: There are many ways to change the value of a given register.
681 The ways below are those used when the register is R1, the SP,
682 in a funtion's epilogue. */
684 if (opcode == 31 && subcode == 444 && a == 1)
685 return 1; /* mr R1,Rn */
686 if (opcode == 14 && sd == 1)
687 return 1; /* addi R1,Rn,simm */
688 if (opcode == 58 && sd == 1)
689 return 1; /* ld R1,ds(Rn) */
691 /* Transfers control. */
697 if (opcode == 19 && subcode == 16)
699 if (opcode == 19 && subcode == 528)
700 return 1; /* bcctr */
705 /* Return true if we are in the function's epilogue, i.e. after the
706 instruction that destroyed the function's stack frame.
708 1) scan forward from the point of execution:
709 a) If you find an instruction that modifies the stack pointer
710 or transfers control (except a return), execution is not in
712 b) Stop scanning if you find a return instruction or reach the
713 end of the function or reach the hard limit for the size of
715 2) scan backward from the point of execution:
716 a) If you find an instruction that modifies the stack pointer,
717 execution *is* in an epilogue, return.
718 b) Stop scanning if you reach an instruction that transfers
719 control or the beginning of the function or reach the hard
720 limit for the size of an epilogue. */
723 rs6000_in_function_epilogue_frame_p (struct frame_info *curfrm,
724 struct gdbarch *gdbarch, CORE_ADDR pc)
726 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
727 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
728 bfd_byte insn_buf[PPC_INSN_SIZE];
729 CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
732 /* Find the search limits based on function boundaries and hard limit. */
734 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
737 epilogue_start = pc - PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
738 if (epilogue_start < func_start) epilogue_start = func_start;
740 epilogue_end = pc + PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
741 if (epilogue_end > func_end) epilogue_end = func_end;
743 /* Scan forward until next 'blr'. */
745 for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += PPC_INSN_SIZE)
747 if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
749 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
750 if (insn == 0x4e800020)
752 /* Assume a bctr is a tail call unless it points strictly within
754 if (insn == 0x4e800420)
756 CORE_ADDR ctr = get_frame_register_unsigned (curfrm,
757 tdep->ppc_ctr_regnum);
758 if (ctr > func_start && ctr < func_end)
763 if (insn_changes_sp_or_jumps (insn))
767 /* Scan backward until adjustment to stack pointer (R1). */
769 for (scan_pc = pc - PPC_INSN_SIZE;
770 scan_pc >= epilogue_start;
771 scan_pc -= PPC_INSN_SIZE)
773 if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
775 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
776 if (insn_changes_sp_or_jumps (insn))
783 /* Implement the stack_frame_destroyed_p gdbarch method. */
786 rs6000_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
788 return rs6000_in_function_epilogue_frame_p (get_current_frame (),
792 /* Get the ith function argument for the current function. */
794 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi,
797 return get_frame_register_unsigned (frame, 3 + argi);
800 /* Sequence of bytes for breakpoint instruction. */
802 constexpr gdb_byte big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
803 constexpr gdb_byte little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
805 typedef BP_MANIPULATION_ENDIAN (little_breakpoint, big_breakpoint)
808 /* Instruction masks for displaced stepping. */
809 #define BRANCH_MASK 0xfc000000
810 #define BP_MASK 0xFC0007FE
811 #define B_INSN 0x48000000
812 #define BC_INSN 0x40000000
813 #define BXL_INSN 0x4c000000
814 #define BP_INSN 0x7C000008
816 /* Instruction masks used during single-stepping of atomic
818 #define LOAD_AND_RESERVE_MASK 0xfc0007fe
819 #define LWARX_INSTRUCTION 0x7c000028
820 #define LDARX_INSTRUCTION 0x7c0000A8
821 #define LBARX_INSTRUCTION 0x7c000068
822 #define LHARX_INSTRUCTION 0x7c0000e8
823 #define LQARX_INSTRUCTION 0x7c000228
824 #define STORE_CONDITIONAL_MASK 0xfc0007ff
825 #define STWCX_INSTRUCTION 0x7c00012d
826 #define STDCX_INSTRUCTION 0x7c0001ad
827 #define STBCX_INSTRUCTION 0x7c00056d
828 #define STHCX_INSTRUCTION 0x7c0005ad
829 #define STQCX_INSTRUCTION 0x7c00016d
831 /* Check if insn is one of the Load And Reserve instructions used for atomic
833 #define IS_LOAD_AND_RESERVE_INSN(insn) ((insn & LOAD_AND_RESERVE_MASK) == LWARX_INSTRUCTION \
834 || (insn & LOAD_AND_RESERVE_MASK) == LDARX_INSTRUCTION \
835 || (insn & LOAD_AND_RESERVE_MASK) == LBARX_INSTRUCTION \
836 || (insn & LOAD_AND_RESERVE_MASK) == LHARX_INSTRUCTION \
837 || (insn & LOAD_AND_RESERVE_MASK) == LQARX_INSTRUCTION)
838 /* Check if insn is one of the Store Conditional instructions used for atomic
840 #define IS_STORE_CONDITIONAL_INSN(insn) ((insn & STORE_CONDITIONAL_MASK) == STWCX_INSTRUCTION \
841 || (insn & STORE_CONDITIONAL_MASK) == STDCX_INSTRUCTION \
842 || (insn & STORE_CONDITIONAL_MASK) == STBCX_INSTRUCTION \
843 || (insn & STORE_CONDITIONAL_MASK) == STHCX_INSTRUCTION \
844 || (insn & STORE_CONDITIONAL_MASK) == STQCX_INSTRUCTION)
846 typedef buf_displaced_step_closure ppc_displaced_step_closure;
848 /* We can't displaced step atomic sequences. */
850 static struct displaced_step_closure *
851 ppc_displaced_step_copy_insn (struct gdbarch *gdbarch,
852 CORE_ADDR from, CORE_ADDR to,
853 struct regcache *regs)
855 size_t len = gdbarch_max_insn_length (gdbarch);
856 std::unique_ptr<ppc_displaced_step_closure> closure
857 (new ppc_displaced_step_closure (len));
858 gdb_byte *buf = closure->buf.data ();
859 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
862 read_memory (from, buf, len);
864 insn = extract_signed_integer (buf, PPC_INSN_SIZE, byte_order);
866 /* Assume all atomic sequences start with a Load and Reserve instruction. */
867 if (IS_LOAD_AND_RESERVE_INSN (insn))
871 fprintf_unfiltered (gdb_stdlog,
872 "displaced: can't displaced step "
873 "atomic sequence at %s\n",
874 paddress (gdbarch, from));
880 write_memory (to, buf, len);
884 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
885 paddress (gdbarch, from), paddress (gdbarch, to));
886 displaced_step_dump_bytes (gdb_stdlog, buf, len);
889 return closure.release ();
892 /* Fix up the state of registers and memory after having single-stepped
893 a displaced instruction. */
895 ppc_displaced_step_fixup (struct gdbarch *gdbarch,
896 struct displaced_step_closure *closure_,
897 CORE_ADDR from, CORE_ADDR to,
898 struct regcache *regs)
900 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
901 /* Our closure is a copy of the instruction. */
902 ppc_displaced_step_closure *closure = (ppc_displaced_step_closure *) closure_;
903 ULONGEST insn = extract_unsigned_integer (closure->buf.data (),
904 PPC_INSN_SIZE, byte_order);
906 /* Offset for non PC-relative instructions. */
907 LONGEST offset = PPC_INSN_SIZE;
909 opcode = insn & BRANCH_MASK;
912 fprintf_unfiltered (gdb_stdlog,
913 "displaced: (ppc) fixup (%s, %s)\n",
914 paddress (gdbarch, from), paddress (gdbarch, to));
917 /* Handle PC-relative branch instructions. */
918 if (opcode == B_INSN || opcode == BC_INSN || opcode == BXL_INSN)
922 /* Read the current PC value after the instruction has been executed
923 in a displaced location. Calculate the offset to be applied to the
924 original PC value before the displaced stepping. */
925 regcache_cooked_read_unsigned (regs, gdbarch_pc_regnum (gdbarch),
927 offset = current_pc - to;
929 if (opcode != BXL_INSN)
931 /* Check for AA bit indicating whether this is an absolute
932 addressing or PC-relative (1: absolute, 0: relative). */
935 /* PC-relative addressing is being used in the branch. */
939 "displaced: (ppc) branch instruction: %s\n"
940 "displaced: (ppc) adjusted PC from %s to %s\n",
941 paddress (gdbarch, insn), paddress (gdbarch, current_pc),
942 paddress (gdbarch, from + offset));
944 regcache_cooked_write_unsigned (regs,
945 gdbarch_pc_regnum (gdbarch),
951 /* If we're here, it means we have a branch to LR or CTR. If the
952 branch was taken, the offset is probably greater than 4 (the next
953 instruction), so it's safe to assume that an offset of 4 means we
954 did not take the branch. */
955 if (offset == PPC_INSN_SIZE)
956 regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
957 from + PPC_INSN_SIZE);
960 /* Check for LK bit indicating whether we should set the link
961 register to point to the next instruction
962 (1: Set, 0: Don't set). */
965 /* Link register needs to be set to the next instruction's PC. */
966 regcache_cooked_write_unsigned (regs,
967 gdbarch_tdep (gdbarch)->ppc_lr_regnum,
968 from + PPC_INSN_SIZE);
970 fprintf_unfiltered (gdb_stdlog,
971 "displaced: (ppc) adjusted LR to %s\n",
972 paddress (gdbarch, from + PPC_INSN_SIZE));
976 /* Check for breakpoints in the inferior. If we've found one, place the PC
977 right at the breakpoint instruction. */
978 else if ((insn & BP_MASK) == BP_INSN)
979 regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch), from);
981 /* Handle any other instructions that do not fit in the categories above. */
982 regcache_cooked_write_unsigned (regs, gdbarch_pc_regnum (gdbarch),
986 /* Always use hardware single-stepping to execute the
987 displaced instruction. */
989 ppc_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
990 struct displaced_step_closure *closure)
995 /* Checks for an atomic sequence of instructions beginning with a
996 Load And Reserve instruction and ending with a Store Conditional
997 instruction. If such a sequence is found, attempt to step through it.
998 A breakpoint is placed at the end of the sequence. */
999 std::vector<CORE_ADDR>
1000 ppc_deal_with_atomic_sequence (struct regcache *regcache)
1002 struct gdbarch *gdbarch = regcache->arch ();
1003 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1004 CORE_ADDR pc = regcache_read_pc (regcache);
1005 CORE_ADDR breaks[2] = {CORE_ADDR_MAX, CORE_ADDR_MAX};
1007 CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */
1008 int insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
1011 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
1012 const int atomic_sequence_length = 16; /* Instruction sequence length. */
1013 int bc_insn_count = 0; /* Conditional branch instruction count. */
1015 /* Assume all atomic sequences start with a Load And Reserve instruction. */
1016 if (!IS_LOAD_AND_RESERVE_INSN (insn))
1019 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
1021 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
1023 loc += PPC_INSN_SIZE;
1024 insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
1026 /* Assume that there is at most one conditional branch in the atomic
1027 sequence. If a conditional branch is found, put a breakpoint in
1028 its destination address. */
1029 if ((insn & BRANCH_MASK) == BC_INSN)
1031 int immediate = ((insn & 0xfffc) ^ 0x8000) - 0x8000;
1032 int absolute = insn & 2;
1034 if (bc_insn_count >= 1)
1035 return {}; /* More than one conditional branch found, fallback
1036 to the standard single-step code. */
1039 breaks[1] = immediate;
1041 breaks[1] = loc + immediate;
1047 if (IS_STORE_CONDITIONAL_INSN (insn))
1051 /* Assume that the atomic sequence ends with a Store Conditional
1053 if (!IS_STORE_CONDITIONAL_INSN (insn))
1057 loc += PPC_INSN_SIZE;
1059 /* Insert a breakpoint right after the end of the atomic sequence. */
1062 /* Check for duplicated breakpoints. Check also for a breakpoint
1063 placed (branch instruction's destination) anywhere in sequence. */
1065 && (breaks[1] == breaks[0]
1066 || (breaks[1] >= pc && breaks[1] <= closing_insn)))
1067 last_breakpoint = 0;
1069 std::vector<CORE_ADDR> next_pcs;
1071 for (index = 0; index <= last_breakpoint; index++)
1072 next_pcs.push_back (breaks[index]);
1078 #define SIGNED_SHORT(x) \
1079 ((sizeof (short) == 2) \
1080 ? ((int)(short)(x)) \
1081 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
1083 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
1085 /* Limit the number of skipped non-prologue instructions, as the examining
1086 of the prologue is expensive. */
1087 static int max_skip_non_prologue_insns = 10;
1089 /* Return nonzero if the given instruction OP can be part of the prologue
1090 of a function and saves a parameter on the stack. FRAMEP should be
1091 set if one of the previous instructions in the function has set the
1095 store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
1097 /* Move parameters from argument registers to temporary register. */
1098 if ((op & 0xfc0007fe) == 0x7c000378) /* mr(.) Rx,Ry */
1100 /* Rx must be scratch register r0. */
1101 const int rx_regno = (op >> 16) & 31;
1102 /* Ry: Only r3 - r10 are used for parameter passing. */
1103 const int ry_regno = GET_SRC_REG (op);
1105 if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
1107 *r0_contains_arg = 1;
1114 /* Save a General Purpose Register on stack. */
1116 if ((op & 0xfc1f0003) == 0xf8010000 || /* std Rx,NUM(r1) */
1117 (op & 0xfc1f0000) == 0xd8010000) /* stfd Rx,NUM(r1) */
1119 /* Rx: Only r3 - r10 are used for parameter passing. */
1120 const int rx_regno = GET_SRC_REG (op);
1122 return (rx_regno >= 3 && rx_regno <= 10);
1125 /* Save a General Purpose Register on stack via the Frame Pointer. */
1128 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */
1129 (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */
1130 (op & 0xfc1f0000) == 0xd81f0000)) /* stfd Rx,NUM(r31) */
1132 /* Rx: Usually, only r3 - r10 are used for parameter passing.
1133 However, the compiler sometimes uses r0 to hold an argument. */
1134 const int rx_regno = GET_SRC_REG (op);
1136 return ((rx_regno >= 3 && rx_regno <= 10)
1137 || (rx_regno == 0 && *r0_contains_arg));
1140 if ((op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */
1142 /* Only f2 - f8 are used for parameter passing. */
1143 const int src_regno = GET_SRC_REG (op);
1145 return (src_regno >= 2 && src_regno <= 8);
1148 if (framep && ((op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */
1150 /* Only f2 - f8 are used for parameter passing. */
1151 const int src_regno = GET_SRC_REG (op);
1153 return (src_regno >= 2 && src_regno <= 8);
1156 /* Not an insn that saves a parameter on stack. */
1160 /* Assuming that INSN is a "bl" instruction located at PC, return
1161 nonzero if the destination of the branch is a "blrl" instruction.
1163 This sequence is sometimes found in certain function prologues.
1164 It allows the function to load the LR register with a value that
1165 they can use to access PIC data using PC-relative offsets. */
1168 bl_to_blrl_insn_p (CORE_ADDR pc, int insn, enum bfd_endian byte_order)
1175 absolute = (int) ((insn >> 1) & 1);
1176 immediate = ((insn & ~3) << 6) >> 6;
1180 dest = pc + immediate;
1182 dest_insn = read_memory_integer (dest, 4, byte_order);
1183 if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
1189 /* Return true if OP is a stw or std instruction with
1190 register operands RS and RA and any immediate offset.
1192 If WITH_UPDATE is true, also return true if OP is
1193 a stwu or stdu instruction with the same operands.
1195 Return false otherwise.
1198 store_insn_p (unsigned long op, unsigned long rs,
1199 unsigned long ra, bool with_update)
1204 if (/* std RS, SIMM(RA) */
1205 ((op & 0xffff0003) == (rs | ra | 0xf8000000)) ||
1206 /* stw RS, SIMM(RA) */
1207 ((op & 0xffff0000) == (rs | ra | 0x90000000)))
1212 if (/* stdu RS, SIMM(RA) */
1213 ((op & 0xffff0003) == (rs | ra | 0xf8000001)) ||
1214 /* stwu RS, SIMM(RA) */
1215 ((op & 0xffff0000) == (rs | ra | 0x94000000)))
1222 /* Masks for decoding a branch-and-link (bl) instruction.
1224 BL_MASK and BL_INSTRUCTION are used in combination with each other.
1225 The former is anded with the opcode in question; if the result of
1226 this masking operation is equal to BL_INSTRUCTION, then the opcode in
1227 question is a ``bl'' instruction.
1229 BL_DISPLACMENT_MASK is anded with the opcode in order to extract
1230 the branch displacement. */
1232 #define BL_MASK 0xfc000001
1233 #define BL_INSTRUCTION 0x48000001
1234 #define BL_DISPLACEMENT_MASK 0x03fffffc
1236 static unsigned long
1237 rs6000_fetch_instruction (struct gdbarch *gdbarch, const CORE_ADDR pc)
1239 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1243 /* Fetch the instruction and convert it to an integer. */
1244 if (target_read_memory (pc, buf, 4))
1246 op = extract_unsigned_integer (buf, 4, byte_order);
1251 /* GCC generates several well-known sequences of instructions at the begining
1252 of each function prologue when compiling with -fstack-check. If one of
1253 such sequences starts at START_PC, then return the address of the
1254 instruction immediately past this sequence. Otherwise, return START_PC. */
1257 rs6000_skip_stack_check (struct gdbarch *gdbarch, const CORE_ADDR start_pc)
1259 CORE_ADDR pc = start_pc;
1260 unsigned long op = rs6000_fetch_instruction (gdbarch, pc);
1262 /* First possible sequence: A small number of probes.
1263 stw 0, -<some immediate>(1)
1264 [repeat this instruction any (small) number of times]. */
1266 if ((op & 0xffff0000) == 0x90010000)
1268 while ((op & 0xffff0000) == 0x90010000)
1271 op = rs6000_fetch_instruction (gdbarch, pc);
1276 /* Second sequence: A probing loop.
1277 addi 12,1,-<some immediate>
1278 lis 0,-<some immediate>
1279 [possibly ori 0,0,<some immediate>]
1283 addi 12,12,-<some immediate>
1286 [possibly one last probe: stw 0,<some immediate>(12)]. */
1290 /* addi 12,1,-<some immediate> */
1291 if ((op & 0xffff0000) != 0x39810000)
1294 /* lis 0,-<some immediate> */
1296 op = rs6000_fetch_instruction (gdbarch, pc);
1297 if ((op & 0xffff0000) != 0x3c000000)
1301 op = rs6000_fetch_instruction (gdbarch, pc);
1302 /* [possibly ori 0,0,<some immediate>] */
1303 if ((op & 0xffff0000) == 0x60000000)
1306 op = rs6000_fetch_instruction (gdbarch, pc);
1309 if (op != 0x7c0c0214)
1314 op = rs6000_fetch_instruction (gdbarch, pc);
1315 if (op != 0x7c0c0000)
1320 op = rs6000_fetch_instruction (gdbarch, pc);
1321 if ((op & 0xff9f0001) != 0x41820000)
1324 /* addi 12,12,-<some immediate> */
1326 op = rs6000_fetch_instruction (gdbarch, pc);
1327 if ((op & 0xffff0000) != 0x398c0000)
1332 op = rs6000_fetch_instruction (gdbarch, pc);
1333 if (op != 0x900c0000)
1338 op = rs6000_fetch_instruction (gdbarch, pc);
1339 if ((op & 0xfc000001) != 0x48000000)
1342 /* [possibly one last probe: stw 0,<some immediate>(12)]. */
1344 op = rs6000_fetch_instruction (gdbarch, pc);
1345 if ((op & 0xffff0000) == 0x900c0000)
1348 op = rs6000_fetch_instruction (gdbarch, pc);
1351 /* We found a valid stack-check sequence, return the new PC. */
1355 /* Third sequence: No probe; instead, a comparizon between the stack size
1356 limit (saved in a run-time global variable) and the current stack
1359 addi 0,1,-<some immediate>
1360 lis 12,__gnat_stack_limit@ha
1361 lwz 12,__gnat_stack_limit@l(12)
1364 or, with a small variant in the case of a bigger stack frame:
1365 addis 0,1,<some immediate>
1366 addic 0,0,-<some immediate>
1367 lis 12,__gnat_stack_limit@ha
1368 lwz 12,__gnat_stack_limit@l(12)
1373 /* addi 0,1,-<some immediate> */
1374 if ((op & 0xffff0000) != 0x38010000)
1376 /* small stack frame variant not recognized; try the
1377 big stack frame variant: */
1379 /* addis 0,1,<some immediate> */
1380 if ((op & 0xffff0000) != 0x3c010000)
1383 /* addic 0,0,-<some immediate> */
1385 op = rs6000_fetch_instruction (gdbarch, pc);
1386 if ((op & 0xffff0000) != 0x30000000)
1390 /* lis 12,<some immediate> */
1392 op = rs6000_fetch_instruction (gdbarch, pc);
1393 if ((op & 0xffff0000) != 0x3d800000)
1396 /* lwz 12,<some immediate>(12) */
1398 op = rs6000_fetch_instruction (gdbarch, pc);
1399 if ((op & 0xffff0000) != 0x818c0000)
1404 op = rs6000_fetch_instruction (gdbarch, pc);
1405 if ((op & 0xfffffffe) != 0x7c406008)
1408 /* We found a valid stack-check sequence, return the new PC. */
1412 /* No stack check code in our prologue, return the start_pc. */
1416 /* return pc value after skipping a function prologue and also return
1417 information about a function frame.
1419 in struct rs6000_framedata fdata:
1420 - frameless is TRUE, if function does not have a frame.
1421 - nosavedpc is TRUE, if function does not save %pc value in its frame.
1422 - offset is the initial size of this stack frame --- the amount by
1423 which we decrement the sp to allocate the frame.
1424 - saved_gpr is the number of the first saved gpr.
1425 - saved_fpr is the number of the first saved fpr.
1426 - saved_vr is the number of the first saved vr.
1427 - saved_ev is the number of the first saved ev.
1428 - alloca_reg is the number of the register used for alloca() handling.
1430 - gpr_offset is the offset of the first saved gpr from the previous frame.
1431 - fpr_offset is the offset of the first saved fpr from the previous frame.
1432 - vr_offset is the offset of the first saved vr from the previous frame.
1433 - ev_offset is the offset of the first saved ev from the previous frame.
1434 - lr_offset is the offset of the saved lr
1435 - cr_offset is the offset of the saved cr
1436 - vrsave_offset is the offset of the saved vrsave register. */
1439 skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
1440 struct rs6000_framedata *fdata)
1442 CORE_ADDR orig_pc = pc;
1443 CORE_ADDR last_prologue_pc = pc;
1444 CORE_ADDR li_found_pc = 0;
1448 long alloca_reg_offset = 0;
1449 long vr_saved_offset = 0;
1455 int vrsave_reg = -1;
1458 int minimal_toc_loaded = 0;
1459 int prev_insn_was_prologue_insn = 1;
1460 int num_skip_non_prologue_insns = 0;
1461 int r0_contains_arg = 0;
1462 const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
1463 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1464 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1466 memset (fdata, 0, sizeof (struct rs6000_framedata));
1467 fdata->saved_gpr = -1;
1468 fdata->saved_fpr = -1;
1469 fdata->saved_vr = -1;
1470 fdata->saved_ev = -1;
1471 fdata->alloca_reg = -1;
1472 fdata->frameless = 1;
1473 fdata->nosavedpc = 1;
1474 fdata->lr_register = -1;
1476 pc = rs6000_skip_stack_check (gdbarch, pc);
1482 /* Sometimes it isn't clear if an instruction is a prologue
1483 instruction or not. When we encounter one of these ambiguous
1484 cases, we'll set prev_insn_was_prologue_insn to 0 (false).
1485 Otherwise, we'll assume that it really is a prologue instruction. */
1486 if (prev_insn_was_prologue_insn)
1487 last_prologue_pc = pc;
1489 /* Stop scanning if we've hit the limit. */
1493 prev_insn_was_prologue_insn = 1;
1495 /* Fetch the instruction and convert it to an integer. */
1496 if (target_read_memory (pc, buf, 4))
1498 op = extract_unsigned_integer (buf, 4, byte_order);
1500 if ((op & 0xfc1fffff) == 0x7c0802a6)
1502 /* Since shared library / PIC code, which needs to get its
1503 address at runtime, can appear to save more than one link
1517 remember just the first one, but skip over additional
1520 lr_reg = (op & 0x03e00000) >> 21;
1522 r0_contains_arg = 0;
1525 else if ((op & 0xfc1fffff) == 0x7c000026)
1527 cr_reg = (op & 0x03e00000) >> 21;
1529 r0_contains_arg = 0;
1533 else if ((op & 0xfc1f0000) == 0xd8010000)
1534 { /* stfd Rx,NUM(r1) */
1535 reg = GET_SRC_REG (op);
1536 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
1538 fdata->saved_fpr = reg;
1539 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
1544 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
1545 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
1546 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
1547 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
1550 reg = GET_SRC_REG (op);
1551 if ((op & 0xfc1f0000) == 0xbc010000)
1552 fdata->gpr_mask |= ~((1U << reg) - 1);
1554 fdata->gpr_mask |= 1U << reg;
1555 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
1557 fdata->saved_gpr = reg;
1558 if ((op & 0xfc1f0003) == 0xf8010000)
1560 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
1565 else if ((op & 0xffff0000) == 0x3c4c0000
1566 || (op & 0xffff0000) == 0x3c400000
1567 || (op & 0xffff0000) == 0x38420000)
1569 /* . 0: addis 2,12,.TOC.-0b@ha
1570 . addi 2,2,.TOC.-0b@l
1574 used by ELFv2 global entry points to set up r2. */
1577 else if (op == 0x60000000)
1580 /* Allow nops in the prologue, but do not consider them to
1581 be part of the prologue unless followed by other prologue
1583 prev_insn_was_prologue_insn = 0;
1587 else if ((op & 0xffff0000) == 0x3c000000)
1588 { /* addis 0,0,NUM, used for >= 32k frames */
1589 fdata->offset = (op & 0x0000ffff) << 16;
1590 fdata->frameless = 0;
1591 r0_contains_arg = 0;
1595 else if ((op & 0xffff0000) == 0x60000000)
1596 { /* ori 0,0,NUM, 2nd half of >= 32k frames */
1597 fdata->offset |= (op & 0x0000ffff);
1598 fdata->frameless = 0;
1599 r0_contains_arg = 0;
1603 else if (lr_reg >= 0 &&
1604 ((store_insn_p (op, lr_reg, 1, true)) ||
1606 (store_insn_p (op, lr_reg,
1607 fdata->alloca_reg - tdep->ppc_gp0_regnum,
1610 if (store_insn_p (op, lr_reg, 1, true))
1611 fdata->lr_offset = offset;
1612 else /* LR save through frame pointer. */
1613 fdata->lr_offset = alloca_reg_offset;
1615 fdata->nosavedpc = 0;
1616 /* Invalidate lr_reg, but don't set it to -1.
1617 That would mean that it had never been set. */
1619 if ((op & 0xfc000003) == 0xf8000000 || /* std */
1620 (op & 0xfc000000) == 0x90000000) /* stw */
1622 /* Does not update r1, so add displacement to lr_offset. */
1623 fdata->lr_offset += SIGNED_SHORT (op);
1628 else if (cr_reg >= 0 &&
1629 (store_insn_p (op, cr_reg, 1, true)))
1631 fdata->cr_offset = offset;
1632 /* Invalidate cr_reg, but don't set it to -1.
1633 That would mean that it had never been set. */
1635 if ((op & 0xfc000003) == 0xf8000000 ||
1636 (op & 0xfc000000) == 0x90000000)
1638 /* Does not update r1, so add displacement to cr_offset. */
1639 fdata->cr_offset += SIGNED_SHORT (op);
1644 else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
1646 /* bcl 20,xx,.+4 is used to get the current PC, with or without
1647 prediction bits. If the LR has already been saved, we can
1651 else if (op == 0x48000005)
1658 else if (op == 0x48000004)
1663 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
1664 in V.4 -mminimal-toc */
1665 (op & 0xffff0000) == 0x3bde0000)
1666 { /* addi 30,30,foo@l */
1670 else if ((op & 0xfc000001) == 0x48000001)
1674 fdata->frameless = 0;
1676 /* If the return address has already been saved, we can skip
1677 calls to blrl (for PIC). */
1678 if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op, byte_order))
1684 /* Don't skip over the subroutine call if it is not within
1685 the first three instructions of the prologue and either
1686 we have no line table information or the line info tells
1687 us that the subroutine call is not part of the line
1688 associated with the prologue. */
1689 if ((pc - orig_pc) > 8)
1691 struct symtab_and_line prologue_sal = find_pc_line (orig_pc, 0);
1692 struct symtab_and_line this_sal = find_pc_line (pc, 0);
1694 if ((prologue_sal.line == 0)
1695 || (prologue_sal.line != this_sal.line))
1699 op = read_memory_integer (pc + 4, 4, byte_order);
1701 /* At this point, make sure this is not a trampoline
1702 function (a function that simply calls another functions,
1703 and nothing else). If the next is not a nop, this branch
1704 was part of the function prologue. */
1706 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
1707 break; /* Don't skip over
1713 /* update stack pointer */
1714 else if ((op & 0xfc1f0000) == 0x94010000)
1715 { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */
1716 fdata->frameless = 0;
1717 fdata->offset = SIGNED_SHORT (op);
1718 offset = fdata->offset;
1721 else if ((op & 0xfc1f07fa) == 0x7c01016a)
1722 { /* stwux rX,r1,rY || stdux rX,r1,rY */
1723 /* No way to figure out what r1 is going to be. */
1724 fdata->frameless = 0;
1725 offset = fdata->offset;
1728 else if ((op & 0xfc1f0003) == 0xf8010001)
1729 { /* stdu rX,NUM(r1) */
1730 fdata->frameless = 0;
1731 fdata->offset = SIGNED_SHORT (op & ~3UL);
1732 offset = fdata->offset;
1735 else if ((op & 0xffff0000) == 0x38210000)
1736 { /* addi r1,r1,SIMM */
1737 fdata->frameless = 0;
1738 fdata->offset += SIGNED_SHORT (op);
1739 offset = fdata->offset;
1742 /* Load up minimal toc pointer. Do not treat an epilogue restore
1743 of r31 as a minimal TOC load. */
1744 else if (((op >> 22) == 0x20f || /* l r31,... or l r30,... */
1745 (op >> 22) == 0x3af) /* ld r31,... or ld r30,... */
1747 && !minimal_toc_loaded)
1749 minimal_toc_loaded = 1;
1752 /* move parameters from argument registers to local variable
1755 else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */
1756 (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */
1757 (((op >> 21) & 31) <= 10) &&
1758 ((long) ((op >> 16) & 31)
1759 >= fdata->saved_gpr)) /* Rx: local var reg */
1763 /* store parameters in stack */
1765 /* Move parameters from argument registers to temporary register. */
1766 else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
1770 /* Set up frame pointer */
1772 else if (op == 0x603d0000) /* oril r29, r1, 0x0 */
1774 fdata->frameless = 0;
1776 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 29);
1777 alloca_reg_offset = offset;
1780 /* Another way to set up the frame pointer. */
1782 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
1783 || op == 0x7c3f0b78)
1785 fdata->frameless = 0;
1787 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
1788 alloca_reg_offset = offset;
1791 /* Another way to set up the frame pointer. */
1793 else if ((op & 0xfc1fffff) == 0x38010000)
1794 { /* addi rX, r1, 0x0 */
1795 fdata->frameless = 0;
1797 fdata->alloca_reg = (tdep->ppc_gp0_regnum
1798 + ((op & ~0x38010000) >> 21));
1799 alloca_reg_offset = offset;
1802 /* AltiVec related instructions. */
1803 /* Store the vrsave register (spr 256) in another register for
1804 later manipulation, or load a register into the vrsave
1805 register. 2 instructions are used: mfvrsave and
1806 mtvrsave. They are shorthand notation for mfspr Rn, SPR256
1807 and mtspr SPR256, Rn. */
1808 /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1809 mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110 */
1810 else if ((op & 0xfc1fffff) == 0x7c0042a6) /* mfvrsave Rn */
1812 vrsave_reg = GET_SRC_REG (op);
1815 else if ((op & 0xfc1fffff) == 0x7c0043a6) /* mtvrsave Rn */
1819 /* Store the register where vrsave was saved to onto the stack:
1820 rS is the register where vrsave was stored in a previous
1822 /* 100100 sssss 00001 dddddddd dddddddd */
1823 else if ((op & 0xfc1f0000) == 0x90010000) /* stw rS, d(r1) */
1825 if (vrsave_reg == GET_SRC_REG (op))
1827 fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1832 /* Compute the new value of vrsave, by modifying the register
1833 where vrsave was saved to. */
1834 else if (((op & 0xfc000000) == 0x64000000) /* oris Ra, Rs, UIMM */
1835 || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1839 /* li r0, SIMM (short for addi r0, 0, SIMM). This is the first
1840 in a pair of insns to save the vector registers on the
1842 /* 001110 00000 00000 iiii iiii iiii iiii */
1843 /* 001110 01110 00000 iiii iiii iiii iiii */
1844 else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */
1845 || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */
1847 if ((op & 0xffff0000) == 0x38000000)
1848 r0_contains_arg = 0;
1850 vr_saved_offset = SIGNED_SHORT (op);
1852 /* This insn by itself is not part of the prologue, unless
1853 if part of the pair of insns mentioned above. So do not
1854 record this insn as part of the prologue yet. */
1855 prev_insn_was_prologue_insn = 0;
1857 /* Store vector register S at (r31+r0) aligned to 16 bytes. */
1858 /* 011111 sssss 11111 00000 00111001110 */
1859 else if ((op & 0xfc1fffff) == 0x7c1f01ce) /* stvx Vs, R31, R0 */
1861 if (pc == (li_found_pc + 4))
1863 vr_reg = GET_SRC_REG (op);
1864 /* If this is the first vector reg to be saved, or if
1865 it has a lower number than others previously seen,
1866 reupdate the frame info. */
1867 if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1869 fdata->saved_vr = vr_reg;
1870 fdata->vr_offset = vr_saved_offset + offset;
1872 vr_saved_offset = -1;
1877 /* End AltiVec related instructions. */
1879 /* Start BookE related instructions. */
1880 /* Store gen register S at (r31+uimm).
1881 Any register less than r13 is volatile, so we don't care. */
1882 /* 000100 sssss 11111 iiiii 01100100001 */
1883 else if (arch_info->mach == bfd_mach_ppc_e500
1884 && (op & 0xfc1f07ff) == 0x101f0321) /* evstdd Rs,uimm(R31) */
1886 if ((op & 0x03e00000) >= 0x01a00000) /* Rs >= r13 */
1889 ev_reg = GET_SRC_REG (op);
1890 imm = (op >> 11) & 0x1f;
1891 ev_offset = imm * 8;
1892 /* If this is the first vector reg to be saved, or if
1893 it has a lower number than others previously seen,
1894 reupdate the frame info. */
1895 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1897 fdata->saved_ev = ev_reg;
1898 fdata->ev_offset = ev_offset + offset;
1903 /* Store gen register rS at (r1+rB). */
1904 /* 000100 sssss 00001 bbbbb 01100100000 */
1905 else if (arch_info->mach == bfd_mach_ppc_e500
1906 && (op & 0xffe007ff) == 0x13e00320) /* evstddx RS,R1,Rb */
1908 if (pc == (li_found_pc + 4))
1910 ev_reg = GET_SRC_REG (op);
1911 /* If this is the first vector reg to be saved, or if
1912 it has a lower number than others previously seen,
1913 reupdate the frame info. */
1914 /* We know the contents of rB from the previous instruction. */
1915 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1917 fdata->saved_ev = ev_reg;
1918 fdata->ev_offset = vr_saved_offset + offset;
1920 vr_saved_offset = -1;
1926 /* Store gen register r31 at (rA+uimm). */
1927 /* 000100 11111 aaaaa iiiii 01100100001 */
1928 else if (arch_info->mach == bfd_mach_ppc_e500
1929 && (op & 0xffe007ff) == 0x13e00321) /* evstdd R31,Ra,UIMM */
1931 /* Wwe know that the source register is 31 already, but
1932 it can't hurt to compute it. */
1933 ev_reg = GET_SRC_REG (op);
1934 ev_offset = ((op >> 11) & 0x1f) * 8;
1935 /* If this is the first vector reg to be saved, or if
1936 it has a lower number than others previously seen,
1937 reupdate the frame info. */
1938 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1940 fdata->saved_ev = ev_reg;
1941 fdata->ev_offset = ev_offset + offset;
1946 /* Store gen register S at (r31+r0).
1947 Store param on stack when offset from SP bigger than 4 bytes. */
1948 /* 000100 sssss 11111 00000 01100100000 */
1949 else if (arch_info->mach == bfd_mach_ppc_e500
1950 && (op & 0xfc1fffff) == 0x101f0320) /* evstddx Rs,R31,R0 */
1952 if (pc == (li_found_pc + 4))
1954 if ((op & 0x03e00000) >= 0x01a00000)
1956 ev_reg = GET_SRC_REG (op);
1957 /* If this is the first vector reg to be saved, or if
1958 it has a lower number than others previously seen,
1959 reupdate the frame info. */
1960 /* We know the contents of r0 from the previous
1962 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1964 fdata->saved_ev = ev_reg;
1965 fdata->ev_offset = vr_saved_offset + offset;
1969 vr_saved_offset = -1;
1974 /* End BookE related instructions. */
1978 /* Not a recognized prologue instruction.
1979 Handle optimizer code motions into the prologue by continuing
1980 the search if we have no valid frame yet or if the return
1981 address is not yet saved in the frame. Also skip instructions
1982 if some of the GPRs expected to be saved are not yet saved. */
1983 if (fdata->frameless == 0 && fdata->nosavedpc == 0
1984 && fdata->saved_gpr != -1)
1986 unsigned int all_mask = ~((1U << fdata->saved_gpr) - 1);
1988 if ((fdata->gpr_mask & all_mask) == all_mask)
1992 if (op == 0x4e800020 /* blr */
1993 || op == 0x4e800420) /* bctr */
1994 /* Do not scan past epilogue in frameless functions or
1997 if ((op & 0xf4000000) == 0x40000000) /* bxx */
1998 /* Never skip branches. */
2001 if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
2002 /* Do not scan too many insns, scanning insns is expensive with
2006 /* Continue scanning. */
2007 prev_insn_was_prologue_insn = 0;
2013 /* I have problems with skipping over __main() that I need to address
2014 * sometime. Previously, I used to use misc_function_vector which
2015 * didn't work as well as I wanted to be. -MGO */
2017 /* If the first thing after skipping a prolog is a branch to a function,
2018 this might be a call to an initializer in main(), introduced by gcc2.
2019 We'd like to skip over it as well. Fortunately, xlc does some extra
2020 work before calling a function right after a prologue, thus we can
2021 single out such gcc2 behaviour. */
2024 if ((op & 0xfc000001) == 0x48000001)
2025 { /* bl foo, an initializer function? */
2026 op = read_memory_integer (pc + 4, 4, byte_order);
2028 if (op == 0x4def7b82)
2029 { /* cror 0xf, 0xf, 0xf (nop) */
2031 /* Check and see if we are in main. If so, skip over this
2032 initializer function as well. */
2034 tmp = find_pc_misc_function (pc);
2036 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
2042 if (pc == lim_pc && lr_reg >= 0)
2043 fdata->lr_register = lr_reg;
2045 fdata->offset = -fdata->offset;
2046 return last_prologue_pc;
2050 rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2052 struct rs6000_framedata frame;
2053 CORE_ADDR limit_pc, func_addr, func_end_addr = 0;
2055 /* See if we can determine the end of the prologue via the symbol table.
2056 If so, then return either PC, or the PC after the prologue, whichever
2058 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
2060 CORE_ADDR post_prologue_pc
2061 = skip_prologue_using_sal (gdbarch, func_addr);
2062 if (post_prologue_pc != 0)
2063 return std::max (pc, post_prologue_pc);
2066 /* Can't determine prologue from the symbol table, need to examine
2069 /* Find an upper limit on the function prologue using the debug
2070 information. If the debug information could not be used to provide
2071 that bound, then use an arbitrary large number as the upper bound. */
2072 limit_pc = skip_prologue_using_sal (gdbarch, pc);
2074 limit_pc = pc + 100; /* Magic. */
2076 /* Do not allow limit_pc to be past the function end, if we know
2077 where that end is... */
2078 if (func_end_addr && limit_pc > func_end_addr)
2079 limit_pc = func_end_addr;
2081 pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
2085 /* When compiling for EABI, some versions of GCC emit a call to __eabi
2086 in the prologue of main().
2088 The function below examines the code pointed at by PC and checks to
2089 see if it corresponds to a call to __eabi. If so, it returns the
2090 address of the instruction following that call. Otherwise, it simply
2094 rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2096 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2100 if (target_read_memory (pc, buf, 4))
2102 op = extract_unsigned_integer (buf, 4, byte_order);
2104 if ((op & BL_MASK) == BL_INSTRUCTION)
2106 CORE_ADDR displ = op & BL_DISPLACEMENT_MASK;
2107 CORE_ADDR call_dest = pc + 4 + displ;
2108 struct bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
2110 /* We check for ___eabi (three leading underscores) in addition
2111 to __eabi in case the GCC option "-fleading-underscore" was
2112 used to compile the program. */
2113 if (s.minsym != NULL
2114 && MSYMBOL_LINKAGE_NAME (s.minsym) != NULL
2115 && (strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "__eabi") == 0
2116 || strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "___eabi") == 0))
2122 /* All the ABI's require 16 byte alignment. */
2124 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2126 return (addr & -16);
2129 /* Return whether handle_inferior_event() should proceed through code
2130 starting at PC in function NAME when stepping.
2132 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2133 handle memory references that are too distant to fit in instructions
2134 generated by the compiler. For example, if 'foo' in the following
2139 is greater than 32767, the linker might replace the lwz with a branch to
2140 somewhere in @FIX1 that does the load in 2 instructions and then branches
2141 back to where execution should continue.
2143 GDB should silently step over @FIX code, just like AIX dbx does.
2144 Unfortunately, the linker uses the "b" instruction for the
2145 branches, meaning that the link register doesn't get set.
2146 Therefore, GDB's usual step_over_function () mechanism won't work.
2148 Instead, use the gdbarch_skip_trampoline_code and
2149 gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2153 rs6000_in_solib_return_trampoline (struct gdbarch *gdbarch,
2154 CORE_ADDR pc, const char *name)
2156 return name && startswith (name, "@FIX");
2159 /* Skip code that the user doesn't want to see when stepping:
2161 1. Indirect function calls use a piece of trampoline code to do context
2162 switching, i.e. to set the new TOC table. Skip such code if we are on
2163 its first instruction (as when we have single-stepped to here).
2165 2. Skip shared library trampoline code (which is different from
2166 indirect function call trampolines).
2168 3. Skip bigtoc fixup code.
2170 Result is desired PC to step until, or NULL if we are not in
2171 code that should be skipped. */
2174 rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2176 struct gdbarch *gdbarch = get_frame_arch (frame);
2177 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2178 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2179 unsigned int ii, op;
2181 CORE_ADDR solib_target_pc;
2182 struct bound_minimal_symbol msymbol;
2184 static unsigned trampoline_code[] =
2186 0x800b0000, /* l r0,0x0(r11) */
2187 0x90410014, /* st r2,0x14(r1) */
2188 0x7c0903a6, /* mtctr r0 */
2189 0x804b0004, /* l r2,0x4(r11) */
2190 0x816b0008, /* l r11,0x8(r11) */
2191 0x4e800420, /* bctr */
2192 0x4e800020, /* br */
2196 /* Check for bigtoc fixup code. */
2197 msymbol = lookup_minimal_symbol_by_pc (pc);
2199 && rs6000_in_solib_return_trampoline (gdbarch, pc,
2200 MSYMBOL_LINKAGE_NAME (msymbol.minsym)))
2202 /* Double-check that the third instruction from PC is relative "b". */
2203 op = read_memory_integer (pc + 8, 4, byte_order);
2204 if ((op & 0xfc000003) == 0x48000000)
2206 /* Extract bits 6-29 as a signed 24-bit relative word address and
2207 add it to the containing PC. */
2208 rel = ((int)(op << 6) >> 6);
2209 return pc + 8 + rel;
2213 /* If pc is in a shared library trampoline, return its target. */
2214 solib_target_pc = find_solib_trampoline_target (frame, pc);
2215 if (solib_target_pc)
2216 return solib_target_pc;
2218 for (ii = 0; trampoline_code[ii]; ++ii)
2220 op = read_memory_integer (pc + (ii * 4), 4, byte_order);
2221 if (op != trampoline_code[ii])
2224 ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination
2226 pc = read_memory_unsigned_integer (ii, tdep->wordsize, byte_order);
2230 /* ISA-specific vector types. */
2232 static struct type *
2233 rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2235 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2237 if (!tdep->ppc_builtin_type_vec64)
2239 const struct builtin_type *bt = builtin_type (gdbarch);
2241 /* The type we're building is this: */
2243 union __gdb_builtin_type_vec64
2247 int32_t v2_int32[2];
2248 int16_t v4_int16[4];
2255 t = arch_composite_type (gdbarch,
2256 "__ppc_builtin_type_vec64", TYPE_CODE_UNION);
2257 append_composite_type_field (t, "uint64", bt->builtin_int64);
2258 append_composite_type_field (t, "v2_float",
2259 init_vector_type (bt->builtin_float, 2));
2260 append_composite_type_field (t, "v2_int32",
2261 init_vector_type (bt->builtin_int32, 2));
2262 append_composite_type_field (t, "v4_int16",
2263 init_vector_type (bt->builtin_int16, 4));
2264 append_composite_type_field (t, "v8_int8",
2265 init_vector_type (bt->builtin_int8, 8));
2267 TYPE_VECTOR (t) = 1;
2268 TYPE_NAME (t) = "ppc_builtin_type_vec64";
2269 tdep->ppc_builtin_type_vec64 = t;
2272 return tdep->ppc_builtin_type_vec64;
2275 /* Vector 128 type. */
2277 static struct type *
2278 rs6000_builtin_type_vec128 (struct gdbarch *gdbarch)
2280 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2282 if (!tdep->ppc_builtin_type_vec128)
2284 const struct builtin_type *bt = builtin_type (gdbarch);
2286 /* The type we're building is this
2288 type = union __ppc_builtin_type_vec128 {
2290 double v2_double[2];
2292 int32_t v4_int32[4];
2293 int16_t v8_int16[8];
2294 int8_t v16_int8[16];
2300 t = arch_composite_type (gdbarch,
2301 "__ppc_builtin_type_vec128", TYPE_CODE_UNION);
2302 append_composite_type_field (t, "uint128", bt->builtin_uint128);
2303 append_composite_type_field (t, "v2_double",
2304 init_vector_type (bt->builtin_double, 2));
2305 append_composite_type_field (t, "v4_float",
2306 init_vector_type (bt->builtin_float, 4));
2307 append_composite_type_field (t, "v4_int32",
2308 init_vector_type (bt->builtin_int32, 4));
2309 append_composite_type_field (t, "v8_int16",
2310 init_vector_type (bt->builtin_int16, 8));
2311 append_composite_type_field (t, "v16_int8",
2312 init_vector_type (bt->builtin_int8, 16));
2314 TYPE_VECTOR (t) = 1;
2315 TYPE_NAME (t) = "ppc_builtin_type_vec128";
2316 tdep->ppc_builtin_type_vec128 = t;
2319 return tdep->ppc_builtin_type_vec128;
2322 /* Return the name of register number REGNO, or the empty string if it
2323 is an anonymous register. */
2326 rs6000_register_name (struct gdbarch *gdbarch, int regno)
2328 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2330 /* The upper half "registers" have names in the XML description,
2331 but we present only the low GPRs and the full 64-bit registers
2333 if (tdep->ppc_ev0_upper_regnum >= 0
2334 && tdep->ppc_ev0_upper_regnum <= regno
2335 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
2338 /* Hide the upper halves of the vs0~vs31 registers. */
2339 if (tdep->ppc_vsr0_regnum >= 0
2340 && tdep->ppc_vsr0_upper_regnum <= regno
2341 && regno < tdep->ppc_vsr0_upper_regnum + ppc_num_gprs)
2344 /* Hide the upper halves of the cvs0~cvs31 registers. */
2345 if (PPC_CVSR0_UPPER_REGNUM <= regno
2346 && regno < PPC_CVSR0_UPPER_REGNUM + ppc_num_gprs)
2349 /* Check if the SPE pseudo registers are available. */
2350 if (IS_SPE_PSEUDOREG (tdep, regno))
2352 static const char *const spe_regnames[] = {
2353 "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2354 "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2355 "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2356 "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2358 return spe_regnames[regno - tdep->ppc_ev0_regnum];
2361 /* Check if the decimal128 pseudo-registers are available. */
2362 if (IS_DFP_PSEUDOREG (tdep, regno))
2364 static const char *const dfp128_regnames[] = {
2365 "dl0", "dl1", "dl2", "dl3",
2366 "dl4", "dl5", "dl6", "dl7",
2367 "dl8", "dl9", "dl10", "dl11",
2368 "dl12", "dl13", "dl14", "dl15"
2370 return dfp128_regnames[regno - tdep->ppc_dl0_regnum];
2373 /* Check if this is a VSX pseudo-register. */
2374 if (IS_VSX_PSEUDOREG (tdep, regno))
2376 static const char *const vsx_regnames[] = {
2377 "vs0", "vs1", "vs2", "vs3", "vs4", "vs5", "vs6", "vs7",
2378 "vs8", "vs9", "vs10", "vs11", "vs12", "vs13", "vs14",
2379 "vs15", "vs16", "vs17", "vs18", "vs19", "vs20", "vs21",
2380 "vs22", "vs23", "vs24", "vs25", "vs26", "vs27", "vs28",
2381 "vs29", "vs30", "vs31", "vs32", "vs33", "vs34", "vs35",
2382 "vs36", "vs37", "vs38", "vs39", "vs40", "vs41", "vs42",
2383 "vs43", "vs44", "vs45", "vs46", "vs47", "vs48", "vs49",
2384 "vs50", "vs51", "vs52", "vs53", "vs54", "vs55", "vs56",
2385 "vs57", "vs58", "vs59", "vs60", "vs61", "vs62", "vs63"
2387 return vsx_regnames[regno - tdep->ppc_vsr0_regnum];
2390 /* Check if the this is a Extended FP pseudo-register. */
2391 if (IS_EFP_PSEUDOREG (tdep, regno))
2393 static const char *const efpr_regnames[] = {
2394 "f32", "f33", "f34", "f35", "f36", "f37", "f38",
2395 "f39", "f40", "f41", "f42", "f43", "f44", "f45",
2396 "f46", "f47", "f48", "f49", "f50", "f51",
2397 "f52", "f53", "f54", "f55", "f56", "f57",
2398 "f58", "f59", "f60", "f61", "f62", "f63"
2400 return efpr_regnames[regno - tdep->ppc_efpr0_regnum];
2403 /* Check if this is a Checkpointed DFP pseudo-register. */
2404 if (IS_CDFP_PSEUDOREG (tdep, regno))
2406 static const char *const cdfp128_regnames[] = {
2407 "cdl0", "cdl1", "cdl2", "cdl3",
2408 "cdl4", "cdl5", "cdl6", "cdl7",
2409 "cdl8", "cdl9", "cdl10", "cdl11",
2410 "cdl12", "cdl13", "cdl14", "cdl15"
2412 return cdfp128_regnames[regno - tdep->ppc_cdl0_regnum];
2415 /* Check if this is a Checkpointed VSX pseudo-register. */
2416 if (IS_CVSX_PSEUDOREG (tdep, regno))
2418 static const char *const cvsx_regnames[] = {
2419 "cvs0", "cvs1", "cvs2", "cvs3", "cvs4", "cvs5", "cvs6", "cvs7",
2420 "cvs8", "cvs9", "cvs10", "cvs11", "cvs12", "cvs13", "cvs14",
2421 "cvs15", "cvs16", "cvs17", "cvs18", "cvs19", "cvs20", "cvs21",
2422 "cvs22", "cvs23", "cvs24", "cvs25", "cvs26", "cvs27", "cvs28",
2423 "cvs29", "cvs30", "cvs31", "cvs32", "cvs33", "cvs34", "cvs35",
2424 "cvs36", "cvs37", "cvs38", "cvs39", "cvs40", "cvs41", "cvs42",
2425 "cvs43", "cvs44", "cvs45", "cvs46", "cvs47", "cvs48", "cvs49",
2426 "cvs50", "cvs51", "cvs52", "cvs53", "cvs54", "cvs55", "cvs56",
2427 "cvs57", "cvs58", "cvs59", "cvs60", "cvs61", "cvs62", "cvs63"
2429 return cvsx_regnames[regno - tdep->ppc_cvsr0_regnum];
2432 /* Check if the this is a Checkpointed Extended FP pseudo-register. */
2433 if (IS_CEFP_PSEUDOREG (tdep, regno))
2435 static const char *const cefpr_regnames[] = {
2436 "cf32", "cf33", "cf34", "cf35", "cf36", "cf37", "cf38",
2437 "cf39", "cf40", "cf41", "cf42", "cf43", "cf44", "cf45",
2438 "cf46", "cf47", "cf48", "cf49", "cf50", "cf51",
2439 "cf52", "cf53", "cf54", "cf55", "cf56", "cf57",
2440 "cf58", "cf59", "cf60", "cf61", "cf62", "cf63"
2442 return cefpr_regnames[regno - tdep->ppc_cefpr0_regnum];
2445 return tdesc_register_name (gdbarch, regno);
2448 /* Return the GDB type object for the "standard" data type of data in
2451 static struct type *
2452 rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2454 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2456 /* These are the e500 pseudo-registers. */
2457 if (IS_SPE_PSEUDOREG (tdep, regnum))
2458 return rs6000_builtin_type_vec64 (gdbarch);
2459 else if (IS_DFP_PSEUDOREG (tdep, regnum)
2460 || IS_CDFP_PSEUDOREG (tdep, regnum))
2461 /* PPC decimal128 pseudo-registers. */
2462 return builtin_type (gdbarch)->builtin_declong;
2463 else if (IS_VSX_PSEUDOREG (tdep, regnum)
2464 || IS_CVSX_PSEUDOREG (tdep, regnum))
2465 /* POWER7 VSX pseudo-registers. */
2466 return rs6000_builtin_type_vec128 (gdbarch);
2467 else if (IS_EFP_PSEUDOREG (tdep, regnum)
2468 || IS_CEFP_PSEUDOREG (tdep, regnum))
2469 /* POWER7 Extended FP pseudo-registers. */
2470 return builtin_type (gdbarch)->builtin_double;
2472 internal_error (__FILE__, __LINE__,
2473 _("rs6000_pseudo_register_type: "
2474 "called on unexpected register '%s' (%d)"),
2475 gdbarch_register_name (gdbarch, regnum), regnum);
2478 /* The register format for RS/6000 floating point registers is always
2479 double, we need a conversion if the memory format is float. */
2482 rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2485 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2487 return (tdep->ppc_fp0_regnum >= 0
2488 && regnum >= tdep->ppc_fp0_regnum
2489 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs
2490 && TYPE_CODE (type) == TYPE_CODE_FLT
2491 && TYPE_LENGTH (type)
2492 != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double));
2496 rs6000_register_to_value (struct frame_info *frame,
2500 int *optimizedp, int *unavailablep)
2502 struct gdbarch *gdbarch = get_frame_arch (frame);
2503 gdb_byte from[PPC_MAX_REGISTER_SIZE];
2505 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2507 if (!get_frame_register_bytes (frame, regnum, 0,
2508 register_size (gdbarch, regnum),
2509 from, optimizedp, unavailablep))
2512 target_float_convert (from, builtin_type (gdbarch)->builtin_double,
2514 *optimizedp = *unavailablep = 0;
2519 rs6000_value_to_register (struct frame_info *frame,
2522 const gdb_byte *from)
2524 struct gdbarch *gdbarch = get_frame_arch (frame);
2525 gdb_byte to[PPC_MAX_REGISTER_SIZE];
2527 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2529 target_float_convert (from, type,
2530 to, builtin_type (gdbarch)->builtin_double);
2531 put_frame_register (frame, regnum, to);
2534 /* The type of a function that moves the value of REG between CACHE
2535 or BUF --- in either direction. */
2536 typedef enum register_status (*move_ev_register_func) (struct regcache *,
2539 /* Move SPE vector register values between a 64-bit buffer and the two
2540 32-bit raw register halves in a regcache. This function handles
2541 both splitting a 64-bit value into two 32-bit halves, and joining
2542 two halves into a whole 64-bit value, depending on the function
2543 passed as the MOVE argument.
2545 EV_REG must be the number of an SPE evN vector register --- a
2546 pseudoregister. REGCACHE must be a regcache, and BUFFER must be a
2549 Call MOVE once for each 32-bit half of that register, passing
2550 REGCACHE, the number of the raw register corresponding to that
2551 half, and the address of the appropriate half of BUFFER.
2553 For example, passing 'regcache_raw_read' as the MOVE function will
2554 fill BUFFER with the full 64-bit contents of EV_REG. Or, passing
2555 'regcache_raw_supply' will supply the contents of BUFFER to the
2556 appropriate pair of raw registers in REGCACHE.
2558 You may need to cast away some 'const' qualifiers when passing
2559 MOVE, since this function can't tell at compile-time which of
2560 REGCACHE or BUFFER is acting as the source of the data. If C had
2561 co-variant type qualifiers, ... */
2563 static enum register_status
2564 e500_move_ev_register (move_ev_register_func move,
2565 struct regcache *regcache, int ev_reg, void *buffer)
2567 struct gdbarch *arch = regcache->arch ();
2568 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2570 gdb_byte *byte_buffer = (gdb_byte *) buffer;
2571 enum register_status status;
2573 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2575 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2577 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2579 status = move (regcache, tdep->ppc_ev0_upper_regnum + reg_index,
2581 if (status == REG_VALID)
2582 status = move (regcache, tdep->ppc_gp0_regnum + reg_index,
2587 status = move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer);
2588 if (status == REG_VALID)
2589 status = move (regcache, tdep->ppc_ev0_upper_regnum + reg_index,
2596 static enum register_status
2597 do_regcache_raw_write (struct regcache *regcache, int regnum, void *buffer)
2599 regcache->raw_write (regnum, (const gdb_byte *) buffer);
2604 static enum register_status
2605 e500_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2606 int ev_reg, gdb_byte *buffer)
2608 struct gdbarch *arch = regcache->arch ();
2609 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2611 enum register_status status;
2613 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2615 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2617 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2619 status = regcache->raw_read (tdep->ppc_ev0_upper_regnum + reg_index,
2621 if (status == REG_VALID)
2622 status = regcache->raw_read (tdep->ppc_gp0_regnum + reg_index,
2627 status = regcache->raw_read (tdep->ppc_gp0_regnum + reg_index, buffer);
2628 if (status == REG_VALID)
2629 status = regcache->raw_read (tdep->ppc_ev0_upper_regnum + reg_index,
2638 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2639 int reg_nr, const gdb_byte *buffer)
2641 e500_move_ev_register (do_regcache_raw_write, regcache,
2642 reg_nr, (void *) buffer);
2645 /* Read method for DFP pseudo-registers. */
2646 static enum register_status
2647 dfp_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2648 int reg_nr, gdb_byte *buffer)
2650 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2652 enum register_status status;
2654 if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2656 reg_index = reg_nr - tdep->ppc_dl0_regnum;
2657 fp0 = PPC_F0_REGNUM;
2661 gdb_assert (IS_CDFP_PSEUDOREG (tdep, reg_nr));
2663 reg_index = reg_nr - tdep->ppc_cdl0_regnum;
2664 fp0 = PPC_CF0_REGNUM;
2667 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2669 /* Read two FP registers to form a whole dl register. */
2670 status = regcache->raw_read (fp0 + 2 * reg_index, buffer);
2671 if (status == REG_VALID)
2672 status = regcache->raw_read (fp0 + 2 * reg_index + 1,
2677 status = regcache->raw_read (fp0 + 2 * reg_index + 1, buffer);
2678 if (status == REG_VALID)
2679 status = regcache->raw_read (fp0 + 2 * reg_index, buffer + 8);
2685 /* Write method for DFP pseudo-registers. */
2687 dfp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2688 int reg_nr, const gdb_byte *buffer)
2690 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2693 if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2695 reg_index = reg_nr - tdep->ppc_dl0_regnum;
2696 fp0 = PPC_F0_REGNUM;
2700 gdb_assert (IS_CDFP_PSEUDOREG (tdep, reg_nr));
2702 reg_index = reg_nr - tdep->ppc_cdl0_regnum;
2703 fp0 = PPC_CF0_REGNUM;
2706 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2708 /* Write each half of the dl register into a separate
2710 regcache->raw_write (fp0 + 2 * reg_index, buffer);
2711 regcache->raw_write (fp0 + 2 * reg_index + 1, buffer + 8);
2715 regcache->raw_write (fp0 + 2 * reg_index + 1, buffer);
2716 regcache->raw_write (fp0 + 2 * reg_index, buffer + 8);
2720 /* Read method for POWER7 VSX pseudo-registers. */
2721 static enum register_status
2722 vsx_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2723 int reg_nr, gdb_byte *buffer)
2725 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2726 int reg_index, vr0, fp0, vsr0_upper;
2727 enum register_status status;
2729 if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2731 reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2732 vr0 = PPC_VR0_REGNUM;
2733 fp0 = PPC_F0_REGNUM;
2734 vsr0_upper = PPC_VSR0_UPPER_REGNUM;
2738 gdb_assert (IS_CVSX_PSEUDOREG (tdep, reg_nr));
2740 reg_index = reg_nr - tdep->ppc_cvsr0_regnum;
2741 vr0 = PPC_CVR0_REGNUM;
2742 fp0 = PPC_CF0_REGNUM;
2743 vsr0_upper = PPC_CVSR0_UPPER_REGNUM;
2746 /* Read the portion that overlaps the VMX registers. */
2748 status = regcache->raw_read (vr0 + reg_index - 32, buffer);
2750 /* Read the portion that overlaps the FPR registers. */
2751 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2753 status = regcache->raw_read (fp0 + reg_index, buffer);
2754 if (status == REG_VALID)
2755 status = regcache->raw_read (vsr0_upper + reg_index,
2760 status = regcache->raw_read (fp0 + reg_index, buffer + 8);
2761 if (status == REG_VALID)
2762 status = regcache->raw_read (vsr0_upper + reg_index, buffer);
2768 /* Write method for POWER7 VSX pseudo-registers. */
2770 vsx_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2771 int reg_nr, const gdb_byte *buffer)
2773 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2774 int reg_index, vr0, fp0, vsr0_upper;
2776 if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2778 reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2779 vr0 = PPC_VR0_REGNUM;
2780 fp0 = PPC_F0_REGNUM;
2781 vsr0_upper = PPC_VSR0_UPPER_REGNUM;
2785 gdb_assert (IS_CVSX_PSEUDOREG (tdep, reg_nr));
2787 reg_index = reg_nr - tdep->ppc_cvsr0_regnum;
2788 vr0 = PPC_CVR0_REGNUM;
2789 fp0 = PPC_CF0_REGNUM;
2790 vsr0_upper = PPC_CVSR0_UPPER_REGNUM;
2793 /* Write the portion that overlaps the VMX registers. */
2795 regcache->raw_write (vr0 + reg_index - 32, buffer);
2797 /* Write the portion that overlaps the FPR registers. */
2798 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2800 regcache->raw_write (fp0 + reg_index, buffer);
2801 regcache->raw_write (vsr0_upper + reg_index, buffer + 8);
2805 regcache->raw_write (fp0 + reg_index, buffer + 8);
2806 regcache->raw_write (vsr0_upper + reg_index, buffer);
2810 /* Read method for POWER7 Extended FP pseudo-registers. */
2811 static enum register_status
2812 efp_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2813 int reg_nr, gdb_byte *buffer)
2815 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2818 if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2820 reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2821 vr0 = PPC_VR0_REGNUM;
2825 gdb_assert (IS_CEFP_PSEUDOREG (tdep, reg_nr));
2827 reg_index = reg_nr - tdep->ppc_cefpr0_regnum;
2828 vr0 = PPC_CVR0_REGNUM;
2831 int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
2833 /* Read the portion that overlaps the VMX register. */
2834 return regcache->raw_read_part (vr0 + reg_index, offset,
2835 register_size (gdbarch, reg_nr),
2839 /* Write method for POWER7 Extended FP pseudo-registers. */
2841 efp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2842 int reg_nr, const gdb_byte *buffer)
2844 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2846 int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
2848 if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2850 reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2851 vr0 = PPC_VR0_REGNUM;
2855 gdb_assert (IS_CEFP_PSEUDOREG (tdep, reg_nr));
2857 reg_index = reg_nr - tdep->ppc_cefpr0_regnum;
2858 vr0 = PPC_CVR0_REGNUM;
2860 /* The call to raw_write_part fails silently if the initial read
2861 of the read-update-write sequence returns an invalid status,
2862 so we check this manually and throw an error if needed. */
2863 regcache->raw_update (vr0 + reg_index);
2864 if (regcache->get_register_status (vr0 + reg_index) != REG_VALID)
2865 error (_("Cannot write to the checkpointed EFP register, "
2866 "the corresponding vector register is unavailable."));
2869 /* Write the portion that overlaps the VMX register. */
2870 regcache->raw_write_part (vr0 + reg_index, offset,
2871 register_size (gdbarch, reg_nr), buffer);
2874 static enum register_status
2875 rs6000_pseudo_register_read (struct gdbarch *gdbarch,
2876 readable_regcache *regcache,
2877 int reg_nr, gdb_byte *buffer)
2879 struct gdbarch *regcache_arch = regcache->arch ();
2880 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2882 gdb_assert (regcache_arch == gdbarch);
2884 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2885 return e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2886 else if (IS_DFP_PSEUDOREG (tdep, reg_nr)
2887 || IS_CDFP_PSEUDOREG (tdep, reg_nr))
2888 return dfp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2889 else if (IS_VSX_PSEUDOREG (tdep, reg_nr)
2890 || IS_CVSX_PSEUDOREG (tdep, reg_nr))
2891 return vsx_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2892 else if (IS_EFP_PSEUDOREG (tdep, reg_nr)
2893 || IS_CEFP_PSEUDOREG (tdep, reg_nr))
2894 return efp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2896 internal_error (__FILE__, __LINE__,
2897 _("rs6000_pseudo_register_read: "
2898 "called on unexpected register '%s' (%d)"),
2899 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2903 rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2904 struct regcache *regcache,
2905 int reg_nr, const gdb_byte *buffer)
2907 struct gdbarch *regcache_arch = regcache->arch ();
2908 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2910 gdb_assert (regcache_arch == gdbarch);
2912 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2913 e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2914 else if (IS_DFP_PSEUDOREG (tdep, reg_nr)
2915 || IS_CDFP_PSEUDOREG (tdep, reg_nr))
2916 dfp_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2917 else if (IS_VSX_PSEUDOREG (tdep, reg_nr)
2918 || IS_CVSX_PSEUDOREG (tdep, reg_nr))
2919 vsx_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2920 else if (IS_EFP_PSEUDOREG (tdep, reg_nr)
2921 || IS_CEFP_PSEUDOREG (tdep, reg_nr))
2922 efp_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2924 internal_error (__FILE__, __LINE__,
2925 _("rs6000_pseudo_register_write: "
2926 "called on unexpected register '%s' (%d)"),
2927 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2930 /* Set the register mask in AX with the registers that form the DFP or
2931 checkpointed DFP pseudo-register REG_NR. */
2934 dfp_ax_pseudo_register_collect (struct gdbarch *gdbarch,
2935 struct agent_expr *ax, int reg_nr)
2937 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2940 if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2942 reg_index = reg_nr - tdep->ppc_dl0_regnum;
2943 fp0 = PPC_F0_REGNUM;
2947 gdb_assert (IS_CDFP_PSEUDOREG (tdep, reg_nr));
2949 reg_index = reg_nr - tdep->ppc_cdl0_regnum;
2950 fp0 = PPC_CF0_REGNUM;
2953 ax_reg_mask (ax, fp0 + 2 * reg_index);
2954 ax_reg_mask (ax, fp0 + 2 * reg_index + 1);
2957 /* Set the register mask in AX with the registers that form the VSX or
2958 checkpointed VSX pseudo-register REG_NR. */
2961 vsx_ax_pseudo_register_collect (struct gdbarch *gdbarch,
2962 struct agent_expr *ax, int reg_nr)
2964 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2965 int reg_index, vr0, fp0, vsr0_upper;
2967 if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2969 reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2970 vr0 = PPC_VR0_REGNUM;
2971 fp0 = PPC_F0_REGNUM;
2972 vsr0_upper = PPC_VSR0_UPPER_REGNUM;
2976 gdb_assert (IS_CVSX_PSEUDOREG (tdep, reg_nr));
2978 reg_index = reg_nr - tdep->ppc_cvsr0_regnum;
2979 vr0 = PPC_CVR0_REGNUM;
2980 fp0 = PPC_CF0_REGNUM;
2981 vsr0_upper = PPC_CVSR0_UPPER_REGNUM;
2986 ax_reg_mask (ax, vr0 + reg_index - 32);
2990 ax_reg_mask (ax, fp0 + reg_index);
2991 ax_reg_mask (ax, vsr0_upper + reg_index);
2995 /* Set the register mask in AX with the register that corresponds to
2996 the EFP or checkpointed EFP pseudo-register REG_NR. */
2999 efp_ax_pseudo_register_collect (struct gdbarch *gdbarch,
3000 struct agent_expr *ax, int reg_nr)
3002 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3005 if (IS_EFP_PSEUDOREG (tdep, reg_nr))
3007 reg_index = reg_nr - tdep->ppc_efpr0_regnum;
3008 vr0 = PPC_VR0_REGNUM;
3012 gdb_assert (IS_CEFP_PSEUDOREG (tdep, reg_nr));
3014 reg_index = reg_nr - tdep->ppc_cefpr0_regnum;
3015 vr0 = PPC_CVR0_REGNUM;
3018 ax_reg_mask (ax, vr0 + reg_index);
3022 rs6000_ax_pseudo_register_collect (struct gdbarch *gdbarch,
3023 struct agent_expr *ax, int reg_nr)
3025 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3026 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
3028 int reg_index = reg_nr - tdep->ppc_ev0_regnum;
3029 ax_reg_mask (ax, tdep->ppc_gp0_regnum + reg_index);
3030 ax_reg_mask (ax, tdep->ppc_ev0_upper_regnum + reg_index);
3032 else if (IS_DFP_PSEUDOREG (tdep, reg_nr)
3033 || IS_CDFP_PSEUDOREG (tdep, reg_nr))
3035 dfp_ax_pseudo_register_collect (gdbarch, ax, reg_nr);
3037 else if (IS_VSX_PSEUDOREG (tdep, reg_nr)
3038 || IS_CVSX_PSEUDOREG (tdep, reg_nr))
3040 vsx_ax_pseudo_register_collect (gdbarch, ax, reg_nr);
3042 else if (IS_EFP_PSEUDOREG (tdep, reg_nr)
3043 || IS_CEFP_PSEUDOREG (tdep, reg_nr))
3045 efp_ax_pseudo_register_collect (gdbarch, ax, reg_nr);
3048 internal_error (__FILE__, __LINE__,
3049 _("rs6000_pseudo_register_collect: "
3050 "called on unexpected register '%s' (%d)"),
3051 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
3057 rs6000_gen_return_address (struct gdbarch *gdbarch,
3058 struct agent_expr *ax, struct axs_value *value,
3061 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3062 value->type = register_type (gdbarch, tdep->ppc_lr_regnum);
3063 value->kind = axs_lvalue_register;
3064 value->u.reg = tdep->ppc_lr_regnum;
3068 /* Convert a DBX STABS register number to a GDB register number. */
3070 rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
3072 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3074 if (0 <= num && num <= 31)
3075 return tdep->ppc_gp0_regnum + num;
3076 else if (32 <= num && num <= 63)
3077 /* FIXME: jimb/2004-05-05: What should we do when the debug info
3078 specifies registers the architecture doesn't have? Our
3079 callers don't check the value we return. */
3080 return tdep->ppc_fp0_regnum + (num - 32);
3081 else if (77 <= num && num <= 108)
3082 return tdep->ppc_vr0_regnum + (num - 77);
3083 else if (1200 <= num && num < 1200 + 32)
3084 return tdep->ppc_ev0_upper_regnum + (num - 1200);
3089 return tdep->ppc_mq_regnum;
3091 return tdep->ppc_lr_regnum;
3093 return tdep->ppc_ctr_regnum;
3095 return tdep->ppc_xer_regnum;
3097 return tdep->ppc_vrsave_regnum;
3099 return tdep->ppc_vrsave_regnum - 1; /* vscr */
3101 return tdep->ppc_acc_regnum;
3103 return tdep->ppc_spefscr_regnum;
3110 /* Convert a Dwarf 2 register number to a GDB register number. */
3112 rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
3114 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3116 if (0 <= num && num <= 31)
3117 return tdep->ppc_gp0_regnum + num;
3118 else if (32 <= num && num <= 63)
3119 /* FIXME: jimb/2004-05-05: What should we do when the debug info
3120 specifies registers the architecture doesn't have? Our
3121 callers don't check the value we return. */
3122 return tdep->ppc_fp0_regnum + (num - 32);
3123 else if (1124 <= num && num < 1124 + 32)
3124 return tdep->ppc_vr0_regnum + (num - 1124);
3125 else if (1200 <= num && num < 1200 + 32)
3126 return tdep->ppc_ev0_upper_regnum + (num - 1200);
3131 return tdep->ppc_cr_regnum;
3133 return tdep->ppc_vrsave_regnum - 1; /* vscr */
3135 return tdep->ppc_acc_regnum;
3137 return tdep->ppc_mq_regnum;
3139 return tdep->ppc_xer_regnum;
3141 return tdep->ppc_lr_regnum;
3143 return tdep->ppc_ctr_regnum;
3145 return tdep->ppc_vrsave_regnum;
3147 return tdep->ppc_spefscr_regnum;
3153 /* Translate a .eh_frame register to DWARF register, or adjust a
3154 .debug_frame register. */
3157 rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
3159 /* GCC releases before 3.4 use GCC internal register numbering in
3160 .debug_frame (and .debug_info, et cetera). The numbering is
3161 different from the standard SysV numbering for everything except
3162 for GPRs and FPRs. We can not detect this problem in most cases
3163 - to get accurate debug info for variables living in lr, ctr, v0,
3164 et cetera, use a newer version of GCC. But we must detect
3165 one important case - lr is in column 65 in .debug_frame output,
3168 GCC 3.4, and the "hammer" branch, have a related problem. They
3169 record lr register saves in .debug_frame as 108, but still record
3170 the return column as 65. We fix that up too.
3172 We can do this because 65 is assigned to fpsr, and GCC never
3173 generates debug info referring to it. To add support for
3174 handwritten debug info that restores fpsr, we would need to add a
3175 producer version check to this. */
3184 /* .eh_frame is GCC specific. For binary compatibility, it uses GCC
3185 internal register numbering; translate that to the standard DWARF2
3186 register numbering. */
3187 if (0 <= num && num <= 63) /* r0-r31,fp0-fp31 */
3189 else if (68 <= num && num <= 75) /* cr0-cr8 */
3190 return num - 68 + 86;
3191 else if (77 <= num && num <= 108) /* vr0-vr31 */
3192 return num - 77 + 1124;
3204 case 109: /* vrsave */
3206 case 110: /* vscr */
3208 case 111: /* spe_acc */
3210 case 112: /* spefscr */
3218 /* Handling the various POWER/PowerPC variants. */
3220 /* Information about a particular processor variant. */
3224 /* Name of this variant. */
3227 /* English description of the variant. */
3228 const char *description;
3230 /* bfd_arch_info.arch corresponding to variant. */
3231 enum bfd_architecture arch;
3233 /* bfd_arch_info.mach corresponding to variant. */
3236 /* Target description for this variant. */
3237 struct target_desc **tdesc;
3240 static struct variant variants[] =
3242 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
3243 bfd_mach_ppc, &tdesc_powerpc_altivec32},
3244 {"power", "POWER user-level", bfd_arch_rs6000,
3245 bfd_mach_rs6k, &tdesc_rs6000},
3246 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
3247 bfd_mach_ppc_403, &tdesc_powerpc_403},
3248 {"405", "IBM PowerPC 405", bfd_arch_powerpc,
3249 bfd_mach_ppc_405, &tdesc_powerpc_405},
3250 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
3251 bfd_mach_ppc_601, &tdesc_powerpc_601},
3252 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
3253 bfd_mach_ppc_602, &tdesc_powerpc_602},
3254 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
3255 bfd_mach_ppc_603, &tdesc_powerpc_603},
3256 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
3257 604, &tdesc_powerpc_604},
3258 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
3259 bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
3260 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
3261 bfd_mach_ppc_505, &tdesc_powerpc_505},
3262 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
3263 bfd_mach_ppc_860, &tdesc_powerpc_860},
3264 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
3265 bfd_mach_ppc_750, &tdesc_powerpc_750},
3266 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
3267 bfd_mach_ppc_7400, &tdesc_powerpc_7400},
3268 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
3269 bfd_mach_ppc_e500, &tdesc_powerpc_e500},
3272 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
3273 bfd_mach_ppc64, &tdesc_powerpc_altivec64},
3274 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
3275 bfd_mach_ppc_620, &tdesc_powerpc_64},
3276 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
3277 bfd_mach_ppc_630, &tdesc_powerpc_64},
3278 {"a35", "PowerPC A35", bfd_arch_powerpc,
3279 bfd_mach_ppc_a35, &tdesc_powerpc_64},
3280 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
3281 bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
3282 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
3283 bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
3285 /* FIXME: I haven't checked the register sets of the following. */
3286 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
3287 bfd_mach_rs6k_rs1, &tdesc_rs6000},
3288 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
3289 bfd_mach_rs6k_rsc, &tdesc_rs6000},
3290 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
3291 bfd_mach_rs6k_rs2, &tdesc_rs6000},
3293 {0, 0, (enum bfd_architecture) 0, 0, 0}
3296 /* Return the variant corresponding to architecture ARCH and machine number
3297 MACH. If no such variant exists, return null. */
3299 static const struct variant *
3300 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
3302 const struct variant *v;
3304 for (v = variants; v->name; v++)
3305 if (arch == v->arch && mach == v->mach)
3313 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3315 return frame_unwind_register_unsigned (next_frame,
3316 gdbarch_pc_regnum (gdbarch));
3319 static struct frame_id
3320 rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3322 return frame_id_build (get_frame_register_unsigned
3323 (this_frame, gdbarch_sp_regnum (gdbarch)),
3324 get_frame_pc (this_frame));
3327 struct rs6000_frame_cache
3330 CORE_ADDR initial_sp;
3331 struct trad_frame_saved_reg *saved_regs;
3333 /* Set BASE_P to true if this frame cache is properly initialized.
3334 Otherwise set to false because some registers or memory cannot
3337 /* Cache PC for building unavailable frame. */
3341 static struct rs6000_frame_cache *
3342 rs6000_frame_cache (struct frame_info *this_frame, void **this_cache)
3344 struct rs6000_frame_cache *cache;
3345 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3346 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3347 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3348 struct rs6000_framedata fdata;
3349 int wordsize = tdep->wordsize;
3350 CORE_ADDR func = 0, pc = 0;
3352 if ((*this_cache) != NULL)
3353 return (struct rs6000_frame_cache *) (*this_cache);
3354 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3355 (*this_cache) = cache;
3357 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3361 func = get_frame_func (this_frame);
3363 pc = get_frame_pc (this_frame);
3364 skip_prologue (gdbarch, func, pc, &fdata);
3366 /* Figure out the parent's stack pointer. */
3368 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
3369 address of the current frame. Things might be easier if the
3370 ->frame pointed to the outer-most address of the frame. In
3371 the mean time, the address of the prev frame is used as the
3372 base address of this frame. */
3373 cache->base = get_frame_register_unsigned
3374 (this_frame, gdbarch_sp_regnum (gdbarch));
3376 CATCH (ex, RETURN_MASK_ERROR)
3378 if (ex.error != NOT_AVAILABLE_ERROR)
3379 throw_exception (ex);
3380 return (struct rs6000_frame_cache *) (*this_cache);
3384 /* If the function appears to be frameless, check a couple of likely
3385 indicators that we have simply failed to find the frame setup.
3386 Two common cases of this are missing symbols (i.e.
3387 get_frame_func returns the wrong address or 0), and assembly
3388 stubs which have a fast exit path but set up a frame on the slow
3391 If the LR appears to return to this function, then presume that
3392 we have an ABI compliant frame that we failed to find. */
3393 if (fdata.frameless && fdata.lr_offset == 0)
3398 saved_lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3399 if (func == 0 && saved_lr == pc)
3403 CORE_ADDR saved_func = get_pc_function_start (saved_lr);
3404 if (func == saved_func)
3410 fdata.frameless = 0;
3411 fdata.lr_offset = tdep->lr_frame_offset;
3415 if (!fdata.frameless)
3417 /* Frameless really means stackless. */
3420 if (safe_read_memory_unsigned_integer (cache->base, wordsize,
3421 byte_order, &backchain))
3422 cache->base = (CORE_ADDR) backchain;
3425 trad_frame_set_value (cache->saved_regs,
3426 gdbarch_sp_regnum (gdbarch), cache->base);
3428 /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3429 All fpr's from saved_fpr to fp31 are saved. */
3431 if (fdata.saved_fpr >= 0)
3434 CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
3436 /* If skip_prologue says floating-point registers were saved,
3437 but the current architecture has no floating-point registers,
3438 then that's strange. But we have no indices to even record
3439 the addresses under, so we just ignore it. */
3440 if (ppc_floating_point_unit_p (gdbarch))
3441 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
3443 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3448 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3449 All gpr's from saved_gpr to gpr31 are saved (except during the
3452 if (fdata.saved_gpr >= 0)
3455 CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
3456 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
3458 if (fdata.gpr_mask & (1U << i))
3459 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
3460 gpr_addr += wordsize;
3464 /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3465 All vr's from saved_vr to vr31 are saved. */
3466 if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
3468 if (fdata.saved_vr >= 0)
3471 CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
3472 for (i = fdata.saved_vr; i < 32; i++)
3474 cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
3475 vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
3480 /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3481 All vr's from saved_ev to ev31 are saved. ????? */
3482 if (tdep->ppc_ev0_regnum != -1)
3484 if (fdata.saved_ev >= 0)
3487 CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
3488 CORE_ADDR off = (byte_order == BFD_ENDIAN_BIG ? 4 : 0);
3490 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
3492 cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
3493 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + off;
3494 ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
3499 /* If != 0, fdata.cr_offset is the offset from the frame that
3501 if (fdata.cr_offset != 0)
3502 cache->saved_regs[tdep->ppc_cr_regnum].addr
3503 = cache->base + fdata.cr_offset;
3505 /* If != 0, fdata.lr_offset is the offset from the frame that
3507 if (fdata.lr_offset != 0)
3508 cache->saved_regs[tdep->ppc_lr_regnum].addr
3509 = cache->base + fdata.lr_offset;
3510 else if (fdata.lr_register != -1)
3511 cache->saved_regs[tdep->ppc_lr_regnum].realreg = fdata.lr_register;
3512 /* The PC is found in the link register. */
3513 cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3514 cache->saved_regs[tdep->ppc_lr_regnum];
3516 /* If != 0, fdata.vrsave_offset is the offset from the frame that
3517 holds the VRSAVE. */
3518 if (fdata.vrsave_offset != 0)
3519 cache->saved_regs[tdep->ppc_vrsave_regnum].addr
3520 = cache->base + fdata.vrsave_offset;
3522 if (fdata.alloca_reg < 0)
3523 /* If no alloca register used, then fi->frame is the value of the
3524 %sp for this frame, and it is good enough. */
3526 = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3529 = get_frame_register_unsigned (this_frame, fdata.alloca_reg);
3536 rs6000_frame_this_id (struct frame_info *this_frame, void **this_cache,
3537 struct frame_id *this_id)
3539 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3544 (*this_id) = frame_id_build_unavailable_stack (info->pc);
3548 /* This marks the outermost frame. */
3549 if (info->base == 0)
3552 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3555 static struct value *
3556 rs6000_frame_prev_register (struct frame_info *this_frame,
3557 void **this_cache, int regnum)
3559 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3561 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3564 static const struct frame_unwind rs6000_frame_unwind =
3567 default_frame_unwind_stop_reason,
3568 rs6000_frame_this_id,
3569 rs6000_frame_prev_register,
3571 default_frame_sniffer
3574 /* Allocate and initialize a frame cache for an epilogue frame.
3575 SP is restored and prev-PC is stored in LR. */
3577 static struct rs6000_frame_cache *
3578 rs6000_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
3580 struct rs6000_frame_cache *cache;
3581 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3582 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3585 return (struct rs6000_frame_cache *) *this_cache;
3587 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3588 (*this_cache) = cache;
3589 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3593 /* At this point the stack looks as if we just entered the
3594 function, and the return address is stored in LR. */
3597 sp = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3598 lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3601 cache->initial_sp = sp;
3603 trad_frame_set_value (cache->saved_regs,
3604 gdbarch_pc_regnum (gdbarch), lr);
3606 CATCH (ex, RETURN_MASK_ERROR)
3608 if (ex.error != NOT_AVAILABLE_ERROR)
3609 throw_exception (ex);
3616 /* Implementation of frame_unwind.this_id, as defined in frame_unwind.h.
3617 Return the frame ID of an epilogue frame. */
3620 rs6000_epilogue_frame_this_id (struct frame_info *this_frame,
3621 void **this_cache, struct frame_id *this_id)
3624 struct rs6000_frame_cache *info =
3625 rs6000_epilogue_frame_cache (this_frame, this_cache);
3627 pc = get_frame_func (this_frame);
3628 if (info->base == 0)
3629 (*this_id) = frame_id_build_unavailable_stack (pc);
3631 (*this_id) = frame_id_build (info->base, pc);
3634 /* Implementation of frame_unwind.prev_register, as defined in frame_unwind.h.
3635 Return the register value of REGNUM in previous frame. */
3637 static struct value *
3638 rs6000_epilogue_frame_prev_register (struct frame_info *this_frame,
3639 void **this_cache, int regnum)
3641 struct rs6000_frame_cache *info =
3642 rs6000_epilogue_frame_cache (this_frame, this_cache);
3643 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3646 /* Implementation of frame_unwind.sniffer, as defined in frame_unwind.h.
3647 Check whether this an epilogue frame. */
3650 rs6000_epilogue_frame_sniffer (const struct frame_unwind *self,
3651 struct frame_info *this_frame,
3652 void **this_prologue_cache)
3654 if (frame_relative_level (this_frame) == 0)
3655 return rs6000_in_function_epilogue_frame_p (this_frame,
3656 get_frame_arch (this_frame),
3657 get_frame_pc (this_frame));
3662 /* Frame unwinder for epilogue frame. This is required for reverse step-over
3663 a function without debug information. */
3665 static const struct frame_unwind rs6000_epilogue_frame_unwind =
3668 default_frame_unwind_stop_reason,
3669 rs6000_epilogue_frame_this_id, rs6000_epilogue_frame_prev_register,
3671 rs6000_epilogue_frame_sniffer
3676 rs6000_frame_base_address (struct frame_info *this_frame, void **this_cache)
3678 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3680 return info->initial_sp;
3683 static const struct frame_base rs6000_frame_base = {
3684 &rs6000_frame_unwind,
3685 rs6000_frame_base_address,
3686 rs6000_frame_base_address,
3687 rs6000_frame_base_address
3690 static const struct frame_base *
3691 rs6000_frame_base_sniffer (struct frame_info *this_frame)
3693 return &rs6000_frame_base;
3696 /* DWARF-2 frame support. Used to handle the detection of
3697 clobbered registers during function calls. */
3700 ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3701 struct dwarf2_frame_state_reg *reg,
3702 struct frame_info *this_frame)
3704 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3706 /* PPC32 and PPC64 ABI's are the same regarding volatile and
3707 non-volatile registers. We will use the same code for both. */
3709 /* Call-saved GP registers. */
3710 if ((regnum >= tdep->ppc_gp0_regnum + 14
3711 && regnum <= tdep->ppc_gp0_regnum + 31)
3712 || (regnum == tdep->ppc_gp0_regnum + 1))
3713 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3715 /* Call-clobbered GP registers. */
3716 if ((regnum >= tdep->ppc_gp0_regnum + 3
3717 && regnum <= tdep->ppc_gp0_regnum + 12)
3718 || (regnum == tdep->ppc_gp0_regnum))
3719 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3721 /* Deal with FP registers, if supported. */
3722 if (tdep->ppc_fp0_regnum >= 0)
3724 /* Call-saved FP registers. */
3725 if ((regnum >= tdep->ppc_fp0_regnum + 14
3726 && regnum <= tdep->ppc_fp0_regnum + 31))
3727 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3729 /* Call-clobbered FP registers. */
3730 if ((regnum >= tdep->ppc_fp0_regnum
3731 && regnum <= tdep->ppc_fp0_regnum + 13))
3732 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3735 /* Deal with ALTIVEC registers, if supported. */
3736 if (tdep->ppc_vr0_regnum > 0 && tdep->ppc_vrsave_regnum > 0)
3738 /* Call-saved Altivec registers. */
3739 if ((regnum >= tdep->ppc_vr0_regnum + 20
3740 && regnum <= tdep->ppc_vr0_regnum + 31)
3741 || regnum == tdep->ppc_vrsave_regnum)
3742 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3744 /* Call-clobbered Altivec registers. */
3745 if ((regnum >= tdep->ppc_vr0_regnum
3746 && regnum <= tdep->ppc_vr0_regnum + 19))
3747 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3750 /* Handle PC register and Stack Pointer correctly. */
3751 if (regnum == gdbarch_pc_regnum (gdbarch))
3752 reg->how = DWARF2_FRAME_REG_RA;
3753 else if (regnum == gdbarch_sp_regnum (gdbarch))
3754 reg->how = DWARF2_FRAME_REG_CFA;
3758 /* Return true if a .gnu_attributes section exists in BFD and it
3759 indicates we are using SPE extensions OR if a .PPC.EMB.apuinfo
3760 section exists in BFD and it indicates that SPE extensions are in
3761 use. Check the .gnu.attributes section first, as the binary might be
3762 compiled for SPE, but not actually using SPE instructions. */
3765 bfd_uses_spe_extensions (bfd *abfd)
3768 gdb_byte *contents = NULL;
3777 /* Using Tag_GNU_Power_ABI_Vector here is a bit of a hack, as the user
3778 could be using the SPE vector abi without actually using any spe
3779 bits whatsoever. But it's close enough for now. */
3780 int vector_abi = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_GNU,
3781 Tag_GNU_Power_ABI_Vector);
3782 if (vector_abi == 3)
3786 sect = bfd_get_section_by_name (abfd, ".PPC.EMB.apuinfo");
3790 size = bfd_get_section_size (sect);
3791 contents = (gdb_byte *) xmalloc (size);
3792 if (!bfd_get_section_contents (abfd, sect, contents, 0, size))
3798 /* Parse the .PPC.EMB.apuinfo section. The layout is as follows:
3804 char name[name_len rounded up to 4-byte alignment];
3805 char data[data_len];
3808 Technically, there's only supposed to be one such structure in a
3809 given apuinfo section, but the linker is not always vigilant about
3810 merging apuinfo sections from input files. Just go ahead and parse
3811 them all, exiting early when we discover the binary uses SPE
3814 It's not specified in what endianness the information in this
3815 section is stored. Assume that it's the endianness of the BFD. */
3819 unsigned int name_len;
3820 unsigned int data_len;
3823 /* If we can't read the first three fields, we're done. */
3827 name_len = bfd_get_32 (abfd, ptr);
3828 name_len = (name_len + 3) & ~3U; /* Round to 4 bytes. */
3829 data_len = bfd_get_32 (abfd, ptr + 4);
3830 type = bfd_get_32 (abfd, ptr + 8);
3833 /* The name must be "APUinfo\0". */
3835 && strcmp ((const char *) ptr, "APUinfo") != 0)
3839 /* The type must be 2. */
3843 /* The data is stored as a series of uint32. The upper half of
3844 each uint32 indicates the particular APU used and the lower
3845 half indicates the revision of that APU. We just care about
3848 /* Not 4-byte quantities. */
3854 unsigned int apuinfo = bfd_get_32 (abfd, ptr);
3855 unsigned int apu = apuinfo >> 16;
3859 /* The SPE APU is 0x100; the SPEFP APU is 0x101. Accept
3861 if (apu == 0x100 || apu == 0x101)
3876 /* These are macros for parsing instruction fields (I.1.6.28) */
3878 #define PPC_FIELD(value, from, len) \
3879 (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1))
3880 #define PPC_SEXT(v, bs) \
3881 ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \
3882 ^ ((CORE_ADDR) 1 << ((bs) - 1))) \
3883 - ((CORE_ADDR) 1 << ((bs) - 1)))
3884 #define PPC_OP6(insn) PPC_FIELD (insn, 0, 6)
3885 #define PPC_EXTOP(insn) PPC_FIELD (insn, 21, 10)
3886 #define PPC_RT(insn) PPC_FIELD (insn, 6, 5)
3887 #define PPC_RS(insn) PPC_FIELD (insn, 6, 5)
3888 #define PPC_RA(insn) PPC_FIELD (insn, 11, 5)
3889 #define PPC_RB(insn) PPC_FIELD (insn, 16, 5)
3890 #define PPC_NB(insn) PPC_FIELD (insn, 16, 5)
3891 #define PPC_VRT(insn) PPC_FIELD (insn, 6, 5)
3892 #define PPC_FRT(insn) PPC_FIELD (insn, 6, 5)
3893 #define PPC_SPR(insn) (PPC_FIELD (insn, 11, 5) \
3894 | (PPC_FIELD (insn, 16, 5) << 5))
3895 #define PPC_BO(insn) PPC_FIELD (insn, 6, 5)
3896 #define PPC_T(insn) PPC_FIELD (insn, 6, 5)
3897 #define PPC_D(insn) PPC_SEXT (PPC_FIELD (insn, 16, 16), 16)
3898 #define PPC_DS(insn) PPC_SEXT (PPC_FIELD (insn, 16, 14), 14)
3899 #define PPC_DQ(insn) PPC_SEXT (PPC_FIELD (insn, 16, 12), 12)
3900 #define PPC_BIT(insn,n) ((insn & (1 << (31 - (n)))) ? 1 : 0)
3901 #define PPC_OE(insn) PPC_BIT (insn, 21)
3902 #define PPC_RC(insn) PPC_BIT (insn, 31)
3903 #define PPC_Rc(insn) PPC_BIT (insn, 21)
3904 #define PPC_LK(insn) PPC_BIT (insn, 31)
3905 #define PPC_TX(insn) PPC_BIT (insn, 31)
3906 #define PPC_LEV(insn) PPC_FIELD (insn, 20, 7)
3908 #define PPC_XT(insn) ((PPC_TX (insn) << 5) | PPC_T (insn))
3909 #define PPC_XER_NB(xer) (xer & 0x7f)
3911 /* Record Vector-Scalar Registers.
3912 For VSR less than 32, it's represented by an FPR and an VSR-upper register.
3913 Otherwise, it's just a VR register. Record them accordingly. */
3916 ppc_record_vsr (struct regcache *regcache, struct gdbarch_tdep *tdep, int vsr)
3918 if (vsr < 0 || vsr >= 64)
3923 if (tdep->ppc_vr0_regnum >= 0)
3924 record_full_arch_list_add_reg (regcache, tdep->ppc_vr0_regnum + vsr - 32);
3928 if (tdep->ppc_fp0_regnum >= 0)
3929 record_full_arch_list_add_reg (regcache, tdep->ppc_fp0_regnum + vsr);
3930 if (tdep->ppc_vsr0_upper_regnum >= 0)
3931 record_full_arch_list_add_reg (regcache,
3932 tdep->ppc_vsr0_upper_regnum + vsr);
3938 /* Parse and record instructions primary opcode-4 at ADDR.
3939 Return 0 if successful. */
3942 ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
3943 CORE_ADDR addr, uint32_t insn)
3945 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3946 int ext = PPC_FIELD (insn, 21, 11);
3947 int vra = PPC_FIELD (insn, 11, 5);
3951 case 32: /* Vector Multiply-High-Add Signed Halfword Saturate */
3952 case 33: /* Vector Multiply-High-Round-Add Signed Halfword Saturate */
3953 case 39: /* Vector Multiply-Sum Unsigned Halfword Saturate */
3954 case 41: /* Vector Multiply-Sum Signed Halfword Saturate */
3955 record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
3957 case 42: /* Vector Select */
3958 case 43: /* Vector Permute */
3959 case 59: /* Vector Permute Right-indexed */
3960 case 44: /* Vector Shift Left Double by Octet Immediate */
3961 case 45: /* Vector Permute and Exclusive-OR */
3962 case 60: /* Vector Add Extended Unsigned Quadword Modulo */
3963 case 61: /* Vector Add Extended & write Carry Unsigned Quadword */
3964 case 62: /* Vector Subtract Extended Unsigned Quadword Modulo */
3965 case 63: /* Vector Subtract Extended & write Carry Unsigned Quadword */
3966 case 34: /* Vector Multiply-Low-Add Unsigned Halfword Modulo */
3967 case 35: /* Vector Multiply-Sum Unsigned Doubleword Modulo */
3968 case 36: /* Vector Multiply-Sum Unsigned Byte Modulo */
3969 case 37: /* Vector Multiply-Sum Mixed Byte Modulo */
3970 case 38: /* Vector Multiply-Sum Unsigned Halfword Modulo */
3971 case 40: /* Vector Multiply-Sum Signed Halfword Modulo */
3972 case 46: /* Vector Multiply-Add Single-Precision */
3973 case 47: /* Vector Negative Multiply-Subtract Single-Precision */
3974 record_full_arch_list_add_reg (regcache,
3975 tdep->ppc_vr0_regnum + PPC_VRT (insn));
3978 case 48: /* Multiply-Add High Doubleword */
3979 case 49: /* Multiply-Add High Doubleword Unsigned */
3980 case 51: /* Multiply-Add Low Doubleword */
3981 record_full_arch_list_add_reg (regcache,
3982 tdep->ppc_gp0_regnum + PPC_RT (insn));
3986 switch ((ext & 0x1ff))
3989 if (vra != 0 /* Decimal Convert To Signed Quadword */
3990 && vra != 2 /* Decimal Convert From Signed Quadword */
3991 && vra != 4 /* Decimal Convert To Zoned */
3992 && vra != 5 /* Decimal Convert To National */
3993 && vra != 6 /* Decimal Convert From Zoned */
3994 && vra != 7 /* Decimal Convert From National */
3995 && vra != 31) /* Decimal Set Sign */
3998 /* 5.16 Decimal Integer Arithmetic Instructions */
3999 case 1: /* Decimal Add Modulo */
4000 case 65: /* Decimal Subtract Modulo */
4002 case 193: /* Decimal Shift */
4003 case 129: /* Decimal Unsigned Shift */
4004 case 449: /* Decimal Shift and Round */
4006 case 257: /* Decimal Truncate */
4007 case 321: /* Decimal Unsigned Truncate */
4009 /* Bit-21 should be set. */
4010 if (!PPC_BIT (insn, 21))
4013 record_full_arch_list_add_reg (regcache,
4014 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4015 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4019 /* Bit-21 is used for RC */
4020 switch (ext & 0x3ff)
4022 case 6: /* Vector Compare Equal To Unsigned Byte */
4023 case 70: /* Vector Compare Equal To Unsigned Halfword */
4024 case 134: /* Vector Compare Equal To Unsigned Word */
4025 case 199: /* Vector Compare Equal To Unsigned Doubleword */
4026 case 774: /* Vector Compare Greater Than Signed Byte */
4027 case 838: /* Vector Compare Greater Than Signed Halfword */
4028 case 902: /* Vector Compare Greater Than Signed Word */
4029 case 967: /* Vector Compare Greater Than Signed Doubleword */
4030 case 518: /* Vector Compare Greater Than Unsigned Byte */
4031 case 646: /* Vector Compare Greater Than Unsigned Word */
4032 case 582: /* Vector Compare Greater Than Unsigned Halfword */
4033 case 711: /* Vector Compare Greater Than Unsigned Doubleword */
4034 case 966: /* Vector Compare Bounds Single-Precision */
4035 case 198: /* Vector Compare Equal To Single-Precision */
4036 case 454: /* Vector Compare Greater Than or Equal To Single-Precision */
4037 case 710: /* Vector Compare Greater Than Single-Precision */
4038 case 7: /* Vector Compare Not Equal Byte */
4039 case 71: /* Vector Compare Not Equal Halfword */
4040 case 135: /* Vector Compare Not Equal Word */
4041 case 263: /* Vector Compare Not Equal or Zero Byte */
4042 case 327: /* Vector Compare Not Equal or Zero Halfword */
4043 case 391: /* Vector Compare Not Equal or Zero Word */
4045 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4046 record_full_arch_list_add_reg (regcache,
4047 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4055 case 0: /* Vector Count Leading Zero Least-Significant Bits
4057 case 1: /* Vector Count Trailing Zero Least-Significant Bits
4059 record_full_arch_list_add_reg (regcache,
4060 tdep->ppc_gp0_regnum + PPC_RT (insn));
4063 case 6: /* Vector Negate Word */
4064 case 7: /* Vector Negate Doubleword */
4065 case 8: /* Vector Parity Byte Word */
4066 case 9: /* Vector Parity Byte Doubleword */
4067 case 10: /* Vector Parity Byte Quadword */
4068 case 16: /* Vector Extend Sign Byte To Word */
4069 case 17: /* Vector Extend Sign Halfword To Word */
4070 case 24: /* Vector Extend Sign Byte To Doubleword */
4071 case 25: /* Vector Extend Sign Halfword To Doubleword */
4072 case 26: /* Vector Extend Sign Word To Doubleword */
4073 case 28: /* Vector Count Trailing Zeros Byte */
4074 case 29: /* Vector Count Trailing Zeros Halfword */
4075 case 30: /* Vector Count Trailing Zeros Word */
4076 case 31: /* Vector Count Trailing Zeros Doubleword */
4077 record_full_arch_list_add_reg (regcache,
4078 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4085 case 142: /* Vector Pack Unsigned Halfword Unsigned Saturate */
4086 case 206: /* Vector Pack Unsigned Word Unsigned Saturate */
4087 case 270: /* Vector Pack Signed Halfword Unsigned Saturate */
4088 case 334: /* Vector Pack Signed Word Unsigned Saturate */
4089 case 398: /* Vector Pack Signed Halfword Signed Saturate */
4090 case 462: /* Vector Pack Signed Word Signed Saturate */
4091 case 1230: /* Vector Pack Unsigned Doubleword Unsigned Saturate */
4092 case 1358: /* Vector Pack Signed Doubleword Unsigned Saturate */
4093 case 1486: /* Vector Pack Signed Doubleword Signed Saturate */
4094 case 512: /* Vector Add Unsigned Byte Saturate */
4095 case 576: /* Vector Add Unsigned Halfword Saturate */
4096 case 640: /* Vector Add Unsigned Word Saturate */
4097 case 768: /* Vector Add Signed Byte Saturate */
4098 case 832: /* Vector Add Signed Halfword Saturate */
4099 case 896: /* Vector Add Signed Word Saturate */
4100 case 1536: /* Vector Subtract Unsigned Byte Saturate */
4101 case 1600: /* Vector Subtract Unsigned Halfword Saturate */
4102 case 1664: /* Vector Subtract Unsigned Word Saturate */
4103 case 1792: /* Vector Subtract Signed Byte Saturate */
4104 case 1856: /* Vector Subtract Signed Halfword Saturate */
4105 case 1920: /* Vector Subtract Signed Word Saturate */
4107 case 1544: /* Vector Sum across Quarter Unsigned Byte Saturate */
4108 case 1800: /* Vector Sum across Quarter Signed Byte Saturate */
4109 case 1608: /* Vector Sum across Quarter Signed Halfword Saturate */
4110 case 1672: /* Vector Sum across Half Signed Word Saturate */
4111 case 1928: /* Vector Sum across Signed Word Saturate */
4112 case 970: /* Vector Convert To Signed Fixed-Point Word Saturate */
4113 case 906: /* Vector Convert To Unsigned Fixed-Point Word Saturate */
4114 record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
4116 case 12: /* Vector Merge High Byte */
4117 case 14: /* Vector Pack Unsigned Halfword Unsigned Modulo */
4118 case 76: /* Vector Merge High Halfword */
4119 case 78: /* Vector Pack Unsigned Word Unsigned Modulo */
4120 case 140: /* Vector Merge High Word */
4121 case 268: /* Vector Merge Low Byte */
4122 case 332: /* Vector Merge Low Halfword */
4123 case 396: /* Vector Merge Low Word */
4124 case 526: /* Vector Unpack High Signed Byte */
4125 case 590: /* Vector Unpack High Signed Halfword */
4126 case 654: /* Vector Unpack Low Signed Byte */
4127 case 718: /* Vector Unpack Low Signed Halfword */
4128 case 782: /* Vector Pack Pixel */
4129 case 846: /* Vector Unpack High Pixel */
4130 case 974: /* Vector Unpack Low Pixel */
4131 case 1102: /* Vector Pack Unsigned Doubleword Unsigned Modulo */
4132 case 1614: /* Vector Unpack High Signed Word */
4133 case 1676: /* Vector Merge Odd Word */
4134 case 1742: /* Vector Unpack Low Signed Word */
4135 case 1932: /* Vector Merge Even Word */
4136 case 524: /* Vector Splat Byte */
4137 case 588: /* Vector Splat Halfword */
4138 case 652: /* Vector Splat Word */
4139 case 780: /* Vector Splat Immediate Signed Byte */
4140 case 844: /* Vector Splat Immediate Signed Halfword */
4141 case 908: /* Vector Splat Immediate Signed Word */
4142 case 452: /* Vector Shift Left */
4143 case 708: /* Vector Shift Right */
4144 case 1036: /* Vector Shift Left by Octet */
4145 case 1100: /* Vector Shift Right by Octet */
4146 case 0: /* Vector Add Unsigned Byte Modulo */
4147 case 64: /* Vector Add Unsigned Halfword Modulo */
4148 case 128: /* Vector Add Unsigned Word Modulo */
4149 case 192: /* Vector Add Unsigned Doubleword Modulo */
4150 case 256: /* Vector Add Unsigned Quadword Modulo */
4151 case 320: /* Vector Add & write Carry Unsigned Quadword */
4152 case 384: /* Vector Add and Write Carry-Out Unsigned Word */
4153 case 8: /* Vector Multiply Odd Unsigned Byte */
4154 case 72: /* Vector Multiply Odd Unsigned Halfword */
4155 case 136: /* Vector Multiply Odd Unsigned Word */
4156 case 264: /* Vector Multiply Odd Signed Byte */
4157 case 328: /* Vector Multiply Odd Signed Halfword */
4158 case 392: /* Vector Multiply Odd Signed Word */
4159 case 520: /* Vector Multiply Even Unsigned Byte */
4160 case 584: /* Vector Multiply Even Unsigned Halfword */
4161 case 648: /* Vector Multiply Even Unsigned Word */
4162 case 776: /* Vector Multiply Even Signed Byte */
4163 case 840: /* Vector Multiply Even Signed Halfword */
4164 case 904: /* Vector Multiply Even Signed Word */
4165 case 137: /* Vector Multiply Unsigned Word Modulo */
4166 case 1024: /* Vector Subtract Unsigned Byte Modulo */
4167 case 1088: /* Vector Subtract Unsigned Halfword Modulo */
4168 case 1152: /* Vector Subtract Unsigned Word Modulo */
4169 case 1216: /* Vector Subtract Unsigned Doubleword Modulo */
4170 case 1280: /* Vector Subtract Unsigned Quadword Modulo */
4171 case 1344: /* Vector Subtract & write Carry Unsigned Quadword */
4172 case 1408: /* Vector Subtract and Write Carry-Out Unsigned Word */
4173 case 1282: /* Vector Average Signed Byte */
4174 case 1346: /* Vector Average Signed Halfword */
4175 case 1410: /* Vector Average Signed Word */
4176 case 1026: /* Vector Average Unsigned Byte */
4177 case 1090: /* Vector Average Unsigned Halfword */
4178 case 1154: /* Vector Average Unsigned Word */
4179 case 258: /* Vector Maximum Signed Byte */
4180 case 322: /* Vector Maximum Signed Halfword */
4181 case 386: /* Vector Maximum Signed Word */
4182 case 450: /* Vector Maximum Signed Doubleword */
4183 case 2: /* Vector Maximum Unsigned Byte */
4184 case 66: /* Vector Maximum Unsigned Halfword */
4185 case 130: /* Vector Maximum Unsigned Word */
4186 case 194: /* Vector Maximum Unsigned Doubleword */
4187 case 770: /* Vector Minimum Signed Byte */
4188 case 834: /* Vector Minimum Signed Halfword */
4189 case 898: /* Vector Minimum Signed Word */
4190 case 962: /* Vector Minimum Signed Doubleword */
4191 case 514: /* Vector Minimum Unsigned Byte */
4192 case 578: /* Vector Minimum Unsigned Halfword */
4193 case 642: /* Vector Minimum Unsigned Word */
4194 case 706: /* Vector Minimum Unsigned Doubleword */
4195 case 1028: /* Vector Logical AND */
4196 case 1668: /* Vector Logical Equivalent */
4197 case 1092: /* Vector Logical AND with Complement */
4198 case 1412: /* Vector Logical NAND */
4199 case 1348: /* Vector Logical OR with Complement */
4200 case 1156: /* Vector Logical OR */
4201 case 1284: /* Vector Logical NOR */
4202 case 1220: /* Vector Logical XOR */
4203 case 4: /* Vector Rotate Left Byte */
4204 case 132: /* Vector Rotate Left Word VX-form */
4205 case 68: /* Vector Rotate Left Halfword */
4206 case 196: /* Vector Rotate Left Doubleword */
4207 case 260: /* Vector Shift Left Byte */
4208 case 388: /* Vector Shift Left Word */
4209 case 324: /* Vector Shift Left Halfword */
4210 case 1476: /* Vector Shift Left Doubleword */
4211 case 516: /* Vector Shift Right Byte */
4212 case 644: /* Vector Shift Right Word */
4213 case 580: /* Vector Shift Right Halfword */
4214 case 1732: /* Vector Shift Right Doubleword */
4215 case 772: /* Vector Shift Right Algebraic Byte */
4216 case 900: /* Vector Shift Right Algebraic Word */
4217 case 836: /* Vector Shift Right Algebraic Halfword */
4218 case 964: /* Vector Shift Right Algebraic Doubleword */
4219 case 10: /* Vector Add Single-Precision */
4220 case 74: /* Vector Subtract Single-Precision */
4221 case 1034: /* Vector Maximum Single-Precision */
4222 case 1098: /* Vector Minimum Single-Precision */
4223 case 842: /* Vector Convert From Signed Fixed-Point Word */
4224 case 778: /* Vector Convert From Unsigned Fixed-Point Word */
4225 case 714: /* Vector Round to Single-Precision Integer toward -Infinity */
4226 case 522: /* Vector Round to Single-Precision Integer Nearest */
4227 case 650: /* Vector Round to Single-Precision Integer toward +Infinity */
4228 case 586: /* Vector Round to Single-Precision Integer toward Zero */
4229 case 394: /* Vector 2 Raised to the Exponent Estimate Floating-Point */
4230 case 458: /* Vector Log Base 2 Estimate Floating-Point */
4231 case 266: /* Vector Reciprocal Estimate Single-Precision */
4232 case 330: /* Vector Reciprocal Square Root Estimate Single-Precision */
4233 case 1288: /* Vector AES Cipher */
4234 case 1289: /* Vector AES Cipher Last */
4235 case 1352: /* Vector AES Inverse Cipher */
4236 case 1353: /* Vector AES Inverse Cipher Last */
4237 case 1480: /* Vector AES SubBytes */
4238 case 1730: /* Vector SHA-512 Sigma Doubleword */
4239 case 1666: /* Vector SHA-256 Sigma Word */
4240 case 1032: /* Vector Polynomial Multiply-Sum Byte */
4241 case 1160: /* Vector Polynomial Multiply-Sum Word */
4242 case 1096: /* Vector Polynomial Multiply-Sum Halfword */
4243 case 1224: /* Vector Polynomial Multiply-Sum Doubleword */
4244 case 1292: /* Vector Gather Bits by Bytes by Doubleword */
4245 case 1794: /* Vector Count Leading Zeros Byte */
4246 case 1858: /* Vector Count Leading Zeros Halfword */
4247 case 1922: /* Vector Count Leading Zeros Word */
4248 case 1986: /* Vector Count Leading Zeros Doubleword */
4249 case 1795: /* Vector Population Count Byte */
4250 case 1859: /* Vector Population Count Halfword */
4251 case 1923: /* Vector Population Count Word */
4252 case 1987: /* Vector Population Count Doubleword */
4253 case 1356: /* Vector Bit Permute Quadword */
4254 case 1484: /* Vector Bit Permute Doubleword */
4255 case 513: /* Vector Multiply-by-10 Unsigned Quadword */
4256 case 1: /* Vector Multiply-by-10 & write Carry Unsigned
4258 case 577: /* Vector Multiply-by-10 Extended Unsigned Quadword */
4259 case 65: /* Vector Multiply-by-10 Extended & write Carry
4260 Unsigned Quadword */
4261 case 1027: /* Vector Absolute Difference Unsigned Byte */
4262 case 1091: /* Vector Absolute Difference Unsigned Halfword */
4263 case 1155: /* Vector Absolute Difference Unsigned Word */
4264 case 1796: /* Vector Shift Right Variable */
4265 case 1860: /* Vector Shift Left Variable */
4266 case 133: /* Vector Rotate Left Word then Mask Insert */
4267 case 197: /* Vector Rotate Left Doubleword then Mask Insert */
4268 case 389: /* Vector Rotate Left Word then AND with Mask */
4269 case 453: /* Vector Rotate Left Doubleword then AND with Mask */
4270 case 525: /* Vector Extract Unsigned Byte */
4271 case 589: /* Vector Extract Unsigned Halfword */
4272 case 653: /* Vector Extract Unsigned Word */
4273 case 717: /* Vector Extract Doubleword */
4274 case 781: /* Vector Insert Byte */
4275 case 845: /* Vector Insert Halfword */
4276 case 909: /* Vector Insert Word */
4277 case 973: /* Vector Insert Doubleword */
4278 record_full_arch_list_add_reg (regcache,
4279 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4282 case 1549: /* Vector Extract Unsigned Byte Left-Indexed */
4283 case 1613: /* Vector Extract Unsigned Halfword Left-Indexed */
4284 case 1677: /* Vector Extract Unsigned Word Left-Indexed */
4285 case 1805: /* Vector Extract Unsigned Byte Right-Indexed */
4286 case 1869: /* Vector Extract Unsigned Halfword Right-Indexed */
4287 case 1933: /* Vector Extract Unsigned Word Right-Indexed */
4288 record_full_arch_list_add_reg (regcache,
4289 tdep->ppc_gp0_regnum + PPC_RT (insn));
4292 case 1604: /* Move To Vector Status and Control Register */
4293 record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
4295 case 1540: /* Move From Vector Status and Control Register */
4296 record_full_arch_list_add_reg (regcache,
4297 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4299 case 833: /* Decimal Copy Sign */
4300 record_full_arch_list_add_reg (regcache,
4301 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4302 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4306 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4307 "at %s, 4-%d.\n", insn, paddress (gdbarch, addr), ext);
4311 /* Parse and record instructions of primary opcode-19 at ADDR.
4312 Return 0 if successful. */
4315 ppc_process_record_op19 (struct gdbarch *gdbarch, struct regcache *regcache,
4316 CORE_ADDR addr, uint32_t insn)
4318 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4319 int ext = PPC_EXTOP (insn);
4321 switch (ext & 0x01f)
4323 case 2: /* Add PC Immediate Shifted */
4324 record_full_arch_list_add_reg (regcache,
4325 tdep->ppc_gp0_regnum + PPC_RT (insn));
4331 case 0: /* Move Condition Register Field */
4332 case 33: /* Condition Register NOR */
4333 case 129: /* Condition Register AND with Complement */
4334 case 193: /* Condition Register XOR */
4335 case 225: /* Condition Register NAND */
4336 case 257: /* Condition Register AND */
4337 case 289: /* Condition Register Equivalent */
4338 case 417: /* Condition Register OR with Complement */
4339 case 449: /* Condition Register OR */
4340 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4343 case 16: /* Branch Conditional */
4344 case 560: /* Branch Conditional to Branch Target Address Register */
4345 if ((PPC_BO (insn) & 0x4) == 0)
4346 record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
4348 case 528: /* Branch Conditional to Count Register */
4350 record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
4353 case 150: /* Instruction Synchronize */
4358 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4359 "at %s, 19-%d.\n", insn, paddress (gdbarch, addr), ext);
4363 /* Parse and record instructions of primary opcode-31 at ADDR.
4364 Return 0 if successful. */
4367 ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
4368 CORE_ADDR addr, uint32_t insn)
4370 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4371 int ext = PPC_EXTOP (insn);
4373 CORE_ADDR at_dcsz, ea = 0;
4374 ULONGEST rb, ra, xer;
4377 /* These instructions have OE bit. */
4378 switch (ext & 0x1ff)
4380 /* These write RT and XER. Update CR if RC is set. */
4381 case 8: /* Subtract from carrying */
4382 case 10: /* Add carrying */
4383 case 136: /* Subtract from extended */
4384 case 138: /* Add extended */
4385 case 200: /* Subtract from zero extended */
4386 case 202: /* Add to zero extended */
4387 case 232: /* Subtract from minus one extended */
4388 case 234: /* Add to minus one extended */
4389 /* CA is always altered, but SO/OV are only altered when OE=1.
4390 In any case, XER is always altered. */
4391 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4393 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4394 record_full_arch_list_add_reg (regcache,
4395 tdep->ppc_gp0_regnum + PPC_RT (insn));
4398 /* These write RT. Update CR if RC is set and update XER if OE is set. */
4399 case 40: /* Subtract from */
4400 case 104: /* Negate */
4401 case 233: /* Multiply low doubleword */
4402 case 235: /* Multiply low word */
4404 case 393: /* Divide Doubleword Extended Unsigned */
4405 case 395: /* Divide Word Extended Unsigned */
4406 case 425: /* Divide Doubleword Extended */
4407 case 427: /* Divide Word Extended */
4408 case 457: /* Divide Doubleword Unsigned */
4409 case 459: /* Divide Word Unsigned */
4410 case 489: /* Divide Doubleword */
4411 case 491: /* Divide Word */
4413 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4415 case 9: /* Multiply High Doubleword Unsigned */
4416 case 11: /* Multiply High Word Unsigned */
4417 case 73: /* Multiply High Doubleword */
4418 case 75: /* Multiply High Word */
4420 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4421 record_full_arch_list_add_reg (regcache,
4422 tdep->ppc_gp0_regnum + PPC_RT (insn));
4426 if ((ext & 0x1f) == 15)
4428 /* Integer Select. bit[16:20] is used for BC. */
4429 record_full_arch_list_add_reg (regcache,
4430 tdep->ppc_gp0_regnum + PPC_RT (insn));
4434 if ((ext & 0xff) == 170)
4436 /* Add Extended using alternate carry bits */
4437 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4438 record_full_arch_list_add_reg (regcache,
4439 tdep->ppc_gp0_regnum + PPC_RT (insn));
4445 case 78: /* Determine Leftmost Zero Byte */
4447 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4448 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4449 record_full_arch_list_add_reg (regcache,
4450 tdep->ppc_gp0_regnum + PPC_RT (insn));
4453 /* These only write RT. */
4454 case 19: /* Move from condition register */
4455 /* Move From One Condition Register Field */
4456 case 74: /* Add and Generate Sixes */
4457 case 74 | 0x200: /* Add and Generate Sixes (bit-21 dont-care) */
4458 case 302: /* Move From Branch History Rolling Buffer */
4459 case 339: /* Move From Special Purpose Register */
4460 case 371: /* Move From Time Base [Phased-Out] */
4461 case 309: /* Load Doubleword Monitored Indexed */
4462 case 128: /* Set Boolean */
4463 case 755: /* Deliver A Random Number */
4464 record_full_arch_list_add_reg (regcache,
4465 tdep->ppc_gp0_regnum + PPC_RT (insn));
4468 /* These only write to RA. */
4469 case 51: /* Move From VSR Doubleword */
4470 case 115: /* Move From VSR Word and Zero */
4471 case 122: /* Population count bytes */
4472 case 378: /* Population count words */
4473 case 506: /* Population count doublewords */
4474 case 154: /* Parity Word */
4475 case 186: /* Parity Doubleword */
4476 case 252: /* Bit Permute Doubleword */
4477 case 282: /* Convert Declets To Binary Coded Decimal */
4478 case 314: /* Convert Binary Coded Decimal To Declets */
4479 case 508: /* Compare bytes */
4480 case 307: /* Move From VSR Lower Doubleword */
4481 record_full_arch_list_add_reg (regcache,
4482 tdep->ppc_gp0_regnum + PPC_RA (insn));
4485 /* These write CR and optional RA. */
4486 case 792: /* Shift Right Algebraic Word */
4487 case 794: /* Shift Right Algebraic Doubleword */
4488 case 824: /* Shift Right Algebraic Word Immediate */
4489 case 826: /* Shift Right Algebraic Doubleword Immediate (413) */
4490 case 826 | 1: /* Shift Right Algebraic Doubleword Immediate (413) */
4491 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4492 record_full_arch_list_add_reg (regcache,
4493 tdep->ppc_gp0_regnum + PPC_RA (insn));
4495 case 0: /* Compare */
4496 case 32: /* Compare logical */
4497 case 144: /* Move To Condition Register Fields */
4498 /* Move To One Condition Register Field */
4499 case 192: /* Compare Ranged Byte */
4500 case 224: /* Compare Equal Byte */
4501 case 576: /* Move XER to CR Extended */
4502 case 902: /* Paste (should always fail due to single-stepping and
4503 the memory location might not be accessible, so
4505 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4508 /* These write to RT. Update RA if 'update indexed.' */
4509 case 53: /* Load Doubleword with Update Indexed */
4510 case 119: /* Load Byte and Zero with Update Indexed */
4511 case 311: /* Load Halfword and Zero with Update Indexed */
4512 case 55: /* Load Word and Zero with Update Indexed */
4513 case 375: /* Load Halfword Algebraic with Update Indexed */
4514 case 373: /* Load Word Algebraic with Update Indexed */
4515 record_full_arch_list_add_reg (regcache,
4516 tdep->ppc_gp0_regnum + PPC_RA (insn));
4518 case 21: /* Load Doubleword Indexed */
4519 case 52: /* Load Byte And Reserve Indexed */
4520 case 116: /* Load Halfword And Reserve Indexed */
4521 case 20: /* Load Word And Reserve Indexed */
4522 case 84: /* Load Doubleword And Reserve Indexed */
4523 case 87: /* Load Byte and Zero Indexed */
4524 case 279: /* Load Halfword and Zero Indexed */
4525 case 23: /* Load Word and Zero Indexed */
4526 case 343: /* Load Halfword Algebraic Indexed */
4527 case 341: /* Load Word Algebraic Indexed */
4528 case 790: /* Load Halfword Byte-Reverse Indexed */
4529 case 534: /* Load Word Byte-Reverse Indexed */
4530 case 532: /* Load Doubleword Byte-Reverse Indexed */
4531 case 582: /* Load Word Atomic */
4532 case 614: /* Load Doubleword Atomic */
4533 case 265: /* Modulo Unsigned Doubleword */
4534 case 777: /* Modulo Signed Doubleword */
4535 case 267: /* Modulo Unsigned Word */
4536 case 779: /* Modulo Signed Word */
4537 record_full_arch_list_add_reg (regcache,
4538 tdep->ppc_gp0_regnum + PPC_RT (insn));
4541 case 597: /* Load String Word Immediate */
4542 case 533: /* Load String Word Indexed */
4551 regcache_raw_read_unsigned (regcache, tdep->ppc_xer_regnum, &xer);
4552 nr = PPC_XER_NB (xer);
4557 /* If n=0, the contents of register RT are undefined. */
4561 for (i = 0; i < nr; i++)
4562 record_full_arch_list_add_reg (regcache,
4563 tdep->ppc_gp0_regnum
4564 + ((PPC_RT (insn) + i) & 0x1f));
4567 case 276: /* Load Quadword And Reserve Indexed */
4568 tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn) & ~1);
4569 record_full_arch_list_add_reg (regcache, tmp);
4570 record_full_arch_list_add_reg (regcache, tmp + 1);
4573 /* These write VRT. */
4574 case 6: /* Load Vector for Shift Left Indexed */
4575 case 38: /* Load Vector for Shift Right Indexed */
4576 case 7: /* Load Vector Element Byte Indexed */
4577 case 39: /* Load Vector Element Halfword Indexed */
4578 case 71: /* Load Vector Element Word Indexed */
4579 case 103: /* Load Vector Indexed */
4580 case 359: /* Load Vector Indexed LRU */
4581 record_full_arch_list_add_reg (regcache,
4582 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4585 /* These write FRT. Update RA if 'update indexed.' */
4586 case 567: /* Load Floating-Point Single with Update Indexed */
4587 case 631: /* Load Floating-Point Double with Update Indexed */
4588 record_full_arch_list_add_reg (regcache,
4589 tdep->ppc_gp0_regnum + PPC_RA (insn));
4591 case 535: /* Load Floating-Point Single Indexed */
4592 case 599: /* Load Floating-Point Double Indexed */
4593 case 855: /* Load Floating-Point as Integer Word Algebraic Indexed */
4594 case 887: /* Load Floating-Point as Integer Word and Zero Indexed */
4595 record_full_arch_list_add_reg (regcache,
4596 tdep->ppc_fp0_regnum + PPC_FRT (insn));
4599 case 791: /* Load Floating-Point Double Pair Indexed */
4600 tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
4601 record_full_arch_list_add_reg (regcache, tmp);
4602 record_full_arch_list_add_reg (regcache, tmp + 1);
4605 case 179: /* Move To VSR Doubleword */
4606 case 211: /* Move To VSR Word Algebraic */
4607 case 243: /* Move To VSR Word and Zero */
4608 case 588: /* Load VSX Scalar Doubleword Indexed */
4609 case 524: /* Load VSX Scalar Single-Precision Indexed */
4610 case 76: /* Load VSX Scalar as Integer Word Algebraic Indexed */
4611 case 12: /* Load VSX Scalar as Integer Word and Zero Indexed */
4612 case 844: /* Load VSX Vector Doubleword*2 Indexed */
4613 case 332: /* Load VSX Vector Doubleword & Splat Indexed */
4614 case 780: /* Load VSX Vector Word*4 Indexed */
4615 case 268: /* Load VSX Vector Indexed */
4616 case 364: /* Load VSX Vector Word & Splat Indexed */
4617 case 812: /* Load VSX Vector Halfword*8 Indexed */
4618 case 876: /* Load VSX Vector Byte*16 Indexed */
4619 case 269: /* Load VSX Vector with Length */
4620 case 301: /* Load VSX Vector Left-justified with Length */
4621 case 781: /* Load VSX Scalar as Integer Byte & Zero Indexed */
4622 case 813: /* Load VSX Scalar as Integer Halfword & Zero Indexed */
4623 case 403: /* Move To VSR Word & Splat */
4624 case 435: /* Move To VSR Double Doubleword */
4625 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
4628 /* These write RA. Update CR if RC is set. */
4629 case 24: /* Shift Left Word */
4630 case 26: /* Count Leading Zeros Word */
4631 case 27: /* Shift Left Doubleword */
4633 case 58: /* Count Leading Zeros Doubleword */
4634 case 60: /* AND with Complement */
4636 case 284: /* Equivalent */
4638 case 476: /* NAND */
4639 case 412: /* OR with Complement */
4641 case 536: /* Shift Right Word */
4642 case 539: /* Shift Right Doubleword */
4643 case 922: /* Extend Sign Halfword */
4644 case 954: /* Extend Sign Byte */
4645 case 986: /* Extend Sign Word */
4646 case 538: /* Count Trailing Zeros Word */
4647 case 570: /* Count Trailing Zeros Doubleword */
4648 case 890: /* Extend-Sign Word and Shift Left Immediate (445) */
4649 case 890 | 1: /* Extend-Sign Word and Shift Left Immediate (445) */
4651 if (ext == 444 && tdep->ppc_ppr_regnum >= 0
4652 && (PPC_RS (insn) == PPC_RA (insn))
4653 && (PPC_RA (insn) == PPC_RB (insn))
4656 /* or Rx,Rx,Rx alters PRI in PPR. */
4657 record_full_arch_list_add_reg (regcache, tdep->ppc_ppr_regnum);
4662 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4663 record_full_arch_list_add_reg (regcache,
4664 tdep->ppc_gp0_regnum + PPC_RA (insn));
4668 case 181: /* Store Doubleword with Update Indexed */
4669 case 183: /* Store Word with Update Indexed */
4670 case 247: /* Store Byte with Update Indexed */
4671 case 439: /* Store Half Word with Update Indexed */
4672 case 695: /* Store Floating-Point Single with Update Indexed */
4673 case 759: /* Store Floating-Point Double with Update Indexed */
4674 record_full_arch_list_add_reg (regcache,
4675 tdep->ppc_gp0_regnum + PPC_RA (insn));
4677 case 135: /* Store Vector Element Byte Indexed */
4678 case 167: /* Store Vector Element Halfword Indexed */
4679 case 199: /* Store Vector Element Word Indexed */
4680 case 231: /* Store Vector Indexed */
4681 case 487: /* Store Vector Indexed LRU */
4682 case 716: /* Store VSX Scalar Doubleword Indexed */
4683 case 140: /* Store VSX Scalar as Integer Word Indexed */
4684 case 652: /* Store VSX Scalar Single-Precision Indexed */
4685 case 972: /* Store VSX Vector Doubleword*2 Indexed */
4686 case 908: /* Store VSX Vector Word*4 Indexed */
4687 case 149: /* Store Doubleword Indexed */
4688 case 151: /* Store Word Indexed */
4689 case 215: /* Store Byte Indexed */
4690 case 407: /* Store Half Word Indexed */
4691 case 694: /* Store Byte Conditional Indexed */
4692 case 726: /* Store Halfword Conditional Indexed */
4693 case 150: /* Store Word Conditional Indexed */
4694 case 214: /* Store Doubleword Conditional Indexed */
4695 case 182: /* Store Quadword Conditional Indexed */
4696 case 662: /* Store Word Byte-Reverse Indexed */
4697 case 918: /* Store Halfword Byte-Reverse Indexed */
4698 case 660: /* Store Doubleword Byte-Reverse Indexed */
4699 case 663: /* Store Floating-Point Single Indexed */
4700 case 727: /* Store Floating-Point Double Indexed */
4701 case 919: /* Store Floating-Point Double Pair Indexed */
4702 case 983: /* Store Floating-Point as Integer Word Indexed */
4703 case 396: /* Store VSX Vector Indexed */
4704 case 940: /* Store VSX Vector Halfword*8 Indexed */
4705 case 1004: /* Store VSX Vector Byte*16 Indexed */
4706 case 909: /* Store VSX Scalar as Integer Byte Indexed */
4707 case 941: /* Store VSX Scalar as Integer Halfword Indexed */
4708 if (ext == 694 || ext == 726 || ext == 150 || ext == 214 || ext == 182)
4709 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4712 if (PPC_RA (insn) != 0)
4713 regcache_raw_read_unsigned (regcache,
4714 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4715 regcache_raw_read_unsigned (regcache,
4716 tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4721 case 183: /* Store Word with Update Indexed */
4722 case 199: /* Store Vector Element Word Indexed */
4723 case 140: /* Store VSX Scalar as Integer Word Indexed */
4724 case 652: /* Store VSX Scalar Single-Precision Indexed */
4725 case 151: /* Store Word Indexed */
4726 case 150: /* Store Word Conditional Indexed */
4727 case 662: /* Store Word Byte-Reverse Indexed */
4728 case 663: /* Store Floating-Point Single Indexed */
4729 case 695: /* Store Floating-Point Single with Update Indexed */
4730 case 983: /* Store Floating-Point as Integer Word Indexed */
4733 case 247: /* Store Byte with Update Indexed */
4734 case 135: /* Store Vector Element Byte Indexed */
4735 case 215: /* Store Byte Indexed */
4736 case 694: /* Store Byte Conditional Indexed */
4737 case 909: /* Store VSX Scalar as Integer Byte Indexed */
4740 case 439: /* Store Halfword with Update Indexed */
4741 case 167: /* Store Vector Element Halfword Indexed */
4742 case 407: /* Store Halfword Indexed */
4743 case 726: /* Store Halfword Conditional Indexed */
4744 case 918: /* Store Halfword Byte-Reverse Indexed */
4745 case 941: /* Store VSX Scalar as Integer Halfword Indexed */
4748 case 181: /* Store Doubleword with Update Indexed */
4749 case 716: /* Store VSX Scalar Doubleword Indexed */
4750 case 149: /* Store Doubleword Indexed */
4751 case 214: /* Store Doubleword Conditional Indexed */
4752 case 660: /* Store Doubleword Byte-Reverse Indexed */
4753 case 727: /* Store Floating-Point Double Indexed */
4754 case 759: /* Store Floating-Point Double with Update Indexed */
4757 case 972: /* Store VSX Vector Doubleword*2 Indexed */
4758 case 908: /* Store VSX Vector Word*4 Indexed */
4759 case 182: /* Store Quadword Conditional Indexed */
4760 case 231: /* Store Vector Indexed */
4761 case 487: /* Store Vector Indexed LRU */
4762 case 919: /* Store Floating-Point Double Pair Indexed */
4763 case 396: /* Store VSX Vector Indexed */
4764 case 940: /* Store VSX Vector Halfword*8 Indexed */
4765 case 1004: /* Store VSX Vector Byte*16 Indexed */
4772 /* Align address for Store Vector instructions. */
4775 case 167: /* Store Vector Element Halfword Indexed */
4776 addr = addr & ~0x1ULL;
4779 case 199: /* Store Vector Element Word Indexed */
4780 addr = addr & ~0x3ULL;
4783 case 231: /* Store Vector Indexed */
4784 case 487: /* Store Vector Indexed LRU */
4785 addr = addr & ~0xfULL;
4789 record_full_arch_list_add_mem (addr, size);
4792 case 397: /* Store VSX Vector with Length */
4793 case 429: /* Store VSX Vector Left-justified with Length */
4795 if (PPC_RA (insn) != 0)
4796 regcache_raw_read_unsigned (regcache,
4797 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4799 regcache_raw_read_unsigned (regcache,
4800 tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4801 /* Store up to 16 bytes. */
4802 nb = (rb & 0xff) > 16 ? 16 : (rb & 0xff);
4804 record_full_arch_list_add_mem (ea, nb);
4807 case 710: /* Store Word Atomic */
4808 case 742: /* Store Doubleword Atomic */
4810 if (PPC_RA (insn) != 0)
4811 regcache_raw_read_unsigned (regcache,
4812 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4816 case 710: /* Store Word Atomic */
4819 case 742: /* Store Doubleword Atomic */
4825 record_full_arch_list_add_mem (ea, size);
4828 case 725: /* Store String Word Immediate */
4830 if (PPC_RA (insn) != 0)
4831 regcache_raw_read_unsigned (regcache,
4832 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4839 record_full_arch_list_add_mem (ea, nb);
4843 case 661: /* Store String Word Indexed */
4845 if (PPC_RA (insn) != 0)
4846 regcache_raw_read_unsigned (regcache,
4847 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4850 regcache_raw_read_unsigned (regcache, tdep->ppc_xer_regnum, &xer);
4851 nb = PPC_XER_NB (xer);
4855 regcache_raw_read_unsigned (regcache,
4856 tdep->ppc_gp0_regnum + PPC_RB (insn),
4859 record_full_arch_list_add_mem (ea, nb);
4864 case 467: /* Move To Special Purpose Register */
4865 switch (PPC_SPR (insn))
4868 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4871 if (tdep->ppc_dscr_regnum >= 0)
4872 record_full_arch_list_add_reg (regcache, tdep->ppc_dscr_regnum);
4875 record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
4878 record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
4880 case 256: /* VRSAVE */
4881 record_full_arch_list_add_reg (regcache, tdep->ppc_vrsave_regnum);
4884 if (tdep->ppc_tar_regnum >= 0)
4885 record_full_arch_list_add_reg (regcache, tdep->ppc_tar_regnum);
4889 if (tdep->ppc_ppr_regnum >= 0)
4890 record_full_arch_list_add_reg (regcache, tdep->ppc_ppr_regnum);
4896 case 147: /* Move To Split Little Endian */
4897 record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
4900 case 512: /* Move to Condition Register from XER */
4901 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4902 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4905 case 4: /* Trap Word */
4906 case 68: /* Trap Doubleword */
4907 case 430: /* Clear BHRB */
4908 case 598: /* Synchronize */
4909 case 62: /* Wait for Interrupt */
4911 case 22: /* Instruction Cache Block Touch */
4912 case 854: /* Enforce In-order Execution of I/O */
4913 case 246: /* Data Cache Block Touch for Store */
4914 case 54: /* Data Cache Block Store */
4915 case 86: /* Data Cache Block Flush */
4916 case 278: /* Data Cache Block Touch */
4917 case 758: /* Data Cache Block Allocate */
4918 case 982: /* Instruction Cache Block Invalidate */
4919 case 774: /* Copy */
4920 case 838: /* CP_Abort */
4923 case 654: /* Transaction Begin */
4924 case 686: /* Transaction End */
4925 case 750: /* Transaction Suspend or Resume */
4926 case 782: /* Transaction Abort Word Conditional */
4927 case 814: /* Transaction Abort Doubleword Conditional */
4928 case 846: /* Transaction Abort Word Conditional Immediate */
4929 case 878: /* Transaction Abort Doubleword Conditional Immediate */
4930 case 910: /* Transaction Abort */
4931 record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
4933 case 718: /* Transaction Check */
4934 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4937 case 1014: /* Data Cache Block set to Zero */
4938 if (target_auxv_search (current_top_target (), AT_DCACHEBSIZE, &at_dcsz) <= 0
4940 at_dcsz = 128; /* Assume 128-byte cache line size (POWER8) */
4943 if (PPC_RA (insn) != 0)
4944 regcache_raw_read_unsigned (regcache,
4945 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4946 regcache_raw_read_unsigned (regcache,
4947 tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4948 ea = (ra + rb) & ~((ULONGEST) (at_dcsz - 1));
4949 record_full_arch_list_add_mem (ea, at_dcsz);
4954 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4955 "at %s, 31-%d.\n", insn, paddress (gdbarch, addr), ext);
4959 /* Parse and record instructions of primary opcode-59 at ADDR.
4960 Return 0 if successful. */
4963 ppc_process_record_op59 (struct gdbarch *gdbarch, struct regcache *regcache,
4964 CORE_ADDR addr, uint32_t insn)
4966 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4967 int ext = PPC_EXTOP (insn);
4971 case 18: /* Floating Divide */
4972 case 20: /* Floating Subtract */
4973 case 21: /* Floating Add */
4974 case 22: /* Floating Square Root */
4975 case 24: /* Floating Reciprocal Estimate */
4976 case 25: /* Floating Multiply */
4977 case 26: /* Floating Reciprocal Square Root Estimate */
4978 case 28: /* Floating Multiply-Subtract */
4979 case 29: /* Floating Multiply-Add */
4980 case 30: /* Floating Negative Multiply-Subtract */
4981 case 31: /* Floating Negative Multiply-Add */
4982 record_full_arch_list_add_reg (regcache,
4983 tdep->ppc_fp0_regnum + PPC_FRT (insn));
4985 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4986 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
4993 case 2: /* DFP Add */
4994 case 3: /* DFP Quantize */
4995 case 34: /* DFP Multiply */
4996 case 35: /* DFP Reround */
4997 case 67: /* DFP Quantize Immediate */
4998 case 99: /* DFP Round To FP Integer With Inexact */
4999 case 227: /* DFP Round To FP Integer Without Inexact */
5000 case 258: /* DFP Convert To DFP Long! */
5001 case 290: /* DFP Convert To Fixed */
5002 case 514: /* DFP Subtract */
5003 case 546: /* DFP Divide */
5004 case 770: /* DFP Round To DFP Short! */
5005 case 802: /* DFP Convert From Fixed */
5006 case 834: /* DFP Encode BCD To DPD */
5008 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5009 record_full_arch_list_add_reg (regcache,
5010 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5011 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5014 case 130: /* DFP Compare Ordered */
5015 case 162: /* DFP Test Exponent */
5016 case 194: /* DFP Test Data Class */
5017 case 226: /* DFP Test Data Group */
5018 case 642: /* DFP Compare Unordered */
5019 case 674: /* DFP Test Significance */
5020 case 675: /* DFP Test Significance Immediate */
5021 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5022 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5025 case 66: /* DFP Shift Significand Left Immediate */
5026 case 98: /* DFP Shift Significand Right Immediate */
5027 case 322: /* DFP Decode DPD To BCD */
5028 case 354: /* DFP Extract Biased Exponent */
5029 case 866: /* DFP Insert Biased Exponent */
5030 record_full_arch_list_add_reg (regcache,
5031 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5033 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5036 case 846: /* Floating Convert From Integer Doubleword Single */
5037 case 974: /* Floating Convert From Integer Doubleword Unsigned
5039 record_full_arch_list_add_reg (regcache,
5040 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5042 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5043 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5048 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5049 "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
5053 /* Parse and record instructions of primary opcode-60 at ADDR.
5054 Return 0 if successful. */
5057 ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
5058 CORE_ADDR addr, uint32_t insn)
5060 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5061 int ext = PPC_EXTOP (insn);
5065 case 0: /* VSX Scalar Add Single-Precision */
5066 case 32: /* VSX Scalar Add Double-Precision */
5067 case 24: /* VSX Scalar Divide Single-Precision */
5068 case 56: /* VSX Scalar Divide Double-Precision */
5069 case 176: /* VSX Scalar Copy Sign Double-Precision */
5070 case 33: /* VSX Scalar Multiply-Add Double-Precision */
5071 case 41: /* ditto */
5072 case 1: /* VSX Scalar Multiply-Add Single-Precision */
5074 case 160: /* VSX Scalar Maximum Double-Precision */
5075 case 168: /* VSX Scalar Minimum Double-Precision */
5076 case 49: /* VSX Scalar Multiply-Subtract Double-Precision */
5077 case 57: /* ditto */
5078 case 17: /* VSX Scalar Multiply-Subtract Single-Precision */
5079 case 25: /* ditto */
5080 case 48: /* VSX Scalar Multiply Double-Precision */
5081 case 16: /* VSX Scalar Multiply Single-Precision */
5082 case 161: /* VSX Scalar Negative Multiply-Add Double-Precision */
5083 case 169: /* ditto */
5084 case 129: /* VSX Scalar Negative Multiply-Add Single-Precision */
5085 case 137: /* ditto */
5086 case 177: /* VSX Scalar Negative Multiply-Subtract Double-Precision */
5087 case 185: /* ditto */
5088 case 145: /* VSX Scalar Negative Multiply-Subtract Single-Precision */
5089 case 153: /* ditto */
5090 case 40: /* VSX Scalar Subtract Double-Precision */
5091 case 8: /* VSX Scalar Subtract Single-Precision */
5092 case 96: /* VSX Vector Add Double-Precision */
5093 case 64: /* VSX Vector Add Single-Precision */
5094 case 120: /* VSX Vector Divide Double-Precision */
5095 case 88: /* VSX Vector Divide Single-Precision */
5096 case 97: /* VSX Vector Multiply-Add Double-Precision */
5097 case 105: /* ditto */
5098 case 65: /* VSX Vector Multiply-Add Single-Precision */
5099 case 73: /* ditto */
5100 case 224: /* VSX Vector Maximum Double-Precision */
5101 case 192: /* VSX Vector Maximum Single-Precision */
5102 case 232: /* VSX Vector Minimum Double-Precision */
5103 case 200: /* VSX Vector Minimum Single-Precision */
5104 case 113: /* VSX Vector Multiply-Subtract Double-Precision */
5105 case 121: /* ditto */
5106 case 81: /* VSX Vector Multiply-Subtract Single-Precision */
5107 case 89: /* ditto */
5108 case 112: /* VSX Vector Multiply Double-Precision */
5109 case 80: /* VSX Vector Multiply Single-Precision */
5110 case 225: /* VSX Vector Negative Multiply-Add Double-Precision */
5111 case 233: /* ditto */
5112 case 193: /* VSX Vector Negative Multiply-Add Single-Precision */
5113 case 201: /* ditto */
5114 case 241: /* VSX Vector Negative Multiply-Subtract Double-Precision */
5115 case 249: /* ditto */
5116 case 209: /* VSX Vector Negative Multiply-Subtract Single-Precision */
5117 case 217: /* ditto */
5118 case 104: /* VSX Vector Subtract Double-Precision */
5119 case 72: /* VSX Vector Subtract Single-Precision */
5120 case 128: /* VSX Scalar Maximum Type-C Double-Precision */
5121 case 136: /* VSX Scalar Minimum Type-C Double-Precision */
5122 case 144: /* VSX Scalar Maximum Type-J Double-Precision */
5123 case 152: /* VSX Scalar Minimum Type-J Double-Precision */
5124 case 3: /* VSX Scalar Compare Equal Double-Precision */
5125 case 11: /* VSX Scalar Compare Greater Than Double-Precision */
5126 case 19: /* VSX Scalar Compare Greater Than or Equal
5128 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5130 case 240: /* VSX Vector Copy Sign Double-Precision */
5131 case 208: /* VSX Vector Copy Sign Single-Precision */
5132 case 130: /* VSX Logical AND */
5133 case 138: /* VSX Logical AND with Complement */
5134 case 186: /* VSX Logical Equivalence */
5135 case 178: /* VSX Logical NAND */
5136 case 170: /* VSX Logical OR with Complement */
5137 case 162: /* VSX Logical NOR */
5138 case 146: /* VSX Logical OR */
5139 case 154: /* VSX Logical XOR */
5140 case 18: /* VSX Merge High Word */
5141 case 50: /* VSX Merge Low Word */
5142 case 10: /* VSX Permute Doubleword Immediate (DM=0) */
5143 case 10 | 0x20: /* VSX Permute Doubleword Immediate (DM=1) */
5144 case 10 | 0x40: /* VSX Permute Doubleword Immediate (DM=2) */
5145 case 10 | 0x60: /* VSX Permute Doubleword Immediate (DM=3) */
5146 case 2: /* VSX Shift Left Double by Word Immediate (SHW=0) */
5147 case 2 | 0x20: /* VSX Shift Left Double by Word Immediate (SHW=1) */
5148 case 2 | 0x40: /* VSX Shift Left Double by Word Immediate (SHW=2) */
5149 case 2 | 0x60: /* VSX Shift Left Double by Word Immediate (SHW=3) */
5150 case 216: /* VSX Vector Insert Exponent Single-Precision */
5151 case 248: /* VSX Vector Insert Exponent Double-Precision */
5152 case 26: /* VSX Vector Permute */
5153 case 58: /* VSX Vector Permute Right-indexed */
5154 case 213: /* VSX Vector Test Data Class Single-Precision (DC=0) */
5155 case 213 | 0x8: /* VSX Vector Test Data Class Single-Precision (DC=1) */
5156 case 245: /* VSX Vector Test Data Class Double-Precision (DC=0) */
5157 case 245 | 0x8: /* VSX Vector Test Data Class Double-Precision (DC=1) */
5158 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5161 case 61: /* VSX Scalar Test for software Divide Double-Precision */
5162 case 125: /* VSX Vector Test for software Divide Double-Precision */
5163 case 93: /* VSX Vector Test for software Divide Single-Precision */
5164 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5167 case 35: /* VSX Scalar Compare Unordered Double-Precision */
5168 case 43: /* VSX Scalar Compare Ordered Double-Precision */
5169 case 59: /* VSX Scalar Compare Exponents Double-Precision */
5170 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5171 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5175 switch ((ext >> 2) & 0x7f) /* Mask out Rc-bit. */
5177 case 99: /* VSX Vector Compare Equal To Double-Precision */
5178 case 67: /* VSX Vector Compare Equal To Single-Precision */
5179 case 115: /* VSX Vector Compare Greater Than or
5180 Equal To Double-Precision */
5181 case 83: /* VSX Vector Compare Greater Than or
5182 Equal To Single-Precision */
5183 case 107: /* VSX Vector Compare Greater Than Double-Precision */
5184 case 75: /* VSX Vector Compare Greater Than Single-Precision */
5186 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5187 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5188 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5194 case 265: /* VSX Scalar round Double-Precision to
5195 Single-Precision and Convert to
5196 Single-Precision format */
5197 case 344: /* VSX Scalar truncate Double-Precision to
5198 Integer and Convert to Signed Integer
5199 Doubleword format with Saturate */
5200 case 88: /* VSX Scalar truncate Double-Precision to
5201 Integer and Convert to Signed Integer Word
5202 Format with Saturate */
5203 case 328: /* VSX Scalar truncate Double-Precision integer
5204 and Convert to Unsigned Integer Doubleword
5205 Format with Saturate */
5206 case 72: /* VSX Scalar truncate Double-Precision to
5207 Integer and Convert to Unsigned Integer Word
5208 Format with Saturate */
5209 case 329: /* VSX Scalar Convert Single-Precision to
5210 Double-Precision format */
5211 case 376: /* VSX Scalar Convert Signed Integer
5212 Doubleword to floating-point format and
5213 Round to Double-Precision format */
5214 case 312: /* VSX Scalar Convert Signed Integer
5215 Doubleword to floating-point format and
5216 round to Single-Precision */
5217 case 360: /* VSX Scalar Convert Unsigned Integer
5218 Doubleword to floating-point format and
5219 Round to Double-Precision format */
5220 case 296: /* VSX Scalar Convert Unsigned Integer
5221 Doubleword to floating-point format and
5222 Round to Single-Precision */
5223 case 73: /* VSX Scalar Round to Double-Precision Integer
5224 Using Round to Nearest Away */
5225 case 107: /* VSX Scalar Round to Double-Precision Integer
5226 Exact using Current rounding mode */
5227 case 121: /* VSX Scalar Round to Double-Precision Integer
5228 Using Round toward -Infinity */
5229 case 105: /* VSX Scalar Round to Double-Precision Integer
5230 Using Round toward +Infinity */
5231 case 89: /* VSX Scalar Round to Double-Precision Integer
5232 Using Round toward Zero */
5233 case 90: /* VSX Scalar Reciprocal Estimate Double-Precision */
5234 case 26: /* VSX Scalar Reciprocal Estimate Single-Precision */
5235 case 281: /* VSX Scalar Round to Single-Precision */
5236 case 74: /* VSX Scalar Reciprocal Square Root Estimate
5238 case 10: /* VSX Scalar Reciprocal Square Root Estimate
5240 case 75: /* VSX Scalar Square Root Double-Precision */
5241 case 11: /* VSX Scalar Square Root Single-Precision */
5242 case 393: /* VSX Vector round Double-Precision to
5243 Single-Precision and Convert to
5244 Single-Precision format */
5245 case 472: /* VSX Vector truncate Double-Precision to
5246 Integer and Convert to Signed Integer
5247 Doubleword format with Saturate */
5248 case 216: /* VSX Vector truncate Double-Precision to
5249 Integer and Convert to Signed Integer Word
5250 Format with Saturate */
5251 case 456: /* VSX Vector truncate Double-Precision to
5252 Integer and Convert to Unsigned Integer
5253 Doubleword format with Saturate */
5254 case 200: /* VSX Vector truncate Double-Precision to
5255 Integer and Convert to Unsigned Integer Word
5256 Format with Saturate */
5257 case 457: /* VSX Vector Convert Single-Precision to
5258 Double-Precision format */
5259 case 408: /* VSX Vector truncate Single-Precision to
5260 Integer and Convert to Signed Integer
5261 Doubleword format with Saturate */
5262 case 152: /* VSX Vector truncate Single-Precision to
5263 Integer and Convert to Signed Integer Word
5264 Format with Saturate */
5265 case 392: /* VSX Vector truncate Single-Precision to
5266 Integer and Convert to Unsigned Integer
5267 Doubleword format with Saturate */
5268 case 136: /* VSX Vector truncate Single-Precision to
5269 Integer and Convert to Unsigned Integer Word
5270 Format with Saturate */
5271 case 504: /* VSX Vector Convert and round Signed Integer
5272 Doubleword to Double-Precision format */
5273 case 440: /* VSX Vector Convert and round Signed Integer
5274 Doubleword to Single-Precision format */
5275 case 248: /* VSX Vector Convert Signed Integer Word to
5276 Double-Precision format */
5277 case 184: /* VSX Vector Convert and round Signed Integer
5278 Word to Single-Precision format */
5279 case 488: /* VSX Vector Convert and round Unsigned
5280 Integer Doubleword to Double-Precision format */
5281 case 424: /* VSX Vector Convert and round Unsigned
5282 Integer Doubleword to Single-Precision format */
5283 case 232: /* VSX Vector Convert and round Unsigned
5284 Integer Word to Double-Precision format */
5285 case 168: /* VSX Vector Convert and round Unsigned
5286 Integer Word to Single-Precision format */
5287 case 201: /* VSX Vector Round to Double-Precision
5288 Integer using round to Nearest Away */
5289 case 235: /* VSX Vector Round to Double-Precision
5290 Integer Exact using Current rounding mode */
5291 case 249: /* VSX Vector Round to Double-Precision
5292 Integer using round toward -Infinity */
5293 case 233: /* VSX Vector Round to Double-Precision
5294 Integer using round toward +Infinity */
5295 case 217: /* VSX Vector Round to Double-Precision
5296 Integer using round toward Zero */
5297 case 218: /* VSX Vector Reciprocal Estimate Double-Precision */
5298 case 154: /* VSX Vector Reciprocal Estimate Single-Precision */
5299 case 137: /* VSX Vector Round to Single-Precision Integer
5300 Using Round to Nearest Away */
5301 case 171: /* VSX Vector Round to Single-Precision Integer
5302 Exact Using Current rounding mode */
5303 case 185: /* VSX Vector Round to Single-Precision Integer
5304 Using Round toward -Infinity */
5305 case 169: /* VSX Vector Round to Single-Precision Integer
5306 Using Round toward +Infinity */
5307 case 153: /* VSX Vector Round to Single-Precision Integer
5308 Using round toward Zero */
5309 case 202: /* VSX Vector Reciprocal Square Root Estimate
5311 case 138: /* VSX Vector Reciprocal Square Root Estimate
5313 case 203: /* VSX Vector Square Root Double-Precision */
5314 case 139: /* VSX Vector Square Root Single-Precision */
5315 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5317 case 345: /* VSX Scalar Absolute Value Double-Precision */
5318 case 267: /* VSX Scalar Convert Scalar Single-Precision to
5319 Vector Single-Precision format Non-signalling */
5320 case 331: /* VSX Scalar Convert Single-Precision to
5321 Double-Precision format Non-signalling */
5322 case 361: /* VSX Scalar Negative Absolute Value Double-Precision */
5323 case 377: /* VSX Scalar Negate Double-Precision */
5324 case 473: /* VSX Vector Absolute Value Double-Precision */
5325 case 409: /* VSX Vector Absolute Value Single-Precision */
5326 case 489: /* VSX Vector Negative Absolute Value Double-Precision */
5327 case 425: /* VSX Vector Negative Absolute Value Single-Precision */
5328 case 505: /* VSX Vector Negate Double-Precision */
5329 case 441: /* VSX Vector Negate Single-Precision */
5330 case 164: /* VSX Splat Word */
5331 case 165: /* VSX Vector Extract Unsigned Word */
5332 case 181: /* VSX Vector Insert Word */
5333 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5336 case 298: /* VSX Scalar Test Data Class Single-Precision */
5337 case 362: /* VSX Scalar Test Data Class Double-Precision */
5338 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5340 case 106: /* VSX Scalar Test for software Square Root
5342 case 234: /* VSX Vector Test for software Square Root
5344 case 170: /* VSX Vector Test for software Square Root
5346 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5350 switch (PPC_FIELD (insn, 11, 5))
5352 case 0: /* VSX Scalar Extract Exponent Double-Precision */
5353 case 1: /* VSX Scalar Extract Significand Double-Precision */
5354 record_full_arch_list_add_reg (regcache,
5355 tdep->ppc_gp0_regnum + PPC_RT (insn));
5357 case 16: /* VSX Scalar Convert Half-Precision format to
5358 Double-Precision format */
5359 case 17: /* VSX Scalar round & Convert Double-Precision format
5360 to Half-Precision format */
5361 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5362 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5368 switch (PPC_FIELD (insn, 11, 5))
5370 case 24: /* VSX Vector Convert Half-Precision format to
5371 Single-Precision format */
5372 case 25: /* VSX Vector round and Convert Single-Precision format
5373 to Half-Precision format */
5374 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5376 case 0: /* VSX Vector Extract Exponent Double-Precision */
5377 case 1: /* VSX Vector Extract Significand Double-Precision */
5378 case 7: /* VSX Vector Byte-Reverse Halfword */
5379 case 8: /* VSX Vector Extract Exponent Single-Precision */
5380 case 9: /* VSX Vector Extract Significand Single-Precision */
5381 case 15: /* VSX Vector Byte-Reverse Word */
5382 case 23: /* VSX Vector Byte-Reverse Doubleword */
5383 case 31: /* VSX Vector Byte-Reverse Quadword */
5384 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5392 case 360: /* VSX Vector Splat Immediate Byte */
5393 if (PPC_FIELD (insn, 11, 2) == 0)
5395 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5399 case 918: /* VSX Scalar Insert Exponent Double-Precision */
5400 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5404 if (((ext >> 3) & 0x3) == 3) /* VSX Select */
5406 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5410 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5411 "at %s, 60-%d.\n", insn, paddress (gdbarch, addr), ext);
5415 /* Parse and record instructions of primary opcode-61 at ADDR.
5416 Return 0 if successful. */
5419 ppc_process_record_op61 (struct gdbarch *gdbarch, struct regcache *regcache,
5420 CORE_ADDR addr, uint32_t insn)
5422 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5428 case 0: /* Store Floating-Point Double Pair */
5429 case 2: /* Store VSX Scalar Doubleword */
5430 case 3: /* Store VSX Scalar Single */
5431 if (PPC_RA (insn) != 0)
5432 regcache_raw_read_unsigned (regcache,
5433 tdep->ppc_gp0_regnum + PPC_RA (insn),
5435 ea += PPC_DS (insn) << 2;
5438 case 0: /* Store Floating-Point Double Pair */
5441 case 2: /* Store VSX Scalar Doubleword */
5444 case 3: /* Store VSX Scalar Single */
5450 record_full_arch_list_add_mem (ea, size);
5456 case 1: /* Load VSX Vector */
5457 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5459 case 5: /* Store VSX Vector */
5460 if (PPC_RA (insn) != 0)
5461 regcache_raw_read_unsigned (regcache,
5462 tdep->ppc_gp0_regnum + PPC_RA (insn),
5464 ea += PPC_DQ (insn) << 4;
5465 record_full_arch_list_add_mem (ea, 16);
5469 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5470 "at %s.\n", insn, paddress (gdbarch, addr));
5474 /* Parse and record instructions of primary opcode-63 at ADDR.
5475 Return 0 if successful. */
5478 ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
5479 CORE_ADDR addr, uint32_t insn)
5481 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5482 int ext = PPC_EXTOP (insn);
5487 case 18: /* Floating Divide */
5488 case 20: /* Floating Subtract */
5489 case 21: /* Floating Add */
5490 case 22: /* Floating Square Root */
5491 case 24: /* Floating Reciprocal Estimate */
5492 case 25: /* Floating Multiply */
5493 case 26: /* Floating Reciprocal Square Root Estimate */
5494 case 28: /* Floating Multiply-Subtract */
5495 case 29: /* Floating Multiply-Add */
5496 case 30: /* Floating Negative Multiply-Subtract */
5497 case 31: /* Floating Negative Multiply-Add */
5498 record_full_arch_list_add_reg (regcache,
5499 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5501 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5502 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5505 case 23: /* Floating Select */
5506 record_full_arch_list_add_reg (regcache,
5507 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5509 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5515 case 5: /* VSX Scalar Round to Quad-Precision Integer */
5516 case 37: /* VSX Scalar Round Quad-Precision to Double-Extended
5518 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5519 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5525 case 2: /* DFP Add Quad */
5526 case 3: /* DFP Quantize Quad */
5527 case 34: /* DFP Multiply Quad */
5528 case 35: /* DFP Reround Quad */
5529 case 67: /* DFP Quantize Immediate Quad */
5530 case 99: /* DFP Round To FP Integer With Inexact Quad */
5531 case 227: /* DFP Round To FP Integer Without Inexact Quad */
5532 case 258: /* DFP Convert To DFP Extended Quad */
5533 case 514: /* DFP Subtract Quad */
5534 case 546: /* DFP Divide Quad */
5535 case 770: /* DFP Round To DFP Long Quad */
5536 case 802: /* DFP Convert From Fixed Quad */
5537 case 834: /* DFP Encode BCD To DPD Quad */
5539 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5540 tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
5541 record_full_arch_list_add_reg (regcache, tmp);
5542 record_full_arch_list_add_reg (regcache, tmp + 1);
5543 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5546 case 130: /* DFP Compare Ordered Quad */
5547 case 162: /* DFP Test Exponent Quad */
5548 case 194: /* DFP Test Data Class Quad */
5549 case 226: /* DFP Test Data Group Quad */
5550 case 642: /* DFP Compare Unordered Quad */
5551 case 674: /* DFP Test Significance Quad */
5552 case 675: /* DFP Test Significance Immediate Quad */
5553 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5554 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5557 case 66: /* DFP Shift Significand Left Immediate Quad */
5558 case 98: /* DFP Shift Significand Right Immediate Quad */
5559 case 322: /* DFP Decode DPD To BCD Quad */
5560 case 866: /* DFP Insert Biased Exponent Quad */
5561 tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
5562 record_full_arch_list_add_reg (regcache, tmp);
5563 record_full_arch_list_add_reg (regcache, tmp + 1);
5565 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5568 case 290: /* DFP Convert To Fixed Quad */
5569 record_full_arch_list_add_reg (regcache,
5570 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5572 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5573 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5576 case 354: /* DFP Extract Biased Exponent Quad */
5577 record_full_arch_list_add_reg (regcache,
5578 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5580 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5583 case 12: /* Floating Round to Single-Precision */
5584 case 14: /* Floating Convert To Integer Word */
5585 case 15: /* Floating Convert To Integer Word
5586 with round toward Zero */
5587 case 142: /* Floating Convert To Integer Word Unsigned */
5588 case 143: /* Floating Convert To Integer Word Unsigned
5589 with round toward Zero */
5590 case 392: /* Floating Round to Integer Nearest */
5591 case 424: /* Floating Round to Integer Toward Zero */
5592 case 456: /* Floating Round to Integer Plus */
5593 case 488: /* Floating Round to Integer Minus */
5594 case 814: /* Floating Convert To Integer Doubleword */
5595 case 815: /* Floating Convert To Integer Doubleword
5596 with round toward Zero */
5597 case 846: /* Floating Convert From Integer Doubleword */
5598 case 942: /* Floating Convert To Integer Doubleword Unsigned */
5599 case 943: /* Floating Convert To Integer Doubleword Unsigned
5600 with round toward Zero */
5601 case 974: /* Floating Convert From Integer Doubleword Unsigned */
5602 record_full_arch_list_add_reg (regcache,
5603 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5605 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5606 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5610 switch (PPC_FIELD (insn, 11, 5))
5612 case 1: /* Move From FPSCR & Clear Enables */
5613 case 20: /* Move From FPSCR Control & set DRN */
5614 case 21: /* Move From FPSCR Control & set DRN Immediate */
5615 case 22: /* Move From FPSCR Control & set RN */
5616 case 23: /* Move From FPSCR Control & set RN Immediate */
5617 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5619 case 0: /* Move From FPSCR */
5620 case 24: /* Move From FPSCR Lightweight */
5621 if (PPC_FIELD (insn, 11, 5) == 0 && PPC_RC (insn))
5622 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5623 record_full_arch_list_add_reg (regcache,
5624 tdep->ppc_fp0_regnum
5630 case 8: /* Floating Copy Sign */
5631 case 40: /* Floating Negate */
5632 case 72: /* Floating Move Register */
5633 case 136: /* Floating Negative Absolute Value */
5634 case 264: /* Floating Absolute Value */
5635 record_full_arch_list_add_reg (regcache,
5636 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5638 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5641 case 838: /* Floating Merge Odd Word */
5642 case 966: /* Floating Merge Even Word */
5643 record_full_arch_list_add_reg (regcache,
5644 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5647 case 38: /* Move To FPSCR Bit 1 */
5648 case 70: /* Move To FPSCR Bit 0 */
5649 case 134: /* Move To FPSCR Field Immediate */
5650 case 711: /* Move To FPSCR Fields */
5652 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5653 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5656 case 0: /* Floating Compare Unordered */
5657 case 32: /* Floating Compare Ordered */
5658 case 64: /* Move to Condition Register from FPSCR */
5659 case 132: /* VSX Scalar Compare Ordered Quad-Precision */
5660 case 164: /* VSX Scalar Compare Exponents Quad-Precision */
5661 case 644: /* VSX Scalar Compare Unordered Quad-Precision */
5662 case 708: /* VSX Scalar Test Data Class Quad-Precision */
5663 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5665 case 128: /* Floating Test for software Divide */
5666 case 160: /* Floating Test for software Square Root */
5667 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5670 case 4: /* VSX Scalar Add Quad-Precision */
5671 case 36: /* VSX Scalar Multiply Quad-Precision */
5672 case 388: /* VSX Scalar Multiply-Add Quad-Precision */
5673 case 420: /* VSX Scalar Multiply-Subtract Quad-Precision */
5674 case 452: /* VSX Scalar Negative Multiply-Add Quad-Precision */
5675 case 484: /* VSX Scalar Negative Multiply-Subtract
5677 case 516: /* VSX Scalar Subtract Quad-Precision */
5678 case 548: /* VSX Scalar Divide Quad-Precision */
5679 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5681 case 100: /* VSX Scalar Copy Sign Quad-Precision */
5682 case 868: /* VSX Scalar Insert Exponent Quad-Precision */
5683 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5687 switch (PPC_FIELD (insn, 11, 5))
5689 case 27: /* VSX Scalar Square Root Quad-Precision */
5690 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5692 case 0: /* VSX Scalar Absolute Quad-Precision */
5693 case 2: /* VSX Scalar Extract Exponent Quad-Precision */
5694 case 8: /* VSX Scalar Negative Absolute Quad-Precision */
5695 case 16: /* VSX Scalar Negate Quad-Precision */
5696 case 18: /* VSX Scalar Extract Significand Quad-Precision */
5697 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5703 switch (PPC_FIELD (insn, 11, 5))
5705 case 1: /* VSX Scalar truncate & Convert Quad-Precision format
5706 to Unsigned Word format */
5707 case 2: /* VSX Scalar Convert Unsigned Doubleword format to
5708 Quad-Precision format */
5709 case 9: /* VSX Scalar truncate & Convert Quad-Precision format
5710 to Signed Word format */
5711 case 10: /* VSX Scalar Convert Signed Doubleword format to
5712 Quad-Precision format */
5713 case 17: /* VSX Scalar truncate & Convert Quad-Precision format
5714 to Unsigned Doubleword format */
5715 case 20: /* VSX Scalar round & Convert Quad-Precision format to
5716 Double-Precision format */
5717 case 22: /* VSX Scalar Convert Double-Precision format to
5718 Quad-Precision format */
5719 case 25: /* VSX Scalar truncate & Convert Quad-Precision format
5720 to Signed Doubleword format */
5721 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5722 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5727 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5728 "at %s, 63-%d.\n", insn, paddress (gdbarch, addr), ext);
5732 /* Parse the current instruction and record the values of the registers and
5733 memory that will be changed in current instruction to "record_arch_list".
5734 Return -1 if something wrong. */
5737 ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
5740 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5741 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5745 insn = read_memory_unsigned_integer (addr, 4, byte_order);
5746 op6 = PPC_OP6 (insn);
5750 case 2: /* Trap Doubleword Immediate */
5751 case 3: /* Trap Word Immediate */
5756 if (ppc_process_record_op4 (gdbarch, regcache, addr, insn) != 0)
5760 case 17: /* System call */
5761 if (PPC_LEV (insn) != 0)
5764 if (tdep->ppc_syscall_record != NULL)
5766 if (tdep->ppc_syscall_record (regcache) != 0)
5771 printf_unfiltered (_("no syscall record support\n"));
5776 case 7: /* Multiply Low Immediate */
5777 record_full_arch_list_add_reg (regcache,
5778 tdep->ppc_gp0_regnum + PPC_RT (insn));
5781 case 8: /* Subtract From Immediate Carrying */
5782 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
5783 record_full_arch_list_add_reg (regcache,
5784 tdep->ppc_gp0_regnum + PPC_RT (insn));
5787 case 10: /* Compare Logical Immediate */
5788 case 11: /* Compare Immediate */
5789 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5792 case 13: /* Add Immediate Carrying and Record */
5793 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5795 case 12: /* Add Immediate Carrying */
5796 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
5798 case 14: /* Add Immediate */
5799 case 15: /* Add Immediate Shifted */
5800 record_full_arch_list_add_reg (regcache,
5801 tdep->ppc_gp0_regnum + PPC_RT (insn));
5804 case 16: /* Branch Conditional */
5805 if ((PPC_BO (insn) & 0x4) == 0)
5806 record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
5808 case 18: /* Branch */
5810 record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
5814 if (ppc_process_record_op19 (gdbarch, regcache, addr, insn) != 0)
5818 case 20: /* Rotate Left Word Immediate then Mask Insert */
5819 case 21: /* Rotate Left Word Immediate then AND with Mask */
5820 case 23: /* Rotate Left Word then AND with Mask */
5821 case 30: /* Rotate Left Doubleword Immediate then Clear Left */
5822 /* Rotate Left Doubleword Immediate then Clear Right */
5823 /* Rotate Left Doubleword Immediate then Clear */
5824 /* Rotate Left Doubleword then Clear Left */
5825 /* Rotate Left Doubleword then Clear Right */
5826 /* Rotate Left Doubleword Immediate then Mask Insert */
5828 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5829 record_full_arch_list_add_reg (regcache,
5830 tdep->ppc_gp0_regnum + PPC_RA (insn));
5833 case 28: /* AND Immediate */
5834 case 29: /* AND Immediate Shifted */
5835 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5837 case 24: /* OR Immediate */
5838 case 25: /* OR Immediate Shifted */
5839 case 26: /* XOR Immediate */
5840 case 27: /* XOR Immediate Shifted */
5841 record_full_arch_list_add_reg (regcache,
5842 tdep->ppc_gp0_regnum + PPC_RA (insn));
5846 if (ppc_process_record_op31 (gdbarch, regcache, addr, insn) != 0)
5850 case 33: /* Load Word and Zero with Update */
5851 case 35: /* Load Byte and Zero with Update */
5852 case 41: /* Load Halfword and Zero with Update */
5853 case 43: /* Load Halfword Algebraic with Update */
5854 record_full_arch_list_add_reg (regcache,
5855 tdep->ppc_gp0_regnum + PPC_RA (insn));
5857 case 32: /* Load Word and Zero */
5858 case 34: /* Load Byte and Zero */
5859 case 40: /* Load Halfword and Zero */
5860 case 42: /* Load Halfword Algebraic */
5861 record_full_arch_list_add_reg (regcache,
5862 tdep->ppc_gp0_regnum + PPC_RT (insn));
5865 case 46: /* Load Multiple Word */
5866 for (i = PPC_RT (insn); i < 32; i++)
5867 record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum + i);
5870 case 56: /* Load Quadword */
5871 tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn) & ~1);
5872 record_full_arch_list_add_reg (regcache, tmp);
5873 record_full_arch_list_add_reg (regcache, tmp + 1);
5876 case 49: /* Load Floating-Point Single with Update */
5877 case 51: /* Load Floating-Point Double with Update */
5878 record_full_arch_list_add_reg (regcache,
5879 tdep->ppc_gp0_regnum + PPC_RA (insn));
5881 case 48: /* Load Floating-Point Single */
5882 case 50: /* Load Floating-Point Double */
5883 record_full_arch_list_add_reg (regcache,
5884 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5887 case 47: /* Store Multiple Word */
5891 if (PPC_RA (insn) != 0)
5892 regcache_raw_read_unsigned (regcache,
5893 tdep->ppc_gp0_regnum + PPC_RA (insn),
5896 iaddr += PPC_D (insn);
5897 record_full_arch_list_add_mem (iaddr, 4 * (32 - PPC_RS (insn)));
5901 case 37: /* Store Word with Update */
5902 case 39: /* Store Byte with Update */
5903 case 45: /* Store Halfword with Update */
5904 case 53: /* Store Floating-Point Single with Update */
5905 case 55: /* Store Floating-Point Double with Update */
5906 record_full_arch_list_add_reg (regcache,
5907 tdep->ppc_gp0_regnum + PPC_RA (insn));
5909 case 36: /* Store Word */
5910 case 38: /* Store Byte */
5911 case 44: /* Store Halfword */
5912 case 52: /* Store Floating-Point Single */
5913 case 54: /* Store Floating-Point Double */
5918 if (PPC_RA (insn) != 0)
5919 regcache_raw_read_unsigned (regcache,
5920 tdep->ppc_gp0_regnum + PPC_RA (insn),
5922 iaddr += PPC_D (insn);
5924 if (op6 == 36 || op6 == 37 || op6 == 52 || op6 == 53)
5926 else if (op6 == 54 || op6 == 55)
5928 else if (op6 == 44 || op6 == 45)
5930 else if (op6 == 38 || op6 == 39)
5935 record_full_arch_list_add_mem (iaddr, size);
5942 case 0: /* Load Floating-Point Double Pair */
5943 tmp = tdep->ppc_fp0_regnum + (PPC_RT (insn) & ~1);
5944 record_full_arch_list_add_reg (regcache, tmp);
5945 record_full_arch_list_add_reg (regcache, tmp + 1);
5947 case 2: /* Load VSX Scalar Doubleword */
5948 case 3: /* Load VSX Scalar Single */
5949 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5956 case 58: /* Load Doubleword */
5957 /* Load Doubleword with Update */
5958 /* Load Word Algebraic */
5959 if (PPC_FIELD (insn, 30, 2) > 2)
5962 record_full_arch_list_add_reg (regcache,
5963 tdep->ppc_gp0_regnum + PPC_RT (insn));
5964 if (PPC_BIT (insn, 31))
5965 record_full_arch_list_add_reg (regcache,
5966 tdep->ppc_gp0_regnum + PPC_RA (insn));
5970 if (ppc_process_record_op59 (gdbarch, regcache, addr, insn) != 0)
5975 if (ppc_process_record_op60 (gdbarch, regcache, addr, insn) != 0)
5980 if (ppc_process_record_op61 (gdbarch, regcache, addr, insn) != 0)
5984 case 62: /* Store Doubleword */
5985 /* Store Doubleword with Update */
5986 /* Store Quadword with Update */
5990 int sub2 = PPC_FIELD (insn, 30, 2);
5995 if (PPC_RA (insn) != 0)
5996 regcache_raw_read_unsigned (regcache,
5997 tdep->ppc_gp0_regnum + PPC_RA (insn),
6000 size = (sub2 == 2) ? 16 : 8;
6002 iaddr += PPC_DS (insn) << 2;
6003 record_full_arch_list_add_mem (iaddr, size);
6005 if (op6 == 62 && sub2 == 1)
6006 record_full_arch_list_add_reg (regcache,
6007 tdep->ppc_gp0_regnum +
6014 if (ppc_process_record_op63 (gdbarch, regcache, addr, insn) != 0)
6020 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
6021 "at %s, %d.\n", insn, paddress (gdbarch, addr), op6);
6025 if (record_full_arch_list_add_reg (regcache, PPC_PC_REGNUM))
6027 if (record_full_arch_list_add_end ())
6032 /* Initialize the current architecture based on INFO. If possible, re-use an
6033 architecture from ARCHES, which is a list of architectures already created
6034 during this debugging session.
6036 Called e.g. at program startup, when reading a core file, and when reading
6039 static struct gdbarch *
6040 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
6042 struct gdbarch *gdbarch;
6043 struct gdbarch_tdep *tdep;
6044 int wordsize, from_xcoff_exec, from_elf_exec;
6045 enum bfd_architecture arch;
6048 enum auto_boolean soft_float_flag = powerpc_soft_float_global;
6050 enum powerpc_long_double_abi long_double_abi = POWERPC_LONG_DOUBLE_AUTO;
6051 enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
6052 enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
6053 int have_fpu = 0, have_spe = 0, have_mq = 0, have_altivec = 0;
6054 int have_dfp = 0, have_vsx = 0, have_ppr = 0, have_dscr = 0;
6055 int have_tar = 0, have_ebb = 0, have_pmu = 0, have_htm_spr = 0;
6056 int have_htm_core = 0, have_htm_fpu = 0, have_htm_altivec = 0;
6057 int have_htm_vsx = 0, have_htm_ppr = 0, have_htm_dscr = 0;
6058 int have_htm_tar = 0;
6059 int tdesc_wordsize = -1;
6060 const struct target_desc *tdesc = info.target_desc;
6061 struct tdesc_arch_data *tdesc_data = NULL;
6062 int num_pseudoregs = 0;
6065 /* INFO may refer to a binary that is not of the PowerPC architecture,
6066 e.g. when debugging a stand-alone SPE executable on a Cell/B.E. system.
6067 In this case, we must not attempt to infer properties of the (PowerPC
6068 side) of the target system from properties of that executable. Trust
6069 the target description instead. */
6071 && bfd_get_arch (info.abfd) != bfd_arch_powerpc
6072 && bfd_get_arch (info.abfd) != bfd_arch_rs6000)
6075 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
6076 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
6078 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
6079 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
6081 /* Check word size. If INFO is from a binary file, infer it from
6082 that, else choose a likely default. */
6083 if (from_xcoff_exec)
6085 if (bfd_xcoff_is_xcoff64 (info.abfd))
6090 else if (from_elf_exec)
6092 if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6097 else if (tdesc_has_registers (tdesc))
6101 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
6102 wordsize = (info.bfd_arch_info->bits_per_word
6103 / info.bfd_arch_info->bits_per_byte);
6108 /* Get the architecture and machine from the BFD. */
6109 arch = info.bfd_arch_info->arch;
6110 mach = info.bfd_arch_info->mach;
6112 /* For e500 executables, the apuinfo section is of help here. Such
6113 section contains the identifier and revision number of each
6114 Application-specific Processing Unit that is present on the
6115 chip. The content of the section is determined by the assembler
6116 which looks at each instruction and determines which unit (and
6117 which version of it) can execute it. Grovel through the section
6118 looking for relevant e500 APUs. */
6120 if (bfd_uses_spe_extensions (info.abfd))
6122 arch = info.bfd_arch_info->arch;
6123 mach = bfd_mach_ppc_e500;
6124 bfd_default_set_arch_mach (&abfd, arch, mach);
6125 info.bfd_arch_info = bfd_get_arch_info (&abfd);
6128 /* Find a default target description which describes our register
6129 layout, if we do not already have one. */
6130 if (! tdesc_has_registers (tdesc))
6132 const struct variant *v;
6134 /* Choose variant. */
6135 v = find_variant_by_arch (arch, mach);
6142 gdb_assert (tdesc_has_registers (tdesc));
6144 /* Check any target description for validity. */
6145 if (tdesc_has_registers (tdesc))
6147 static const char *const gprs[] = {
6148 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
6149 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
6150 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
6151 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
6153 const struct tdesc_feature *feature;
6155 static const char *const msr_names[] = { "msr", "ps" };
6156 static const char *const cr_names[] = { "cr", "cnd" };
6157 static const char *const ctr_names[] = { "ctr", "cnt" };
6159 feature = tdesc_find_feature (tdesc,
6160 "org.gnu.gdb.power.core");
6161 if (feature == NULL)
6164 tdesc_data = tdesc_data_alloc ();
6167 for (i = 0; i < ppc_num_gprs; i++)
6168 valid_p &= tdesc_numbered_register (feature, tdesc_data, i, gprs[i]);
6169 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_PC_REGNUM,
6171 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_LR_REGNUM,
6173 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_XER_REGNUM,
6176 /* Allow alternate names for these registers, to accomodate GDB's
6178 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6179 PPC_MSR_REGNUM, msr_names);
6180 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6181 PPC_CR_REGNUM, cr_names);
6182 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6183 PPC_CTR_REGNUM, ctr_names);
6187 tdesc_data_cleanup (tdesc_data);
6191 have_mq = tdesc_numbered_register (feature, tdesc_data, PPC_MQ_REGNUM,
6194 tdesc_wordsize = tdesc_register_bitsize (feature, "pc") / 8;
6196 wordsize = tdesc_wordsize;
6198 feature = tdesc_find_feature (tdesc,
6199 "org.gnu.gdb.power.fpu");
6200 if (feature != NULL)
6202 static const char *const fprs[] = {
6203 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
6204 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
6205 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
6206 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
6209 for (i = 0; i < ppc_num_fprs; i++)
6210 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6211 PPC_F0_REGNUM + i, fprs[i]);
6212 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6213 PPC_FPSCR_REGNUM, "fpscr");
6217 tdesc_data_cleanup (tdesc_data);
6222 /* The fpscr register was expanded in isa 2.05 to 64 bits
6223 along with the addition of the decimal floating point
6225 if (tdesc_register_bitsize (feature, "fpscr") > 32)
6231 feature = tdesc_find_feature (tdesc,
6232 "org.gnu.gdb.power.altivec");
6233 if (feature != NULL)
6235 static const char *const vector_regs[] = {
6236 "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
6237 "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
6238 "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
6239 "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
6243 for (i = 0; i < ppc_num_gprs; i++)
6244 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6247 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6248 PPC_VSCR_REGNUM, "vscr");
6249 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6250 PPC_VRSAVE_REGNUM, "vrsave");
6252 if (have_spe || !valid_p)
6254 tdesc_data_cleanup (tdesc_data);
6262 /* Check for POWER7 VSX registers support. */
6263 feature = tdesc_find_feature (tdesc,
6264 "org.gnu.gdb.power.vsx");
6266 if (feature != NULL)
6268 static const char *const vsx_regs[] = {
6269 "vs0h", "vs1h", "vs2h", "vs3h", "vs4h", "vs5h",
6270 "vs6h", "vs7h", "vs8h", "vs9h", "vs10h", "vs11h",
6271 "vs12h", "vs13h", "vs14h", "vs15h", "vs16h", "vs17h",
6272 "vs18h", "vs19h", "vs20h", "vs21h", "vs22h", "vs23h",
6273 "vs24h", "vs25h", "vs26h", "vs27h", "vs28h", "vs29h",
6279 for (i = 0; i < ppc_num_vshrs; i++)
6280 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6281 PPC_VSR0_UPPER_REGNUM + i,
6284 if (!valid_p || !have_fpu || !have_altivec)
6286 tdesc_data_cleanup (tdesc_data);
6295 /* On machines supporting the SPE APU, the general-purpose registers
6296 are 64 bits long. There are SIMD vector instructions to treat them
6297 as pairs of floats, but the rest of the instruction set treats them
6298 as 32-bit registers, and only operates on their lower halves.
6300 In the GDB regcache, we treat their high and low halves as separate
6301 registers. The low halves we present as the general-purpose
6302 registers, and then we have pseudo-registers that stitch together
6303 the upper and lower halves and present them as pseudo-registers.
6305 Thus, the target description is expected to supply the upper
6306 halves separately. */
6308 feature = tdesc_find_feature (tdesc,
6309 "org.gnu.gdb.power.spe");
6310 if (feature != NULL)
6312 static const char *const upper_spe[] = {
6313 "ev0h", "ev1h", "ev2h", "ev3h",
6314 "ev4h", "ev5h", "ev6h", "ev7h",
6315 "ev8h", "ev9h", "ev10h", "ev11h",
6316 "ev12h", "ev13h", "ev14h", "ev15h",
6317 "ev16h", "ev17h", "ev18h", "ev19h",
6318 "ev20h", "ev21h", "ev22h", "ev23h",
6319 "ev24h", "ev25h", "ev26h", "ev27h",
6320 "ev28h", "ev29h", "ev30h", "ev31h"
6324 for (i = 0; i < ppc_num_gprs; i++)
6325 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6326 PPC_SPE_UPPER_GP0_REGNUM + i,
6328 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6329 PPC_SPE_ACC_REGNUM, "acc");
6330 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6331 PPC_SPE_FSCR_REGNUM, "spefscr");
6333 if (have_mq || have_fpu || !valid_p)
6335 tdesc_data_cleanup (tdesc_data);
6343 /* Program Priority Register. */
6344 feature = tdesc_find_feature (tdesc,
6345 "org.gnu.gdb.power.ppr");
6346 if (feature != NULL)
6349 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6350 PPC_PPR_REGNUM, "ppr");
6354 tdesc_data_cleanup (tdesc_data);
6362 /* Data Stream Control Register. */
6363 feature = tdesc_find_feature (tdesc,
6364 "org.gnu.gdb.power.dscr");
6365 if (feature != NULL)
6368 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6369 PPC_DSCR_REGNUM, "dscr");
6373 tdesc_data_cleanup (tdesc_data);
6381 /* Target Address Register. */
6382 feature = tdesc_find_feature (tdesc,
6383 "org.gnu.gdb.power.tar");
6384 if (feature != NULL)
6387 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6388 PPC_TAR_REGNUM, "tar");
6392 tdesc_data_cleanup (tdesc_data);
6400 /* Event-based Branching Registers. */
6401 feature = tdesc_find_feature (tdesc,
6402 "org.gnu.gdb.power.ebb");
6403 if (feature != NULL)
6405 static const char *const ebb_regs[] = {
6406 "bescr", "ebbhr", "ebbrr"
6410 for (i = 0; i < ARRAY_SIZE (ebb_regs); i++)
6411 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6412 PPC_BESCR_REGNUM + i,
6416 tdesc_data_cleanup (tdesc_data);
6424 /* Subset of the ISA 2.07 Performance Monitor Registers provided
6426 feature = tdesc_find_feature (tdesc,
6427 "org.gnu.gdb.power.linux.pmu");
6428 if (feature != NULL)
6432 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6435 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6438 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6441 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6444 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6450 tdesc_data_cleanup (tdesc_data);
6458 /* Hardware Transactional Memory Registers. */
6459 feature = tdesc_find_feature (tdesc,
6460 "org.gnu.gdb.power.htm.spr");
6461 if (feature != NULL)
6463 static const char *const tm_spr_regs[] = {
6464 "tfhar", "texasr", "tfiar"
6468 for (i = 0; i < ARRAY_SIZE (tm_spr_regs); i++)
6469 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6470 PPC_TFHAR_REGNUM + i,
6474 tdesc_data_cleanup (tdesc_data);
6483 feature = tdesc_find_feature (tdesc,
6484 "org.gnu.gdb.power.htm.core");
6485 if (feature != NULL)
6487 static const char *const cgprs[] = {
6488 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",
6489 "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14",
6490 "cr15", "cr16", "cr17", "cr18", "cr19", "cr20", "cr21",
6491 "cr22", "cr23", "cr24", "cr25", "cr26", "cr27", "cr28",
6492 "cr29", "cr30", "cr31", "ccr", "cxer", "clr", "cctr"
6497 for (i = 0; i < ARRAY_SIZE (cgprs); i++)
6498 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6503 tdesc_data_cleanup (tdesc_data);
6512 feature = tdesc_find_feature (tdesc,
6513 "org.gnu.gdb.power.htm.fpu");
6514 if (feature != NULL)
6518 static const char *const cfprs[] = {
6519 "cf0", "cf1", "cf2", "cf3", "cf4", "cf5", "cf6", "cf7",
6520 "cf8", "cf9", "cf10", "cf11", "cf12", "cf13", "cf14", "cf15",
6521 "cf16", "cf17", "cf18", "cf19", "cf20", "cf21", "cf22",
6522 "cf23", "cf24", "cf25", "cf26", "cf27", "cf28", "cf29",
6523 "cf30", "cf31", "cfpscr"
6526 for (i = 0; i < ARRAY_SIZE (cfprs); i++)
6527 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6533 tdesc_data_cleanup (tdesc_data);
6541 feature = tdesc_find_feature (tdesc,
6542 "org.gnu.gdb.power.htm.altivec");
6543 if (feature != NULL)
6547 static const char *const cvmx[] = {
6548 "cvr0", "cvr1", "cvr2", "cvr3", "cvr4", "cvr5", "cvr6",
6549 "cvr7", "cvr8", "cvr9", "cvr10", "cvr11", "cvr12", "cvr13",
6550 "cvr14", "cvr15","cvr16", "cvr17", "cvr18", "cvr19", "cvr20",
6551 "cvr21", "cvr22", "cvr23", "cvr24", "cvr25", "cvr26",
6552 "cvr27", "cvr28", "cvr29", "cvr30", "cvr31", "cvscr",
6556 for (i = 0; i < ARRAY_SIZE (cvmx); i++)
6557 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6558 PPC_CVR0_REGNUM + i,
6563 tdesc_data_cleanup (tdesc_data);
6566 have_htm_altivec = 1;
6569 have_htm_altivec = 0;
6571 feature = tdesc_find_feature (tdesc,
6572 "org.gnu.gdb.power.htm.vsx");
6573 if (feature != NULL)
6577 static const char *const cvsx[] = {
6578 "cvs0h", "cvs1h", "cvs2h", "cvs3h", "cvs4h", "cvs5h",
6579 "cvs6h", "cvs7h", "cvs8h", "cvs9h", "cvs10h", "cvs11h",
6580 "cvs12h", "cvs13h", "cvs14h", "cvs15h", "cvs16h", "cvs17h",
6581 "cvs18h", "cvs19h", "cvs20h", "cvs21h", "cvs22h", "cvs23h",
6582 "cvs24h", "cvs25h", "cvs26h", "cvs27h", "cvs28h", "cvs29h",
6586 for (i = 0; i < ARRAY_SIZE (cvsx); i++)
6587 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6588 (PPC_CVSR0_UPPER_REGNUM
6592 if (!valid_p || !have_htm_fpu || !have_htm_altivec)
6594 tdesc_data_cleanup (tdesc_data);
6602 feature = tdesc_find_feature (tdesc,
6603 "org.gnu.gdb.power.htm.ppr");
6604 if (feature != NULL)
6606 valid_p = tdesc_numbered_register (feature, tdesc_data,
6607 PPC_CPPR_REGNUM, "cppr");
6611 tdesc_data_cleanup (tdesc_data);
6619 feature = tdesc_find_feature (tdesc,
6620 "org.gnu.gdb.power.htm.dscr");
6621 if (feature != NULL)
6623 valid_p = tdesc_numbered_register (feature, tdesc_data,
6624 PPC_CDSCR_REGNUM, "cdscr");
6628 tdesc_data_cleanup (tdesc_data);
6636 feature = tdesc_find_feature (tdesc,
6637 "org.gnu.gdb.power.htm.tar");
6638 if (feature != NULL)
6640 valid_p = tdesc_numbered_register (feature, tdesc_data,
6641 PPC_CTAR_REGNUM, "ctar");
6645 tdesc_data_cleanup (tdesc_data);
6654 /* If we have a 64-bit binary on a 32-bit target, complain. Also
6655 complain for a 32-bit binary on a 64-bit target; we do not yet
6656 support that. For instance, the 32-bit ABI routines expect
6659 As long as there isn't an explicit target description, we'll
6660 choose one based on the BFD architecture and get a word size
6661 matching the binary (probably powerpc:common or
6662 powerpc:common64). So there is only trouble if a 64-bit target
6663 supplies a 64-bit description while debugging a 32-bit
6665 if (tdesc_wordsize != -1 && tdesc_wordsize != wordsize)
6667 tdesc_data_cleanup (tdesc_data);
6674 switch (elf_elfheader (info.abfd)->e_flags & EF_PPC64_ABI)
6677 elf_abi = POWERPC_ELF_V1;
6680 elf_abi = POWERPC_ELF_V2;
6687 if (soft_float_flag == AUTO_BOOLEAN_AUTO && from_elf_exec)
6689 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6690 Tag_GNU_Power_ABI_FP) & 3)
6693 soft_float_flag = AUTO_BOOLEAN_FALSE;
6696 soft_float_flag = AUTO_BOOLEAN_TRUE;
6703 if (long_double_abi == POWERPC_LONG_DOUBLE_AUTO && from_elf_exec)
6705 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6706 Tag_GNU_Power_ABI_FP) >> 2)
6709 long_double_abi = POWERPC_LONG_DOUBLE_IBM128;
6712 long_double_abi = POWERPC_LONG_DOUBLE_IEEE128;
6719 if (vector_abi == POWERPC_VEC_AUTO && from_elf_exec)
6721 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6722 Tag_GNU_Power_ABI_Vector))
6725 vector_abi = POWERPC_VEC_GENERIC;
6728 vector_abi = POWERPC_VEC_ALTIVEC;
6731 vector_abi = POWERPC_VEC_SPE;
6739 /* At this point, the only supported ELF-based 64-bit little-endian
6740 operating system is GNU/Linux, and this uses the ELFv2 ABI by
6741 default. All other supported ELF-based operating systems use the
6742 ELFv1 ABI by default. Therefore, if the ABI marker is missing,
6743 e.g. because we run a legacy binary, or have attached to a process
6744 and have not found any associated binary file, set the default
6745 according to this heuristic. */
6746 if (elf_abi == POWERPC_ELF_AUTO)
6748 if (wordsize == 8 && info.byte_order == BFD_ENDIAN_LITTLE)
6749 elf_abi = POWERPC_ELF_V2;
6751 elf_abi = POWERPC_ELF_V1;
6754 if (soft_float_flag == AUTO_BOOLEAN_TRUE)
6756 else if (soft_float_flag == AUTO_BOOLEAN_FALSE)
6759 soft_float = !have_fpu;
6761 /* If we have a hard float binary or setting but no floating point
6762 registers, downgrade to soft float anyway. We're still somewhat
6763 useful in this scenario. */
6764 if (!soft_float && !have_fpu)
6767 /* Similarly for vector registers. */
6768 if (vector_abi == POWERPC_VEC_ALTIVEC && !have_altivec)
6769 vector_abi = POWERPC_VEC_GENERIC;
6771 if (vector_abi == POWERPC_VEC_SPE && !have_spe)
6772 vector_abi = POWERPC_VEC_GENERIC;
6774 if (vector_abi == POWERPC_VEC_AUTO)
6777 vector_abi = POWERPC_VEC_ALTIVEC;
6779 vector_abi = POWERPC_VEC_SPE;
6781 vector_abi = POWERPC_VEC_GENERIC;
6784 /* Do not limit the vector ABI based on available hardware, since we
6785 do not yet know what hardware we'll decide we have. Yuck! FIXME! */
6787 /* Find a candidate among extant architectures. */
6788 for (arches = gdbarch_list_lookup_by_info (arches, &info);
6790 arches = gdbarch_list_lookup_by_info (arches->next, &info))
6792 /* Word size in the various PowerPC bfd_arch_info structs isn't
6793 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
6794 separate word size check. */
6795 tdep = gdbarch_tdep (arches->gdbarch);
6796 if (tdep && tdep->elf_abi != elf_abi)
6798 if (tdep && tdep->soft_float != soft_float)
6800 if (tdep && tdep->long_double_abi != long_double_abi)
6802 if (tdep && tdep->vector_abi != vector_abi)
6804 if (tdep && tdep->wordsize == wordsize)
6806 if (tdesc_data != NULL)
6807 tdesc_data_cleanup (tdesc_data);
6808 return arches->gdbarch;
6812 /* None found, create a new architecture from INFO, whose bfd_arch_info
6813 validity depends on the source:
6814 - executable useless
6815 - rs6000_host_arch() good
6817 - "set arch" trust blindly
6818 - GDB startup useless but harmless */
6820 tdep = XCNEW (struct gdbarch_tdep);
6821 tdep->wordsize = wordsize;
6822 tdep->elf_abi = elf_abi;
6823 tdep->soft_float = soft_float;
6824 tdep->long_double_abi = long_double_abi;
6825 tdep->vector_abi = vector_abi;
6827 gdbarch = gdbarch_alloc (&info, tdep);
6829 tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
6830 tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
6831 tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
6832 tdep->ppc_cr_regnum = PPC_CR_REGNUM;
6833 tdep->ppc_lr_regnum = PPC_LR_REGNUM;
6834 tdep->ppc_ctr_regnum = PPC_CTR_REGNUM;
6835 tdep->ppc_xer_regnum = PPC_XER_REGNUM;
6836 tdep->ppc_mq_regnum = have_mq ? PPC_MQ_REGNUM : -1;
6838 tdep->ppc_fp0_regnum = have_fpu ? PPC_F0_REGNUM : -1;
6839 tdep->ppc_fpscr_regnum = have_fpu ? PPC_FPSCR_REGNUM : -1;
6840 tdep->ppc_vsr0_upper_regnum = have_vsx ? PPC_VSR0_UPPER_REGNUM : -1;
6841 tdep->ppc_vr0_regnum = have_altivec ? PPC_VR0_REGNUM : -1;
6842 tdep->ppc_vrsave_regnum = have_altivec ? PPC_VRSAVE_REGNUM : -1;
6843 tdep->ppc_ev0_upper_regnum = have_spe ? PPC_SPE_UPPER_GP0_REGNUM : -1;
6844 tdep->ppc_acc_regnum = have_spe ? PPC_SPE_ACC_REGNUM : -1;
6845 tdep->ppc_spefscr_regnum = have_spe ? PPC_SPE_FSCR_REGNUM : -1;
6846 tdep->ppc_ppr_regnum = have_ppr ? PPC_PPR_REGNUM : -1;
6847 tdep->ppc_dscr_regnum = have_dscr ? PPC_DSCR_REGNUM : -1;
6848 tdep->ppc_tar_regnum = have_tar ? PPC_TAR_REGNUM : -1;
6849 tdep->have_ebb = have_ebb;
6851 /* If additional pmu registers are added, care must be taken when
6852 setting new fields in the tdep below, to maintain compatibility
6853 with features that only provide some of the registers. Currently
6854 gdb access to the pmu registers is only supported in linux, and
6855 linux only provides a subset of the pmu registers defined in the
6858 tdep->ppc_mmcr0_regnum = have_pmu ? PPC_MMCR0_REGNUM : -1;
6859 tdep->ppc_mmcr2_regnum = have_pmu ? PPC_MMCR2_REGNUM : -1;
6860 tdep->ppc_siar_regnum = have_pmu ? PPC_SIAR_REGNUM : -1;
6861 tdep->ppc_sdar_regnum = have_pmu ? PPC_SDAR_REGNUM : -1;
6862 tdep->ppc_sier_regnum = have_pmu ? PPC_SIER_REGNUM : -1;
6864 tdep->have_htm_spr = have_htm_spr;
6865 tdep->have_htm_core = have_htm_core;
6866 tdep->have_htm_fpu = have_htm_fpu;
6867 tdep->have_htm_altivec = have_htm_altivec;
6868 tdep->have_htm_vsx = have_htm_vsx;
6869 tdep->ppc_cppr_regnum = have_htm_ppr ? PPC_CPPR_REGNUM : -1;
6870 tdep->ppc_cdscr_regnum = have_htm_dscr ? PPC_CDSCR_REGNUM : -1;
6871 tdep->ppc_ctar_regnum = have_htm_tar ? PPC_CTAR_REGNUM : -1;
6873 set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
6874 set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
6875 set_gdbarch_fp0_regnum (gdbarch, tdep->ppc_fp0_regnum);
6876 set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
6878 /* The XML specification for PowerPC sensibly calls the MSR "msr".
6879 GDB traditionally called it "ps", though, so let GDB add an
6881 set_gdbarch_ps_regnum (gdbarch, tdep->ppc_ps_regnum);
6884 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
6886 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
6888 /* Set lr_frame_offset. */
6890 tdep->lr_frame_offset = 16;
6892 tdep->lr_frame_offset = 4;
6894 if (have_spe || have_dfp || have_vsx || have_htm_fpu || have_htm_vsx)
6896 set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
6897 set_gdbarch_pseudo_register_write (gdbarch,
6898 rs6000_pseudo_register_write);
6899 set_gdbarch_ax_pseudo_register_collect (gdbarch,
6900 rs6000_ax_pseudo_register_collect);
6903 set_gdbarch_gen_return_address (gdbarch, rs6000_gen_return_address);
6905 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
6907 set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
6910 num_pseudoregs += 32;
6912 num_pseudoregs += 16;
6914 /* Include both VSX and Extended FP registers. */
6915 num_pseudoregs += 96;
6917 num_pseudoregs += 16;
6918 /* Include both checkpointed VSX and EFP registers. */
6920 num_pseudoregs += 64 + 32;
6922 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
6924 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
6925 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
6926 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
6927 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
6928 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
6929 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
6930 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
6931 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
6932 set_gdbarch_char_signed (gdbarch, 0);
6934 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
6937 set_gdbarch_frame_red_zone_size (gdbarch, 288);
6939 set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
6940 set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
6941 set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
6943 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
6944 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
6947 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
6948 else if (wordsize == 8)
6949 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
6951 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
6952 set_gdbarch_stack_frame_destroyed_p (gdbarch, rs6000_stack_frame_destroyed_p);
6953 set_gdbarch_skip_main_prologue (gdbarch, rs6000_skip_main_prologue);
6955 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6957 set_gdbarch_breakpoint_kind_from_pc (gdbarch,
6958 rs6000_breakpoint::kind_from_pc);
6959 set_gdbarch_sw_breakpoint_from_kind (gdbarch,
6960 rs6000_breakpoint::bp_from_kind);
6962 /* The value of symbols of type N_SO and N_FUN maybe null when
6964 set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
6966 /* Handles single stepping of atomic sequences. */
6967 set_gdbarch_software_single_step (gdbarch, ppc_deal_with_atomic_sequence);
6969 /* Not sure on this. FIXMEmgo */
6970 set_gdbarch_frame_args_skip (gdbarch, 8);
6972 /* Helpers for function argument information. */
6973 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
6976 set_gdbarch_in_solib_return_trampoline
6977 (gdbarch, rs6000_in_solib_return_trampoline);
6978 set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
6980 /* Hook in the DWARF CFI frame unwinder. */
6981 dwarf2_append_unwinders (gdbarch);
6982 dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
6984 /* Frame handling. */
6985 dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
6987 /* Setup displaced stepping. */
6988 set_gdbarch_displaced_step_copy_insn (gdbarch,
6989 ppc_displaced_step_copy_insn);
6990 set_gdbarch_displaced_step_hw_singlestep (gdbarch,
6991 ppc_displaced_step_hw_singlestep);
6992 set_gdbarch_displaced_step_fixup (gdbarch, ppc_displaced_step_fixup);
6993 set_gdbarch_displaced_step_location (gdbarch,
6994 displaced_step_at_entry_point);
6996 set_gdbarch_max_insn_length (gdbarch, PPC_INSN_SIZE);
6998 /* Hook in ABI-specific overrides, if they have been registered. */
6999 info.target_desc = tdesc;
7000 info.tdesc_data = tdesc_data;
7001 gdbarch_init_osabi (info, gdbarch);
7005 case GDB_OSABI_LINUX:
7006 case GDB_OSABI_NETBSD:
7007 case GDB_OSABI_UNKNOWN:
7008 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
7009 frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
7010 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
7011 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
7012 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
7015 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
7017 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
7018 frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
7019 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
7020 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
7021 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
7024 set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
7025 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
7027 /* Override the normal target description method to make the SPE upper
7028 halves anonymous. */
7029 set_gdbarch_register_name (gdbarch, rs6000_register_name);
7031 /* Choose register numbers for all supported pseudo-registers. */
7032 tdep->ppc_ev0_regnum = -1;
7033 tdep->ppc_dl0_regnum = -1;
7034 tdep->ppc_vsr0_regnum = -1;
7035 tdep->ppc_efpr0_regnum = -1;
7036 tdep->ppc_cdl0_regnum = -1;
7037 tdep->ppc_cvsr0_regnum = -1;
7038 tdep->ppc_cefpr0_regnum = -1;
7040 cur_reg = gdbarch_num_regs (gdbarch);
7044 tdep->ppc_ev0_regnum = cur_reg;
7049 tdep->ppc_dl0_regnum = cur_reg;
7054 tdep->ppc_vsr0_regnum = cur_reg;
7056 tdep->ppc_efpr0_regnum = cur_reg;
7061 tdep->ppc_cdl0_regnum = cur_reg;
7066 tdep->ppc_cvsr0_regnum = cur_reg;
7068 tdep->ppc_cefpr0_regnum = cur_reg;
7072 gdb_assert (gdbarch_num_cooked_regs (gdbarch) == cur_reg);
7074 /* Register the ravenscar_arch_ops. */
7075 if (mach == bfd_mach_ppc_e500)
7076 register_e500_ravenscar_ops (gdbarch);
7078 register_ppc_ravenscar_ops (gdbarch);
7080 set_gdbarch_disassembler_options (gdbarch, &powerpc_disassembler_options);
7081 set_gdbarch_valid_disassembler_options (gdbarch,
7082 disassembler_options_powerpc ());
7088 rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
7090 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7095 /* FIXME: Dump gdbarch_tdep. */
7098 /* PowerPC-specific commands. */
7101 set_powerpc_command (const char *args, int from_tty)
7103 printf_unfiltered (_("\
7104 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
7105 help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout);
7109 show_powerpc_command (const char *args, int from_tty)
7111 cmd_show_list (showpowerpccmdlist, from_tty, "");
7115 powerpc_set_soft_float (const char *args, int from_tty,
7116 struct cmd_list_element *c)
7118 struct gdbarch_info info;
7120 /* Update the architecture. */
7121 gdbarch_info_init (&info);
7122 if (!gdbarch_update_p (info))
7123 internal_error (__FILE__, __LINE__, _("could not update architecture"));
7127 powerpc_set_vector_abi (const char *args, int from_tty,
7128 struct cmd_list_element *c)
7130 struct gdbarch_info info;
7133 for (vector_abi = POWERPC_VEC_AUTO;
7134 vector_abi != POWERPC_VEC_LAST;
7136 if (strcmp (powerpc_vector_abi_string,
7137 powerpc_vector_strings[vector_abi]) == 0)
7139 powerpc_vector_abi_global = (enum powerpc_vector_abi) vector_abi;
7143 if (vector_abi == POWERPC_VEC_LAST)
7144 internal_error (__FILE__, __LINE__, _("Invalid vector ABI accepted: %s."),
7145 powerpc_vector_abi_string);
7147 /* Update the architecture. */
7148 gdbarch_info_init (&info);
7149 if (!gdbarch_update_p (info))
7150 internal_error (__FILE__, __LINE__, _("could not update architecture"));
7153 /* Show the current setting of the exact watchpoints flag. */
7156 show_powerpc_exact_watchpoints (struct ui_file *file, int from_tty,
7157 struct cmd_list_element *c,
7160 fprintf_filtered (file, _("Use of exact watchpoints is %s.\n"), value);
7163 /* Read a PPC instruction from memory. */
7166 read_insn (struct frame_info *frame, CORE_ADDR pc)
7168 struct gdbarch *gdbarch = get_frame_arch (frame);
7169 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7171 return read_memory_unsigned_integer (pc, 4, byte_order);
7174 /* Return non-zero if the instructions at PC match the series
7175 described in PATTERN, or zero otherwise. PATTERN is an array of
7176 'struct ppc_insn_pattern' objects, terminated by an entry whose
7179 When the match is successful, fill INSNS[i] with what PATTERN[i]
7180 matched. If PATTERN[i] is optional, and the instruction wasn't
7181 present, set INSNS[i] to 0 (which is not a valid PPC instruction).
7182 INSNS should have as many elements as PATTERN, minus the terminator.
7183 Note that, if PATTERN contains optional instructions which aren't
7184 present in memory, then INSNS will have holes, so INSNS[i] isn't
7185 necessarily the i'th instruction in memory. */
7188 ppc_insns_match_pattern (struct frame_info *frame, CORE_ADDR pc,
7189 const struct ppc_insn_pattern *pattern,
7190 unsigned int *insns)
7195 for (i = 0, insn = 0; pattern[i].mask; i++)
7198 insn = read_insn (frame, pc);
7200 if ((insn & pattern[i].mask) == pattern[i].data)
7206 else if (!pattern[i].optional)
7213 /* Return the 'd' field of the d-form instruction INSN, properly
7217 ppc_insn_d_field (unsigned int insn)
7219 return ((((CORE_ADDR) insn & 0xffff) ^ 0x8000) - 0x8000);
7222 /* Return the 'ds' field of the ds-form instruction INSN, with the two
7223 zero bits concatenated at the right, and properly
7227 ppc_insn_ds_field (unsigned int insn)
7229 return ((((CORE_ADDR) insn & 0xfffc) ^ 0x8000) - 0x8000);
7232 /* Initialization code. */
7235 _initialize_rs6000_tdep (void)
7237 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
7238 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
7240 /* Initialize the standard target descriptions. */
7241 initialize_tdesc_powerpc_32 ();
7242 initialize_tdesc_powerpc_altivec32 ();
7243 initialize_tdesc_powerpc_vsx32 ();
7244 initialize_tdesc_powerpc_403 ();
7245 initialize_tdesc_powerpc_403gc ();
7246 initialize_tdesc_powerpc_405 ();
7247 initialize_tdesc_powerpc_505 ();
7248 initialize_tdesc_powerpc_601 ();
7249 initialize_tdesc_powerpc_602 ();
7250 initialize_tdesc_powerpc_603 ();
7251 initialize_tdesc_powerpc_604 ();
7252 initialize_tdesc_powerpc_64 ();
7253 initialize_tdesc_powerpc_altivec64 ();
7254 initialize_tdesc_powerpc_vsx64 ();
7255 initialize_tdesc_powerpc_7400 ();
7256 initialize_tdesc_powerpc_750 ();
7257 initialize_tdesc_powerpc_860 ();
7258 initialize_tdesc_powerpc_e500 ();
7259 initialize_tdesc_rs6000 ();
7261 /* Add root prefix command for all "set powerpc"/"show powerpc"
7263 add_prefix_cmd ("powerpc", no_class, set_powerpc_command,
7264 _("Various PowerPC-specific commands."),
7265 &setpowerpccmdlist, "set powerpc ", 0, &setlist);
7267 add_prefix_cmd ("powerpc", no_class, show_powerpc_command,
7268 _("Various PowerPC-specific commands."),
7269 &showpowerpccmdlist, "show powerpc ", 0, &showlist);
7271 /* Add a command to allow the user to force the ABI. */
7272 add_setshow_auto_boolean_cmd ("soft-float", class_support,
7273 &powerpc_soft_float_global,
7274 _("Set whether to use a soft-float ABI."),
7275 _("Show whether to use a soft-float ABI."),
7277 powerpc_set_soft_float, NULL,
7278 &setpowerpccmdlist, &showpowerpccmdlist);
7280 add_setshow_enum_cmd ("vector-abi", class_support, powerpc_vector_strings,
7281 &powerpc_vector_abi_string,
7282 _("Set the vector ABI."),
7283 _("Show the vector ABI."),
7284 NULL, powerpc_set_vector_abi, NULL,
7285 &setpowerpccmdlist, &showpowerpccmdlist);
7287 add_setshow_boolean_cmd ("exact-watchpoints", class_support,
7288 &target_exact_watchpoints,
7290 Set whether to use just one debug register for watchpoints on scalars."),
7292 Show whether to use just one debug register for watchpoints on scalars."),
7294 If true, GDB will use only one debug register when watching a variable of\n\
7295 scalar type, thus assuming that the variable is accessed through the address\n\
7296 of its first byte."),
7297 NULL, show_powerpc_exact_watchpoints,
7298 &setpowerpccmdlist, &showpowerpccmdlist);