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