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