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 unsigned int all_mask
= ~((1U << fdata
->saved_gpr
) - 1);
1980 /* Not a recognized prologue instruction.
1981 Handle optimizer code motions into the prologue by continuing
1982 the search if we have no valid frame yet or if the return
1983 address is not yet saved in the frame. Also skip instructions
1984 if some of the GPRs expected to be saved are not yet saved. */
1985 if (fdata
->frameless
== 0 && fdata
->nosavedpc
== 0
1986 && (fdata
->gpr_mask
& all_mask
) == all_mask
)
1989 if (op
== 0x4e800020 /* blr */
1990 || op
== 0x4e800420) /* bctr */
1991 /* Do not scan past epilogue in frameless functions or
1994 if ((op
& 0xf4000000) == 0x40000000) /* bxx */
1995 /* Never skip branches. */
1998 if (num_skip_non_prologue_insns
++ > max_skip_non_prologue_insns
)
1999 /* Do not scan too many insns, scanning insns is expensive with
2003 /* Continue scanning. */
2004 prev_insn_was_prologue_insn
= 0;
2010 /* I have problems with skipping over __main() that I need to address
2011 * sometime. Previously, I used to use misc_function_vector which
2012 * didn't work as well as I wanted to be. -MGO */
2014 /* If the first thing after skipping a prolog is a branch to a function,
2015 this might be a call to an initializer in main(), introduced by gcc2.
2016 We'd like to skip over it as well. Fortunately, xlc does some extra
2017 work before calling a function right after a prologue, thus we can
2018 single out such gcc2 behaviour. */
2021 if ((op
& 0xfc000001) == 0x48000001)
2022 { /* bl foo, an initializer function? */
2023 op
= read_memory_integer (pc
+ 4, 4, byte_order
);
2025 if (op
== 0x4def7b82)
2026 { /* cror 0xf, 0xf, 0xf (nop) */
2028 /* Check and see if we are in main. If so, skip over this
2029 initializer function as well. */
2031 tmp
= find_pc_misc_function (pc
);
2033 && strcmp (misc_function_vector
[tmp
].name
, main_name ()) == 0)
2039 if (pc
== lim_pc
&& lr_reg
>= 0)
2040 fdata
->lr_register
= lr_reg
;
2042 fdata
->offset
= -fdata
->offset
;
2043 return last_prologue_pc
;
2047 rs6000_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
2049 struct rs6000_framedata frame
;
2050 CORE_ADDR limit_pc
, func_addr
, func_end_addr
= 0;
2052 /* See if we can determine the end of the prologue via the symbol table.
2053 If so, then return either PC, or the PC after the prologue, whichever
2055 if (find_pc_partial_function (pc
, NULL
, &func_addr
, &func_end_addr
))
2057 CORE_ADDR post_prologue_pc
2058 = skip_prologue_using_sal (gdbarch
, func_addr
);
2059 if (post_prologue_pc
!= 0)
2060 return std::max (pc
, post_prologue_pc
);
2063 /* Can't determine prologue from the symbol table, need to examine
2066 /* Find an upper limit on the function prologue using the debug
2067 information. If the debug information could not be used to provide
2068 that bound, then use an arbitrary large number as the upper bound. */
2069 limit_pc
= skip_prologue_using_sal (gdbarch
, pc
);
2071 limit_pc
= pc
+ 100; /* Magic. */
2073 /* Do not allow limit_pc to be past the function end, if we know
2074 where that end is... */
2075 if (func_end_addr
&& limit_pc
> func_end_addr
)
2076 limit_pc
= func_end_addr
;
2078 pc
= skip_prologue (gdbarch
, pc
, limit_pc
, &frame
);
2082 /* When compiling for EABI, some versions of GCC emit a call to __eabi
2083 in the prologue of main().
2085 The function below examines the code pointed at by PC and checks to
2086 see if it corresponds to a call to __eabi. If so, it returns the
2087 address of the instruction following that call. Otherwise, it simply
2091 rs6000_skip_main_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
2093 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2097 if (target_read_memory (pc
, buf
, 4))
2099 op
= extract_unsigned_integer (buf
, 4, byte_order
);
2101 if ((op
& BL_MASK
) == BL_INSTRUCTION
)
2103 CORE_ADDR displ
= op
& BL_DISPLACEMENT_MASK
;
2104 CORE_ADDR call_dest
= pc
+ 4 + displ
;
2105 struct bound_minimal_symbol s
= lookup_minimal_symbol_by_pc (call_dest
);
2107 /* We check for ___eabi (three leading underscores) in addition
2108 to __eabi in case the GCC option "-fleading-underscore" was
2109 used to compile the program. */
2110 if (s
.minsym
!= NULL
2111 && MSYMBOL_LINKAGE_NAME (s
.minsym
) != NULL
2112 && (strcmp (MSYMBOL_LINKAGE_NAME (s
.minsym
), "__eabi") == 0
2113 || strcmp (MSYMBOL_LINKAGE_NAME (s
.minsym
), "___eabi") == 0))
2119 /* All the ABI's require 16 byte alignment. */
2121 rs6000_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
2123 return (addr
& -16);
2126 /* Return whether handle_inferior_event() should proceed through code
2127 starting at PC in function NAME when stepping.
2129 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2130 handle memory references that are too distant to fit in instructions
2131 generated by the compiler. For example, if 'foo' in the following
2136 is greater than 32767, the linker might replace the lwz with a branch to
2137 somewhere in @FIX1 that does the load in 2 instructions and then branches
2138 back to where execution should continue.
2140 GDB should silently step over @FIX code, just like AIX dbx does.
2141 Unfortunately, the linker uses the "b" instruction for the
2142 branches, meaning that the link register doesn't get set.
2143 Therefore, GDB's usual step_over_function () mechanism won't work.
2145 Instead, use the gdbarch_skip_trampoline_code and
2146 gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2150 rs6000_in_solib_return_trampoline (struct gdbarch
*gdbarch
,
2151 CORE_ADDR pc
, const char *name
)
2153 return name
&& startswith (name
, "@FIX");
2156 /* Skip code that the user doesn't want to see when stepping:
2158 1. Indirect function calls use a piece of trampoline code to do context
2159 switching, i.e. to set the new TOC table. Skip such code if we are on
2160 its first instruction (as when we have single-stepped to here).
2162 2. Skip shared library trampoline code (which is different from
2163 indirect function call trampolines).
2165 3. Skip bigtoc fixup code.
2167 Result is desired PC to step until, or NULL if we are not in
2168 code that should be skipped. */
2171 rs6000_skip_trampoline_code (struct frame_info
*frame
, CORE_ADDR pc
)
2173 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
2174 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2175 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2176 unsigned int ii
, op
;
2178 CORE_ADDR solib_target_pc
;
2179 struct bound_minimal_symbol msymbol
;
2181 static unsigned trampoline_code
[] =
2183 0x800b0000, /* l r0,0x0(r11) */
2184 0x90410014, /* st r2,0x14(r1) */
2185 0x7c0903a6, /* mtctr r0 */
2186 0x804b0004, /* l r2,0x4(r11) */
2187 0x816b0008, /* l r11,0x8(r11) */
2188 0x4e800420, /* bctr */
2189 0x4e800020, /* br */
2193 /* Check for bigtoc fixup code. */
2194 msymbol
= lookup_minimal_symbol_by_pc (pc
);
2196 && rs6000_in_solib_return_trampoline (gdbarch
, pc
,
2197 MSYMBOL_LINKAGE_NAME (msymbol
.minsym
)))
2199 /* Double-check that the third instruction from PC is relative "b". */
2200 op
= read_memory_integer (pc
+ 8, 4, byte_order
);
2201 if ((op
& 0xfc000003) == 0x48000000)
2203 /* Extract bits 6-29 as a signed 24-bit relative word address and
2204 add it to the containing PC. */
2205 rel
= ((int)(op
<< 6) >> 6);
2206 return pc
+ 8 + rel
;
2210 /* If pc is in a shared library trampoline, return its target. */
2211 solib_target_pc
= find_solib_trampoline_target (frame
, pc
);
2212 if (solib_target_pc
)
2213 return solib_target_pc
;
2215 for (ii
= 0; trampoline_code
[ii
]; ++ii
)
2217 op
= read_memory_integer (pc
+ (ii
* 4), 4, byte_order
);
2218 if (op
!= trampoline_code
[ii
])
2221 ii
= get_frame_register_unsigned (frame
, 11); /* r11 holds destination
2223 pc
= read_memory_unsigned_integer (ii
, tdep
->wordsize
, byte_order
);
2227 /* ISA-specific vector types. */
2229 static struct type
*
2230 rs6000_builtin_type_vec64 (struct gdbarch
*gdbarch
)
2232 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2234 if (!tdep
->ppc_builtin_type_vec64
)
2236 const struct builtin_type
*bt
= builtin_type (gdbarch
);
2238 /* The type we're building is this: */
2240 union __gdb_builtin_type_vec64
2244 int32_t v2_int32
[2];
2245 int16_t v4_int16
[4];
2252 t
= arch_composite_type (gdbarch
,
2253 "__ppc_builtin_type_vec64", TYPE_CODE_UNION
);
2254 append_composite_type_field (t
, "uint64", bt
->builtin_int64
);
2255 append_composite_type_field (t
, "v2_float",
2256 init_vector_type (bt
->builtin_float
, 2));
2257 append_composite_type_field (t
, "v2_int32",
2258 init_vector_type (bt
->builtin_int32
, 2));
2259 append_composite_type_field (t
, "v4_int16",
2260 init_vector_type (bt
->builtin_int16
, 4));
2261 append_composite_type_field (t
, "v8_int8",
2262 init_vector_type (bt
->builtin_int8
, 8));
2264 TYPE_VECTOR (t
) = 1;
2265 TYPE_NAME (t
) = "ppc_builtin_type_vec64";
2266 tdep
->ppc_builtin_type_vec64
= t
;
2269 return tdep
->ppc_builtin_type_vec64
;
2272 /* Vector 128 type. */
2274 static struct type
*
2275 rs6000_builtin_type_vec128 (struct gdbarch
*gdbarch
)
2277 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2279 if (!tdep
->ppc_builtin_type_vec128
)
2281 const struct builtin_type
*bt
= builtin_type (gdbarch
);
2283 /* The type we're building is this
2285 type = union __ppc_builtin_type_vec128 {
2287 double v2_double[2];
2289 int32_t v4_int32[4];
2290 int16_t v8_int16[8];
2291 int8_t v16_int8[16];
2297 t
= arch_composite_type (gdbarch
,
2298 "__ppc_builtin_type_vec128", TYPE_CODE_UNION
);
2299 append_composite_type_field (t
, "uint128", bt
->builtin_uint128
);
2300 append_composite_type_field (t
, "v2_double",
2301 init_vector_type (bt
->builtin_double
, 2));
2302 append_composite_type_field (t
, "v4_float",
2303 init_vector_type (bt
->builtin_float
, 4));
2304 append_composite_type_field (t
, "v4_int32",
2305 init_vector_type (bt
->builtin_int32
, 4));
2306 append_composite_type_field (t
, "v8_int16",
2307 init_vector_type (bt
->builtin_int16
, 8));
2308 append_composite_type_field (t
, "v16_int8",
2309 init_vector_type (bt
->builtin_int8
, 16));
2311 TYPE_VECTOR (t
) = 1;
2312 TYPE_NAME (t
) = "ppc_builtin_type_vec128";
2313 tdep
->ppc_builtin_type_vec128
= t
;
2316 return tdep
->ppc_builtin_type_vec128
;
2319 /* Return the name of register number REGNO, or the empty string if it
2320 is an anonymous register. */
2323 rs6000_register_name (struct gdbarch
*gdbarch
, int regno
)
2325 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2327 /* The upper half "registers" have names in the XML description,
2328 but we present only the low GPRs and the full 64-bit registers
2330 if (tdep
->ppc_ev0_upper_regnum
>= 0
2331 && tdep
->ppc_ev0_upper_regnum
<= regno
2332 && regno
< tdep
->ppc_ev0_upper_regnum
+ ppc_num_gprs
)
2335 /* Hide the upper halves of the vs0~vs31 registers. */
2336 if (tdep
->ppc_vsr0_regnum
>= 0
2337 && tdep
->ppc_vsr0_upper_regnum
<= regno
2338 && regno
< tdep
->ppc_vsr0_upper_regnum
+ ppc_num_gprs
)
2341 /* Hide the upper halves of the cvs0~cvs31 registers. */
2342 if (PPC_CVSR0_UPPER_REGNUM
<= regno
2343 && regno
< PPC_CVSR0_UPPER_REGNUM
+ ppc_num_gprs
)
2346 /* Check if the SPE pseudo registers are available. */
2347 if (IS_SPE_PSEUDOREG (tdep
, regno
))
2349 static const char *const spe_regnames
[] = {
2350 "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2351 "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2352 "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2353 "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2355 return spe_regnames
[regno
- tdep
->ppc_ev0_regnum
];
2358 /* Check if the decimal128 pseudo-registers are available. */
2359 if (IS_DFP_PSEUDOREG (tdep
, regno
))
2361 static const char *const dfp128_regnames
[] = {
2362 "dl0", "dl1", "dl2", "dl3",
2363 "dl4", "dl5", "dl6", "dl7",
2364 "dl8", "dl9", "dl10", "dl11",
2365 "dl12", "dl13", "dl14", "dl15"
2367 return dfp128_regnames
[regno
- tdep
->ppc_dl0_regnum
];
2370 /* Check if this is a VSX pseudo-register. */
2371 if (IS_VSX_PSEUDOREG (tdep
, regno
))
2373 static const char *const vsx_regnames
[] = {
2374 "vs0", "vs1", "vs2", "vs3", "vs4", "vs5", "vs6", "vs7",
2375 "vs8", "vs9", "vs10", "vs11", "vs12", "vs13", "vs14",
2376 "vs15", "vs16", "vs17", "vs18", "vs19", "vs20", "vs21",
2377 "vs22", "vs23", "vs24", "vs25", "vs26", "vs27", "vs28",
2378 "vs29", "vs30", "vs31", "vs32", "vs33", "vs34", "vs35",
2379 "vs36", "vs37", "vs38", "vs39", "vs40", "vs41", "vs42",
2380 "vs43", "vs44", "vs45", "vs46", "vs47", "vs48", "vs49",
2381 "vs50", "vs51", "vs52", "vs53", "vs54", "vs55", "vs56",
2382 "vs57", "vs58", "vs59", "vs60", "vs61", "vs62", "vs63"
2384 return vsx_regnames
[regno
- tdep
->ppc_vsr0_regnum
];
2387 /* Check if the this is a Extended FP pseudo-register. */
2388 if (IS_EFP_PSEUDOREG (tdep
, regno
))
2390 static const char *const efpr_regnames
[] = {
2391 "f32", "f33", "f34", "f35", "f36", "f37", "f38",
2392 "f39", "f40", "f41", "f42", "f43", "f44", "f45",
2393 "f46", "f47", "f48", "f49", "f50", "f51",
2394 "f52", "f53", "f54", "f55", "f56", "f57",
2395 "f58", "f59", "f60", "f61", "f62", "f63"
2397 return efpr_regnames
[regno
- tdep
->ppc_efpr0_regnum
];
2400 /* Check if this is a Checkpointed DFP pseudo-register. */
2401 if (IS_CDFP_PSEUDOREG (tdep
, regno
))
2403 static const char *const cdfp128_regnames
[] = {
2404 "cdl0", "cdl1", "cdl2", "cdl3",
2405 "cdl4", "cdl5", "cdl6", "cdl7",
2406 "cdl8", "cdl9", "cdl10", "cdl11",
2407 "cdl12", "cdl13", "cdl14", "cdl15"
2409 return cdfp128_regnames
[regno
- tdep
->ppc_cdl0_regnum
];
2412 /* Check if this is a Checkpointed VSX pseudo-register. */
2413 if (IS_CVSX_PSEUDOREG (tdep
, regno
))
2415 static const char *const cvsx_regnames
[] = {
2416 "cvs0", "cvs1", "cvs2", "cvs3", "cvs4", "cvs5", "cvs6", "cvs7",
2417 "cvs8", "cvs9", "cvs10", "cvs11", "cvs12", "cvs13", "cvs14",
2418 "cvs15", "cvs16", "cvs17", "cvs18", "cvs19", "cvs20", "cvs21",
2419 "cvs22", "cvs23", "cvs24", "cvs25", "cvs26", "cvs27", "cvs28",
2420 "cvs29", "cvs30", "cvs31", "cvs32", "cvs33", "cvs34", "cvs35",
2421 "cvs36", "cvs37", "cvs38", "cvs39", "cvs40", "cvs41", "cvs42",
2422 "cvs43", "cvs44", "cvs45", "cvs46", "cvs47", "cvs48", "cvs49",
2423 "cvs50", "cvs51", "cvs52", "cvs53", "cvs54", "cvs55", "cvs56",
2424 "cvs57", "cvs58", "cvs59", "cvs60", "cvs61", "cvs62", "cvs63"
2426 return cvsx_regnames
[regno
- tdep
->ppc_cvsr0_regnum
];
2429 /* Check if the this is a Checkpointed Extended FP pseudo-register. */
2430 if (IS_CEFP_PSEUDOREG (tdep
, regno
))
2432 static const char *const cefpr_regnames
[] = {
2433 "cf32", "cf33", "cf34", "cf35", "cf36", "cf37", "cf38",
2434 "cf39", "cf40", "cf41", "cf42", "cf43", "cf44", "cf45",
2435 "cf46", "cf47", "cf48", "cf49", "cf50", "cf51",
2436 "cf52", "cf53", "cf54", "cf55", "cf56", "cf57",
2437 "cf58", "cf59", "cf60", "cf61", "cf62", "cf63"
2439 return cefpr_regnames
[regno
- tdep
->ppc_cefpr0_regnum
];
2442 return tdesc_register_name (gdbarch
, regno
);
2445 /* Return the GDB type object for the "standard" data type of data in
2448 static struct type
*
2449 rs6000_pseudo_register_type (struct gdbarch
*gdbarch
, int regnum
)
2451 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2453 /* These are the e500 pseudo-registers. */
2454 if (IS_SPE_PSEUDOREG (tdep
, regnum
))
2455 return rs6000_builtin_type_vec64 (gdbarch
);
2456 else if (IS_DFP_PSEUDOREG (tdep
, regnum
)
2457 || IS_CDFP_PSEUDOREG (tdep
, regnum
))
2458 /* PPC decimal128 pseudo-registers. */
2459 return builtin_type (gdbarch
)->builtin_declong
;
2460 else if (IS_VSX_PSEUDOREG (tdep
, regnum
)
2461 || IS_CVSX_PSEUDOREG (tdep
, regnum
))
2462 /* POWER7 VSX pseudo-registers. */
2463 return rs6000_builtin_type_vec128 (gdbarch
);
2464 else if (IS_EFP_PSEUDOREG (tdep
, regnum
)
2465 || IS_CEFP_PSEUDOREG (tdep
, regnum
))
2466 /* POWER7 Extended FP pseudo-registers. */
2467 return builtin_type (gdbarch
)->builtin_double
;
2469 internal_error (__FILE__
, __LINE__
,
2470 _("rs6000_pseudo_register_type: "
2471 "called on unexpected register '%s' (%d)"),
2472 gdbarch_register_name (gdbarch
, regnum
), regnum
);
2475 /* The register format for RS/6000 floating point registers is always
2476 double, we need a conversion if the memory format is float. */
2479 rs6000_convert_register_p (struct gdbarch
*gdbarch
, int regnum
,
2482 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2484 return (tdep
->ppc_fp0_regnum
>= 0
2485 && regnum
>= tdep
->ppc_fp0_regnum
2486 && regnum
< tdep
->ppc_fp0_regnum
+ ppc_num_fprs
2487 && TYPE_CODE (type
) == TYPE_CODE_FLT
2488 && TYPE_LENGTH (type
)
2489 != TYPE_LENGTH (builtin_type (gdbarch
)->builtin_double
));
2493 rs6000_register_to_value (struct frame_info
*frame
,
2497 int *optimizedp
, int *unavailablep
)
2499 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
2500 gdb_byte from
[PPC_MAX_REGISTER_SIZE
];
2502 gdb_assert (TYPE_CODE (type
) == TYPE_CODE_FLT
);
2504 if (!get_frame_register_bytes (frame
, regnum
, 0,
2505 register_size (gdbarch
, regnum
),
2506 from
, optimizedp
, unavailablep
))
2509 target_float_convert (from
, builtin_type (gdbarch
)->builtin_double
,
2511 *optimizedp
= *unavailablep
= 0;
2516 rs6000_value_to_register (struct frame_info
*frame
,
2519 const gdb_byte
*from
)
2521 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
2522 gdb_byte to
[PPC_MAX_REGISTER_SIZE
];
2524 gdb_assert (TYPE_CODE (type
) == TYPE_CODE_FLT
);
2526 target_float_convert (from
, type
,
2527 to
, builtin_type (gdbarch
)->builtin_double
);
2528 put_frame_register (frame
, regnum
, to
);
2531 /* The type of a function that moves the value of REG between CACHE
2532 or BUF --- in either direction. */
2533 typedef enum register_status (*move_ev_register_func
) (struct regcache
*,
2536 /* Move SPE vector register values between a 64-bit buffer and the two
2537 32-bit raw register halves in a regcache. This function handles
2538 both splitting a 64-bit value into two 32-bit halves, and joining
2539 two halves into a whole 64-bit value, depending on the function
2540 passed as the MOVE argument.
2542 EV_REG must be the number of an SPE evN vector register --- a
2543 pseudoregister. REGCACHE must be a regcache, and BUFFER must be a
2546 Call MOVE once for each 32-bit half of that register, passing
2547 REGCACHE, the number of the raw register corresponding to that
2548 half, and the address of the appropriate half of BUFFER.
2550 For example, passing 'regcache_raw_read' as the MOVE function will
2551 fill BUFFER with the full 64-bit contents of EV_REG. Or, passing
2552 'regcache_raw_supply' will supply the contents of BUFFER to the
2553 appropriate pair of raw registers in REGCACHE.
2555 You may need to cast away some 'const' qualifiers when passing
2556 MOVE, since this function can't tell at compile-time which of
2557 REGCACHE or BUFFER is acting as the source of the data. If C had
2558 co-variant type qualifiers, ... */
2560 static enum register_status
2561 e500_move_ev_register (move_ev_register_func move
,
2562 struct regcache
*regcache
, int ev_reg
, void *buffer
)
2564 struct gdbarch
*arch
= regcache
->arch ();
2565 struct gdbarch_tdep
*tdep
= gdbarch_tdep (arch
);
2567 gdb_byte
*byte_buffer
= (gdb_byte
*) buffer
;
2568 enum register_status status
;
2570 gdb_assert (IS_SPE_PSEUDOREG (tdep
, ev_reg
));
2572 reg_index
= ev_reg
- tdep
->ppc_ev0_regnum
;
2574 if (gdbarch_byte_order (arch
) == BFD_ENDIAN_BIG
)
2576 status
= move (regcache
, tdep
->ppc_ev0_upper_regnum
+ reg_index
,
2578 if (status
== REG_VALID
)
2579 status
= move (regcache
, tdep
->ppc_gp0_regnum
+ reg_index
,
2584 status
= move (regcache
, tdep
->ppc_gp0_regnum
+ reg_index
, byte_buffer
);
2585 if (status
== REG_VALID
)
2586 status
= move (regcache
, tdep
->ppc_ev0_upper_regnum
+ reg_index
,
2593 static enum register_status
2594 do_regcache_raw_write (struct regcache
*regcache
, int regnum
, void *buffer
)
2596 regcache
->raw_write (regnum
, (const gdb_byte
*) buffer
);
2601 static enum register_status
2602 e500_pseudo_register_read (struct gdbarch
*gdbarch
, readable_regcache
*regcache
,
2603 int ev_reg
, gdb_byte
*buffer
)
2605 struct gdbarch
*arch
= regcache
->arch ();
2606 struct gdbarch_tdep
*tdep
= gdbarch_tdep (arch
);
2608 enum register_status status
;
2610 gdb_assert (IS_SPE_PSEUDOREG (tdep
, ev_reg
));
2612 reg_index
= ev_reg
- tdep
->ppc_ev0_regnum
;
2614 if (gdbarch_byte_order (arch
) == BFD_ENDIAN_BIG
)
2616 status
= regcache
->raw_read (tdep
->ppc_ev0_upper_regnum
+ reg_index
,
2618 if (status
== REG_VALID
)
2619 status
= regcache
->raw_read (tdep
->ppc_gp0_regnum
+ reg_index
,
2624 status
= regcache
->raw_read (tdep
->ppc_gp0_regnum
+ reg_index
, buffer
);
2625 if (status
== REG_VALID
)
2626 status
= regcache
->raw_read (tdep
->ppc_ev0_upper_regnum
+ reg_index
,
2635 e500_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
2636 int reg_nr
, const gdb_byte
*buffer
)
2638 e500_move_ev_register (do_regcache_raw_write
, regcache
,
2639 reg_nr
, (void *) buffer
);
2642 /* Read method for DFP pseudo-registers. */
2643 static enum register_status
2644 dfp_pseudo_register_read (struct gdbarch
*gdbarch
, readable_regcache
*regcache
,
2645 int reg_nr
, gdb_byte
*buffer
)
2647 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2649 enum register_status status
;
2651 if (IS_DFP_PSEUDOREG (tdep
, reg_nr
))
2653 reg_index
= reg_nr
- tdep
->ppc_dl0_regnum
;
2654 fp0
= PPC_F0_REGNUM
;
2658 gdb_assert (IS_CDFP_PSEUDOREG (tdep
, reg_nr
));
2660 reg_index
= reg_nr
- tdep
->ppc_cdl0_regnum
;
2661 fp0
= PPC_CF0_REGNUM
;
2664 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
2666 /* Read two FP registers to form a whole dl register. */
2667 status
= regcache
->raw_read (fp0
+ 2 * reg_index
, buffer
);
2668 if (status
== REG_VALID
)
2669 status
= regcache
->raw_read (fp0
+ 2 * reg_index
+ 1,
2674 status
= regcache
->raw_read (fp0
+ 2 * reg_index
+ 1, buffer
);
2675 if (status
== REG_VALID
)
2676 status
= regcache
->raw_read (fp0
+ 2 * reg_index
, buffer
+ 8);
2682 /* Write method for DFP pseudo-registers. */
2684 dfp_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
2685 int reg_nr
, const gdb_byte
*buffer
)
2687 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2690 if (IS_DFP_PSEUDOREG (tdep
, reg_nr
))
2692 reg_index
= reg_nr
- tdep
->ppc_dl0_regnum
;
2693 fp0
= PPC_F0_REGNUM
;
2697 gdb_assert (IS_CDFP_PSEUDOREG (tdep
, reg_nr
));
2699 reg_index
= reg_nr
- tdep
->ppc_cdl0_regnum
;
2700 fp0
= PPC_CF0_REGNUM
;
2703 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
2705 /* Write each half of the dl register into a separate
2707 regcache
->raw_write (fp0
+ 2 * reg_index
, buffer
);
2708 regcache
->raw_write (fp0
+ 2 * reg_index
+ 1, buffer
+ 8);
2712 regcache
->raw_write (fp0
+ 2 * reg_index
+ 1, buffer
);
2713 regcache
->raw_write (fp0
+ 2 * reg_index
, buffer
+ 8);
2717 /* Read method for POWER7 VSX pseudo-registers. */
2718 static enum register_status
2719 vsx_pseudo_register_read (struct gdbarch
*gdbarch
, readable_regcache
*regcache
,
2720 int reg_nr
, gdb_byte
*buffer
)
2722 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2723 int reg_index
, vr0
, fp0
, vsr0_upper
;
2724 enum register_status status
;
2726 if (IS_VSX_PSEUDOREG (tdep
, reg_nr
))
2728 reg_index
= reg_nr
- tdep
->ppc_vsr0_regnum
;
2729 vr0
= PPC_VR0_REGNUM
;
2730 fp0
= PPC_F0_REGNUM
;
2731 vsr0_upper
= PPC_VSR0_UPPER_REGNUM
;
2735 gdb_assert (IS_CVSX_PSEUDOREG (tdep
, reg_nr
));
2737 reg_index
= reg_nr
- tdep
->ppc_cvsr0_regnum
;
2738 vr0
= PPC_CVR0_REGNUM
;
2739 fp0
= PPC_CF0_REGNUM
;
2740 vsr0_upper
= PPC_CVSR0_UPPER_REGNUM
;
2743 /* Read the portion that overlaps the VMX registers. */
2745 status
= regcache
->raw_read (vr0
+ reg_index
- 32, buffer
);
2747 /* Read the portion that overlaps the FPR registers. */
2748 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
2750 status
= regcache
->raw_read (fp0
+ reg_index
, buffer
);
2751 if (status
== REG_VALID
)
2752 status
= regcache
->raw_read (vsr0_upper
+ reg_index
,
2757 status
= regcache
->raw_read (fp0
+ reg_index
, buffer
+ 8);
2758 if (status
== REG_VALID
)
2759 status
= regcache
->raw_read (vsr0_upper
+ reg_index
, buffer
);
2765 /* Write method for POWER7 VSX pseudo-registers. */
2767 vsx_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
2768 int reg_nr
, const gdb_byte
*buffer
)
2770 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2771 int reg_index
, vr0
, fp0
, vsr0_upper
;
2773 if (IS_VSX_PSEUDOREG (tdep
, reg_nr
))
2775 reg_index
= reg_nr
- tdep
->ppc_vsr0_regnum
;
2776 vr0
= PPC_VR0_REGNUM
;
2777 fp0
= PPC_F0_REGNUM
;
2778 vsr0_upper
= PPC_VSR0_UPPER_REGNUM
;
2782 gdb_assert (IS_CVSX_PSEUDOREG (tdep
, reg_nr
));
2784 reg_index
= reg_nr
- tdep
->ppc_cvsr0_regnum
;
2785 vr0
= PPC_CVR0_REGNUM
;
2786 fp0
= PPC_CF0_REGNUM
;
2787 vsr0_upper
= PPC_CVSR0_UPPER_REGNUM
;
2790 /* Write the portion that overlaps the VMX registers. */
2792 regcache
->raw_write (vr0
+ reg_index
- 32, buffer
);
2794 /* Write the portion that overlaps the FPR registers. */
2795 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
2797 regcache
->raw_write (fp0
+ reg_index
, buffer
);
2798 regcache
->raw_write (vsr0_upper
+ reg_index
, buffer
+ 8);
2802 regcache
->raw_write (fp0
+ reg_index
, buffer
+ 8);
2803 regcache
->raw_write (vsr0_upper
+ reg_index
, buffer
);
2807 /* Read method for POWER7 Extended FP pseudo-registers. */
2808 static enum register_status
2809 efp_pseudo_register_read (struct gdbarch
*gdbarch
, readable_regcache
*regcache
,
2810 int reg_nr
, gdb_byte
*buffer
)
2812 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2815 if (IS_EFP_PSEUDOREG (tdep
, reg_nr
))
2817 reg_index
= reg_nr
- tdep
->ppc_efpr0_regnum
;
2818 vr0
= PPC_VR0_REGNUM
;
2822 gdb_assert (IS_CEFP_PSEUDOREG (tdep
, reg_nr
));
2824 reg_index
= reg_nr
- tdep
->ppc_cefpr0_regnum
;
2825 vr0
= PPC_CVR0_REGNUM
;
2828 int offset
= gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
? 0 : 8;
2830 /* Read the portion that overlaps the VMX register. */
2831 return regcache
->raw_read_part (vr0
+ reg_index
, offset
,
2832 register_size (gdbarch
, reg_nr
),
2836 /* Write method for POWER7 Extended FP pseudo-registers. */
2838 efp_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
2839 int reg_nr
, const gdb_byte
*buffer
)
2841 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2843 int offset
= gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
? 0 : 8;
2845 if (IS_EFP_PSEUDOREG (tdep
, reg_nr
))
2847 reg_index
= reg_nr
- tdep
->ppc_efpr0_regnum
;
2848 vr0
= PPC_VR0_REGNUM
;
2852 gdb_assert (IS_CEFP_PSEUDOREG (tdep
, reg_nr
));
2854 reg_index
= reg_nr
- tdep
->ppc_cefpr0_regnum
;
2855 vr0
= PPC_CVR0_REGNUM
;
2857 /* The call to raw_write_part fails silently if the initial read
2858 of the read-update-write sequence returns an invalid status,
2859 so we check this manually and throw an error if needed. */
2860 regcache
->raw_update (vr0
+ reg_index
);
2861 if (regcache
->get_register_status (vr0
+ reg_index
) != REG_VALID
)
2862 error (_("Cannot write to the checkpointed EFP register, "
2863 "the corresponding vector register is unavailable."));
2866 /* Write the portion that overlaps the VMX register. */
2867 regcache
->raw_write_part (vr0
+ reg_index
, offset
,
2868 register_size (gdbarch
, reg_nr
), buffer
);
2871 static enum register_status
2872 rs6000_pseudo_register_read (struct gdbarch
*gdbarch
,
2873 readable_regcache
*regcache
,
2874 int reg_nr
, gdb_byte
*buffer
)
2876 struct gdbarch
*regcache_arch
= regcache
->arch ();
2877 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2879 gdb_assert (regcache_arch
== gdbarch
);
2881 if (IS_SPE_PSEUDOREG (tdep
, reg_nr
))
2882 return e500_pseudo_register_read (gdbarch
, regcache
, reg_nr
, buffer
);
2883 else if (IS_DFP_PSEUDOREG (tdep
, reg_nr
)
2884 || IS_CDFP_PSEUDOREG (tdep
, reg_nr
))
2885 return dfp_pseudo_register_read (gdbarch
, regcache
, reg_nr
, buffer
);
2886 else if (IS_VSX_PSEUDOREG (tdep
, reg_nr
)
2887 || IS_CVSX_PSEUDOREG (tdep
, reg_nr
))
2888 return vsx_pseudo_register_read (gdbarch
, regcache
, reg_nr
, buffer
);
2889 else if (IS_EFP_PSEUDOREG (tdep
, reg_nr
)
2890 || IS_CEFP_PSEUDOREG (tdep
, reg_nr
))
2891 return efp_pseudo_register_read (gdbarch
, regcache
, reg_nr
, buffer
);
2893 internal_error (__FILE__
, __LINE__
,
2894 _("rs6000_pseudo_register_read: "
2895 "called on unexpected register '%s' (%d)"),
2896 gdbarch_register_name (gdbarch
, reg_nr
), reg_nr
);
2900 rs6000_pseudo_register_write (struct gdbarch
*gdbarch
,
2901 struct regcache
*regcache
,
2902 int reg_nr
, const gdb_byte
*buffer
)
2904 struct gdbarch
*regcache_arch
= regcache
->arch ();
2905 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2907 gdb_assert (regcache_arch
== gdbarch
);
2909 if (IS_SPE_PSEUDOREG (tdep
, reg_nr
))
2910 e500_pseudo_register_write (gdbarch
, regcache
, reg_nr
, buffer
);
2911 else if (IS_DFP_PSEUDOREG (tdep
, reg_nr
)
2912 || IS_CDFP_PSEUDOREG (tdep
, reg_nr
))
2913 dfp_pseudo_register_write (gdbarch
, regcache
, reg_nr
, buffer
);
2914 else if (IS_VSX_PSEUDOREG (tdep
, reg_nr
)
2915 || IS_CVSX_PSEUDOREG (tdep
, reg_nr
))
2916 vsx_pseudo_register_write (gdbarch
, regcache
, reg_nr
, buffer
);
2917 else if (IS_EFP_PSEUDOREG (tdep
, reg_nr
)
2918 || IS_CEFP_PSEUDOREG (tdep
, reg_nr
))
2919 efp_pseudo_register_write (gdbarch
, regcache
, reg_nr
, buffer
);
2921 internal_error (__FILE__
, __LINE__
,
2922 _("rs6000_pseudo_register_write: "
2923 "called on unexpected register '%s' (%d)"),
2924 gdbarch_register_name (gdbarch
, reg_nr
), reg_nr
);
2927 /* Set the register mask in AX with the registers that form the DFP or
2928 checkpointed DFP pseudo-register REG_NR. */
2931 dfp_ax_pseudo_register_collect (struct gdbarch
*gdbarch
,
2932 struct agent_expr
*ax
, int reg_nr
)
2934 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2937 if (IS_DFP_PSEUDOREG (tdep
, reg_nr
))
2939 reg_index
= reg_nr
- tdep
->ppc_dl0_regnum
;
2940 fp0
= PPC_F0_REGNUM
;
2944 gdb_assert (IS_CDFP_PSEUDOREG (tdep
, reg_nr
));
2946 reg_index
= reg_nr
- tdep
->ppc_cdl0_regnum
;
2947 fp0
= PPC_CF0_REGNUM
;
2950 ax_reg_mask (ax
, fp0
+ 2 * reg_index
);
2951 ax_reg_mask (ax
, fp0
+ 2 * reg_index
+ 1);
2954 /* Set the register mask in AX with the registers that form the VSX or
2955 checkpointed VSX pseudo-register REG_NR. */
2958 vsx_ax_pseudo_register_collect (struct gdbarch
*gdbarch
,
2959 struct agent_expr
*ax
, int reg_nr
)
2961 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2962 int reg_index
, vr0
, fp0
, vsr0_upper
;
2964 if (IS_VSX_PSEUDOREG (tdep
, reg_nr
))
2966 reg_index
= reg_nr
- tdep
->ppc_vsr0_regnum
;
2967 vr0
= PPC_VR0_REGNUM
;
2968 fp0
= PPC_F0_REGNUM
;
2969 vsr0_upper
= PPC_VSR0_UPPER_REGNUM
;
2973 gdb_assert (IS_CVSX_PSEUDOREG (tdep
, reg_nr
));
2975 reg_index
= reg_nr
- tdep
->ppc_cvsr0_regnum
;
2976 vr0
= PPC_CVR0_REGNUM
;
2977 fp0
= PPC_CF0_REGNUM
;
2978 vsr0_upper
= PPC_CVSR0_UPPER_REGNUM
;
2983 ax_reg_mask (ax
, vr0
+ reg_index
- 32);
2987 ax_reg_mask (ax
, fp0
+ reg_index
);
2988 ax_reg_mask (ax
, vsr0_upper
+ reg_index
);
2992 /* Set the register mask in AX with the register that corresponds to
2993 the EFP or checkpointed EFP pseudo-register REG_NR. */
2996 efp_ax_pseudo_register_collect (struct gdbarch
*gdbarch
,
2997 struct agent_expr
*ax
, int reg_nr
)
2999 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3002 if (IS_EFP_PSEUDOREG (tdep
, reg_nr
))
3004 reg_index
= reg_nr
- tdep
->ppc_efpr0_regnum
;
3005 vr0
= PPC_VR0_REGNUM
;
3009 gdb_assert (IS_CEFP_PSEUDOREG (tdep
, reg_nr
));
3011 reg_index
= reg_nr
- tdep
->ppc_cefpr0_regnum
;
3012 vr0
= PPC_CVR0_REGNUM
;
3015 ax_reg_mask (ax
, vr0
+ reg_index
);
3019 rs6000_ax_pseudo_register_collect (struct gdbarch
*gdbarch
,
3020 struct agent_expr
*ax
, int reg_nr
)
3022 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3023 if (IS_SPE_PSEUDOREG (tdep
, reg_nr
))
3025 int reg_index
= reg_nr
- tdep
->ppc_ev0_regnum
;
3026 ax_reg_mask (ax
, tdep
->ppc_gp0_regnum
+ reg_index
);
3027 ax_reg_mask (ax
, tdep
->ppc_ev0_upper_regnum
+ reg_index
);
3029 else if (IS_DFP_PSEUDOREG (tdep
, reg_nr
)
3030 || IS_CDFP_PSEUDOREG (tdep
, reg_nr
))
3032 dfp_ax_pseudo_register_collect (gdbarch
, ax
, reg_nr
);
3034 else if (IS_VSX_PSEUDOREG (tdep
, reg_nr
)
3035 || IS_CVSX_PSEUDOREG (tdep
, reg_nr
))
3037 vsx_ax_pseudo_register_collect (gdbarch
, ax
, reg_nr
);
3039 else if (IS_EFP_PSEUDOREG (tdep
, reg_nr
)
3040 || IS_CEFP_PSEUDOREG (tdep
, reg_nr
))
3042 efp_ax_pseudo_register_collect (gdbarch
, ax
, reg_nr
);
3045 internal_error (__FILE__
, __LINE__
,
3046 _("rs6000_pseudo_register_collect: "
3047 "called on unexpected register '%s' (%d)"),
3048 gdbarch_register_name (gdbarch
, reg_nr
), reg_nr
);
3054 rs6000_gen_return_address (struct gdbarch
*gdbarch
,
3055 struct agent_expr
*ax
, struct axs_value
*value
,
3058 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3059 value
->type
= register_type (gdbarch
, tdep
->ppc_lr_regnum
);
3060 value
->kind
= axs_lvalue_register
;
3061 value
->u
.reg
= tdep
->ppc_lr_regnum
;
3065 /* Convert a DBX STABS register number to a GDB register number. */
3067 rs6000_stab_reg_to_regnum (struct gdbarch
*gdbarch
, int num
)
3069 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3071 if (0 <= num
&& num
<= 31)
3072 return tdep
->ppc_gp0_regnum
+ num
;
3073 else if (32 <= num
&& num
<= 63)
3074 /* FIXME: jimb/2004-05-05: What should we do when the debug info
3075 specifies registers the architecture doesn't have? Our
3076 callers don't check the value we return. */
3077 return tdep
->ppc_fp0_regnum
+ (num
- 32);
3078 else if (77 <= num
&& num
<= 108)
3079 return tdep
->ppc_vr0_regnum
+ (num
- 77);
3080 else if (1200 <= num
&& num
< 1200 + 32)
3081 return tdep
->ppc_ev0_upper_regnum
+ (num
- 1200);
3086 return tdep
->ppc_mq_regnum
;
3088 return tdep
->ppc_lr_regnum
;
3090 return tdep
->ppc_ctr_regnum
;
3092 return tdep
->ppc_xer_regnum
;
3094 return tdep
->ppc_vrsave_regnum
;
3096 return tdep
->ppc_vrsave_regnum
- 1; /* vscr */
3098 return tdep
->ppc_acc_regnum
;
3100 return tdep
->ppc_spefscr_regnum
;
3107 /* Convert a Dwarf 2 register number to a GDB register number. */
3109 rs6000_dwarf2_reg_to_regnum (struct gdbarch
*gdbarch
, int num
)
3111 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3113 if (0 <= num
&& num
<= 31)
3114 return tdep
->ppc_gp0_regnum
+ num
;
3115 else if (32 <= num
&& num
<= 63)
3116 /* FIXME: jimb/2004-05-05: What should we do when the debug info
3117 specifies registers the architecture doesn't have? Our
3118 callers don't check the value we return. */
3119 return tdep
->ppc_fp0_regnum
+ (num
- 32);
3120 else if (1124 <= num
&& num
< 1124 + 32)
3121 return tdep
->ppc_vr0_regnum
+ (num
- 1124);
3122 else if (1200 <= num
&& num
< 1200 + 32)
3123 return tdep
->ppc_ev0_upper_regnum
+ (num
- 1200);
3128 return tdep
->ppc_cr_regnum
;
3130 return tdep
->ppc_vrsave_regnum
- 1; /* vscr */
3132 return tdep
->ppc_acc_regnum
;
3134 return tdep
->ppc_mq_regnum
;
3136 return tdep
->ppc_xer_regnum
;
3138 return tdep
->ppc_lr_regnum
;
3140 return tdep
->ppc_ctr_regnum
;
3142 return tdep
->ppc_vrsave_regnum
;
3144 return tdep
->ppc_spefscr_regnum
;
3150 /* Translate a .eh_frame register to DWARF register, or adjust a
3151 .debug_frame register. */
3154 rs6000_adjust_frame_regnum (struct gdbarch
*gdbarch
, int num
, int eh_frame_p
)
3156 /* GCC releases before 3.4 use GCC internal register numbering in
3157 .debug_frame (and .debug_info, et cetera). The numbering is
3158 different from the standard SysV numbering for everything except
3159 for GPRs and FPRs. We can not detect this problem in most cases
3160 - to get accurate debug info for variables living in lr, ctr, v0,
3161 et cetera, use a newer version of GCC. But we must detect
3162 one important case - lr is in column 65 in .debug_frame output,
3165 GCC 3.4, and the "hammer" branch, have a related problem. They
3166 record lr register saves in .debug_frame as 108, but still record
3167 the return column as 65. We fix that up too.
3169 We can do this because 65 is assigned to fpsr, and GCC never
3170 generates debug info referring to it. To add support for
3171 handwritten debug info that restores fpsr, we would need to add a
3172 producer version check to this. */
3181 /* .eh_frame is GCC specific. For binary compatibility, it uses GCC
3182 internal register numbering; translate that to the standard DWARF2
3183 register numbering. */
3184 if (0 <= num
&& num
<= 63) /* r0-r31,fp0-fp31 */
3186 else if (68 <= num
&& num
<= 75) /* cr0-cr8 */
3187 return num
- 68 + 86;
3188 else if (77 <= num
&& num
<= 108) /* vr0-vr31 */
3189 return num
- 77 + 1124;
3201 case 109: /* vrsave */
3203 case 110: /* vscr */
3205 case 111: /* spe_acc */
3207 case 112: /* spefscr */
3215 /* Handling the various POWER/PowerPC variants. */
3217 /* Information about a particular processor variant. */
3221 /* Name of this variant. */
3224 /* English description of the variant. */
3225 const char *description
;
3227 /* bfd_arch_info.arch corresponding to variant. */
3228 enum bfd_architecture arch
;
3230 /* bfd_arch_info.mach corresponding to variant. */
3233 /* Target description for this variant. */
3234 struct target_desc
**tdesc
;
3237 static struct variant variants
[] =
3239 {"powerpc", "PowerPC user-level", bfd_arch_powerpc
,
3240 bfd_mach_ppc
, &tdesc_powerpc_altivec32
},
3241 {"power", "POWER user-level", bfd_arch_rs6000
,
3242 bfd_mach_rs6k
, &tdesc_rs6000
},
3243 {"403", "IBM PowerPC 403", bfd_arch_powerpc
,
3244 bfd_mach_ppc_403
, &tdesc_powerpc_403
},
3245 {"405", "IBM PowerPC 405", bfd_arch_powerpc
,
3246 bfd_mach_ppc_405
, &tdesc_powerpc_405
},
3247 {"601", "Motorola PowerPC 601", bfd_arch_powerpc
,
3248 bfd_mach_ppc_601
, &tdesc_powerpc_601
},
3249 {"602", "Motorola PowerPC 602", bfd_arch_powerpc
,
3250 bfd_mach_ppc_602
, &tdesc_powerpc_602
},
3251 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc
,
3252 bfd_mach_ppc_603
, &tdesc_powerpc_603
},
3253 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc
,
3254 604, &tdesc_powerpc_604
},
3255 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc
,
3256 bfd_mach_ppc_403gc
, &tdesc_powerpc_403gc
},
3257 {"505", "Motorola PowerPC 505", bfd_arch_powerpc
,
3258 bfd_mach_ppc_505
, &tdesc_powerpc_505
},
3259 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc
,
3260 bfd_mach_ppc_860
, &tdesc_powerpc_860
},
3261 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc
,
3262 bfd_mach_ppc_750
, &tdesc_powerpc_750
},
3263 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc
,
3264 bfd_mach_ppc_7400
, &tdesc_powerpc_7400
},
3265 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc
,
3266 bfd_mach_ppc_e500
, &tdesc_powerpc_e500
},
3269 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc
,
3270 bfd_mach_ppc64
, &tdesc_powerpc_altivec64
},
3271 {"620", "Motorola PowerPC 620", bfd_arch_powerpc
,
3272 bfd_mach_ppc_620
, &tdesc_powerpc_64
},
3273 {"630", "Motorola PowerPC 630", bfd_arch_powerpc
,
3274 bfd_mach_ppc_630
, &tdesc_powerpc_64
},
3275 {"a35", "PowerPC A35", bfd_arch_powerpc
,
3276 bfd_mach_ppc_a35
, &tdesc_powerpc_64
},
3277 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc
,
3278 bfd_mach_ppc_rs64ii
, &tdesc_powerpc_64
},
3279 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc
,
3280 bfd_mach_ppc_rs64iii
, &tdesc_powerpc_64
},
3282 /* FIXME: I haven't checked the register sets of the following. */
3283 {"rs1", "IBM POWER RS1", bfd_arch_rs6000
,
3284 bfd_mach_rs6k_rs1
, &tdesc_rs6000
},
3285 {"rsc", "IBM POWER RSC", bfd_arch_rs6000
,
3286 bfd_mach_rs6k_rsc
, &tdesc_rs6000
},
3287 {"rs2", "IBM POWER RS2", bfd_arch_rs6000
,
3288 bfd_mach_rs6k_rs2
, &tdesc_rs6000
},
3290 {0, 0, (enum bfd_architecture
) 0, 0, 0}
3293 /* Return the variant corresponding to architecture ARCH and machine number
3294 MACH. If no such variant exists, return null. */
3296 static const struct variant
*
3297 find_variant_by_arch (enum bfd_architecture arch
, unsigned long mach
)
3299 const struct variant
*v
;
3301 for (v
= variants
; v
->name
; v
++)
3302 if (arch
== v
->arch
&& mach
== v
->mach
)
3310 rs6000_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
3312 return frame_unwind_register_unsigned (next_frame
,
3313 gdbarch_pc_regnum (gdbarch
));
3316 static struct frame_id
3317 rs6000_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
3319 return frame_id_build (get_frame_register_unsigned
3320 (this_frame
, gdbarch_sp_regnum (gdbarch
)),
3321 get_frame_pc (this_frame
));
3324 struct rs6000_frame_cache
3327 CORE_ADDR initial_sp
;
3328 struct trad_frame_saved_reg
*saved_regs
;
3330 /* Set BASE_P to true if this frame cache is properly initialized.
3331 Otherwise set to false because some registers or memory cannot
3334 /* Cache PC for building unavailable frame. */
3338 static struct rs6000_frame_cache
*
3339 rs6000_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
3341 struct rs6000_frame_cache
*cache
;
3342 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3343 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3344 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3345 struct rs6000_framedata fdata
;
3346 int wordsize
= tdep
->wordsize
;
3347 CORE_ADDR func
= 0, pc
= 0;
3349 if ((*this_cache
) != NULL
)
3350 return (struct rs6000_frame_cache
*) (*this_cache
);
3351 cache
= FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache
);
3352 (*this_cache
) = cache
;
3354 cache
->saved_regs
= trad_frame_alloc_saved_regs (this_frame
);
3358 func
= get_frame_func (this_frame
);
3360 pc
= get_frame_pc (this_frame
);
3361 skip_prologue (gdbarch
, func
, pc
, &fdata
);
3363 /* Figure out the parent's stack pointer. */
3365 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
3366 address of the current frame. Things might be easier if the
3367 ->frame pointed to the outer-most address of the frame. In
3368 the mean time, the address of the prev frame is used as the
3369 base address of this frame. */
3370 cache
->base
= get_frame_register_unsigned
3371 (this_frame
, gdbarch_sp_regnum (gdbarch
));
3373 CATCH (ex
, RETURN_MASK_ERROR
)
3375 if (ex
.error
!= NOT_AVAILABLE_ERROR
)
3376 throw_exception (ex
);
3377 return (struct rs6000_frame_cache
*) (*this_cache
);
3381 /* If the function appears to be frameless, check a couple of likely
3382 indicators that we have simply failed to find the frame setup.
3383 Two common cases of this are missing symbols (i.e.
3384 get_frame_func returns the wrong address or 0), and assembly
3385 stubs which have a fast exit path but set up a frame on the slow
3388 If the LR appears to return to this function, then presume that
3389 we have an ABI compliant frame that we failed to find. */
3390 if (fdata
.frameless
&& fdata
.lr_offset
== 0)
3395 saved_lr
= get_frame_register_unsigned (this_frame
, tdep
->ppc_lr_regnum
);
3396 if (func
== 0 && saved_lr
== pc
)
3400 CORE_ADDR saved_func
= get_pc_function_start (saved_lr
);
3401 if (func
== saved_func
)
3407 fdata
.frameless
= 0;
3408 fdata
.lr_offset
= tdep
->lr_frame_offset
;
3412 if (!fdata
.frameless
)
3414 /* Frameless really means stackless. */
3417 if (safe_read_memory_unsigned_integer (cache
->base
, wordsize
,
3418 byte_order
, &backchain
))
3419 cache
->base
= (CORE_ADDR
) backchain
;
3422 trad_frame_set_value (cache
->saved_regs
,
3423 gdbarch_sp_regnum (gdbarch
), cache
->base
);
3425 /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3426 All fpr's from saved_fpr to fp31 are saved. */
3428 if (fdata
.saved_fpr
>= 0)
3431 CORE_ADDR fpr_addr
= cache
->base
+ fdata
.fpr_offset
;
3433 /* If skip_prologue says floating-point registers were saved,
3434 but the current architecture has no floating-point registers,
3435 then that's strange. But we have no indices to even record
3436 the addresses under, so we just ignore it. */
3437 if (ppc_floating_point_unit_p (gdbarch
))
3438 for (i
= fdata
.saved_fpr
; i
< ppc_num_fprs
; i
++)
3440 cache
->saved_regs
[tdep
->ppc_fp0_regnum
+ i
].addr
= fpr_addr
;
3445 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3446 All gpr's from saved_gpr to gpr31 are saved (except during the
3449 if (fdata
.saved_gpr
>= 0)
3452 CORE_ADDR gpr_addr
= cache
->base
+ fdata
.gpr_offset
;
3453 for (i
= fdata
.saved_gpr
; i
< ppc_num_gprs
; i
++)
3455 if (fdata
.gpr_mask
& (1U << i
))
3456 cache
->saved_regs
[tdep
->ppc_gp0_regnum
+ i
].addr
= gpr_addr
;
3457 gpr_addr
+= wordsize
;
3461 /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3462 All vr's from saved_vr to vr31 are saved. */
3463 if (tdep
->ppc_vr0_regnum
!= -1 && tdep
->ppc_vrsave_regnum
!= -1)
3465 if (fdata
.saved_vr
>= 0)
3468 CORE_ADDR vr_addr
= cache
->base
+ fdata
.vr_offset
;
3469 for (i
= fdata
.saved_vr
; i
< 32; i
++)
3471 cache
->saved_regs
[tdep
->ppc_vr0_regnum
+ i
].addr
= vr_addr
;
3472 vr_addr
+= register_size (gdbarch
, tdep
->ppc_vr0_regnum
);
3477 /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3478 All vr's from saved_ev to ev31 are saved. ????? */
3479 if (tdep
->ppc_ev0_regnum
!= -1)
3481 if (fdata
.saved_ev
>= 0)
3484 CORE_ADDR ev_addr
= cache
->base
+ fdata
.ev_offset
;
3485 CORE_ADDR off
= (byte_order
== BFD_ENDIAN_BIG
? 4 : 0);
3487 for (i
= fdata
.saved_ev
; i
< ppc_num_gprs
; i
++)
3489 cache
->saved_regs
[tdep
->ppc_ev0_regnum
+ i
].addr
= ev_addr
;
3490 cache
->saved_regs
[tdep
->ppc_gp0_regnum
+ i
].addr
= ev_addr
+ off
;
3491 ev_addr
+= register_size (gdbarch
, tdep
->ppc_ev0_regnum
);
3496 /* If != 0, fdata.cr_offset is the offset from the frame that
3498 if (fdata
.cr_offset
!= 0)
3499 cache
->saved_regs
[tdep
->ppc_cr_regnum
].addr
3500 = cache
->base
+ fdata
.cr_offset
;
3502 /* If != 0, fdata.lr_offset is the offset from the frame that
3504 if (fdata
.lr_offset
!= 0)
3505 cache
->saved_regs
[tdep
->ppc_lr_regnum
].addr
3506 = cache
->base
+ fdata
.lr_offset
;
3507 else if (fdata
.lr_register
!= -1)
3508 cache
->saved_regs
[tdep
->ppc_lr_regnum
].realreg
= fdata
.lr_register
;
3509 /* The PC is found in the link register. */
3510 cache
->saved_regs
[gdbarch_pc_regnum (gdbarch
)] =
3511 cache
->saved_regs
[tdep
->ppc_lr_regnum
];
3513 /* If != 0, fdata.vrsave_offset is the offset from the frame that
3514 holds the VRSAVE. */
3515 if (fdata
.vrsave_offset
!= 0)
3516 cache
->saved_regs
[tdep
->ppc_vrsave_regnum
].addr
3517 = cache
->base
+ fdata
.vrsave_offset
;
3519 if (fdata
.alloca_reg
< 0)
3520 /* If no alloca register used, then fi->frame is the value of the
3521 %sp for this frame, and it is good enough. */
3523 = get_frame_register_unsigned (this_frame
, gdbarch_sp_regnum (gdbarch
));
3526 = get_frame_register_unsigned (this_frame
, fdata
.alloca_reg
);
3533 rs6000_frame_this_id (struct frame_info
*this_frame
, void **this_cache
,
3534 struct frame_id
*this_id
)
3536 struct rs6000_frame_cache
*info
= rs6000_frame_cache (this_frame
,
3541 (*this_id
) = frame_id_build_unavailable_stack (info
->pc
);
3545 /* This marks the outermost frame. */
3546 if (info
->base
== 0)
3549 (*this_id
) = frame_id_build (info
->base
, get_frame_func (this_frame
));
3552 static struct value
*
3553 rs6000_frame_prev_register (struct frame_info
*this_frame
,
3554 void **this_cache
, int regnum
)
3556 struct rs6000_frame_cache
*info
= rs6000_frame_cache (this_frame
,
3558 return trad_frame_get_prev_register (this_frame
, info
->saved_regs
, regnum
);
3561 static const struct frame_unwind rs6000_frame_unwind
=
3564 default_frame_unwind_stop_reason
,
3565 rs6000_frame_this_id
,
3566 rs6000_frame_prev_register
,
3568 default_frame_sniffer
3571 /* Allocate and initialize a frame cache for an epilogue frame.
3572 SP is restored and prev-PC is stored in LR. */
3574 static struct rs6000_frame_cache
*
3575 rs6000_epilogue_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
3577 struct rs6000_frame_cache
*cache
;
3578 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3579 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3582 return (struct rs6000_frame_cache
*) *this_cache
;
3584 cache
= FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache
);
3585 (*this_cache
) = cache
;
3586 cache
->saved_regs
= trad_frame_alloc_saved_regs (this_frame
);
3590 /* At this point the stack looks as if we just entered the
3591 function, and the return address is stored in LR. */
3594 sp
= get_frame_register_unsigned (this_frame
, gdbarch_sp_regnum (gdbarch
));
3595 lr
= get_frame_register_unsigned (this_frame
, tdep
->ppc_lr_regnum
);
3598 cache
->initial_sp
= sp
;
3600 trad_frame_set_value (cache
->saved_regs
,
3601 gdbarch_pc_regnum (gdbarch
), lr
);
3603 CATCH (ex
, RETURN_MASK_ERROR
)
3605 if (ex
.error
!= NOT_AVAILABLE_ERROR
)
3606 throw_exception (ex
);
3613 /* Implementation of frame_unwind.this_id, as defined in frame_unwind.h.
3614 Return the frame ID of an epilogue frame. */
3617 rs6000_epilogue_frame_this_id (struct frame_info
*this_frame
,
3618 void **this_cache
, struct frame_id
*this_id
)
3621 struct rs6000_frame_cache
*info
=
3622 rs6000_epilogue_frame_cache (this_frame
, this_cache
);
3624 pc
= get_frame_func (this_frame
);
3625 if (info
->base
== 0)
3626 (*this_id
) = frame_id_build_unavailable_stack (pc
);
3628 (*this_id
) = frame_id_build (info
->base
, pc
);
3631 /* Implementation of frame_unwind.prev_register, as defined in frame_unwind.h.
3632 Return the register value of REGNUM in previous frame. */
3634 static struct value
*
3635 rs6000_epilogue_frame_prev_register (struct frame_info
*this_frame
,
3636 void **this_cache
, int regnum
)
3638 struct rs6000_frame_cache
*info
=
3639 rs6000_epilogue_frame_cache (this_frame
, this_cache
);
3640 return trad_frame_get_prev_register (this_frame
, info
->saved_regs
, regnum
);
3643 /* Implementation of frame_unwind.sniffer, as defined in frame_unwind.h.
3644 Check whether this an epilogue frame. */
3647 rs6000_epilogue_frame_sniffer (const struct frame_unwind
*self
,
3648 struct frame_info
*this_frame
,
3649 void **this_prologue_cache
)
3651 if (frame_relative_level (this_frame
) == 0)
3652 return rs6000_in_function_epilogue_frame_p (this_frame
,
3653 get_frame_arch (this_frame
),
3654 get_frame_pc (this_frame
));
3659 /* Frame unwinder for epilogue frame. This is required for reverse step-over
3660 a function without debug information. */
3662 static const struct frame_unwind rs6000_epilogue_frame_unwind
=
3665 default_frame_unwind_stop_reason
,
3666 rs6000_epilogue_frame_this_id
, rs6000_epilogue_frame_prev_register
,
3668 rs6000_epilogue_frame_sniffer
3673 rs6000_frame_base_address (struct frame_info
*this_frame
, void **this_cache
)
3675 struct rs6000_frame_cache
*info
= rs6000_frame_cache (this_frame
,
3677 return info
->initial_sp
;
3680 static const struct frame_base rs6000_frame_base
= {
3681 &rs6000_frame_unwind
,
3682 rs6000_frame_base_address
,
3683 rs6000_frame_base_address
,
3684 rs6000_frame_base_address
3687 static const struct frame_base
*
3688 rs6000_frame_base_sniffer (struct frame_info
*this_frame
)
3690 return &rs6000_frame_base
;
3693 /* DWARF-2 frame support. Used to handle the detection of
3694 clobbered registers during function calls. */
3697 ppc_dwarf2_frame_init_reg (struct gdbarch
*gdbarch
, int regnum
,
3698 struct dwarf2_frame_state_reg
*reg
,
3699 struct frame_info
*this_frame
)
3701 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3703 /* PPC32 and PPC64 ABI's are the same regarding volatile and
3704 non-volatile registers. We will use the same code for both. */
3706 /* Call-saved GP registers. */
3707 if ((regnum
>= tdep
->ppc_gp0_regnum
+ 14
3708 && regnum
<= tdep
->ppc_gp0_regnum
+ 31)
3709 || (regnum
== tdep
->ppc_gp0_regnum
+ 1))
3710 reg
->how
= DWARF2_FRAME_REG_SAME_VALUE
;
3712 /* Call-clobbered GP registers. */
3713 if ((regnum
>= tdep
->ppc_gp0_regnum
+ 3
3714 && regnum
<= tdep
->ppc_gp0_regnum
+ 12)
3715 || (regnum
== tdep
->ppc_gp0_regnum
))
3716 reg
->how
= DWARF2_FRAME_REG_UNDEFINED
;
3718 /* Deal with FP registers, if supported. */
3719 if (tdep
->ppc_fp0_regnum
>= 0)
3721 /* Call-saved FP registers. */
3722 if ((regnum
>= tdep
->ppc_fp0_regnum
+ 14
3723 && regnum
<= tdep
->ppc_fp0_regnum
+ 31))
3724 reg
->how
= DWARF2_FRAME_REG_SAME_VALUE
;
3726 /* Call-clobbered FP registers. */
3727 if ((regnum
>= tdep
->ppc_fp0_regnum
3728 && regnum
<= tdep
->ppc_fp0_regnum
+ 13))
3729 reg
->how
= DWARF2_FRAME_REG_UNDEFINED
;
3732 /* Deal with ALTIVEC registers, if supported. */
3733 if (tdep
->ppc_vr0_regnum
> 0 && tdep
->ppc_vrsave_regnum
> 0)
3735 /* Call-saved Altivec registers. */
3736 if ((regnum
>= tdep
->ppc_vr0_regnum
+ 20
3737 && regnum
<= tdep
->ppc_vr0_regnum
+ 31)
3738 || regnum
== tdep
->ppc_vrsave_regnum
)
3739 reg
->how
= DWARF2_FRAME_REG_SAME_VALUE
;
3741 /* Call-clobbered Altivec registers. */
3742 if ((regnum
>= tdep
->ppc_vr0_regnum
3743 && regnum
<= tdep
->ppc_vr0_regnum
+ 19))
3744 reg
->how
= DWARF2_FRAME_REG_UNDEFINED
;
3747 /* Handle PC register and Stack Pointer correctly. */
3748 if (regnum
== gdbarch_pc_regnum (gdbarch
))
3749 reg
->how
= DWARF2_FRAME_REG_RA
;
3750 else if (regnum
== gdbarch_sp_regnum (gdbarch
))
3751 reg
->how
= DWARF2_FRAME_REG_CFA
;
3755 /* Return true if a .gnu_attributes section exists in BFD and it
3756 indicates we are using SPE extensions OR if a .PPC.EMB.apuinfo
3757 section exists in BFD and it indicates that SPE extensions are in
3758 use. Check the .gnu.attributes section first, as the binary might be
3759 compiled for SPE, but not actually using SPE instructions. */
3762 bfd_uses_spe_extensions (bfd
*abfd
)
3765 gdb_byte
*contents
= NULL
;
3774 /* Using Tag_GNU_Power_ABI_Vector here is a bit of a hack, as the user
3775 could be using the SPE vector abi without actually using any spe
3776 bits whatsoever. But it's close enough for now. */
3777 int vector_abi
= bfd_elf_get_obj_attr_int (abfd
, OBJ_ATTR_GNU
,
3778 Tag_GNU_Power_ABI_Vector
);
3779 if (vector_abi
== 3)
3783 sect
= bfd_get_section_by_name (abfd
, ".PPC.EMB.apuinfo");
3787 size
= bfd_get_section_size (sect
);
3788 contents
= (gdb_byte
*) xmalloc (size
);
3789 if (!bfd_get_section_contents (abfd
, sect
, contents
, 0, size
))
3795 /* Parse the .PPC.EMB.apuinfo section. The layout is as follows:
3801 char name[name_len rounded up to 4-byte alignment];
3802 char data[data_len];
3805 Technically, there's only supposed to be one such structure in a
3806 given apuinfo section, but the linker is not always vigilant about
3807 merging apuinfo sections from input files. Just go ahead and parse
3808 them all, exiting early when we discover the binary uses SPE
3811 It's not specified in what endianness the information in this
3812 section is stored. Assume that it's the endianness of the BFD. */
3816 unsigned int name_len
;
3817 unsigned int data_len
;
3820 /* If we can't read the first three fields, we're done. */
3824 name_len
= bfd_get_32 (abfd
, ptr
);
3825 name_len
= (name_len
+ 3) & ~3U; /* Round to 4 bytes. */
3826 data_len
= bfd_get_32 (abfd
, ptr
+ 4);
3827 type
= bfd_get_32 (abfd
, ptr
+ 8);
3830 /* The name must be "APUinfo\0". */
3832 && strcmp ((const char *) ptr
, "APUinfo") != 0)
3836 /* The type must be 2. */
3840 /* The data is stored as a series of uint32. The upper half of
3841 each uint32 indicates the particular APU used and the lower
3842 half indicates the revision of that APU. We just care about
3845 /* Not 4-byte quantities. */
3851 unsigned int apuinfo
= bfd_get_32 (abfd
, ptr
);
3852 unsigned int apu
= apuinfo
>> 16;
3856 /* The SPE APU is 0x100; the SPEFP APU is 0x101. Accept
3858 if (apu
== 0x100 || apu
== 0x101)
3873 /* These are macros for parsing instruction fields (I.1.6.28) */
3875 #define PPC_FIELD(value, from, len) \
3876 (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1))
3877 #define PPC_SEXT(v, bs) \
3878 ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \
3879 ^ ((CORE_ADDR) 1 << ((bs) - 1))) \
3880 - ((CORE_ADDR) 1 << ((bs) - 1)))
3881 #define PPC_OP6(insn) PPC_FIELD (insn, 0, 6)
3882 #define PPC_EXTOP(insn) PPC_FIELD (insn, 21, 10)
3883 #define PPC_RT(insn) PPC_FIELD (insn, 6, 5)
3884 #define PPC_RS(insn) PPC_FIELD (insn, 6, 5)
3885 #define PPC_RA(insn) PPC_FIELD (insn, 11, 5)
3886 #define PPC_RB(insn) PPC_FIELD (insn, 16, 5)
3887 #define PPC_NB(insn) PPC_FIELD (insn, 16, 5)
3888 #define PPC_VRT(insn) PPC_FIELD (insn, 6, 5)
3889 #define PPC_FRT(insn) PPC_FIELD (insn, 6, 5)
3890 #define PPC_SPR(insn) (PPC_FIELD (insn, 11, 5) \
3891 | (PPC_FIELD (insn, 16, 5) << 5))
3892 #define PPC_BO(insn) PPC_FIELD (insn, 6, 5)
3893 #define PPC_T(insn) PPC_FIELD (insn, 6, 5)
3894 #define PPC_D(insn) PPC_SEXT (PPC_FIELD (insn, 16, 16), 16)
3895 #define PPC_DS(insn) PPC_SEXT (PPC_FIELD (insn, 16, 14), 14)
3896 #define PPC_DQ(insn) PPC_SEXT (PPC_FIELD (insn, 16, 12), 12)
3897 #define PPC_BIT(insn,n) ((insn & (1 << (31 - (n)))) ? 1 : 0)
3898 #define PPC_OE(insn) PPC_BIT (insn, 21)
3899 #define PPC_RC(insn) PPC_BIT (insn, 31)
3900 #define PPC_Rc(insn) PPC_BIT (insn, 21)
3901 #define PPC_LK(insn) PPC_BIT (insn, 31)
3902 #define PPC_TX(insn) PPC_BIT (insn, 31)
3903 #define PPC_LEV(insn) PPC_FIELD (insn, 20, 7)
3905 #define PPC_XT(insn) ((PPC_TX (insn) << 5) | PPC_T (insn))
3906 #define PPC_XER_NB(xer) (xer & 0x7f)
3908 /* Record Vector-Scalar Registers.
3909 For VSR less than 32, it's represented by an FPR and an VSR-upper register.
3910 Otherwise, it's just a VR register. Record them accordingly. */
3913 ppc_record_vsr (struct regcache
*regcache
, struct gdbarch_tdep
*tdep
, int vsr
)
3915 if (vsr
< 0 || vsr
>= 64)
3920 if (tdep
->ppc_vr0_regnum
>= 0)
3921 record_full_arch_list_add_reg (regcache
, tdep
->ppc_vr0_regnum
+ vsr
- 32);
3925 if (tdep
->ppc_fp0_regnum
>= 0)
3926 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fp0_regnum
+ vsr
);
3927 if (tdep
->ppc_vsr0_upper_regnum
>= 0)
3928 record_full_arch_list_add_reg (regcache
,
3929 tdep
->ppc_vsr0_upper_regnum
+ vsr
);
3935 /* Parse and record instructions primary opcode-4 at ADDR.
3936 Return 0 if successful. */
3939 ppc_process_record_op4 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
3940 CORE_ADDR addr
, uint32_t insn
)
3942 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3943 int ext
= PPC_FIELD (insn
, 21, 11);
3944 int vra
= PPC_FIELD (insn
, 11, 5);
3948 case 32: /* Vector Multiply-High-Add Signed Halfword Saturate */
3949 case 33: /* Vector Multiply-High-Round-Add Signed Halfword Saturate */
3950 case 39: /* Vector Multiply-Sum Unsigned Halfword Saturate */
3951 case 41: /* Vector Multiply-Sum Signed Halfword Saturate */
3952 record_full_arch_list_add_reg (regcache
, PPC_VSCR_REGNUM
);
3954 case 42: /* Vector Select */
3955 case 43: /* Vector Permute */
3956 case 59: /* Vector Permute Right-indexed */
3957 case 44: /* Vector Shift Left Double by Octet Immediate */
3958 case 45: /* Vector Permute and Exclusive-OR */
3959 case 60: /* Vector Add Extended Unsigned Quadword Modulo */
3960 case 61: /* Vector Add Extended & write Carry Unsigned Quadword */
3961 case 62: /* Vector Subtract Extended Unsigned Quadword Modulo */
3962 case 63: /* Vector Subtract Extended & write Carry Unsigned Quadword */
3963 case 34: /* Vector Multiply-Low-Add Unsigned Halfword Modulo */
3964 case 35: /* Vector Multiply-Sum Unsigned Doubleword Modulo */
3965 case 36: /* Vector Multiply-Sum Unsigned Byte Modulo */
3966 case 37: /* Vector Multiply-Sum Mixed Byte Modulo */
3967 case 38: /* Vector Multiply-Sum Unsigned Halfword Modulo */
3968 case 40: /* Vector Multiply-Sum Signed Halfword Modulo */
3969 case 46: /* Vector Multiply-Add Single-Precision */
3970 case 47: /* Vector Negative Multiply-Subtract Single-Precision */
3971 record_full_arch_list_add_reg (regcache
,
3972 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
3975 case 48: /* Multiply-Add High Doubleword */
3976 case 49: /* Multiply-Add High Doubleword Unsigned */
3977 case 51: /* Multiply-Add Low Doubleword */
3978 record_full_arch_list_add_reg (regcache
,
3979 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
3983 switch ((ext
& 0x1ff))
3986 if (vra
!= 0 /* Decimal Convert To Signed Quadword */
3987 && vra
!= 2 /* Decimal Convert From Signed Quadword */
3988 && vra
!= 4 /* Decimal Convert To Zoned */
3989 && vra
!= 5 /* Decimal Convert To National */
3990 && vra
!= 6 /* Decimal Convert From Zoned */
3991 && vra
!= 7 /* Decimal Convert From National */
3992 && vra
!= 31) /* Decimal Set Sign */
3995 /* 5.16 Decimal Integer Arithmetic Instructions */
3996 case 1: /* Decimal Add Modulo */
3997 case 65: /* Decimal Subtract Modulo */
3999 case 193: /* Decimal Shift */
4000 case 129: /* Decimal Unsigned Shift */
4001 case 449: /* Decimal Shift and Round */
4003 case 257: /* Decimal Truncate */
4004 case 321: /* Decimal Unsigned Truncate */
4006 /* Bit-21 should be set. */
4007 if (!PPC_BIT (insn
, 21))
4010 record_full_arch_list_add_reg (regcache
,
4011 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4012 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4016 /* Bit-21 is used for RC */
4017 switch (ext
& 0x3ff)
4019 case 6: /* Vector Compare Equal To Unsigned Byte */
4020 case 70: /* Vector Compare Equal To Unsigned Halfword */
4021 case 134: /* Vector Compare Equal To Unsigned Word */
4022 case 199: /* Vector Compare Equal To Unsigned Doubleword */
4023 case 774: /* Vector Compare Greater Than Signed Byte */
4024 case 838: /* Vector Compare Greater Than Signed Halfword */
4025 case 902: /* Vector Compare Greater Than Signed Word */
4026 case 967: /* Vector Compare Greater Than Signed Doubleword */
4027 case 518: /* Vector Compare Greater Than Unsigned Byte */
4028 case 646: /* Vector Compare Greater Than Unsigned Word */
4029 case 582: /* Vector Compare Greater Than Unsigned Halfword */
4030 case 711: /* Vector Compare Greater Than Unsigned Doubleword */
4031 case 966: /* Vector Compare Bounds Single-Precision */
4032 case 198: /* Vector Compare Equal To Single-Precision */
4033 case 454: /* Vector Compare Greater Than or Equal To Single-Precision */
4034 case 710: /* Vector Compare Greater Than Single-Precision */
4035 case 7: /* Vector Compare Not Equal Byte */
4036 case 71: /* Vector Compare Not Equal Halfword */
4037 case 135: /* Vector Compare Not Equal Word */
4038 case 263: /* Vector Compare Not Equal or Zero Byte */
4039 case 327: /* Vector Compare Not Equal or Zero Halfword */
4040 case 391: /* Vector Compare Not Equal or Zero Word */
4042 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4043 record_full_arch_list_add_reg (regcache
,
4044 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4052 case 0: /* Vector Count Leading Zero Least-Significant Bits
4054 case 1: /* Vector Count Trailing Zero Least-Significant Bits
4056 record_full_arch_list_add_reg (regcache
,
4057 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4060 case 6: /* Vector Negate Word */
4061 case 7: /* Vector Negate Doubleword */
4062 case 8: /* Vector Parity Byte Word */
4063 case 9: /* Vector Parity Byte Doubleword */
4064 case 10: /* Vector Parity Byte Quadword */
4065 case 16: /* Vector Extend Sign Byte To Word */
4066 case 17: /* Vector Extend Sign Halfword To Word */
4067 case 24: /* Vector Extend Sign Byte To Doubleword */
4068 case 25: /* Vector Extend Sign Halfword To Doubleword */
4069 case 26: /* Vector Extend Sign Word To Doubleword */
4070 case 28: /* Vector Count Trailing Zeros Byte */
4071 case 29: /* Vector Count Trailing Zeros Halfword */
4072 case 30: /* Vector Count Trailing Zeros Word */
4073 case 31: /* Vector Count Trailing Zeros Doubleword */
4074 record_full_arch_list_add_reg (regcache
,
4075 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4082 case 142: /* Vector Pack Unsigned Halfword Unsigned Saturate */
4083 case 206: /* Vector Pack Unsigned Word Unsigned Saturate */
4084 case 270: /* Vector Pack Signed Halfword Unsigned Saturate */
4085 case 334: /* Vector Pack Signed Word Unsigned Saturate */
4086 case 398: /* Vector Pack Signed Halfword Signed Saturate */
4087 case 462: /* Vector Pack Signed Word Signed Saturate */
4088 case 1230: /* Vector Pack Unsigned Doubleword Unsigned Saturate */
4089 case 1358: /* Vector Pack Signed Doubleword Unsigned Saturate */
4090 case 1486: /* Vector Pack Signed Doubleword Signed Saturate */
4091 case 512: /* Vector Add Unsigned Byte Saturate */
4092 case 576: /* Vector Add Unsigned Halfword Saturate */
4093 case 640: /* Vector Add Unsigned Word Saturate */
4094 case 768: /* Vector Add Signed Byte Saturate */
4095 case 832: /* Vector Add Signed Halfword Saturate */
4096 case 896: /* Vector Add Signed Word Saturate */
4097 case 1536: /* Vector Subtract Unsigned Byte Saturate */
4098 case 1600: /* Vector Subtract Unsigned Halfword Saturate */
4099 case 1664: /* Vector Subtract Unsigned Word Saturate */
4100 case 1792: /* Vector Subtract Signed Byte Saturate */
4101 case 1856: /* Vector Subtract Signed Halfword Saturate */
4102 case 1920: /* Vector Subtract Signed Word Saturate */
4104 case 1544: /* Vector Sum across Quarter Unsigned Byte Saturate */
4105 case 1800: /* Vector Sum across Quarter Signed Byte Saturate */
4106 case 1608: /* Vector Sum across Quarter Signed Halfword Saturate */
4107 case 1672: /* Vector Sum across Half Signed Word Saturate */
4108 case 1928: /* Vector Sum across Signed Word Saturate */
4109 case 970: /* Vector Convert To Signed Fixed-Point Word Saturate */
4110 case 906: /* Vector Convert To Unsigned Fixed-Point Word Saturate */
4111 record_full_arch_list_add_reg (regcache
, PPC_VSCR_REGNUM
);
4113 case 12: /* Vector Merge High Byte */
4114 case 14: /* Vector Pack Unsigned Halfword Unsigned Modulo */
4115 case 76: /* Vector Merge High Halfword */
4116 case 78: /* Vector Pack Unsigned Word Unsigned Modulo */
4117 case 140: /* Vector Merge High Word */
4118 case 268: /* Vector Merge Low Byte */
4119 case 332: /* Vector Merge Low Halfword */
4120 case 396: /* Vector Merge Low Word */
4121 case 526: /* Vector Unpack High Signed Byte */
4122 case 590: /* Vector Unpack High Signed Halfword */
4123 case 654: /* Vector Unpack Low Signed Byte */
4124 case 718: /* Vector Unpack Low Signed Halfword */
4125 case 782: /* Vector Pack Pixel */
4126 case 846: /* Vector Unpack High Pixel */
4127 case 974: /* Vector Unpack Low Pixel */
4128 case 1102: /* Vector Pack Unsigned Doubleword Unsigned Modulo */
4129 case 1614: /* Vector Unpack High Signed Word */
4130 case 1676: /* Vector Merge Odd Word */
4131 case 1742: /* Vector Unpack Low Signed Word */
4132 case 1932: /* Vector Merge Even Word */
4133 case 524: /* Vector Splat Byte */
4134 case 588: /* Vector Splat Halfword */
4135 case 652: /* Vector Splat Word */
4136 case 780: /* Vector Splat Immediate Signed Byte */
4137 case 844: /* Vector Splat Immediate Signed Halfword */
4138 case 908: /* Vector Splat Immediate Signed Word */
4139 case 452: /* Vector Shift Left */
4140 case 708: /* Vector Shift Right */
4141 case 1036: /* Vector Shift Left by Octet */
4142 case 1100: /* Vector Shift Right by Octet */
4143 case 0: /* Vector Add Unsigned Byte Modulo */
4144 case 64: /* Vector Add Unsigned Halfword Modulo */
4145 case 128: /* Vector Add Unsigned Word Modulo */
4146 case 192: /* Vector Add Unsigned Doubleword Modulo */
4147 case 256: /* Vector Add Unsigned Quadword Modulo */
4148 case 320: /* Vector Add & write Carry Unsigned Quadword */
4149 case 384: /* Vector Add and Write Carry-Out Unsigned Word */
4150 case 8: /* Vector Multiply Odd Unsigned Byte */
4151 case 72: /* Vector Multiply Odd Unsigned Halfword */
4152 case 136: /* Vector Multiply Odd Unsigned Word */
4153 case 264: /* Vector Multiply Odd Signed Byte */
4154 case 328: /* Vector Multiply Odd Signed Halfword */
4155 case 392: /* Vector Multiply Odd Signed Word */
4156 case 520: /* Vector Multiply Even Unsigned Byte */
4157 case 584: /* Vector Multiply Even Unsigned Halfword */
4158 case 648: /* Vector Multiply Even Unsigned Word */
4159 case 776: /* Vector Multiply Even Signed Byte */
4160 case 840: /* Vector Multiply Even Signed Halfword */
4161 case 904: /* Vector Multiply Even Signed Word */
4162 case 137: /* Vector Multiply Unsigned Word Modulo */
4163 case 1024: /* Vector Subtract Unsigned Byte Modulo */
4164 case 1088: /* Vector Subtract Unsigned Halfword Modulo */
4165 case 1152: /* Vector Subtract Unsigned Word Modulo */
4166 case 1216: /* Vector Subtract Unsigned Doubleword Modulo */
4167 case 1280: /* Vector Subtract Unsigned Quadword Modulo */
4168 case 1344: /* Vector Subtract & write Carry Unsigned Quadword */
4169 case 1408: /* Vector Subtract and Write Carry-Out Unsigned Word */
4170 case 1282: /* Vector Average Signed Byte */
4171 case 1346: /* Vector Average Signed Halfword */
4172 case 1410: /* Vector Average Signed Word */
4173 case 1026: /* Vector Average Unsigned Byte */
4174 case 1090: /* Vector Average Unsigned Halfword */
4175 case 1154: /* Vector Average Unsigned Word */
4176 case 258: /* Vector Maximum Signed Byte */
4177 case 322: /* Vector Maximum Signed Halfword */
4178 case 386: /* Vector Maximum Signed Word */
4179 case 450: /* Vector Maximum Signed Doubleword */
4180 case 2: /* Vector Maximum Unsigned Byte */
4181 case 66: /* Vector Maximum Unsigned Halfword */
4182 case 130: /* Vector Maximum Unsigned Word */
4183 case 194: /* Vector Maximum Unsigned Doubleword */
4184 case 770: /* Vector Minimum Signed Byte */
4185 case 834: /* Vector Minimum Signed Halfword */
4186 case 898: /* Vector Minimum Signed Word */
4187 case 962: /* Vector Minimum Signed Doubleword */
4188 case 514: /* Vector Minimum Unsigned Byte */
4189 case 578: /* Vector Minimum Unsigned Halfword */
4190 case 642: /* Vector Minimum Unsigned Word */
4191 case 706: /* Vector Minimum Unsigned Doubleword */
4192 case 1028: /* Vector Logical AND */
4193 case 1668: /* Vector Logical Equivalent */
4194 case 1092: /* Vector Logical AND with Complement */
4195 case 1412: /* Vector Logical NAND */
4196 case 1348: /* Vector Logical OR with Complement */
4197 case 1156: /* Vector Logical OR */
4198 case 1284: /* Vector Logical NOR */
4199 case 1220: /* Vector Logical XOR */
4200 case 4: /* Vector Rotate Left Byte */
4201 case 132: /* Vector Rotate Left Word VX-form */
4202 case 68: /* Vector Rotate Left Halfword */
4203 case 196: /* Vector Rotate Left Doubleword */
4204 case 260: /* Vector Shift Left Byte */
4205 case 388: /* Vector Shift Left Word */
4206 case 324: /* Vector Shift Left Halfword */
4207 case 1476: /* Vector Shift Left Doubleword */
4208 case 516: /* Vector Shift Right Byte */
4209 case 644: /* Vector Shift Right Word */
4210 case 580: /* Vector Shift Right Halfword */
4211 case 1732: /* Vector Shift Right Doubleword */
4212 case 772: /* Vector Shift Right Algebraic Byte */
4213 case 900: /* Vector Shift Right Algebraic Word */
4214 case 836: /* Vector Shift Right Algebraic Halfword */
4215 case 964: /* Vector Shift Right Algebraic Doubleword */
4216 case 10: /* Vector Add Single-Precision */
4217 case 74: /* Vector Subtract Single-Precision */
4218 case 1034: /* Vector Maximum Single-Precision */
4219 case 1098: /* Vector Minimum Single-Precision */
4220 case 842: /* Vector Convert From Signed Fixed-Point Word */
4221 case 778: /* Vector Convert From Unsigned Fixed-Point Word */
4222 case 714: /* Vector Round to Single-Precision Integer toward -Infinity */
4223 case 522: /* Vector Round to Single-Precision Integer Nearest */
4224 case 650: /* Vector Round to Single-Precision Integer toward +Infinity */
4225 case 586: /* Vector Round to Single-Precision Integer toward Zero */
4226 case 394: /* Vector 2 Raised to the Exponent Estimate Floating-Point */
4227 case 458: /* Vector Log Base 2 Estimate Floating-Point */
4228 case 266: /* Vector Reciprocal Estimate Single-Precision */
4229 case 330: /* Vector Reciprocal Square Root Estimate Single-Precision */
4230 case 1288: /* Vector AES Cipher */
4231 case 1289: /* Vector AES Cipher Last */
4232 case 1352: /* Vector AES Inverse Cipher */
4233 case 1353: /* Vector AES Inverse Cipher Last */
4234 case 1480: /* Vector AES SubBytes */
4235 case 1730: /* Vector SHA-512 Sigma Doubleword */
4236 case 1666: /* Vector SHA-256 Sigma Word */
4237 case 1032: /* Vector Polynomial Multiply-Sum Byte */
4238 case 1160: /* Vector Polynomial Multiply-Sum Word */
4239 case 1096: /* Vector Polynomial Multiply-Sum Halfword */
4240 case 1224: /* Vector Polynomial Multiply-Sum Doubleword */
4241 case 1292: /* Vector Gather Bits by Bytes by Doubleword */
4242 case 1794: /* Vector Count Leading Zeros Byte */
4243 case 1858: /* Vector Count Leading Zeros Halfword */
4244 case 1922: /* Vector Count Leading Zeros Word */
4245 case 1986: /* Vector Count Leading Zeros Doubleword */
4246 case 1795: /* Vector Population Count Byte */
4247 case 1859: /* Vector Population Count Halfword */
4248 case 1923: /* Vector Population Count Word */
4249 case 1987: /* Vector Population Count Doubleword */
4250 case 1356: /* Vector Bit Permute Quadword */
4251 case 1484: /* Vector Bit Permute Doubleword */
4252 case 513: /* Vector Multiply-by-10 Unsigned Quadword */
4253 case 1: /* Vector Multiply-by-10 & write Carry Unsigned
4255 case 577: /* Vector Multiply-by-10 Extended Unsigned Quadword */
4256 case 65: /* Vector Multiply-by-10 Extended & write Carry
4257 Unsigned Quadword */
4258 case 1027: /* Vector Absolute Difference Unsigned Byte */
4259 case 1091: /* Vector Absolute Difference Unsigned Halfword */
4260 case 1155: /* Vector Absolute Difference Unsigned Word */
4261 case 1796: /* Vector Shift Right Variable */
4262 case 1860: /* Vector Shift Left Variable */
4263 case 133: /* Vector Rotate Left Word then Mask Insert */
4264 case 197: /* Vector Rotate Left Doubleword then Mask Insert */
4265 case 389: /* Vector Rotate Left Word then AND with Mask */
4266 case 453: /* Vector Rotate Left Doubleword then AND with Mask */
4267 case 525: /* Vector Extract Unsigned Byte */
4268 case 589: /* Vector Extract Unsigned Halfword */
4269 case 653: /* Vector Extract Unsigned Word */
4270 case 717: /* Vector Extract Doubleword */
4271 case 781: /* Vector Insert Byte */
4272 case 845: /* Vector Insert Halfword */
4273 case 909: /* Vector Insert Word */
4274 case 973: /* Vector Insert Doubleword */
4275 record_full_arch_list_add_reg (regcache
,
4276 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4279 case 1549: /* Vector Extract Unsigned Byte Left-Indexed */
4280 case 1613: /* Vector Extract Unsigned Halfword Left-Indexed */
4281 case 1677: /* Vector Extract Unsigned Word Left-Indexed */
4282 case 1805: /* Vector Extract Unsigned Byte Right-Indexed */
4283 case 1869: /* Vector Extract Unsigned Halfword Right-Indexed */
4284 case 1933: /* Vector Extract Unsigned Word Right-Indexed */
4285 record_full_arch_list_add_reg (regcache
,
4286 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4289 case 1604: /* Move To Vector Status and Control Register */
4290 record_full_arch_list_add_reg (regcache
, PPC_VSCR_REGNUM
);
4292 case 1540: /* Move From Vector Status and Control Register */
4293 record_full_arch_list_add_reg (regcache
,
4294 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4296 case 833: /* Decimal Copy Sign */
4297 record_full_arch_list_add_reg (regcache
,
4298 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4299 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4303 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
4304 "at %s, 4-%d.\n", insn
, paddress (gdbarch
, addr
), ext
);
4308 /* Parse and record instructions of primary opcode-19 at ADDR.
4309 Return 0 if successful. */
4312 ppc_process_record_op19 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
4313 CORE_ADDR addr
, uint32_t insn
)
4315 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
4316 int ext
= PPC_EXTOP (insn
);
4318 switch (ext
& 0x01f)
4320 case 2: /* Add PC Immediate Shifted */
4321 record_full_arch_list_add_reg (regcache
,
4322 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4328 case 0: /* Move Condition Register Field */
4329 case 33: /* Condition Register NOR */
4330 case 129: /* Condition Register AND with Complement */
4331 case 193: /* Condition Register XOR */
4332 case 225: /* Condition Register NAND */
4333 case 257: /* Condition Register AND */
4334 case 289: /* Condition Register Equivalent */
4335 case 417: /* Condition Register OR with Complement */
4336 case 449: /* Condition Register OR */
4337 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4340 case 16: /* Branch Conditional */
4341 case 560: /* Branch Conditional to Branch Target Address Register */
4342 if ((PPC_BO (insn
) & 0x4) == 0)
4343 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ctr_regnum
);
4345 case 528: /* Branch Conditional to Count Register */
4347 record_full_arch_list_add_reg (regcache
, tdep
->ppc_lr_regnum
);
4350 case 150: /* Instruction Synchronize */
4355 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
4356 "at %s, 19-%d.\n", insn
, paddress (gdbarch
, addr
), ext
);
4360 /* Parse and record instructions of primary opcode-31 at ADDR.
4361 Return 0 if successful. */
4364 ppc_process_record_op31 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
4365 CORE_ADDR addr
, uint32_t insn
)
4367 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
4368 int ext
= PPC_EXTOP (insn
);
4370 CORE_ADDR at_dcsz
, ea
= 0;
4371 ULONGEST rb
, ra
, xer
;
4374 /* These instructions have OE bit. */
4375 switch (ext
& 0x1ff)
4377 /* These write RT and XER. Update CR if RC is set. */
4378 case 8: /* Subtract from carrying */
4379 case 10: /* Add carrying */
4380 case 136: /* Subtract from extended */
4381 case 138: /* Add extended */
4382 case 200: /* Subtract from zero extended */
4383 case 202: /* Add to zero extended */
4384 case 232: /* Subtract from minus one extended */
4385 case 234: /* Add to minus one extended */
4386 /* CA is always altered, but SO/OV are only altered when OE=1.
4387 In any case, XER is always altered. */
4388 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4390 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4391 record_full_arch_list_add_reg (regcache
,
4392 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4395 /* These write RT. Update CR if RC is set and update XER if OE is set. */
4396 case 40: /* Subtract from */
4397 case 104: /* Negate */
4398 case 233: /* Multiply low doubleword */
4399 case 235: /* Multiply low word */
4401 case 393: /* Divide Doubleword Extended Unsigned */
4402 case 395: /* Divide Word Extended Unsigned */
4403 case 425: /* Divide Doubleword Extended */
4404 case 427: /* Divide Word Extended */
4405 case 457: /* Divide Doubleword Unsigned */
4406 case 459: /* Divide Word Unsigned */
4407 case 489: /* Divide Doubleword */
4408 case 491: /* Divide Word */
4410 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4412 case 9: /* Multiply High Doubleword Unsigned */
4413 case 11: /* Multiply High Word Unsigned */
4414 case 73: /* Multiply High Doubleword */
4415 case 75: /* Multiply High Word */
4417 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4418 record_full_arch_list_add_reg (regcache
,
4419 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4423 if ((ext
& 0x1f) == 15)
4425 /* Integer Select. bit[16:20] is used for BC. */
4426 record_full_arch_list_add_reg (regcache
,
4427 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4431 if ((ext
& 0xff) == 170)
4433 /* Add Extended using alternate carry bits */
4434 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4435 record_full_arch_list_add_reg (regcache
,
4436 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4442 case 78: /* Determine Leftmost Zero Byte */
4444 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4445 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4446 record_full_arch_list_add_reg (regcache
,
4447 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4450 /* These only write RT. */
4451 case 19: /* Move from condition register */
4452 /* Move From One Condition Register Field */
4453 case 74: /* Add and Generate Sixes */
4454 case 74 | 0x200: /* Add and Generate Sixes (bit-21 dont-care) */
4455 case 302: /* Move From Branch History Rolling Buffer */
4456 case 339: /* Move From Special Purpose Register */
4457 case 371: /* Move From Time Base [Phased-Out] */
4458 case 309: /* Load Doubleword Monitored Indexed */
4459 case 128: /* Set Boolean */
4460 case 755: /* Deliver A Random Number */
4461 record_full_arch_list_add_reg (regcache
,
4462 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4465 /* These only write to RA. */
4466 case 51: /* Move From VSR Doubleword */
4467 case 115: /* Move From VSR Word and Zero */
4468 case 122: /* Population count bytes */
4469 case 378: /* Population count words */
4470 case 506: /* Population count doublewords */
4471 case 154: /* Parity Word */
4472 case 186: /* Parity Doubleword */
4473 case 252: /* Bit Permute Doubleword */
4474 case 282: /* Convert Declets To Binary Coded Decimal */
4475 case 314: /* Convert Binary Coded Decimal To Declets */
4476 case 508: /* Compare bytes */
4477 case 307: /* Move From VSR Lower Doubleword */
4478 record_full_arch_list_add_reg (regcache
,
4479 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
4482 /* These write CR and optional RA. */
4483 case 792: /* Shift Right Algebraic Word */
4484 case 794: /* Shift Right Algebraic Doubleword */
4485 case 824: /* Shift Right Algebraic Word Immediate */
4486 case 826: /* Shift Right Algebraic Doubleword Immediate (413) */
4487 case 826 | 1: /* Shift Right Algebraic Doubleword Immediate (413) */
4488 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4489 record_full_arch_list_add_reg (regcache
,
4490 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
4492 case 0: /* Compare */
4493 case 32: /* Compare logical */
4494 case 144: /* Move To Condition Register Fields */
4495 /* Move To One Condition Register Field */
4496 case 192: /* Compare Ranged Byte */
4497 case 224: /* Compare Equal Byte */
4498 case 576: /* Move XER to CR Extended */
4499 case 902: /* Paste (should always fail due to single-stepping and
4500 the memory location might not be accessible, so
4502 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4505 /* These write to RT. Update RA if 'update indexed.' */
4506 case 53: /* Load Doubleword with Update Indexed */
4507 case 119: /* Load Byte and Zero with Update Indexed */
4508 case 311: /* Load Halfword and Zero with Update Indexed */
4509 case 55: /* Load Word and Zero with Update Indexed */
4510 case 375: /* Load Halfword Algebraic with Update Indexed */
4511 case 373: /* Load Word Algebraic with Update Indexed */
4512 record_full_arch_list_add_reg (regcache
,
4513 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
4515 case 21: /* Load Doubleword Indexed */
4516 case 52: /* Load Byte And Reserve Indexed */
4517 case 116: /* Load Halfword And Reserve Indexed */
4518 case 20: /* Load Word And Reserve Indexed */
4519 case 84: /* Load Doubleword And Reserve Indexed */
4520 case 87: /* Load Byte and Zero Indexed */
4521 case 279: /* Load Halfword and Zero Indexed */
4522 case 23: /* Load Word and Zero Indexed */
4523 case 343: /* Load Halfword Algebraic Indexed */
4524 case 341: /* Load Word Algebraic Indexed */
4525 case 790: /* Load Halfword Byte-Reverse Indexed */
4526 case 534: /* Load Word Byte-Reverse Indexed */
4527 case 532: /* Load Doubleword Byte-Reverse Indexed */
4528 case 582: /* Load Word Atomic */
4529 case 614: /* Load Doubleword Atomic */
4530 case 265: /* Modulo Unsigned Doubleword */
4531 case 777: /* Modulo Signed Doubleword */
4532 case 267: /* Modulo Unsigned Word */
4533 case 779: /* Modulo Signed Word */
4534 record_full_arch_list_add_reg (regcache
,
4535 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
4538 case 597: /* Load String Word Immediate */
4539 case 533: /* Load String Word Indexed */
4548 regcache_raw_read_unsigned (regcache
, tdep
->ppc_xer_regnum
, &xer
);
4549 nr
= PPC_XER_NB (xer
);
4554 /* If n=0, the contents of register RT are undefined. */
4558 for (i
= 0; i
< nr
; i
++)
4559 record_full_arch_list_add_reg (regcache
,
4560 tdep
->ppc_gp0_regnum
4561 + ((PPC_RT (insn
) + i
) & 0x1f));
4564 case 276: /* Load Quadword And Reserve Indexed */
4565 tmp
= tdep
->ppc_gp0_regnum
+ (PPC_RT (insn
) & ~1);
4566 record_full_arch_list_add_reg (regcache
, tmp
);
4567 record_full_arch_list_add_reg (regcache
, tmp
+ 1);
4570 /* These write VRT. */
4571 case 6: /* Load Vector for Shift Left Indexed */
4572 case 38: /* Load Vector for Shift Right Indexed */
4573 case 7: /* Load Vector Element Byte Indexed */
4574 case 39: /* Load Vector Element Halfword Indexed */
4575 case 71: /* Load Vector Element Word Indexed */
4576 case 103: /* Load Vector Indexed */
4577 case 359: /* Load Vector Indexed LRU */
4578 record_full_arch_list_add_reg (regcache
,
4579 tdep
->ppc_vr0_regnum
+ PPC_VRT (insn
));
4582 /* These write FRT. Update RA if 'update indexed.' */
4583 case 567: /* Load Floating-Point Single with Update Indexed */
4584 case 631: /* Load Floating-Point Double with Update Indexed */
4585 record_full_arch_list_add_reg (regcache
,
4586 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
4588 case 535: /* Load Floating-Point Single Indexed */
4589 case 599: /* Load Floating-Point Double Indexed */
4590 case 855: /* Load Floating-Point as Integer Word Algebraic Indexed */
4591 case 887: /* Load Floating-Point as Integer Word and Zero Indexed */
4592 record_full_arch_list_add_reg (regcache
,
4593 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
4596 case 791: /* Load Floating-Point Double Pair Indexed */
4597 tmp
= tdep
->ppc_fp0_regnum
+ (PPC_FRT (insn
) & ~1);
4598 record_full_arch_list_add_reg (regcache
, tmp
);
4599 record_full_arch_list_add_reg (regcache
, tmp
+ 1);
4602 case 179: /* Move To VSR Doubleword */
4603 case 211: /* Move To VSR Word Algebraic */
4604 case 243: /* Move To VSR Word and Zero */
4605 case 588: /* Load VSX Scalar Doubleword Indexed */
4606 case 524: /* Load VSX Scalar Single-Precision Indexed */
4607 case 76: /* Load VSX Scalar as Integer Word Algebraic Indexed */
4608 case 12: /* Load VSX Scalar as Integer Word and Zero Indexed */
4609 case 844: /* Load VSX Vector Doubleword*2 Indexed */
4610 case 332: /* Load VSX Vector Doubleword & Splat Indexed */
4611 case 780: /* Load VSX Vector Word*4 Indexed */
4612 case 268: /* Load VSX Vector Indexed */
4613 case 364: /* Load VSX Vector Word & Splat Indexed */
4614 case 812: /* Load VSX Vector Halfword*8 Indexed */
4615 case 876: /* Load VSX Vector Byte*16 Indexed */
4616 case 269: /* Load VSX Vector with Length */
4617 case 301: /* Load VSX Vector Left-justified with Length */
4618 case 781: /* Load VSX Scalar as Integer Byte & Zero Indexed */
4619 case 813: /* Load VSX Scalar as Integer Halfword & Zero Indexed */
4620 case 403: /* Move To VSR Word & Splat */
4621 case 435: /* Move To VSR Double Doubleword */
4622 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
4625 /* These write RA. Update CR if RC is set. */
4626 case 24: /* Shift Left Word */
4627 case 26: /* Count Leading Zeros Word */
4628 case 27: /* Shift Left Doubleword */
4630 case 58: /* Count Leading Zeros Doubleword */
4631 case 60: /* AND with Complement */
4633 case 284: /* Equivalent */
4635 case 476: /* NAND */
4636 case 412: /* OR with Complement */
4638 case 536: /* Shift Right Word */
4639 case 539: /* Shift Right Doubleword */
4640 case 922: /* Extend Sign Halfword */
4641 case 954: /* Extend Sign Byte */
4642 case 986: /* Extend Sign Word */
4643 case 538: /* Count Trailing Zeros Word */
4644 case 570: /* Count Trailing Zeros Doubleword */
4645 case 890: /* Extend-Sign Word and Shift Left Immediate (445) */
4646 case 890 | 1: /* Extend-Sign Word and Shift Left Immediate (445) */
4648 if (ext
== 444 && tdep
->ppc_ppr_regnum
>= 0
4649 && (PPC_RS (insn
) == PPC_RA (insn
))
4650 && (PPC_RA (insn
) == PPC_RB (insn
))
4653 /* or Rx,Rx,Rx alters PRI in PPR. */
4654 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ppr_regnum
);
4659 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4660 record_full_arch_list_add_reg (regcache
,
4661 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
4665 case 181: /* Store Doubleword with Update Indexed */
4666 case 183: /* Store Word with Update Indexed */
4667 case 247: /* Store Byte with Update Indexed */
4668 case 439: /* Store Half Word with Update Indexed */
4669 case 695: /* Store Floating-Point Single with Update Indexed */
4670 case 759: /* Store Floating-Point Double with Update Indexed */
4671 record_full_arch_list_add_reg (regcache
,
4672 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
4674 case 135: /* Store Vector Element Byte Indexed */
4675 case 167: /* Store Vector Element Halfword Indexed */
4676 case 199: /* Store Vector Element Word Indexed */
4677 case 231: /* Store Vector Indexed */
4678 case 487: /* Store Vector Indexed LRU */
4679 case 716: /* Store VSX Scalar Doubleword Indexed */
4680 case 140: /* Store VSX Scalar as Integer Word Indexed */
4681 case 652: /* Store VSX Scalar Single-Precision Indexed */
4682 case 972: /* Store VSX Vector Doubleword*2 Indexed */
4683 case 908: /* Store VSX Vector Word*4 Indexed */
4684 case 149: /* Store Doubleword Indexed */
4685 case 151: /* Store Word Indexed */
4686 case 215: /* Store Byte Indexed */
4687 case 407: /* Store Half Word Indexed */
4688 case 694: /* Store Byte Conditional Indexed */
4689 case 726: /* Store Halfword Conditional Indexed */
4690 case 150: /* Store Word Conditional Indexed */
4691 case 214: /* Store Doubleword Conditional Indexed */
4692 case 182: /* Store Quadword Conditional Indexed */
4693 case 662: /* Store Word Byte-Reverse Indexed */
4694 case 918: /* Store Halfword Byte-Reverse Indexed */
4695 case 660: /* Store Doubleword Byte-Reverse Indexed */
4696 case 663: /* Store Floating-Point Single Indexed */
4697 case 727: /* Store Floating-Point Double Indexed */
4698 case 919: /* Store Floating-Point Double Pair Indexed */
4699 case 983: /* Store Floating-Point as Integer Word Indexed */
4700 case 396: /* Store VSX Vector Indexed */
4701 case 940: /* Store VSX Vector Halfword*8 Indexed */
4702 case 1004: /* Store VSX Vector Byte*16 Indexed */
4703 case 909: /* Store VSX Scalar as Integer Byte Indexed */
4704 case 941: /* Store VSX Scalar as Integer Halfword Indexed */
4705 if (ext
== 694 || ext
== 726 || ext
== 150 || ext
== 214 || ext
== 182)
4706 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4709 if (PPC_RA (insn
) != 0)
4710 regcache_raw_read_unsigned (regcache
,
4711 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
), &ra
);
4712 regcache_raw_read_unsigned (regcache
,
4713 tdep
->ppc_gp0_regnum
+ PPC_RB (insn
), &rb
);
4718 case 183: /* Store Word with Update Indexed */
4719 case 199: /* Store Vector Element Word Indexed */
4720 case 140: /* Store VSX Scalar as Integer Word Indexed */
4721 case 652: /* Store VSX Scalar Single-Precision Indexed */
4722 case 151: /* Store Word Indexed */
4723 case 150: /* Store Word Conditional Indexed */
4724 case 662: /* Store Word Byte-Reverse Indexed */
4725 case 663: /* Store Floating-Point Single Indexed */
4726 case 695: /* Store Floating-Point Single with Update Indexed */
4727 case 983: /* Store Floating-Point as Integer Word Indexed */
4730 case 247: /* Store Byte with Update Indexed */
4731 case 135: /* Store Vector Element Byte Indexed */
4732 case 215: /* Store Byte Indexed */
4733 case 694: /* Store Byte Conditional Indexed */
4734 case 909: /* Store VSX Scalar as Integer Byte Indexed */
4737 case 439: /* Store Halfword with Update Indexed */
4738 case 167: /* Store Vector Element Halfword Indexed */
4739 case 407: /* Store Halfword Indexed */
4740 case 726: /* Store Halfword Conditional Indexed */
4741 case 918: /* Store Halfword Byte-Reverse Indexed */
4742 case 941: /* Store VSX Scalar as Integer Halfword Indexed */
4745 case 181: /* Store Doubleword with Update Indexed */
4746 case 716: /* Store VSX Scalar Doubleword Indexed */
4747 case 149: /* Store Doubleword Indexed */
4748 case 214: /* Store Doubleword Conditional Indexed */
4749 case 660: /* Store Doubleword Byte-Reverse Indexed */
4750 case 727: /* Store Floating-Point Double Indexed */
4751 case 759: /* Store Floating-Point Double with Update Indexed */
4754 case 972: /* Store VSX Vector Doubleword*2 Indexed */
4755 case 908: /* Store VSX Vector Word*4 Indexed */
4756 case 182: /* Store Quadword Conditional Indexed */
4757 case 231: /* Store Vector Indexed */
4758 case 487: /* Store Vector Indexed LRU */
4759 case 919: /* Store Floating-Point Double Pair Indexed */
4760 case 396: /* Store VSX Vector Indexed */
4761 case 940: /* Store VSX Vector Halfword*8 Indexed */
4762 case 1004: /* Store VSX Vector Byte*16 Indexed */
4769 /* Align address for Store Vector instructions. */
4772 case 167: /* Store Vector Element Halfword Indexed */
4773 addr
= addr
& ~0x1ULL
;
4776 case 199: /* Store Vector Element Word Indexed */
4777 addr
= addr
& ~0x3ULL
;
4780 case 231: /* Store Vector Indexed */
4781 case 487: /* Store Vector Indexed LRU */
4782 addr
= addr
& ~0xfULL
;
4786 record_full_arch_list_add_mem (addr
, size
);
4789 case 397: /* Store VSX Vector with Length */
4790 case 429: /* Store VSX Vector Left-justified with Length */
4792 if (PPC_RA (insn
) != 0)
4793 regcache_raw_read_unsigned (regcache
,
4794 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
), &ra
);
4796 regcache_raw_read_unsigned (regcache
,
4797 tdep
->ppc_gp0_regnum
+ PPC_RB (insn
), &rb
);
4798 /* Store up to 16 bytes. */
4799 nb
= (rb
& 0xff) > 16 ? 16 : (rb
& 0xff);
4801 record_full_arch_list_add_mem (ea
, nb
);
4804 case 710: /* Store Word Atomic */
4805 case 742: /* Store Doubleword Atomic */
4807 if (PPC_RA (insn
) != 0)
4808 regcache_raw_read_unsigned (regcache
,
4809 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
), &ra
);
4813 case 710: /* Store Word Atomic */
4816 case 742: /* Store Doubleword Atomic */
4822 record_full_arch_list_add_mem (ea
, size
);
4825 case 725: /* Store String Word Immediate */
4827 if (PPC_RA (insn
) != 0)
4828 regcache_raw_read_unsigned (regcache
,
4829 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
), &ra
);
4836 record_full_arch_list_add_mem (ea
, nb
);
4840 case 661: /* Store String Word Indexed */
4842 if (PPC_RA (insn
) != 0)
4843 regcache_raw_read_unsigned (regcache
,
4844 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
), &ra
);
4847 regcache_raw_read_unsigned (regcache
, tdep
->ppc_xer_regnum
, &xer
);
4848 nb
= PPC_XER_NB (xer
);
4852 regcache_raw_read_unsigned (regcache
,
4853 tdep
->ppc_gp0_regnum
+ PPC_RB (insn
),
4856 record_full_arch_list_add_mem (ea
, nb
);
4861 case 467: /* Move To Special Purpose Register */
4862 switch (PPC_SPR (insn
))
4865 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4868 if (tdep
->ppc_dscr_regnum
>= 0)
4869 record_full_arch_list_add_reg (regcache
, tdep
->ppc_dscr_regnum
);
4872 record_full_arch_list_add_reg (regcache
, tdep
->ppc_lr_regnum
);
4875 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ctr_regnum
);
4877 case 256: /* VRSAVE */
4878 record_full_arch_list_add_reg (regcache
, tdep
->ppc_vrsave_regnum
);
4881 if (tdep
->ppc_tar_regnum
>= 0)
4882 record_full_arch_list_add_reg (regcache
, tdep
->ppc_tar_regnum
);
4886 if (tdep
->ppc_ppr_regnum
>= 0)
4887 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ppr_regnum
);
4893 case 147: /* Move To Split Little Endian */
4894 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ps_regnum
);
4897 case 512: /* Move to Condition Register from XER */
4898 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4899 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
4902 case 4: /* Trap Word */
4903 case 68: /* Trap Doubleword */
4904 case 430: /* Clear BHRB */
4905 case 598: /* Synchronize */
4906 case 62: /* Wait for Interrupt */
4908 case 22: /* Instruction Cache Block Touch */
4909 case 854: /* Enforce In-order Execution of I/O */
4910 case 246: /* Data Cache Block Touch for Store */
4911 case 54: /* Data Cache Block Store */
4912 case 86: /* Data Cache Block Flush */
4913 case 278: /* Data Cache Block Touch */
4914 case 758: /* Data Cache Block Allocate */
4915 case 982: /* Instruction Cache Block Invalidate */
4916 case 774: /* Copy */
4917 case 838: /* CP_Abort */
4920 case 654: /* Transaction Begin */
4921 case 686: /* Transaction End */
4922 case 750: /* Transaction Suspend or Resume */
4923 case 782: /* Transaction Abort Word Conditional */
4924 case 814: /* Transaction Abort Doubleword Conditional */
4925 case 846: /* Transaction Abort Word Conditional Immediate */
4926 case 878: /* Transaction Abort Doubleword Conditional Immediate */
4927 case 910: /* Transaction Abort */
4928 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ps_regnum
);
4930 case 718: /* Transaction Check */
4931 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4934 case 1014: /* Data Cache Block set to Zero */
4935 if (target_auxv_search (current_top_target (), AT_DCACHEBSIZE
, &at_dcsz
) <= 0
4937 at_dcsz
= 128; /* Assume 128-byte cache line size (POWER8) */
4940 if (PPC_RA (insn
) != 0)
4941 regcache_raw_read_unsigned (regcache
,
4942 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
), &ra
);
4943 regcache_raw_read_unsigned (regcache
,
4944 tdep
->ppc_gp0_regnum
+ PPC_RB (insn
), &rb
);
4945 ea
= (ra
+ rb
) & ~((ULONGEST
) (at_dcsz
- 1));
4946 record_full_arch_list_add_mem (ea
, at_dcsz
);
4951 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
4952 "at %s, 31-%d.\n", insn
, paddress (gdbarch
, addr
), ext
);
4956 /* Parse and record instructions of primary opcode-59 at ADDR.
4957 Return 0 if successful. */
4960 ppc_process_record_op59 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
4961 CORE_ADDR addr
, uint32_t insn
)
4963 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
4964 int ext
= PPC_EXTOP (insn
);
4968 case 18: /* Floating Divide */
4969 case 20: /* Floating Subtract */
4970 case 21: /* Floating Add */
4971 case 22: /* Floating Square Root */
4972 case 24: /* Floating Reciprocal Estimate */
4973 case 25: /* Floating Multiply */
4974 case 26: /* Floating Reciprocal Square Root Estimate */
4975 case 28: /* Floating Multiply-Subtract */
4976 case 29: /* Floating Multiply-Add */
4977 case 30: /* Floating Negative Multiply-Subtract */
4978 case 31: /* Floating Negative Multiply-Add */
4979 record_full_arch_list_add_reg (regcache
,
4980 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
4982 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
4983 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
4990 case 2: /* DFP Add */
4991 case 3: /* DFP Quantize */
4992 case 34: /* DFP Multiply */
4993 case 35: /* DFP Reround */
4994 case 67: /* DFP Quantize Immediate */
4995 case 99: /* DFP Round To FP Integer With Inexact */
4996 case 227: /* DFP Round To FP Integer Without Inexact */
4997 case 258: /* DFP Convert To DFP Long! */
4998 case 290: /* DFP Convert To Fixed */
4999 case 514: /* DFP Subtract */
5000 case 546: /* DFP Divide */
5001 case 770: /* DFP Round To DFP Short! */
5002 case 802: /* DFP Convert From Fixed */
5003 case 834: /* DFP Encode BCD To DPD */
5005 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5006 record_full_arch_list_add_reg (regcache
,
5007 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5008 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5011 case 130: /* DFP Compare Ordered */
5012 case 162: /* DFP Test Exponent */
5013 case 194: /* DFP Test Data Class */
5014 case 226: /* DFP Test Data Group */
5015 case 642: /* DFP Compare Unordered */
5016 case 674: /* DFP Test Significance */
5017 case 675: /* DFP Test Significance Immediate */
5018 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5019 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5022 case 66: /* DFP Shift Significand Left Immediate */
5023 case 98: /* DFP Shift Significand Right Immediate */
5024 case 322: /* DFP Decode DPD To BCD */
5025 case 354: /* DFP Extract Biased Exponent */
5026 case 866: /* DFP Insert Biased Exponent */
5027 record_full_arch_list_add_reg (regcache
,
5028 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5030 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5033 case 846: /* Floating Convert From Integer Doubleword Single */
5034 case 974: /* Floating Convert From Integer Doubleword Unsigned
5036 record_full_arch_list_add_reg (regcache
,
5037 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5039 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5040 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5045 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
5046 "at %s, 59-%d.\n", insn
, paddress (gdbarch
, addr
), ext
);
5050 /* Parse and record instructions of primary opcode-60 at ADDR.
5051 Return 0 if successful. */
5054 ppc_process_record_op60 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5055 CORE_ADDR addr
, uint32_t insn
)
5057 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5058 int ext
= PPC_EXTOP (insn
);
5062 case 0: /* VSX Scalar Add Single-Precision */
5063 case 32: /* VSX Scalar Add Double-Precision */
5064 case 24: /* VSX Scalar Divide Single-Precision */
5065 case 56: /* VSX Scalar Divide Double-Precision */
5066 case 176: /* VSX Scalar Copy Sign Double-Precision */
5067 case 33: /* VSX Scalar Multiply-Add Double-Precision */
5068 case 41: /* ditto */
5069 case 1: /* VSX Scalar Multiply-Add Single-Precision */
5071 case 160: /* VSX Scalar Maximum Double-Precision */
5072 case 168: /* VSX Scalar Minimum Double-Precision */
5073 case 49: /* VSX Scalar Multiply-Subtract Double-Precision */
5074 case 57: /* ditto */
5075 case 17: /* VSX Scalar Multiply-Subtract Single-Precision */
5076 case 25: /* ditto */
5077 case 48: /* VSX Scalar Multiply Double-Precision */
5078 case 16: /* VSX Scalar Multiply Single-Precision */
5079 case 161: /* VSX Scalar Negative Multiply-Add Double-Precision */
5080 case 169: /* ditto */
5081 case 129: /* VSX Scalar Negative Multiply-Add Single-Precision */
5082 case 137: /* ditto */
5083 case 177: /* VSX Scalar Negative Multiply-Subtract Double-Precision */
5084 case 185: /* ditto */
5085 case 145: /* VSX Scalar Negative Multiply-Subtract Single-Precision */
5086 case 153: /* ditto */
5087 case 40: /* VSX Scalar Subtract Double-Precision */
5088 case 8: /* VSX Scalar Subtract Single-Precision */
5089 case 96: /* VSX Vector Add Double-Precision */
5090 case 64: /* VSX Vector Add Single-Precision */
5091 case 120: /* VSX Vector Divide Double-Precision */
5092 case 88: /* VSX Vector Divide Single-Precision */
5093 case 97: /* VSX Vector Multiply-Add Double-Precision */
5094 case 105: /* ditto */
5095 case 65: /* VSX Vector Multiply-Add Single-Precision */
5096 case 73: /* ditto */
5097 case 224: /* VSX Vector Maximum Double-Precision */
5098 case 192: /* VSX Vector Maximum Single-Precision */
5099 case 232: /* VSX Vector Minimum Double-Precision */
5100 case 200: /* VSX Vector Minimum Single-Precision */
5101 case 113: /* VSX Vector Multiply-Subtract Double-Precision */
5102 case 121: /* ditto */
5103 case 81: /* VSX Vector Multiply-Subtract Single-Precision */
5104 case 89: /* ditto */
5105 case 112: /* VSX Vector Multiply Double-Precision */
5106 case 80: /* VSX Vector Multiply Single-Precision */
5107 case 225: /* VSX Vector Negative Multiply-Add Double-Precision */
5108 case 233: /* ditto */
5109 case 193: /* VSX Vector Negative Multiply-Add Single-Precision */
5110 case 201: /* ditto */
5111 case 241: /* VSX Vector Negative Multiply-Subtract Double-Precision */
5112 case 249: /* ditto */
5113 case 209: /* VSX Vector Negative Multiply-Subtract Single-Precision */
5114 case 217: /* ditto */
5115 case 104: /* VSX Vector Subtract Double-Precision */
5116 case 72: /* VSX Vector Subtract Single-Precision */
5117 case 128: /* VSX Scalar Maximum Type-C Double-Precision */
5118 case 136: /* VSX Scalar Minimum Type-C Double-Precision */
5119 case 144: /* VSX Scalar Maximum Type-J Double-Precision */
5120 case 152: /* VSX Scalar Minimum Type-J Double-Precision */
5121 case 3: /* VSX Scalar Compare Equal Double-Precision */
5122 case 11: /* VSX Scalar Compare Greater Than Double-Precision */
5123 case 19: /* VSX Scalar Compare Greater Than or Equal
5125 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5127 case 240: /* VSX Vector Copy Sign Double-Precision */
5128 case 208: /* VSX Vector Copy Sign Single-Precision */
5129 case 130: /* VSX Logical AND */
5130 case 138: /* VSX Logical AND with Complement */
5131 case 186: /* VSX Logical Equivalence */
5132 case 178: /* VSX Logical NAND */
5133 case 170: /* VSX Logical OR with Complement */
5134 case 162: /* VSX Logical NOR */
5135 case 146: /* VSX Logical OR */
5136 case 154: /* VSX Logical XOR */
5137 case 18: /* VSX Merge High Word */
5138 case 50: /* VSX Merge Low Word */
5139 case 10: /* VSX Permute Doubleword Immediate (DM=0) */
5140 case 10 | 0x20: /* VSX Permute Doubleword Immediate (DM=1) */
5141 case 10 | 0x40: /* VSX Permute Doubleword Immediate (DM=2) */
5142 case 10 | 0x60: /* VSX Permute Doubleword Immediate (DM=3) */
5143 case 2: /* VSX Shift Left Double by Word Immediate (SHW=0) */
5144 case 2 | 0x20: /* VSX Shift Left Double by Word Immediate (SHW=1) */
5145 case 2 | 0x40: /* VSX Shift Left Double by Word Immediate (SHW=2) */
5146 case 2 | 0x60: /* VSX Shift Left Double by Word Immediate (SHW=3) */
5147 case 216: /* VSX Vector Insert Exponent Single-Precision */
5148 case 248: /* VSX Vector Insert Exponent Double-Precision */
5149 case 26: /* VSX Vector Permute */
5150 case 58: /* VSX Vector Permute Right-indexed */
5151 case 213: /* VSX Vector Test Data Class Single-Precision (DC=0) */
5152 case 213 | 0x8: /* VSX Vector Test Data Class Single-Precision (DC=1) */
5153 case 245: /* VSX Vector Test Data Class Double-Precision (DC=0) */
5154 case 245 | 0x8: /* VSX Vector Test Data Class Double-Precision (DC=1) */
5155 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5158 case 61: /* VSX Scalar Test for software Divide Double-Precision */
5159 case 125: /* VSX Vector Test for software Divide Double-Precision */
5160 case 93: /* VSX Vector Test for software Divide Single-Precision */
5161 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5164 case 35: /* VSX Scalar Compare Unordered Double-Precision */
5165 case 43: /* VSX Scalar Compare Ordered Double-Precision */
5166 case 59: /* VSX Scalar Compare Exponents Double-Precision */
5167 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5168 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5172 switch ((ext
>> 2) & 0x7f) /* Mask out Rc-bit. */
5174 case 99: /* VSX Vector Compare Equal To Double-Precision */
5175 case 67: /* VSX Vector Compare Equal To Single-Precision */
5176 case 115: /* VSX Vector Compare Greater Than or
5177 Equal To Double-Precision */
5178 case 83: /* VSX Vector Compare Greater Than or
5179 Equal To Single-Precision */
5180 case 107: /* VSX Vector Compare Greater Than Double-Precision */
5181 case 75: /* VSX Vector Compare Greater Than Single-Precision */
5183 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5184 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5185 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5191 case 265: /* VSX Scalar round Double-Precision to
5192 Single-Precision and Convert to
5193 Single-Precision format */
5194 case 344: /* VSX Scalar truncate Double-Precision to
5195 Integer and Convert to Signed Integer
5196 Doubleword format with Saturate */
5197 case 88: /* VSX Scalar truncate Double-Precision to
5198 Integer and Convert to Signed Integer Word
5199 Format with Saturate */
5200 case 328: /* VSX Scalar truncate Double-Precision integer
5201 and Convert to Unsigned Integer Doubleword
5202 Format with Saturate */
5203 case 72: /* VSX Scalar truncate Double-Precision to
5204 Integer and Convert to Unsigned Integer Word
5205 Format with Saturate */
5206 case 329: /* VSX Scalar Convert Single-Precision to
5207 Double-Precision format */
5208 case 376: /* VSX Scalar Convert Signed Integer
5209 Doubleword to floating-point format and
5210 Round to Double-Precision format */
5211 case 312: /* VSX Scalar Convert Signed Integer
5212 Doubleword to floating-point format and
5213 round to Single-Precision */
5214 case 360: /* VSX Scalar Convert Unsigned Integer
5215 Doubleword to floating-point format and
5216 Round to Double-Precision format */
5217 case 296: /* VSX Scalar Convert Unsigned Integer
5218 Doubleword to floating-point format and
5219 Round to Single-Precision */
5220 case 73: /* VSX Scalar Round to Double-Precision Integer
5221 Using Round to Nearest Away */
5222 case 107: /* VSX Scalar Round to Double-Precision Integer
5223 Exact using Current rounding mode */
5224 case 121: /* VSX Scalar Round to Double-Precision Integer
5225 Using Round toward -Infinity */
5226 case 105: /* VSX Scalar Round to Double-Precision Integer
5227 Using Round toward +Infinity */
5228 case 89: /* VSX Scalar Round to Double-Precision Integer
5229 Using Round toward Zero */
5230 case 90: /* VSX Scalar Reciprocal Estimate Double-Precision */
5231 case 26: /* VSX Scalar Reciprocal Estimate Single-Precision */
5232 case 281: /* VSX Scalar Round to Single-Precision */
5233 case 74: /* VSX Scalar Reciprocal Square Root Estimate
5235 case 10: /* VSX Scalar Reciprocal Square Root Estimate
5237 case 75: /* VSX Scalar Square Root Double-Precision */
5238 case 11: /* VSX Scalar Square Root Single-Precision */
5239 case 393: /* VSX Vector round Double-Precision to
5240 Single-Precision and Convert to
5241 Single-Precision format */
5242 case 472: /* VSX Vector truncate Double-Precision to
5243 Integer and Convert to Signed Integer
5244 Doubleword format with Saturate */
5245 case 216: /* VSX Vector truncate Double-Precision to
5246 Integer and Convert to Signed Integer Word
5247 Format with Saturate */
5248 case 456: /* VSX Vector truncate Double-Precision to
5249 Integer and Convert to Unsigned Integer
5250 Doubleword format with Saturate */
5251 case 200: /* VSX Vector truncate Double-Precision to
5252 Integer and Convert to Unsigned Integer Word
5253 Format with Saturate */
5254 case 457: /* VSX Vector Convert Single-Precision to
5255 Double-Precision format */
5256 case 408: /* VSX Vector truncate Single-Precision to
5257 Integer and Convert to Signed Integer
5258 Doubleword format with Saturate */
5259 case 152: /* VSX Vector truncate Single-Precision to
5260 Integer and Convert to Signed Integer Word
5261 Format with Saturate */
5262 case 392: /* VSX Vector truncate Single-Precision to
5263 Integer and Convert to Unsigned Integer
5264 Doubleword format with Saturate */
5265 case 136: /* VSX Vector truncate Single-Precision to
5266 Integer and Convert to Unsigned Integer Word
5267 Format with Saturate */
5268 case 504: /* VSX Vector Convert and round Signed Integer
5269 Doubleword to Double-Precision format */
5270 case 440: /* VSX Vector Convert and round Signed Integer
5271 Doubleword to Single-Precision format */
5272 case 248: /* VSX Vector Convert Signed Integer Word to
5273 Double-Precision format */
5274 case 184: /* VSX Vector Convert and round Signed Integer
5275 Word to Single-Precision format */
5276 case 488: /* VSX Vector Convert and round Unsigned
5277 Integer Doubleword to Double-Precision format */
5278 case 424: /* VSX Vector Convert and round Unsigned
5279 Integer Doubleword to Single-Precision format */
5280 case 232: /* VSX Vector Convert and round Unsigned
5281 Integer Word to Double-Precision format */
5282 case 168: /* VSX Vector Convert and round Unsigned
5283 Integer Word to Single-Precision format */
5284 case 201: /* VSX Vector Round to Double-Precision
5285 Integer using round to Nearest Away */
5286 case 235: /* VSX Vector Round to Double-Precision
5287 Integer Exact using Current rounding mode */
5288 case 249: /* VSX Vector Round to Double-Precision
5289 Integer using round toward -Infinity */
5290 case 233: /* VSX Vector Round to Double-Precision
5291 Integer using round toward +Infinity */
5292 case 217: /* VSX Vector Round to Double-Precision
5293 Integer using round toward Zero */
5294 case 218: /* VSX Vector Reciprocal Estimate Double-Precision */
5295 case 154: /* VSX Vector Reciprocal Estimate Single-Precision */
5296 case 137: /* VSX Vector Round to Single-Precision Integer
5297 Using Round to Nearest Away */
5298 case 171: /* VSX Vector Round to Single-Precision Integer
5299 Exact Using Current rounding mode */
5300 case 185: /* VSX Vector Round to Single-Precision Integer
5301 Using Round toward -Infinity */
5302 case 169: /* VSX Vector Round to Single-Precision Integer
5303 Using Round toward +Infinity */
5304 case 153: /* VSX Vector Round to Single-Precision Integer
5305 Using round toward Zero */
5306 case 202: /* VSX Vector Reciprocal Square Root Estimate
5308 case 138: /* VSX Vector Reciprocal Square Root Estimate
5310 case 203: /* VSX Vector Square Root Double-Precision */
5311 case 139: /* VSX Vector Square Root Single-Precision */
5312 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5314 case 345: /* VSX Scalar Absolute Value Double-Precision */
5315 case 267: /* VSX Scalar Convert Scalar Single-Precision to
5316 Vector Single-Precision format Non-signalling */
5317 case 331: /* VSX Scalar Convert Single-Precision to
5318 Double-Precision format Non-signalling */
5319 case 361: /* VSX Scalar Negative Absolute Value Double-Precision */
5320 case 377: /* VSX Scalar Negate Double-Precision */
5321 case 473: /* VSX Vector Absolute Value Double-Precision */
5322 case 409: /* VSX Vector Absolute Value Single-Precision */
5323 case 489: /* VSX Vector Negative Absolute Value Double-Precision */
5324 case 425: /* VSX Vector Negative Absolute Value Single-Precision */
5325 case 505: /* VSX Vector Negate Double-Precision */
5326 case 441: /* VSX Vector Negate Single-Precision */
5327 case 164: /* VSX Splat Word */
5328 case 165: /* VSX Vector Extract Unsigned Word */
5329 case 181: /* VSX Vector Insert Word */
5330 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5333 case 298: /* VSX Scalar Test Data Class Single-Precision */
5334 case 362: /* VSX Scalar Test Data Class Double-Precision */
5335 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5337 case 106: /* VSX Scalar Test for software Square Root
5339 case 234: /* VSX Vector Test for software Square Root
5341 case 170: /* VSX Vector Test for software Square Root
5343 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5347 switch (PPC_FIELD (insn
, 11, 5))
5349 case 0: /* VSX Scalar Extract Exponent Double-Precision */
5350 case 1: /* VSX Scalar Extract Significand Double-Precision */
5351 record_full_arch_list_add_reg (regcache
,
5352 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
5354 case 16: /* VSX Scalar Convert Half-Precision format to
5355 Double-Precision format */
5356 case 17: /* VSX Scalar round & Convert Double-Precision format
5357 to Half-Precision format */
5358 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5359 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5365 switch (PPC_FIELD (insn
, 11, 5))
5367 case 24: /* VSX Vector Convert Half-Precision format to
5368 Single-Precision format */
5369 case 25: /* VSX Vector round and Convert Single-Precision format
5370 to Half-Precision format */
5371 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5373 case 0: /* VSX Vector Extract Exponent Double-Precision */
5374 case 1: /* VSX Vector Extract Significand Double-Precision */
5375 case 7: /* VSX Vector Byte-Reverse Halfword */
5376 case 8: /* VSX Vector Extract Exponent Single-Precision */
5377 case 9: /* VSX Vector Extract Significand Single-Precision */
5378 case 15: /* VSX Vector Byte-Reverse Word */
5379 case 23: /* VSX Vector Byte-Reverse Doubleword */
5380 case 31: /* VSX Vector Byte-Reverse Quadword */
5381 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5389 case 360: /* VSX Vector Splat Immediate Byte */
5390 if (PPC_FIELD (insn
, 11, 2) == 0)
5392 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5396 case 918: /* VSX Scalar Insert Exponent Double-Precision */
5397 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5401 if (((ext
>> 3) & 0x3) == 3) /* VSX Select */
5403 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5407 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
5408 "at %s, 60-%d.\n", insn
, paddress (gdbarch
, addr
), ext
);
5412 /* Parse and record instructions of primary opcode-61 at ADDR.
5413 Return 0 if successful. */
5416 ppc_process_record_op61 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5417 CORE_ADDR addr
, uint32_t insn
)
5419 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5425 case 0: /* Store Floating-Point Double Pair */
5426 case 2: /* Store VSX Scalar Doubleword */
5427 case 3: /* Store VSX Scalar Single */
5428 if (PPC_RA (insn
) != 0)
5429 regcache_raw_read_unsigned (regcache
,
5430 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
),
5432 ea
+= PPC_DS (insn
) << 2;
5435 case 0: /* Store Floating-Point Double Pair */
5438 case 2: /* Store VSX Scalar Doubleword */
5441 case 3: /* Store VSX Scalar Single */
5447 record_full_arch_list_add_mem (ea
, size
);
5453 case 1: /* Load VSX Vector */
5454 ppc_record_vsr (regcache
, tdep
, PPC_XT (insn
));
5456 case 5: /* Store VSX Vector */
5457 if (PPC_RA (insn
) != 0)
5458 regcache_raw_read_unsigned (regcache
,
5459 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
),
5461 ea
+= PPC_DQ (insn
) << 4;
5462 record_full_arch_list_add_mem (ea
, 16);
5466 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
5467 "at %s.\n", insn
, paddress (gdbarch
, addr
));
5471 /* Parse and record instructions of primary opcode-63 at ADDR.
5472 Return 0 if successful. */
5475 ppc_process_record_op63 (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5476 CORE_ADDR addr
, uint32_t insn
)
5478 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5479 int ext
= PPC_EXTOP (insn
);
5484 case 18: /* Floating Divide */
5485 case 20: /* Floating Subtract */
5486 case 21: /* Floating Add */
5487 case 22: /* Floating Square Root */
5488 case 24: /* Floating Reciprocal Estimate */
5489 case 25: /* Floating Multiply */
5490 case 26: /* Floating Reciprocal Square Root Estimate */
5491 case 28: /* Floating Multiply-Subtract */
5492 case 29: /* Floating Multiply-Add */
5493 case 30: /* Floating Negative Multiply-Subtract */
5494 case 31: /* Floating Negative Multiply-Add */
5495 record_full_arch_list_add_reg (regcache
,
5496 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5498 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5499 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5502 case 23: /* Floating Select */
5503 record_full_arch_list_add_reg (regcache
,
5504 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5506 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5512 case 5: /* VSX Scalar Round to Quad-Precision Integer */
5513 case 37: /* VSX Scalar Round Quad-Precision to Double-Extended
5515 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5516 ppc_record_vsr (regcache
, tdep
, PPC_VRT (insn
) + 32);
5522 case 2: /* DFP Add Quad */
5523 case 3: /* DFP Quantize Quad */
5524 case 34: /* DFP Multiply Quad */
5525 case 35: /* DFP Reround Quad */
5526 case 67: /* DFP Quantize Immediate Quad */
5527 case 99: /* DFP Round To FP Integer With Inexact Quad */
5528 case 227: /* DFP Round To FP Integer Without Inexact Quad */
5529 case 258: /* DFP Convert To DFP Extended Quad */
5530 case 514: /* DFP Subtract Quad */
5531 case 546: /* DFP Divide Quad */
5532 case 770: /* DFP Round To DFP Long Quad */
5533 case 802: /* DFP Convert From Fixed Quad */
5534 case 834: /* DFP Encode BCD To DPD Quad */
5536 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5537 tmp
= tdep
->ppc_fp0_regnum
+ (PPC_FRT (insn
) & ~1);
5538 record_full_arch_list_add_reg (regcache
, tmp
);
5539 record_full_arch_list_add_reg (regcache
, tmp
+ 1);
5540 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5543 case 130: /* DFP Compare Ordered Quad */
5544 case 162: /* DFP Test Exponent Quad */
5545 case 194: /* DFP Test Data Class Quad */
5546 case 226: /* DFP Test Data Group Quad */
5547 case 642: /* DFP Compare Unordered Quad */
5548 case 674: /* DFP Test Significance Quad */
5549 case 675: /* DFP Test Significance Immediate Quad */
5550 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5551 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5554 case 66: /* DFP Shift Significand Left Immediate Quad */
5555 case 98: /* DFP Shift Significand Right Immediate Quad */
5556 case 322: /* DFP Decode DPD To BCD Quad */
5557 case 866: /* DFP Insert Biased Exponent Quad */
5558 tmp
= tdep
->ppc_fp0_regnum
+ (PPC_FRT (insn
) & ~1);
5559 record_full_arch_list_add_reg (regcache
, tmp
);
5560 record_full_arch_list_add_reg (regcache
, tmp
+ 1);
5562 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5565 case 290: /* DFP Convert To Fixed Quad */
5566 record_full_arch_list_add_reg (regcache
,
5567 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5569 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5570 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5573 case 354: /* DFP Extract Biased Exponent Quad */
5574 record_full_arch_list_add_reg (regcache
,
5575 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5577 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5580 case 12: /* Floating Round to Single-Precision */
5581 case 14: /* Floating Convert To Integer Word */
5582 case 15: /* Floating Convert To Integer Word
5583 with round toward Zero */
5584 case 142: /* Floating Convert To Integer Word Unsigned */
5585 case 143: /* Floating Convert To Integer Word Unsigned
5586 with round toward Zero */
5587 case 392: /* Floating Round to Integer Nearest */
5588 case 424: /* Floating Round to Integer Toward Zero */
5589 case 456: /* Floating Round to Integer Plus */
5590 case 488: /* Floating Round to Integer Minus */
5591 case 814: /* Floating Convert To Integer Doubleword */
5592 case 815: /* Floating Convert To Integer Doubleword
5593 with round toward Zero */
5594 case 846: /* Floating Convert From Integer Doubleword */
5595 case 942: /* Floating Convert To Integer Doubleword Unsigned */
5596 case 943: /* Floating Convert To Integer Doubleword Unsigned
5597 with round toward Zero */
5598 case 974: /* Floating Convert From Integer Doubleword Unsigned */
5599 record_full_arch_list_add_reg (regcache
,
5600 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5602 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5603 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5607 switch (PPC_FIELD (insn
, 11, 5))
5609 case 1: /* Move From FPSCR & Clear Enables */
5610 case 20: /* Move From FPSCR Control & set DRN */
5611 case 21: /* Move From FPSCR Control & set DRN Immediate */
5612 case 22: /* Move From FPSCR Control & set RN */
5613 case 23: /* Move From FPSCR Control & set RN Immediate */
5614 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5616 case 0: /* Move From FPSCR */
5617 case 24: /* Move From FPSCR Lightweight */
5618 if (PPC_FIELD (insn
, 11, 5) == 0 && PPC_RC (insn
))
5619 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5620 record_full_arch_list_add_reg (regcache
,
5621 tdep
->ppc_fp0_regnum
5627 case 8: /* Floating Copy Sign */
5628 case 40: /* Floating Negate */
5629 case 72: /* Floating Move Register */
5630 case 136: /* Floating Negative Absolute Value */
5631 case 264: /* Floating Absolute Value */
5632 record_full_arch_list_add_reg (regcache
,
5633 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5635 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5638 case 838: /* Floating Merge Odd Word */
5639 case 966: /* Floating Merge Even Word */
5640 record_full_arch_list_add_reg (regcache
,
5641 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5644 case 38: /* Move To FPSCR Bit 1 */
5645 case 70: /* Move To FPSCR Bit 0 */
5646 case 134: /* Move To FPSCR Field Immediate */
5647 case 711: /* Move To FPSCR Fields */
5649 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5650 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5653 case 0: /* Floating Compare Unordered */
5654 case 32: /* Floating Compare Ordered */
5655 case 64: /* Move to Condition Register from FPSCR */
5656 case 132: /* VSX Scalar Compare Ordered Quad-Precision */
5657 case 164: /* VSX Scalar Compare Exponents Quad-Precision */
5658 case 644: /* VSX Scalar Compare Unordered Quad-Precision */
5659 case 708: /* VSX Scalar Test Data Class Quad-Precision */
5660 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5662 case 128: /* Floating Test for software Divide */
5663 case 160: /* Floating Test for software Square Root */
5664 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5667 case 4: /* VSX Scalar Add Quad-Precision */
5668 case 36: /* VSX Scalar Multiply Quad-Precision */
5669 case 388: /* VSX Scalar Multiply-Add Quad-Precision */
5670 case 420: /* VSX Scalar Multiply-Subtract Quad-Precision */
5671 case 452: /* VSX Scalar Negative Multiply-Add Quad-Precision */
5672 case 484: /* VSX Scalar Negative Multiply-Subtract
5674 case 516: /* VSX Scalar Subtract Quad-Precision */
5675 case 548: /* VSX Scalar Divide Quad-Precision */
5676 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5678 case 100: /* VSX Scalar Copy Sign Quad-Precision */
5679 case 868: /* VSX Scalar Insert Exponent Quad-Precision */
5680 ppc_record_vsr (regcache
, tdep
, PPC_VRT (insn
) + 32);
5684 switch (PPC_FIELD (insn
, 11, 5))
5686 case 27: /* VSX Scalar Square Root Quad-Precision */
5687 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5689 case 0: /* VSX Scalar Absolute Quad-Precision */
5690 case 2: /* VSX Scalar Extract Exponent Quad-Precision */
5691 case 8: /* VSX Scalar Negative Absolute Quad-Precision */
5692 case 16: /* VSX Scalar Negate Quad-Precision */
5693 case 18: /* VSX Scalar Extract Significand Quad-Precision */
5694 ppc_record_vsr (regcache
, tdep
, PPC_VRT (insn
) + 32);
5700 switch (PPC_FIELD (insn
, 11, 5))
5702 case 1: /* VSX Scalar truncate & Convert Quad-Precision format
5703 to Unsigned Word format */
5704 case 2: /* VSX Scalar Convert Unsigned Doubleword format to
5705 Quad-Precision format */
5706 case 9: /* VSX Scalar truncate & Convert Quad-Precision format
5707 to Signed Word format */
5708 case 10: /* VSX Scalar Convert Signed Doubleword format to
5709 Quad-Precision format */
5710 case 17: /* VSX Scalar truncate & Convert Quad-Precision format
5711 to Unsigned Doubleword format */
5712 case 20: /* VSX Scalar round & Convert Quad-Precision format to
5713 Double-Precision format */
5714 case 22: /* VSX Scalar Convert Double-Precision format to
5715 Quad-Precision format */
5716 case 25: /* VSX Scalar truncate & Convert Quad-Precision format
5717 to Signed Doubleword format */
5718 record_full_arch_list_add_reg (regcache
, tdep
->ppc_fpscr_regnum
);
5719 ppc_record_vsr (regcache
, tdep
, PPC_VRT (insn
) + 32);
5724 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
5725 "at %s, 63-%d.\n", insn
, paddress (gdbarch
, addr
), ext
);
5729 /* Parse the current instruction and record the values of the registers and
5730 memory that will be changed in current instruction to "record_arch_list".
5731 Return -1 if something wrong. */
5734 ppc_process_record (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5737 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5738 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
5742 insn
= read_memory_unsigned_integer (addr
, 4, byte_order
);
5743 op6
= PPC_OP6 (insn
);
5747 case 2: /* Trap Doubleword Immediate */
5748 case 3: /* Trap Word Immediate */
5753 if (ppc_process_record_op4 (gdbarch
, regcache
, addr
, insn
) != 0)
5757 case 17: /* System call */
5758 if (PPC_LEV (insn
) != 0)
5761 if (tdep
->ppc_syscall_record
!= NULL
)
5763 if (tdep
->ppc_syscall_record (regcache
) != 0)
5768 printf_unfiltered (_("no syscall record support\n"));
5773 case 7: /* Multiply Low Immediate */
5774 record_full_arch_list_add_reg (regcache
,
5775 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
5778 case 8: /* Subtract From Immediate Carrying */
5779 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
5780 record_full_arch_list_add_reg (regcache
,
5781 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
5784 case 10: /* Compare Logical Immediate */
5785 case 11: /* Compare Immediate */
5786 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5789 case 13: /* Add Immediate Carrying and Record */
5790 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5792 case 12: /* Add Immediate Carrying */
5793 record_full_arch_list_add_reg (regcache
, tdep
->ppc_xer_regnum
);
5795 case 14: /* Add Immediate */
5796 case 15: /* Add Immediate Shifted */
5797 record_full_arch_list_add_reg (regcache
,
5798 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
5801 case 16: /* Branch Conditional */
5802 if ((PPC_BO (insn
) & 0x4) == 0)
5803 record_full_arch_list_add_reg (regcache
, tdep
->ppc_ctr_regnum
);
5805 case 18: /* Branch */
5807 record_full_arch_list_add_reg (regcache
, tdep
->ppc_lr_regnum
);
5811 if (ppc_process_record_op19 (gdbarch
, regcache
, addr
, insn
) != 0)
5815 case 20: /* Rotate Left Word Immediate then Mask Insert */
5816 case 21: /* Rotate Left Word Immediate then AND with Mask */
5817 case 23: /* Rotate Left Word then AND with Mask */
5818 case 30: /* Rotate Left Doubleword Immediate then Clear Left */
5819 /* Rotate Left Doubleword Immediate then Clear Right */
5820 /* Rotate Left Doubleword Immediate then Clear */
5821 /* Rotate Left Doubleword then Clear Left */
5822 /* Rotate Left Doubleword then Clear Right */
5823 /* Rotate Left Doubleword Immediate then Mask Insert */
5825 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5826 record_full_arch_list_add_reg (regcache
,
5827 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
5830 case 28: /* AND Immediate */
5831 case 29: /* AND Immediate Shifted */
5832 record_full_arch_list_add_reg (regcache
, tdep
->ppc_cr_regnum
);
5834 case 24: /* OR Immediate */
5835 case 25: /* OR Immediate Shifted */
5836 case 26: /* XOR Immediate */
5837 case 27: /* XOR Immediate Shifted */
5838 record_full_arch_list_add_reg (regcache
,
5839 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
5843 if (ppc_process_record_op31 (gdbarch
, regcache
, addr
, insn
) != 0)
5847 case 33: /* Load Word and Zero with Update */
5848 case 35: /* Load Byte and Zero with Update */
5849 case 41: /* Load Halfword and Zero with Update */
5850 case 43: /* Load Halfword Algebraic with Update */
5851 record_full_arch_list_add_reg (regcache
,
5852 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
5854 case 32: /* Load Word and Zero */
5855 case 34: /* Load Byte and Zero */
5856 case 40: /* Load Halfword and Zero */
5857 case 42: /* Load Halfword Algebraic */
5858 record_full_arch_list_add_reg (regcache
,
5859 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
5862 case 46: /* Load Multiple Word */
5863 for (i
= PPC_RT (insn
); i
< 32; i
++)
5864 record_full_arch_list_add_reg (regcache
, tdep
->ppc_gp0_regnum
+ i
);
5867 case 56: /* Load Quadword */
5868 tmp
= tdep
->ppc_gp0_regnum
+ (PPC_RT (insn
) & ~1);
5869 record_full_arch_list_add_reg (regcache
, tmp
);
5870 record_full_arch_list_add_reg (regcache
, tmp
+ 1);
5873 case 49: /* Load Floating-Point Single with Update */
5874 case 51: /* Load Floating-Point Double with Update */
5875 record_full_arch_list_add_reg (regcache
,
5876 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
5878 case 48: /* Load Floating-Point Single */
5879 case 50: /* Load Floating-Point Double */
5880 record_full_arch_list_add_reg (regcache
,
5881 tdep
->ppc_fp0_regnum
+ PPC_FRT (insn
));
5884 case 47: /* Store Multiple Word */
5888 if (PPC_RA (insn
) != 0)
5889 regcache_raw_read_unsigned (regcache
,
5890 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
),
5893 iaddr
+= PPC_D (insn
);
5894 record_full_arch_list_add_mem (iaddr
, 4 * (32 - PPC_RS (insn
)));
5898 case 37: /* Store Word with Update */
5899 case 39: /* Store Byte with Update */
5900 case 45: /* Store Halfword with Update */
5901 case 53: /* Store Floating-Point Single with Update */
5902 case 55: /* Store Floating-Point Double with Update */
5903 record_full_arch_list_add_reg (regcache
,
5904 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
5906 case 36: /* Store Word */
5907 case 38: /* Store Byte */
5908 case 44: /* Store Halfword */
5909 case 52: /* Store Floating-Point Single */
5910 case 54: /* Store Floating-Point Double */
5915 if (PPC_RA (insn
) != 0)
5916 regcache_raw_read_unsigned (regcache
,
5917 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
),
5919 iaddr
+= PPC_D (insn
);
5921 if (op6
== 36 || op6
== 37 || op6
== 52 || op6
== 53)
5923 else if (op6
== 54 || op6
== 55)
5925 else if (op6
== 44 || op6
== 45)
5927 else if (op6
== 38 || op6
== 39)
5932 record_full_arch_list_add_mem (iaddr
, size
);
5939 case 0: /* Load Floating-Point Double Pair */
5940 tmp
= tdep
->ppc_fp0_regnum
+ (PPC_RT (insn
) & ~1);
5941 record_full_arch_list_add_reg (regcache
, tmp
);
5942 record_full_arch_list_add_reg (regcache
, tmp
+ 1);
5944 case 2: /* Load VSX Scalar Doubleword */
5945 case 3: /* Load VSX Scalar Single */
5946 ppc_record_vsr (regcache
, tdep
, PPC_VRT (insn
) + 32);
5953 case 58: /* Load Doubleword */
5954 /* Load Doubleword with Update */
5955 /* Load Word Algebraic */
5956 if (PPC_FIELD (insn
, 30, 2) > 2)
5959 record_full_arch_list_add_reg (regcache
,
5960 tdep
->ppc_gp0_regnum
+ PPC_RT (insn
));
5961 if (PPC_BIT (insn
, 31))
5962 record_full_arch_list_add_reg (regcache
,
5963 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
));
5967 if (ppc_process_record_op59 (gdbarch
, regcache
, addr
, insn
) != 0)
5972 if (ppc_process_record_op60 (gdbarch
, regcache
, addr
, insn
) != 0)
5977 if (ppc_process_record_op61 (gdbarch
, regcache
, addr
, insn
) != 0)
5981 case 62: /* Store Doubleword */
5982 /* Store Doubleword with Update */
5983 /* Store Quadword with Update */
5987 int sub2
= PPC_FIELD (insn
, 30, 2);
5992 if (PPC_RA (insn
) != 0)
5993 regcache_raw_read_unsigned (regcache
,
5994 tdep
->ppc_gp0_regnum
+ PPC_RA (insn
),
5997 size
= (sub2
== 2) ? 16 : 8;
5999 iaddr
+= PPC_DS (insn
) << 2;
6000 record_full_arch_list_add_mem (iaddr
, size
);
6002 if (op6
== 62 && sub2
== 1)
6003 record_full_arch_list_add_reg (regcache
,
6004 tdep
->ppc_gp0_regnum
+
6011 if (ppc_process_record_op63 (gdbarch
, regcache
, addr
, insn
) != 0)
6017 fprintf_unfiltered (gdb_stdlog
, "Warning: Don't know how to record %08x "
6018 "at %s, %d.\n", insn
, paddress (gdbarch
, addr
), op6
);
6022 if (record_full_arch_list_add_reg (regcache
, PPC_PC_REGNUM
))
6024 if (record_full_arch_list_add_end ())
6029 /* Initialize the current architecture based on INFO. If possible, re-use an
6030 architecture from ARCHES, which is a list of architectures already created
6031 during this debugging session.
6033 Called e.g. at program startup, when reading a core file, and when reading
6036 static struct gdbarch
*
6037 rs6000_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
6039 struct gdbarch
*gdbarch
;
6040 struct gdbarch_tdep
*tdep
;
6041 int wordsize
, from_xcoff_exec
, from_elf_exec
;
6042 enum bfd_architecture arch
;
6045 enum auto_boolean soft_float_flag
= powerpc_soft_float_global
;
6047 enum powerpc_long_double_abi long_double_abi
= POWERPC_LONG_DOUBLE_AUTO
;
6048 enum powerpc_vector_abi vector_abi
= powerpc_vector_abi_global
;
6049 enum powerpc_elf_abi elf_abi
= POWERPC_ELF_AUTO
;
6050 int have_fpu
= 0, have_spe
= 0, have_mq
= 0, have_altivec
= 0;
6051 int have_dfp
= 0, have_vsx
= 0, have_ppr
= 0, have_dscr
= 0;
6052 int have_tar
= 0, have_ebb
= 0, have_pmu
= 0, have_htm_spr
= 0;
6053 int have_htm_core
= 0, have_htm_fpu
= 0, have_htm_altivec
= 0;
6054 int have_htm_vsx
= 0, have_htm_ppr
= 0, have_htm_dscr
= 0;
6055 int have_htm_tar
= 0;
6056 int tdesc_wordsize
= -1;
6057 const struct target_desc
*tdesc
= info
.target_desc
;
6058 struct tdesc_arch_data
*tdesc_data
= NULL
;
6059 int num_pseudoregs
= 0;
6062 /* INFO may refer to a binary that is not of the PowerPC architecture,
6063 e.g. when debugging a stand-alone SPE executable on a Cell/B.E. system.
6064 In this case, we must not attempt to infer properties of the (PowerPC
6065 side) of the target system from properties of that executable. Trust
6066 the target description instead. */
6068 && bfd_get_arch (info
.abfd
) != bfd_arch_powerpc
6069 && bfd_get_arch (info
.abfd
) != bfd_arch_rs6000
)
6072 from_xcoff_exec
= info
.abfd
&& info
.abfd
->format
== bfd_object
&&
6073 bfd_get_flavour (info
.abfd
) == bfd_target_xcoff_flavour
;
6075 from_elf_exec
= info
.abfd
&& info
.abfd
->format
== bfd_object
&&
6076 bfd_get_flavour (info
.abfd
) == bfd_target_elf_flavour
;
6078 /* Check word size. If INFO is from a binary file, infer it from
6079 that, else choose a likely default. */
6080 if (from_xcoff_exec
)
6082 if (bfd_xcoff_is_xcoff64 (info
.abfd
))
6087 else if (from_elf_exec
)
6089 if (elf_elfheader (info
.abfd
)->e_ident
[EI_CLASS
] == ELFCLASS64
)
6094 else if (tdesc_has_registers (tdesc
))
6098 if (info
.bfd_arch_info
!= NULL
&& info
.bfd_arch_info
->bits_per_word
!= 0)
6099 wordsize
= (info
.bfd_arch_info
->bits_per_word
6100 / info
.bfd_arch_info
->bits_per_byte
);
6105 /* Get the architecture and machine from the BFD. */
6106 arch
= info
.bfd_arch_info
->arch
;
6107 mach
= info
.bfd_arch_info
->mach
;
6109 /* For e500 executables, the apuinfo section is of help here. Such
6110 section contains the identifier and revision number of each
6111 Application-specific Processing Unit that is present on the
6112 chip. The content of the section is determined by the assembler
6113 which looks at each instruction and determines which unit (and
6114 which version of it) can execute it. Grovel through the section
6115 looking for relevant e500 APUs. */
6117 if (bfd_uses_spe_extensions (info
.abfd
))
6119 arch
= info
.bfd_arch_info
->arch
;
6120 mach
= bfd_mach_ppc_e500
;
6121 bfd_default_set_arch_mach (&abfd
, arch
, mach
);
6122 info
.bfd_arch_info
= bfd_get_arch_info (&abfd
);
6125 /* Find a default target description which describes our register
6126 layout, if we do not already have one. */
6127 if (! tdesc_has_registers (tdesc
))
6129 const struct variant
*v
;
6131 /* Choose variant. */
6132 v
= find_variant_by_arch (arch
, mach
);
6139 gdb_assert (tdesc_has_registers (tdesc
));
6141 /* Check any target description for validity. */
6142 if (tdesc_has_registers (tdesc
))
6144 static const char *const gprs
[] = {
6145 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
6146 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
6147 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
6148 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
6150 const struct tdesc_feature
*feature
;
6152 static const char *const msr_names
[] = { "msr", "ps" };
6153 static const char *const cr_names
[] = { "cr", "cnd" };
6154 static const char *const ctr_names
[] = { "ctr", "cnt" };
6156 feature
= tdesc_find_feature (tdesc
,
6157 "org.gnu.gdb.power.core");
6158 if (feature
== NULL
)
6161 tdesc_data
= tdesc_data_alloc ();
6164 for (i
= 0; i
< ppc_num_gprs
; i
++)
6165 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
, i
, gprs
[i
]);
6166 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
, PPC_PC_REGNUM
,
6168 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
, PPC_LR_REGNUM
,
6170 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
, PPC_XER_REGNUM
,
6173 /* Allow alternate names for these registers, to accomodate GDB's
6175 valid_p
&= tdesc_numbered_register_choices (feature
, tdesc_data
,
6176 PPC_MSR_REGNUM
, msr_names
);
6177 valid_p
&= tdesc_numbered_register_choices (feature
, tdesc_data
,
6178 PPC_CR_REGNUM
, cr_names
);
6179 valid_p
&= tdesc_numbered_register_choices (feature
, tdesc_data
,
6180 PPC_CTR_REGNUM
, ctr_names
);
6184 tdesc_data_cleanup (tdesc_data
);
6188 have_mq
= tdesc_numbered_register (feature
, tdesc_data
, PPC_MQ_REGNUM
,
6191 tdesc_wordsize
= tdesc_register_bitsize (feature
, "pc") / 8;
6193 wordsize
= tdesc_wordsize
;
6195 feature
= tdesc_find_feature (tdesc
,
6196 "org.gnu.gdb.power.fpu");
6197 if (feature
!= NULL
)
6199 static const char *const fprs
[] = {
6200 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
6201 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
6202 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
6203 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
6206 for (i
= 0; i
< ppc_num_fprs
; i
++)
6207 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6208 PPC_F0_REGNUM
+ i
, fprs
[i
]);
6209 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6210 PPC_FPSCR_REGNUM
, "fpscr");
6214 tdesc_data_cleanup (tdesc_data
);
6219 /* The fpscr register was expanded in isa 2.05 to 64 bits
6220 along with the addition of the decimal floating point
6222 if (tdesc_register_bitsize (feature
, "fpscr") > 32)
6228 feature
= tdesc_find_feature (tdesc
,
6229 "org.gnu.gdb.power.altivec");
6230 if (feature
!= NULL
)
6232 static const char *const vector_regs
[] = {
6233 "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
6234 "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
6235 "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
6236 "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
6240 for (i
= 0; i
< ppc_num_gprs
; i
++)
6241 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6244 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6245 PPC_VSCR_REGNUM
, "vscr");
6246 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6247 PPC_VRSAVE_REGNUM
, "vrsave");
6249 if (have_spe
|| !valid_p
)
6251 tdesc_data_cleanup (tdesc_data
);
6259 /* Check for POWER7 VSX registers support. */
6260 feature
= tdesc_find_feature (tdesc
,
6261 "org.gnu.gdb.power.vsx");
6263 if (feature
!= NULL
)
6265 static const char *const vsx_regs
[] = {
6266 "vs0h", "vs1h", "vs2h", "vs3h", "vs4h", "vs5h",
6267 "vs6h", "vs7h", "vs8h", "vs9h", "vs10h", "vs11h",
6268 "vs12h", "vs13h", "vs14h", "vs15h", "vs16h", "vs17h",
6269 "vs18h", "vs19h", "vs20h", "vs21h", "vs22h", "vs23h",
6270 "vs24h", "vs25h", "vs26h", "vs27h", "vs28h", "vs29h",
6276 for (i
= 0; i
< ppc_num_vshrs
; i
++)
6277 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6278 PPC_VSR0_UPPER_REGNUM
+ i
,
6281 if (!valid_p
|| !have_fpu
|| !have_altivec
)
6283 tdesc_data_cleanup (tdesc_data
);
6292 /* On machines supporting the SPE APU, the general-purpose registers
6293 are 64 bits long. There are SIMD vector instructions to treat them
6294 as pairs of floats, but the rest of the instruction set treats them
6295 as 32-bit registers, and only operates on their lower halves.
6297 In the GDB regcache, we treat their high and low halves as separate
6298 registers. The low halves we present as the general-purpose
6299 registers, and then we have pseudo-registers that stitch together
6300 the upper and lower halves and present them as pseudo-registers.
6302 Thus, the target description is expected to supply the upper
6303 halves separately. */
6305 feature
= tdesc_find_feature (tdesc
,
6306 "org.gnu.gdb.power.spe");
6307 if (feature
!= NULL
)
6309 static const char *const upper_spe
[] = {
6310 "ev0h", "ev1h", "ev2h", "ev3h",
6311 "ev4h", "ev5h", "ev6h", "ev7h",
6312 "ev8h", "ev9h", "ev10h", "ev11h",
6313 "ev12h", "ev13h", "ev14h", "ev15h",
6314 "ev16h", "ev17h", "ev18h", "ev19h",
6315 "ev20h", "ev21h", "ev22h", "ev23h",
6316 "ev24h", "ev25h", "ev26h", "ev27h",
6317 "ev28h", "ev29h", "ev30h", "ev31h"
6321 for (i
= 0; i
< ppc_num_gprs
; i
++)
6322 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6323 PPC_SPE_UPPER_GP0_REGNUM
+ i
,
6325 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6326 PPC_SPE_ACC_REGNUM
, "acc");
6327 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6328 PPC_SPE_FSCR_REGNUM
, "spefscr");
6330 if (have_mq
|| have_fpu
|| !valid_p
)
6332 tdesc_data_cleanup (tdesc_data
);
6340 /* Program Priority Register. */
6341 feature
= tdesc_find_feature (tdesc
,
6342 "org.gnu.gdb.power.ppr");
6343 if (feature
!= NULL
)
6346 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6347 PPC_PPR_REGNUM
, "ppr");
6351 tdesc_data_cleanup (tdesc_data
);
6359 /* Data Stream Control Register. */
6360 feature
= tdesc_find_feature (tdesc
,
6361 "org.gnu.gdb.power.dscr");
6362 if (feature
!= NULL
)
6365 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6366 PPC_DSCR_REGNUM
, "dscr");
6370 tdesc_data_cleanup (tdesc_data
);
6378 /* Target Address Register. */
6379 feature
= tdesc_find_feature (tdesc
,
6380 "org.gnu.gdb.power.tar");
6381 if (feature
!= NULL
)
6384 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6385 PPC_TAR_REGNUM
, "tar");
6389 tdesc_data_cleanup (tdesc_data
);
6397 /* Event-based Branching Registers. */
6398 feature
= tdesc_find_feature (tdesc
,
6399 "org.gnu.gdb.power.ebb");
6400 if (feature
!= NULL
)
6402 static const char *const ebb_regs
[] = {
6403 "bescr", "ebbhr", "ebbrr"
6407 for (i
= 0; i
< ARRAY_SIZE (ebb_regs
); i
++)
6408 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6409 PPC_BESCR_REGNUM
+ i
,
6413 tdesc_data_cleanup (tdesc_data
);
6421 /* Subset of the ISA 2.07 Performance Monitor Registers provided
6423 feature
= tdesc_find_feature (tdesc
,
6424 "org.gnu.gdb.power.linux.pmu");
6425 if (feature
!= NULL
)
6429 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
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
,
6447 tdesc_data_cleanup (tdesc_data
);
6455 /* Hardware Transactional Memory Registers. */
6456 feature
= tdesc_find_feature (tdesc
,
6457 "org.gnu.gdb.power.htm.spr");
6458 if (feature
!= NULL
)
6460 static const char *const tm_spr_regs
[] = {
6461 "tfhar", "texasr", "tfiar"
6465 for (i
= 0; i
< ARRAY_SIZE (tm_spr_regs
); i
++)
6466 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6467 PPC_TFHAR_REGNUM
+ i
,
6471 tdesc_data_cleanup (tdesc_data
);
6480 feature
= tdesc_find_feature (tdesc
,
6481 "org.gnu.gdb.power.htm.core");
6482 if (feature
!= NULL
)
6484 static const char *const cgprs
[] = {
6485 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",
6486 "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14",
6487 "cr15", "cr16", "cr17", "cr18", "cr19", "cr20", "cr21",
6488 "cr22", "cr23", "cr24", "cr25", "cr26", "cr27", "cr28",
6489 "cr29", "cr30", "cr31", "ccr", "cxer", "clr", "cctr"
6494 for (i
= 0; i
< ARRAY_SIZE (cgprs
); i
++)
6495 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6500 tdesc_data_cleanup (tdesc_data
);
6509 feature
= tdesc_find_feature (tdesc
,
6510 "org.gnu.gdb.power.htm.fpu");
6511 if (feature
!= NULL
)
6515 static const char *const cfprs
[] = {
6516 "cf0", "cf1", "cf2", "cf3", "cf4", "cf5", "cf6", "cf7",
6517 "cf8", "cf9", "cf10", "cf11", "cf12", "cf13", "cf14", "cf15",
6518 "cf16", "cf17", "cf18", "cf19", "cf20", "cf21", "cf22",
6519 "cf23", "cf24", "cf25", "cf26", "cf27", "cf28", "cf29",
6520 "cf30", "cf31", "cfpscr"
6523 for (i
= 0; i
< ARRAY_SIZE (cfprs
); i
++)
6524 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6530 tdesc_data_cleanup (tdesc_data
);
6538 feature
= tdesc_find_feature (tdesc
,
6539 "org.gnu.gdb.power.htm.altivec");
6540 if (feature
!= NULL
)
6544 static const char *const cvmx
[] = {
6545 "cvr0", "cvr1", "cvr2", "cvr3", "cvr4", "cvr5", "cvr6",
6546 "cvr7", "cvr8", "cvr9", "cvr10", "cvr11", "cvr12", "cvr13",
6547 "cvr14", "cvr15","cvr16", "cvr17", "cvr18", "cvr19", "cvr20",
6548 "cvr21", "cvr22", "cvr23", "cvr24", "cvr25", "cvr26",
6549 "cvr27", "cvr28", "cvr29", "cvr30", "cvr31", "cvscr",
6553 for (i
= 0; i
< ARRAY_SIZE (cvmx
); i
++)
6554 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6555 PPC_CVR0_REGNUM
+ i
,
6560 tdesc_data_cleanup (tdesc_data
);
6563 have_htm_altivec
= 1;
6566 have_htm_altivec
= 0;
6568 feature
= tdesc_find_feature (tdesc
,
6569 "org.gnu.gdb.power.htm.vsx");
6570 if (feature
!= NULL
)
6574 static const char *const cvsx
[] = {
6575 "cvs0h", "cvs1h", "cvs2h", "cvs3h", "cvs4h", "cvs5h",
6576 "cvs6h", "cvs7h", "cvs8h", "cvs9h", "cvs10h", "cvs11h",
6577 "cvs12h", "cvs13h", "cvs14h", "cvs15h", "cvs16h", "cvs17h",
6578 "cvs18h", "cvs19h", "cvs20h", "cvs21h", "cvs22h", "cvs23h",
6579 "cvs24h", "cvs25h", "cvs26h", "cvs27h", "cvs28h", "cvs29h",
6583 for (i
= 0; i
< ARRAY_SIZE (cvsx
); i
++)
6584 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6585 (PPC_CVSR0_UPPER_REGNUM
6589 if (!valid_p
|| !have_htm_fpu
|| !have_htm_altivec
)
6591 tdesc_data_cleanup (tdesc_data
);
6599 feature
= tdesc_find_feature (tdesc
,
6600 "org.gnu.gdb.power.htm.ppr");
6601 if (feature
!= NULL
)
6603 valid_p
= tdesc_numbered_register (feature
, tdesc_data
,
6604 PPC_CPPR_REGNUM
, "cppr");
6608 tdesc_data_cleanup (tdesc_data
);
6616 feature
= tdesc_find_feature (tdesc
,
6617 "org.gnu.gdb.power.htm.dscr");
6618 if (feature
!= NULL
)
6620 valid_p
= tdesc_numbered_register (feature
, tdesc_data
,
6621 PPC_CDSCR_REGNUM
, "cdscr");
6625 tdesc_data_cleanup (tdesc_data
);
6633 feature
= tdesc_find_feature (tdesc
,
6634 "org.gnu.gdb.power.htm.tar");
6635 if (feature
!= NULL
)
6637 valid_p
= tdesc_numbered_register (feature
, tdesc_data
,
6638 PPC_CTAR_REGNUM
, "ctar");
6642 tdesc_data_cleanup (tdesc_data
);
6651 /* If we have a 64-bit binary on a 32-bit target, complain. Also
6652 complain for a 32-bit binary on a 64-bit target; we do not yet
6653 support that. For instance, the 32-bit ABI routines expect
6656 As long as there isn't an explicit target description, we'll
6657 choose one based on the BFD architecture and get a word size
6658 matching the binary (probably powerpc:common or
6659 powerpc:common64). So there is only trouble if a 64-bit target
6660 supplies a 64-bit description while debugging a 32-bit
6662 if (tdesc_wordsize
!= -1 && tdesc_wordsize
!= wordsize
)
6664 tdesc_data_cleanup (tdesc_data
);
6671 switch (elf_elfheader (info
.abfd
)->e_flags
& EF_PPC64_ABI
)
6674 elf_abi
= POWERPC_ELF_V1
;
6677 elf_abi
= POWERPC_ELF_V2
;
6684 if (soft_float_flag
== AUTO_BOOLEAN_AUTO
&& from_elf_exec
)
6686 switch (bfd_elf_get_obj_attr_int (info
.abfd
, OBJ_ATTR_GNU
,
6687 Tag_GNU_Power_ABI_FP
) & 3)
6690 soft_float_flag
= AUTO_BOOLEAN_FALSE
;
6693 soft_float_flag
= AUTO_BOOLEAN_TRUE
;
6700 if (long_double_abi
== POWERPC_LONG_DOUBLE_AUTO
&& from_elf_exec
)
6702 switch (bfd_elf_get_obj_attr_int (info
.abfd
, OBJ_ATTR_GNU
,
6703 Tag_GNU_Power_ABI_FP
) >> 2)
6706 long_double_abi
= POWERPC_LONG_DOUBLE_IBM128
;
6709 long_double_abi
= POWERPC_LONG_DOUBLE_IEEE128
;
6716 if (vector_abi
== POWERPC_VEC_AUTO
&& from_elf_exec
)
6718 switch (bfd_elf_get_obj_attr_int (info
.abfd
, OBJ_ATTR_GNU
,
6719 Tag_GNU_Power_ABI_Vector
))
6722 vector_abi
= POWERPC_VEC_GENERIC
;
6725 vector_abi
= POWERPC_VEC_ALTIVEC
;
6728 vector_abi
= POWERPC_VEC_SPE
;
6736 /* At this point, the only supported ELF-based 64-bit little-endian
6737 operating system is GNU/Linux, and this uses the ELFv2 ABI by
6738 default. All other supported ELF-based operating systems use the
6739 ELFv1 ABI by default. Therefore, if the ABI marker is missing,
6740 e.g. because we run a legacy binary, or have attached to a process
6741 and have not found any associated binary file, set the default
6742 according to this heuristic. */
6743 if (elf_abi
== POWERPC_ELF_AUTO
)
6745 if (wordsize
== 8 && info
.byte_order
== BFD_ENDIAN_LITTLE
)
6746 elf_abi
= POWERPC_ELF_V2
;
6748 elf_abi
= POWERPC_ELF_V1
;
6751 if (soft_float_flag
== AUTO_BOOLEAN_TRUE
)
6753 else if (soft_float_flag
== AUTO_BOOLEAN_FALSE
)
6756 soft_float
= !have_fpu
;
6758 /* If we have a hard float binary or setting but no floating point
6759 registers, downgrade to soft float anyway. We're still somewhat
6760 useful in this scenario. */
6761 if (!soft_float
&& !have_fpu
)
6764 /* Similarly for vector registers. */
6765 if (vector_abi
== POWERPC_VEC_ALTIVEC
&& !have_altivec
)
6766 vector_abi
= POWERPC_VEC_GENERIC
;
6768 if (vector_abi
== POWERPC_VEC_SPE
&& !have_spe
)
6769 vector_abi
= POWERPC_VEC_GENERIC
;
6771 if (vector_abi
== POWERPC_VEC_AUTO
)
6774 vector_abi
= POWERPC_VEC_ALTIVEC
;
6776 vector_abi
= POWERPC_VEC_SPE
;
6778 vector_abi
= POWERPC_VEC_GENERIC
;
6781 /* Do not limit the vector ABI based on available hardware, since we
6782 do not yet know what hardware we'll decide we have. Yuck! FIXME! */
6784 /* Find a candidate among extant architectures. */
6785 for (arches
= gdbarch_list_lookup_by_info (arches
, &info
);
6787 arches
= gdbarch_list_lookup_by_info (arches
->next
, &info
))
6789 /* Word size in the various PowerPC bfd_arch_info structs isn't
6790 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
6791 separate word size check. */
6792 tdep
= gdbarch_tdep (arches
->gdbarch
);
6793 if (tdep
&& tdep
->elf_abi
!= elf_abi
)
6795 if (tdep
&& tdep
->soft_float
!= soft_float
)
6797 if (tdep
&& tdep
->long_double_abi
!= long_double_abi
)
6799 if (tdep
&& tdep
->vector_abi
!= vector_abi
)
6801 if (tdep
&& tdep
->wordsize
== wordsize
)
6803 if (tdesc_data
!= NULL
)
6804 tdesc_data_cleanup (tdesc_data
);
6805 return arches
->gdbarch
;
6809 /* None found, create a new architecture from INFO, whose bfd_arch_info
6810 validity depends on the source:
6811 - executable useless
6812 - rs6000_host_arch() good
6814 - "set arch" trust blindly
6815 - GDB startup useless but harmless */
6817 tdep
= XCNEW (struct gdbarch_tdep
);
6818 tdep
->wordsize
= wordsize
;
6819 tdep
->elf_abi
= elf_abi
;
6820 tdep
->soft_float
= soft_float
;
6821 tdep
->long_double_abi
= long_double_abi
;
6822 tdep
->vector_abi
= vector_abi
;
6824 gdbarch
= gdbarch_alloc (&info
, tdep
);
6826 tdep
->ppc_gp0_regnum
= PPC_R0_REGNUM
;
6827 tdep
->ppc_toc_regnum
= PPC_R0_REGNUM
+ 2;
6828 tdep
->ppc_ps_regnum
= PPC_MSR_REGNUM
;
6829 tdep
->ppc_cr_regnum
= PPC_CR_REGNUM
;
6830 tdep
->ppc_lr_regnum
= PPC_LR_REGNUM
;
6831 tdep
->ppc_ctr_regnum
= PPC_CTR_REGNUM
;
6832 tdep
->ppc_xer_regnum
= PPC_XER_REGNUM
;
6833 tdep
->ppc_mq_regnum
= have_mq
? PPC_MQ_REGNUM
: -1;
6835 tdep
->ppc_fp0_regnum
= have_fpu
? PPC_F0_REGNUM
: -1;
6836 tdep
->ppc_fpscr_regnum
= have_fpu
? PPC_FPSCR_REGNUM
: -1;
6837 tdep
->ppc_vsr0_upper_regnum
= have_vsx
? PPC_VSR0_UPPER_REGNUM
: -1;
6838 tdep
->ppc_vr0_regnum
= have_altivec
? PPC_VR0_REGNUM
: -1;
6839 tdep
->ppc_vrsave_regnum
= have_altivec
? PPC_VRSAVE_REGNUM
: -1;
6840 tdep
->ppc_ev0_upper_regnum
= have_spe
? PPC_SPE_UPPER_GP0_REGNUM
: -1;
6841 tdep
->ppc_acc_regnum
= have_spe
? PPC_SPE_ACC_REGNUM
: -1;
6842 tdep
->ppc_spefscr_regnum
= have_spe
? PPC_SPE_FSCR_REGNUM
: -1;
6843 tdep
->ppc_ppr_regnum
= have_ppr
? PPC_PPR_REGNUM
: -1;
6844 tdep
->ppc_dscr_regnum
= have_dscr
? PPC_DSCR_REGNUM
: -1;
6845 tdep
->ppc_tar_regnum
= have_tar
? PPC_TAR_REGNUM
: -1;
6846 tdep
->have_ebb
= have_ebb
;
6848 /* If additional pmu registers are added, care must be taken when
6849 setting new fields in the tdep below, to maintain compatibility
6850 with features that only provide some of the registers. Currently
6851 gdb access to the pmu registers is only supported in linux, and
6852 linux only provides a subset of the pmu registers defined in the
6855 tdep
->ppc_mmcr0_regnum
= have_pmu
? PPC_MMCR0_REGNUM
: -1;
6856 tdep
->ppc_mmcr2_regnum
= have_pmu
? PPC_MMCR2_REGNUM
: -1;
6857 tdep
->ppc_siar_regnum
= have_pmu
? PPC_SIAR_REGNUM
: -1;
6858 tdep
->ppc_sdar_regnum
= have_pmu
? PPC_SDAR_REGNUM
: -1;
6859 tdep
->ppc_sier_regnum
= have_pmu
? PPC_SIER_REGNUM
: -1;
6861 tdep
->have_htm_spr
= have_htm_spr
;
6862 tdep
->have_htm_core
= have_htm_core
;
6863 tdep
->have_htm_fpu
= have_htm_fpu
;
6864 tdep
->have_htm_altivec
= have_htm_altivec
;
6865 tdep
->have_htm_vsx
= have_htm_vsx
;
6866 tdep
->ppc_cppr_regnum
= have_htm_ppr
? PPC_CPPR_REGNUM
: -1;
6867 tdep
->ppc_cdscr_regnum
= have_htm_dscr
? PPC_CDSCR_REGNUM
: -1;
6868 tdep
->ppc_ctar_regnum
= have_htm_tar
? PPC_CTAR_REGNUM
: -1;
6870 set_gdbarch_pc_regnum (gdbarch
, PPC_PC_REGNUM
);
6871 set_gdbarch_sp_regnum (gdbarch
, PPC_R0_REGNUM
+ 1);
6872 set_gdbarch_fp0_regnum (gdbarch
, tdep
->ppc_fp0_regnum
);
6873 set_gdbarch_register_sim_regno (gdbarch
, rs6000_register_sim_regno
);
6875 /* The XML specification for PowerPC sensibly calls the MSR "msr".
6876 GDB traditionally called it "ps", though, so let GDB add an
6878 set_gdbarch_ps_regnum (gdbarch
, tdep
->ppc_ps_regnum
);
6881 set_gdbarch_return_value (gdbarch
, ppc64_sysv_abi_return_value
);
6883 set_gdbarch_return_value (gdbarch
, ppc_sysv_abi_return_value
);
6885 /* Set lr_frame_offset. */
6887 tdep
->lr_frame_offset
= 16;
6889 tdep
->lr_frame_offset
= 4;
6891 if (have_spe
|| have_dfp
|| have_vsx
|| have_htm_fpu
|| have_htm_vsx
)
6893 set_gdbarch_pseudo_register_read (gdbarch
, rs6000_pseudo_register_read
);
6894 set_gdbarch_pseudo_register_write (gdbarch
,
6895 rs6000_pseudo_register_write
);
6896 set_gdbarch_ax_pseudo_register_collect (gdbarch
,
6897 rs6000_ax_pseudo_register_collect
);
6900 set_gdbarch_gen_return_address (gdbarch
, rs6000_gen_return_address
);
6902 set_gdbarch_have_nonsteppable_watchpoint (gdbarch
, 1);
6904 set_gdbarch_num_regs (gdbarch
, PPC_NUM_REGS
);
6907 num_pseudoregs
+= 32;
6909 num_pseudoregs
+= 16;
6911 /* Include both VSX and Extended FP registers. */
6912 num_pseudoregs
+= 96;
6914 num_pseudoregs
+= 16;
6915 /* Include both checkpointed VSX and EFP registers. */
6917 num_pseudoregs
+= 64 + 32;
6919 set_gdbarch_num_pseudo_regs (gdbarch
, num_pseudoregs
);
6921 set_gdbarch_ptr_bit (gdbarch
, wordsize
* TARGET_CHAR_BIT
);
6922 set_gdbarch_short_bit (gdbarch
, 2 * TARGET_CHAR_BIT
);
6923 set_gdbarch_int_bit (gdbarch
, 4 * TARGET_CHAR_BIT
);
6924 set_gdbarch_long_bit (gdbarch
, wordsize
* TARGET_CHAR_BIT
);
6925 set_gdbarch_long_long_bit (gdbarch
, 8 * TARGET_CHAR_BIT
);
6926 set_gdbarch_float_bit (gdbarch
, 4 * TARGET_CHAR_BIT
);
6927 set_gdbarch_double_bit (gdbarch
, 8 * TARGET_CHAR_BIT
);
6928 set_gdbarch_long_double_bit (gdbarch
, 16 * TARGET_CHAR_BIT
);
6929 set_gdbarch_char_signed (gdbarch
, 0);
6931 set_gdbarch_frame_align (gdbarch
, rs6000_frame_align
);
6934 set_gdbarch_frame_red_zone_size (gdbarch
, 288);
6936 set_gdbarch_convert_register_p (gdbarch
, rs6000_convert_register_p
);
6937 set_gdbarch_register_to_value (gdbarch
, rs6000_register_to_value
);
6938 set_gdbarch_value_to_register (gdbarch
, rs6000_value_to_register
);
6940 set_gdbarch_stab_reg_to_regnum (gdbarch
, rs6000_stab_reg_to_regnum
);
6941 set_gdbarch_dwarf2_reg_to_regnum (gdbarch
, rs6000_dwarf2_reg_to_regnum
);
6944 set_gdbarch_push_dummy_call (gdbarch
, ppc_sysv_abi_push_dummy_call
);
6945 else if (wordsize
== 8)
6946 set_gdbarch_push_dummy_call (gdbarch
, ppc64_sysv_abi_push_dummy_call
);
6948 set_gdbarch_skip_prologue (gdbarch
, rs6000_skip_prologue
);
6949 set_gdbarch_stack_frame_destroyed_p (gdbarch
, rs6000_stack_frame_destroyed_p
);
6950 set_gdbarch_skip_main_prologue (gdbarch
, rs6000_skip_main_prologue
);
6952 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
6954 set_gdbarch_breakpoint_kind_from_pc (gdbarch
,
6955 rs6000_breakpoint::kind_from_pc
);
6956 set_gdbarch_sw_breakpoint_from_kind (gdbarch
,
6957 rs6000_breakpoint::bp_from_kind
);
6959 /* The value of symbols of type N_SO and N_FUN maybe null when
6961 set_gdbarch_sofun_address_maybe_missing (gdbarch
, 1);
6963 /* Handles single stepping of atomic sequences. */
6964 set_gdbarch_software_single_step (gdbarch
, ppc_deal_with_atomic_sequence
);
6966 /* Not sure on this. FIXMEmgo */
6967 set_gdbarch_frame_args_skip (gdbarch
, 8);
6969 /* Helpers for function argument information. */
6970 set_gdbarch_fetch_pointer_argument (gdbarch
, rs6000_fetch_pointer_argument
);
6973 set_gdbarch_in_solib_return_trampoline
6974 (gdbarch
, rs6000_in_solib_return_trampoline
);
6975 set_gdbarch_skip_trampoline_code (gdbarch
, rs6000_skip_trampoline_code
);
6977 /* Hook in the DWARF CFI frame unwinder. */
6978 dwarf2_append_unwinders (gdbarch
);
6979 dwarf2_frame_set_adjust_regnum (gdbarch
, rs6000_adjust_frame_regnum
);
6981 /* Frame handling. */
6982 dwarf2_frame_set_init_reg (gdbarch
, ppc_dwarf2_frame_init_reg
);
6984 /* Setup displaced stepping. */
6985 set_gdbarch_displaced_step_copy_insn (gdbarch
,
6986 ppc_displaced_step_copy_insn
);
6987 set_gdbarch_displaced_step_hw_singlestep (gdbarch
,
6988 ppc_displaced_step_hw_singlestep
);
6989 set_gdbarch_displaced_step_fixup (gdbarch
, ppc_displaced_step_fixup
);
6990 set_gdbarch_displaced_step_location (gdbarch
,
6991 displaced_step_at_entry_point
);
6993 set_gdbarch_max_insn_length (gdbarch
, PPC_INSN_SIZE
);
6995 /* Hook in ABI-specific overrides, if they have been registered. */
6996 info
.target_desc
= tdesc
;
6997 info
.tdesc_data
= tdesc_data
;
6998 gdbarch_init_osabi (info
, gdbarch
);
7002 case GDB_OSABI_LINUX
:
7003 case GDB_OSABI_NETBSD
:
7004 case GDB_OSABI_UNKNOWN
:
7005 set_gdbarch_unwind_pc (gdbarch
, rs6000_unwind_pc
);
7006 frame_unwind_append_unwinder (gdbarch
, &rs6000_epilogue_frame_unwind
);
7007 frame_unwind_append_unwinder (gdbarch
, &rs6000_frame_unwind
);
7008 set_gdbarch_dummy_id (gdbarch
, rs6000_dummy_id
);
7009 frame_base_append_sniffer (gdbarch
, rs6000_frame_base_sniffer
);
7012 set_gdbarch_believe_pcc_promotion (gdbarch
, 1);
7014 set_gdbarch_unwind_pc (gdbarch
, rs6000_unwind_pc
);
7015 frame_unwind_append_unwinder (gdbarch
, &rs6000_epilogue_frame_unwind
);
7016 frame_unwind_append_unwinder (gdbarch
, &rs6000_frame_unwind
);
7017 set_gdbarch_dummy_id (gdbarch
, rs6000_dummy_id
);
7018 frame_base_append_sniffer (gdbarch
, rs6000_frame_base_sniffer
);
7021 set_tdesc_pseudo_register_type (gdbarch
, rs6000_pseudo_register_type
);
7022 tdesc_use_registers (gdbarch
, tdesc
, tdesc_data
);
7024 /* Override the normal target description method to make the SPE upper
7025 halves anonymous. */
7026 set_gdbarch_register_name (gdbarch
, rs6000_register_name
);
7028 /* Choose register numbers for all supported pseudo-registers. */
7029 tdep
->ppc_ev0_regnum
= -1;
7030 tdep
->ppc_dl0_regnum
= -1;
7031 tdep
->ppc_vsr0_regnum
= -1;
7032 tdep
->ppc_efpr0_regnum
= -1;
7033 tdep
->ppc_cdl0_regnum
= -1;
7034 tdep
->ppc_cvsr0_regnum
= -1;
7035 tdep
->ppc_cefpr0_regnum
= -1;
7037 cur_reg
= gdbarch_num_regs (gdbarch
);
7041 tdep
->ppc_ev0_regnum
= cur_reg
;
7046 tdep
->ppc_dl0_regnum
= cur_reg
;
7051 tdep
->ppc_vsr0_regnum
= cur_reg
;
7053 tdep
->ppc_efpr0_regnum
= cur_reg
;
7058 tdep
->ppc_cdl0_regnum
= cur_reg
;
7063 tdep
->ppc_cvsr0_regnum
= cur_reg
;
7065 tdep
->ppc_cefpr0_regnum
= cur_reg
;
7069 gdb_assert (gdbarch_num_cooked_regs (gdbarch
) == cur_reg
);
7071 /* Register the ravenscar_arch_ops. */
7072 if (mach
== bfd_mach_ppc_e500
)
7073 register_e500_ravenscar_ops (gdbarch
);
7075 register_ppc_ravenscar_ops (gdbarch
);
7077 set_gdbarch_disassembler_options (gdbarch
, &powerpc_disassembler_options
);
7078 set_gdbarch_valid_disassembler_options (gdbarch
,
7079 disassembler_options_powerpc ());
7085 rs6000_dump_tdep (struct gdbarch
*gdbarch
, struct ui_file
*file
)
7087 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
7092 /* FIXME: Dump gdbarch_tdep. */
7095 /* PowerPC-specific commands. */
7098 set_powerpc_command (const char *args
, int from_tty
)
7100 printf_unfiltered (_("\
7101 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
7102 help_list (setpowerpccmdlist
, "set powerpc ", all_commands
, gdb_stdout
);
7106 show_powerpc_command (const char *args
, int from_tty
)
7108 cmd_show_list (showpowerpccmdlist
, from_tty
, "");
7112 powerpc_set_soft_float (const char *args
, int from_tty
,
7113 struct cmd_list_element
*c
)
7115 struct gdbarch_info info
;
7117 /* Update the architecture. */
7118 gdbarch_info_init (&info
);
7119 if (!gdbarch_update_p (info
))
7120 internal_error (__FILE__
, __LINE__
, _("could not update architecture"));
7124 powerpc_set_vector_abi (const char *args
, int from_tty
,
7125 struct cmd_list_element
*c
)
7127 struct gdbarch_info info
;
7130 for (vector_abi
= POWERPC_VEC_AUTO
;
7131 vector_abi
!= POWERPC_VEC_LAST
;
7133 if (strcmp (powerpc_vector_abi_string
,
7134 powerpc_vector_strings
[vector_abi
]) == 0)
7136 powerpc_vector_abi_global
= (enum powerpc_vector_abi
) vector_abi
;
7140 if (vector_abi
== POWERPC_VEC_LAST
)
7141 internal_error (__FILE__
, __LINE__
, _("Invalid vector ABI accepted: %s."),
7142 powerpc_vector_abi_string
);
7144 /* Update the architecture. */
7145 gdbarch_info_init (&info
);
7146 if (!gdbarch_update_p (info
))
7147 internal_error (__FILE__
, __LINE__
, _("could not update architecture"));
7150 /* Show the current setting of the exact watchpoints flag. */
7153 show_powerpc_exact_watchpoints (struct ui_file
*file
, int from_tty
,
7154 struct cmd_list_element
*c
,
7157 fprintf_filtered (file
, _("Use of exact watchpoints is %s.\n"), value
);
7160 /* Read a PPC instruction from memory. */
7163 read_insn (struct frame_info
*frame
, CORE_ADDR pc
)
7165 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
7166 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
7168 return read_memory_unsigned_integer (pc
, 4, byte_order
);
7171 /* Return non-zero if the instructions at PC match the series
7172 described in PATTERN, or zero otherwise. PATTERN is an array of
7173 'struct ppc_insn_pattern' objects, terminated by an entry whose
7176 When the match is successful, fill INSNS[i] with what PATTERN[i]
7177 matched. If PATTERN[i] is optional, and the instruction wasn't
7178 present, set INSNS[i] to 0 (which is not a valid PPC instruction).
7179 INSNS should have as many elements as PATTERN, minus the terminator.
7180 Note that, if PATTERN contains optional instructions which aren't
7181 present in memory, then INSNS will have holes, so INSNS[i] isn't
7182 necessarily the i'th instruction in memory. */
7185 ppc_insns_match_pattern (struct frame_info
*frame
, CORE_ADDR pc
,
7186 const struct ppc_insn_pattern
*pattern
,
7187 unsigned int *insns
)
7192 for (i
= 0, insn
= 0; pattern
[i
].mask
; i
++)
7195 insn
= read_insn (frame
, pc
);
7197 if ((insn
& pattern
[i
].mask
) == pattern
[i
].data
)
7203 else if (!pattern
[i
].optional
)
7210 /* Return the 'd' field of the d-form instruction INSN, properly
7214 ppc_insn_d_field (unsigned int insn
)
7216 return ((((CORE_ADDR
) insn
& 0xffff) ^ 0x8000) - 0x8000);
7219 /* Return the 'ds' field of the ds-form instruction INSN, with the two
7220 zero bits concatenated at the right, and properly
7224 ppc_insn_ds_field (unsigned int insn
)
7226 return ((((CORE_ADDR
) insn
& 0xfffc) ^ 0x8000) - 0x8000);
7229 /* Initialization code. */
7232 _initialize_rs6000_tdep (void)
7234 gdbarch_register (bfd_arch_rs6000
, rs6000_gdbarch_init
, rs6000_dump_tdep
);
7235 gdbarch_register (bfd_arch_powerpc
, rs6000_gdbarch_init
, rs6000_dump_tdep
);
7237 /* Initialize the standard target descriptions. */
7238 initialize_tdesc_powerpc_32 ();
7239 initialize_tdesc_powerpc_altivec32 ();
7240 initialize_tdesc_powerpc_vsx32 ();
7241 initialize_tdesc_powerpc_403 ();
7242 initialize_tdesc_powerpc_403gc ();
7243 initialize_tdesc_powerpc_405 ();
7244 initialize_tdesc_powerpc_505 ();
7245 initialize_tdesc_powerpc_601 ();
7246 initialize_tdesc_powerpc_602 ();
7247 initialize_tdesc_powerpc_603 ();
7248 initialize_tdesc_powerpc_604 ();
7249 initialize_tdesc_powerpc_64 ();
7250 initialize_tdesc_powerpc_altivec64 ();
7251 initialize_tdesc_powerpc_vsx64 ();
7252 initialize_tdesc_powerpc_7400 ();
7253 initialize_tdesc_powerpc_750 ();
7254 initialize_tdesc_powerpc_860 ();
7255 initialize_tdesc_powerpc_e500 ();
7256 initialize_tdesc_rs6000 ();
7258 /* Add root prefix command for all "set powerpc"/"show powerpc"
7260 add_prefix_cmd ("powerpc", no_class
, set_powerpc_command
,
7261 _("Various PowerPC-specific commands."),
7262 &setpowerpccmdlist
, "set powerpc ", 0, &setlist
);
7264 add_prefix_cmd ("powerpc", no_class
, show_powerpc_command
,
7265 _("Various PowerPC-specific commands."),
7266 &showpowerpccmdlist
, "show powerpc ", 0, &showlist
);
7268 /* Add a command to allow the user to force the ABI. */
7269 add_setshow_auto_boolean_cmd ("soft-float", class_support
,
7270 &powerpc_soft_float_global
,
7271 _("Set whether to use a soft-float ABI."),
7272 _("Show whether to use a soft-float ABI."),
7274 powerpc_set_soft_float
, NULL
,
7275 &setpowerpccmdlist
, &showpowerpccmdlist
);
7277 add_setshow_enum_cmd ("vector-abi", class_support
, powerpc_vector_strings
,
7278 &powerpc_vector_abi_string
,
7279 _("Set the vector ABI."),
7280 _("Show the vector ABI."),
7281 NULL
, powerpc_set_vector_abi
, NULL
,
7282 &setpowerpccmdlist
, &showpowerpccmdlist
);
7284 add_setshow_boolean_cmd ("exact-watchpoints", class_support
,
7285 &target_exact_watchpoints
,
7287 Set whether to use just one debug register for watchpoints on scalars."),
7289 Show whether to use just one debug register for watchpoints on scalars."),
7291 If true, GDB will use only one debug register when watching a variable of\n\
7292 scalar type, thus assuming that the variable is accessed through the address\n\
7293 of its first byte."),
7294 NULL
, show_powerpc_exact_watchpoints
,
7295 &setpowerpccmdlist
, &showpowerpccmdlist
);