Announce changes in NEWS to info [args|functions|locals|variables]
[deliverable/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 unsigned int all_mask = ~((1U << fdata->saved_gpr) - 1);
1979
1980 /* Not a recognized prologue instruction.
1981 Handle optimizer code motions into the prologue by continuing
1982 the search if we have no valid frame yet or if the return
1983 address is not yet saved in the frame. Also skip instructions
1984 if some of the GPRs expected to be saved are not yet saved. */
1985 if (fdata->frameless == 0 && fdata->nosavedpc == 0
1986 && (fdata->gpr_mask & all_mask) == all_mask)
1987 break;
1988
1989 if (op == 0x4e800020 /* blr */
1990 || op == 0x4e800420) /* bctr */
1991 /* Do not scan past epilogue in frameless functions or
1992 trampolines. */
1993 break;
1994 if ((op & 0xf4000000) == 0x40000000) /* bxx */
1995 /* Never skip branches. */
1996 break;
1997
1998 if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
1999 /* Do not scan too many insns, scanning insns is expensive with
2000 remote targets. */
2001 break;
2002
2003 /* Continue scanning. */
2004 prev_insn_was_prologue_insn = 0;
2005 continue;
2006 }
2007 }
2008
2009 #if 0
2010 /* I have problems with skipping over __main() that I need to address
2011 * sometime. Previously, I used to use misc_function_vector which
2012 * didn't work as well as I wanted to be. -MGO */
2013
2014 /* If the first thing after skipping a prolog is a branch to a function,
2015 this might be a call to an initializer in main(), introduced by gcc2.
2016 We'd like to skip over it as well. Fortunately, xlc does some extra
2017 work before calling a function right after a prologue, thus we can
2018 single out such gcc2 behaviour. */
2019
2020
2021 if ((op & 0xfc000001) == 0x48000001)
2022 { /* bl foo, an initializer function? */
2023 op = read_memory_integer (pc + 4, 4, byte_order);
2024
2025 if (op == 0x4def7b82)
2026 { /* cror 0xf, 0xf, 0xf (nop) */
2027
2028 /* Check and see if we are in main. If so, skip over this
2029 initializer function as well. */
2030
2031 tmp = find_pc_misc_function (pc);
2032 if (tmp >= 0
2033 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
2034 return pc + 8;
2035 }
2036 }
2037 #endif /* 0 */
2038
2039 if (pc == lim_pc && lr_reg >= 0)
2040 fdata->lr_register = lr_reg;
2041
2042 fdata->offset = -fdata->offset;
2043 return last_prologue_pc;
2044 }
2045
2046 static CORE_ADDR
2047 rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2048 {
2049 struct rs6000_framedata frame;
2050 CORE_ADDR limit_pc, func_addr, func_end_addr = 0;
2051
2052 /* See if we can determine the end of the prologue via the symbol table.
2053 If so, then return either PC, or the PC after the prologue, whichever
2054 is greater. */
2055 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
2056 {
2057 CORE_ADDR post_prologue_pc
2058 = skip_prologue_using_sal (gdbarch, func_addr);
2059 if (post_prologue_pc != 0)
2060 return std::max (pc, post_prologue_pc);
2061 }
2062
2063 /* Can't determine prologue from the symbol table, need to examine
2064 instructions. */
2065
2066 /* Find an upper limit on the function prologue using the debug
2067 information. If the debug information could not be used to provide
2068 that bound, then use an arbitrary large number as the upper bound. */
2069 limit_pc = skip_prologue_using_sal (gdbarch, pc);
2070 if (limit_pc == 0)
2071 limit_pc = pc + 100; /* Magic. */
2072
2073 /* Do not allow limit_pc to be past the function end, if we know
2074 where that end is... */
2075 if (func_end_addr && limit_pc > func_end_addr)
2076 limit_pc = func_end_addr;
2077
2078 pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
2079 return pc;
2080 }
2081
2082 /* When compiling for EABI, some versions of GCC emit a call to __eabi
2083 in the prologue of main().
2084
2085 The function below examines the code pointed at by PC and checks to
2086 see if it corresponds to a call to __eabi. If so, it returns the
2087 address of the instruction following that call. Otherwise, it simply
2088 returns PC. */
2089
2090 static CORE_ADDR
2091 rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2092 {
2093 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2094 gdb_byte buf[4];
2095 unsigned long op;
2096
2097 if (target_read_memory (pc, buf, 4))
2098 return pc;
2099 op = extract_unsigned_integer (buf, 4, byte_order);
2100
2101 if ((op & BL_MASK) == BL_INSTRUCTION)
2102 {
2103 CORE_ADDR displ = op & BL_DISPLACEMENT_MASK;
2104 CORE_ADDR call_dest = pc + 4 + displ;
2105 struct bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
2106
2107 /* We check for ___eabi (three leading underscores) in addition
2108 to __eabi in case the GCC option "-fleading-underscore" was
2109 used to compile the program. */
2110 if (s.minsym != NULL
2111 && MSYMBOL_LINKAGE_NAME (s.minsym) != NULL
2112 && (strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "__eabi") == 0
2113 || strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "___eabi") == 0))
2114 pc += 4;
2115 }
2116 return pc;
2117 }
2118
2119 /* All the ABI's require 16 byte alignment. */
2120 static CORE_ADDR
2121 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2122 {
2123 return (addr & -16);
2124 }
2125
2126 /* Return whether handle_inferior_event() should proceed through code
2127 starting at PC in function NAME when stepping.
2128
2129 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2130 handle memory references that are too distant to fit in instructions
2131 generated by the compiler. For example, if 'foo' in the following
2132 instruction:
2133
2134 lwz r9,foo(r2)
2135
2136 is greater than 32767, the linker might replace the lwz with a branch to
2137 somewhere in @FIX1 that does the load in 2 instructions and then branches
2138 back to where execution should continue.
2139
2140 GDB should silently step over @FIX code, just like AIX dbx does.
2141 Unfortunately, the linker uses the "b" instruction for the
2142 branches, meaning that the link register doesn't get set.
2143 Therefore, GDB's usual step_over_function () mechanism won't work.
2144
2145 Instead, use the gdbarch_skip_trampoline_code and
2146 gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2147 @FIX code. */
2148
2149 static int
2150 rs6000_in_solib_return_trampoline (struct gdbarch *gdbarch,
2151 CORE_ADDR pc, const char *name)
2152 {
2153 return name && startswith (name, "@FIX");
2154 }
2155
2156 /* Skip code that the user doesn't want to see when stepping:
2157
2158 1. Indirect function calls use a piece of trampoline code to do context
2159 switching, i.e. to set the new TOC table. Skip such code if we are on
2160 its first instruction (as when we have single-stepped to here).
2161
2162 2. Skip shared library trampoline code (which is different from
2163 indirect function call trampolines).
2164
2165 3. Skip bigtoc fixup code.
2166
2167 Result is desired PC to step until, or NULL if we are not in
2168 code that should be skipped. */
2169
2170 static CORE_ADDR
2171 rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2172 {
2173 struct gdbarch *gdbarch = get_frame_arch (frame);
2174 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2175 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2176 unsigned int ii, op;
2177 int rel;
2178 CORE_ADDR solib_target_pc;
2179 struct bound_minimal_symbol msymbol;
2180
2181 static unsigned trampoline_code[] =
2182 {
2183 0x800b0000, /* l r0,0x0(r11) */
2184 0x90410014, /* st r2,0x14(r1) */
2185 0x7c0903a6, /* mtctr r0 */
2186 0x804b0004, /* l r2,0x4(r11) */
2187 0x816b0008, /* l r11,0x8(r11) */
2188 0x4e800420, /* bctr */
2189 0x4e800020, /* br */
2190 0
2191 };
2192
2193 /* Check for bigtoc fixup code. */
2194 msymbol = lookup_minimal_symbol_by_pc (pc);
2195 if (msymbol.minsym
2196 && rs6000_in_solib_return_trampoline (gdbarch, pc,
2197 MSYMBOL_LINKAGE_NAME (msymbol.minsym)))
2198 {
2199 /* Double-check that the third instruction from PC is relative "b". */
2200 op = read_memory_integer (pc + 8, 4, byte_order);
2201 if ((op & 0xfc000003) == 0x48000000)
2202 {
2203 /* Extract bits 6-29 as a signed 24-bit relative word address and
2204 add it to the containing PC. */
2205 rel = ((int)(op << 6) >> 6);
2206 return pc + 8 + rel;
2207 }
2208 }
2209
2210 /* If pc is in a shared library trampoline, return its target. */
2211 solib_target_pc = find_solib_trampoline_target (frame, pc);
2212 if (solib_target_pc)
2213 return solib_target_pc;
2214
2215 for (ii = 0; trampoline_code[ii]; ++ii)
2216 {
2217 op = read_memory_integer (pc + (ii * 4), 4, byte_order);
2218 if (op != trampoline_code[ii])
2219 return 0;
2220 }
2221 ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination
2222 addr. */
2223 pc = read_memory_unsigned_integer (ii, tdep->wordsize, byte_order);
2224 return pc;
2225 }
2226
2227 /* ISA-specific vector types. */
2228
2229 static struct type *
2230 rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2231 {
2232 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2233
2234 if (!tdep->ppc_builtin_type_vec64)
2235 {
2236 const struct builtin_type *bt = builtin_type (gdbarch);
2237
2238 /* The type we're building is this: */
2239 #if 0
2240 union __gdb_builtin_type_vec64
2241 {
2242 int64_t uint64;
2243 float v2_float[2];
2244 int32_t v2_int32[2];
2245 int16_t v4_int16[4];
2246 int8_t v8_int8[8];
2247 };
2248 #endif
2249
2250 struct type *t;
2251
2252 t = arch_composite_type (gdbarch,
2253 "__ppc_builtin_type_vec64", TYPE_CODE_UNION);
2254 append_composite_type_field (t, "uint64", bt->builtin_int64);
2255 append_composite_type_field (t, "v2_float",
2256 init_vector_type (bt->builtin_float, 2));
2257 append_composite_type_field (t, "v2_int32",
2258 init_vector_type (bt->builtin_int32, 2));
2259 append_composite_type_field (t, "v4_int16",
2260 init_vector_type (bt->builtin_int16, 4));
2261 append_composite_type_field (t, "v8_int8",
2262 init_vector_type (bt->builtin_int8, 8));
2263
2264 TYPE_VECTOR (t) = 1;
2265 TYPE_NAME (t) = "ppc_builtin_type_vec64";
2266 tdep->ppc_builtin_type_vec64 = t;
2267 }
2268
2269 return tdep->ppc_builtin_type_vec64;
2270 }
2271
2272 /* Vector 128 type. */
2273
2274 static struct type *
2275 rs6000_builtin_type_vec128 (struct gdbarch *gdbarch)
2276 {
2277 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2278
2279 if (!tdep->ppc_builtin_type_vec128)
2280 {
2281 const struct builtin_type *bt = builtin_type (gdbarch);
2282
2283 /* The type we're building is this
2284
2285 type = union __ppc_builtin_type_vec128 {
2286 uint128_t uint128;
2287 double v2_double[2];
2288 float v4_float[4];
2289 int32_t v4_int32[4];
2290 int16_t v8_int16[8];
2291 int8_t v16_int8[16];
2292 }
2293 */
2294
2295 struct type *t;
2296
2297 t = arch_composite_type (gdbarch,
2298 "__ppc_builtin_type_vec128", TYPE_CODE_UNION);
2299 append_composite_type_field (t, "uint128", bt->builtin_uint128);
2300 append_composite_type_field (t, "v2_double",
2301 init_vector_type (bt->builtin_double, 2));
2302 append_composite_type_field (t, "v4_float",
2303 init_vector_type (bt->builtin_float, 4));
2304 append_composite_type_field (t, "v4_int32",
2305 init_vector_type (bt->builtin_int32, 4));
2306 append_composite_type_field (t, "v8_int16",
2307 init_vector_type (bt->builtin_int16, 8));
2308 append_composite_type_field (t, "v16_int8",
2309 init_vector_type (bt->builtin_int8, 16));
2310
2311 TYPE_VECTOR (t) = 1;
2312 TYPE_NAME (t) = "ppc_builtin_type_vec128";
2313 tdep->ppc_builtin_type_vec128 = t;
2314 }
2315
2316 return tdep->ppc_builtin_type_vec128;
2317 }
2318
2319 /* Return the name of register number REGNO, or the empty string if it
2320 is an anonymous register. */
2321
2322 static const char *
2323 rs6000_register_name (struct gdbarch *gdbarch, int regno)
2324 {
2325 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2326
2327 /* The upper half "registers" have names in the XML description,
2328 but we present only the low GPRs and the full 64-bit registers
2329 to the user. */
2330 if (tdep->ppc_ev0_upper_regnum >= 0
2331 && tdep->ppc_ev0_upper_regnum <= regno
2332 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
2333 return "";
2334
2335 /* Hide the upper halves of the vs0~vs31 registers. */
2336 if (tdep->ppc_vsr0_regnum >= 0
2337 && tdep->ppc_vsr0_upper_regnum <= regno
2338 && regno < tdep->ppc_vsr0_upper_regnum + ppc_num_gprs)
2339 return "";
2340
2341 /* Hide the upper halves of the cvs0~cvs31 registers. */
2342 if (PPC_CVSR0_UPPER_REGNUM <= regno
2343 && regno < PPC_CVSR0_UPPER_REGNUM + ppc_num_gprs)
2344 return "";
2345
2346 /* Check if the SPE pseudo registers are available. */
2347 if (IS_SPE_PSEUDOREG (tdep, regno))
2348 {
2349 static const char *const spe_regnames[] = {
2350 "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2351 "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2352 "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2353 "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2354 };
2355 return spe_regnames[regno - tdep->ppc_ev0_regnum];
2356 }
2357
2358 /* Check if the decimal128 pseudo-registers are available. */
2359 if (IS_DFP_PSEUDOREG (tdep, regno))
2360 {
2361 static const char *const dfp128_regnames[] = {
2362 "dl0", "dl1", "dl2", "dl3",
2363 "dl4", "dl5", "dl6", "dl7",
2364 "dl8", "dl9", "dl10", "dl11",
2365 "dl12", "dl13", "dl14", "dl15"
2366 };
2367 return dfp128_regnames[regno - tdep->ppc_dl0_regnum];
2368 }
2369
2370 /* Check if this is a VSX pseudo-register. */
2371 if (IS_VSX_PSEUDOREG (tdep, regno))
2372 {
2373 static const char *const vsx_regnames[] = {
2374 "vs0", "vs1", "vs2", "vs3", "vs4", "vs5", "vs6", "vs7",
2375 "vs8", "vs9", "vs10", "vs11", "vs12", "vs13", "vs14",
2376 "vs15", "vs16", "vs17", "vs18", "vs19", "vs20", "vs21",
2377 "vs22", "vs23", "vs24", "vs25", "vs26", "vs27", "vs28",
2378 "vs29", "vs30", "vs31", "vs32", "vs33", "vs34", "vs35",
2379 "vs36", "vs37", "vs38", "vs39", "vs40", "vs41", "vs42",
2380 "vs43", "vs44", "vs45", "vs46", "vs47", "vs48", "vs49",
2381 "vs50", "vs51", "vs52", "vs53", "vs54", "vs55", "vs56",
2382 "vs57", "vs58", "vs59", "vs60", "vs61", "vs62", "vs63"
2383 };
2384 return vsx_regnames[regno - tdep->ppc_vsr0_regnum];
2385 }
2386
2387 /* Check if the this is a Extended FP pseudo-register. */
2388 if (IS_EFP_PSEUDOREG (tdep, regno))
2389 {
2390 static const char *const efpr_regnames[] = {
2391 "f32", "f33", "f34", "f35", "f36", "f37", "f38",
2392 "f39", "f40", "f41", "f42", "f43", "f44", "f45",
2393 "f46", "f47", "f48", "f49", "f50", "f51",
2394 "f52", "f53", "f54", "f55", "f56", "f57",
2395 "f58", "f59", "f60", "f61", "f62", "f63"
2396 };
2397 return efpr_regnames[regno - tdep->ppc_efpr0_regnum];
2398 }
2399
2400 /* Check if this is a Checkpointed DFP pseudo-register. */
2401 if (IS_CDFP_PSEUDOREG (tdep, regno))
2402 {
2403 static const char *const cdfp128_regnames[] = {
2404 "cdl0", "cdl1", "cdl2", "cdl3",
2405 "cdl4", "cdl5", "cdl6", "cdl7",
2406 "cdl8", "cdl9", "cdl10", "cdl11",
2407 "cdl12", "cdl13", "cdl14", "cdl15"
2408 };
2409 return cdfp128_regnames[regno - tdep->ppc_cdl0_regnum];
2410 }
2411
2412 /* Check if this is a Checkpointed VSX pseudo-register. */
2413 if (IS_CVSX_PSEUDOREG (tdep, regno))
2414 {
2415 static const char *const cvsx_regnames[] = {
2416 "cvs0", "cvs1", "cvs2", "cvs3", "cvs4", "cvs5", "cvs6", "cvs7",
2417 "cvs8", "cvs9", "cvs10", "cvs11", "cvs12", "cvs13", "cvs14",
2418 "cvs15", "cvs16", "cvs17", "cvs18", "cvs19", "cvs20", "cvs21",
2419 "cvs22", "cvs23", "cvs24", "cvs25", "cvs26", "cvs27", "cvs28",
2420 "cvs29", "cvs30", "cvs31", "cvs32", "cvs33", "cvs34", "cvs35",
2421 "cvs36", "cvs37", "cvs38", "cvs39", "cvs40", "cvs41", "cvs42",
2422 "cvs43", "cvs44", "cvs45", "cvs46", "cvs47", "cvs48", "cvs49",
2423 "cvs50", "cvs51", "cvs52", "cvs53", "cvs54", "cvs55", "cvs56",
2424 "cvs57", "cvs58", "cvs59", "cvs60", "cvs61", "cvs62", "cvs63"
2425 };
2426 return cvsx_regnames[regno - tdep->ppc_cvsr0_regnum];
2427 }
2428
2429 /* Check if the this is a Checkpointed Extended FP pseudo-register. */
2430 if (IS_CEFP_PSEUDOREG (tdep, regno))
2431 {
2432 static const char *const cefpr_regnames[] = {
2433 "cf32", "cf33", "cf34", "cf35", "cf36", "cf37", "cf38",
2434 "cf39", "cf40", "cf41", "cf42", "cf43", "cf44", "cf45",
2435 "cf46", "cf47", "cf48", "cf49", "cf50", "cf51",
2436 "cf52", "cf53", "cf54", "cf55", "cf56", "cf57",
2437 "cf58", "cf59", "cf60", "cf61", "cf62", "cf63"
2438 };
2439 return cefpr_regnames[regno - tdep->ppc_cefpr0_regnum];
2440 }
2441
2442 return tdesc_register_name (gdbarch, regno);
2443 }
2444
2445 /* Return the GDB type object for the "standard" data type of data in
2446 register N. */
2447
2448 static struct type *
2449 rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2450 {
2451 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2452
2453 /* These are the e500 pseudo-registers. */
2454 if (IS_SPE_PSEUDOREG (tdep, regnum))
2455 return rs6000_builtin_type_vec64 (gdbarch);
2456 else if (IS_DFP_PSEUDOREG (tdep, regnum)
2457 || IS_CDFP_PSEUDOREG (tdep, regnum))
2458 /* PPC decimal128 pseudo-registers. */
2459 return builtin_type (gdbarch)->builtin_declong;
2460 else if (IS_VSX_PSEUDOREG (tdep, regnum)
2461 || IS_CVSX_PSEUDOREG (tdep, regnum))
2462 /* POWER7 VSX pseudo-registers. */
2463 return rs6000_builtin_type_vec128 (gdbarch);
2464 else if (IS_EFP_PSEUDOREG (tdep, regnum)
2465 || IS_CEFP_PSEUDOREG (tdep, regnum))
2466 /* POWER7 Extended FP pseudo-registers. */
2467 return builtin_type (gdbarch)->builtin_double;
2468 else
2469 internal_error (__FILE__, __LINE__,
2470 _("rs6000_pseudo_register_type: "
2471 "called on unexpected register '%s' (%d)"),
2472 gdbarch_register_name (gdbarch, regnum), regnum);
2473 }
2474
2475 /* The register format for RS/6000 floating point registers is always
2476 double, we need a conversion if the memory format is float. */
2477
2478 static int
2479 rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2480 struct type *type)
2481 {
2482 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2483
2484 return (tdep->ppc_fp0_regnum >= 0
2485 && regnum >= tdep->ppc_fp0_regnum
2486 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs
2487 && TYPE_CODE (type) == TYPE_CODE_FLT
2488 && TYPE_LENGTH (type)
2489 != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double));
2490 }
2491
2492 static int
2493 rs6000_register_to_value (struct frame_info *frame,
2494 int regnum,
2495 struct type *type,
2496 gdb_byte *to,
2497 int *optimizedp, int *unavailablep)
2498 {
2499 struct gdbarch *gdbarch = get_frame_arch (frame);
2500 gdb_byte from[PPC_MAX_REGISTER_SIZE];
2501
2502 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2503
2504 if (!get_frame_register_bytes (frame, regnum, 0,
2505 register_size (gdbarch, regnum),
2506 from, optimizedp, unavailablep))
2507 return 0;
2508
2509 target_float_convert (from, builtin_type (gdbarch)->builtin_double,
2510 to, type);
2511 *optimizedp = *unavailablep = 0;
2512 return 1;
2513 }
2514
2515 static void
2516 rs6000_value_to_register (struct frame_info *frame,
2517 int regnum,
2518 struct type *type,
2519 const gdb_byte *from)
2520 {
2521 struct gdbarch *gdbarch = get_frame_arch (frame);
2522 gdb_byte to[PPC_MAX_REGISTER_SIZE];
2523
2524 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2525
2526 target_float_convert (from, type,
2527 to, builtin_type (gdbarch)->builtin_double);
2528 put_frame_register (frame, regnum, to);
2529 }
2530
2531 /* The type of a function that moves the value of REG between CACHE
2532 or BUF --- in either direction. */
2533 typedef enum register_status (*move_ev_register_func) (struct regcache *,
2534 int, void *);
2535
2536 /* Move SPE vector register values between a 64-bit buffer and the two
2537 32-bit raw register halves in a regcache. This function handles
2538 both splitting a 64-bit value into two 32-bit halves, and joining
2539 two halves into a whole 64-bit value, depending on the function
2540 passed as the MOVE argument.
2541
2542 EV_REG must be the number of an SPE evN vector register --- a
2543 pseudoregister. REGCACHE must be a regcache, and BUFFER must be a
2544 64-bit buffer.
2545
2546 Call MOVE once for each 32-bit half of that register, passing
2547 REGCACHE, the number of the raw register corresponding to that
2548 half, and the address of the appropriate half of BUFFER.
2549
2550 For example, passing 'regcache_raw_read' as the MOVE function will
2551 fill BUFFER with the full 64-bit contents of EV_REG. Or, passing
2552 'regcache_raw_supply' will supply the contents of BUFFER to the
2553 appropriate pair of raw registers in REGCACHE.
2554
2555 You may need to cast away some 'const' qualifiers when passing
2556 MOVE, since this function can't tell at compile-time which of
2557 REGCACHE or BUFFER is acting as the source of the data. If C had
2558 co-variant type qualifiers, ... */
2559
2560 static enum register_status
2561 e500_move_ev_register (move_ev_register_func move,
2562 struct regcache *regcache, int ev_reg, void *buffer)
2563 {
2564 struct gdbarch *arch = regcache->arch ();
2565 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2566 int reg_index;
2567 gdb_byte *byte_buffer = (gdb_byte *) buffer;
2568 enum register_status status;
2569
2570 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2571
2572 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2573
2574 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2575 {
2576 status = move (regcache, tdep->ppc_ev0_upper_regnum + reg_index,
2577 byte_buffer);
2578 if (status == REG_VALID)
2579 status = move (regcache, tdep->ppc_gp0_regnum + reg_index,
2580 byte_buffer + 4);
2581 }
2582 else
2583 {
2584 status = move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer);
2585 if (status == REG_VALID)
2586 status = move (regcache, tdep->ppc_ev0_upper_regnum + reg_index,
2587 byte_buffer + 4);
2588 }
2589
2590 return status;
2591 }
2592
2593 static enum register_status
2594 do_regcache_raw_write (struct regcache *regcache, int regnum, void *buffer)
2595 {
2596 regcache->raw_write (regnum, (const gdb_byte *) buffer);
2597
2598 return REG_VALID;
2599 }
2600
2601 static enum register_status
2602 e500_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2603 int ev_reg, gdb_byte *buffer)
2604 {
2605 struct gdbarch *arch = regcache->arch ();
2606 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2607 int reg_index;
2608 enum register_status status;
2609
2610 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2611
2612 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2613
2614 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2615 {
2616 status = regcache->raw_read (tdep->ppc_ev0_upper_regnum + reg_index,
2617 buffer);
2618 if (status == REG_VALID)
2619 status = regcache->raw_read (tdep->ppc_gp0_regnum + reg_index,
2620 buffer + 4);
2621 }
2622 else
2623 {
2624 status = regcache->raw_read (tdep->ppc_gp0_regnum + reg_index, buffer);
2625 if (status == REG_VALID)
2626 status = regcache->raw_read (tdep->ppc_ev0_upper_regnum + reg_index,
2627 buffer + 4);
2628 }
2629
2630 return status;
2631
2632 }
2633
2634 static void
2635 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2636 int reg_nr, const gdb_byte *buffer)
2637 {
2638 e500_move_ev_register (do_regcache_raw_write, regcache,
2639 reg_nr, (void *) buffer);
2640 }
2641
2642 /* Read method for DFP pseudo-registers. */
2643 static enum register_status
2644 dfp_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2645 int reg_nr, gdb_byte *buffer)
2646 {
2647 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2648 int reg_index, fp0;
2649 enum register_status status;
2650
2651 if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2652 {
2653 reg_index = reg_nr - tdep->ppc_dl0_regnum;
2654 fp0 = PPC_F0_REGNUM;
2655 }
2656 else
2657 {
2658 gdb_assert (IS_CDFP_PSEUDOREG (tdep, reg_nr));
2659
2660 reg_index = reg_nr - tdep->ppc_cdl0_regnum;
2661 fp0 = PPC_CF0_REGNUM;
2662 }
2663
2664 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2665 {
2666 /* Read two FP registers to form a whole dl register. */
2667 status = regcache->raw_read (fp0 + 2 * reg_index, buffer);
2668 if (status == REG_VALID)
2669 status = regcache->raw_read (fp0 + 2 * reg_index + 1,
2670 buffer + 8);
2671 }
2672 else
2673 {
2674 status = regcache->raw_read (fp0 + 2 * reg_index + 1, buffer);
2675 if (status == REG_VALID)
2676 status = regcache->raw_read (fp0 + 2 * reg_index, buffer + 8);
2677 }
2678
2679 return status;
2680 }
2681
2682 /* Write method for DFP pseudo-registers. */
2683 static void
2684 dfp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2685 int reg_nr, const gdb_byte *buffer)
2686 {
2687 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2688 int reg_index, fp0;
2689
2690 if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2691 {
2692 reg_index = reg_nr - tdep->ppc_dl0_regnum;
2693 fp0 = PPC_F0_REGNUM;
2694 }
2695 else
2696 {
2697 gdb_assert (IS_CDFP_PSEUDOREG (tdep, reg_nr));
2698
2699 reg_index = reg_nr - tdep->ppc_cdl0_regnum;
2700 fp0 = PPC_CF0_REGNUM;
2701 }
2702
2703 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2704 {
2705 /* Write each half of the dl register into a separate
2706 FP register. */
2707 regcache->raw_write (fp0 + 2 * reg_index, buffer);
2708 regcache->raw_write (fp0 + 2 * reg_index + 1, buffer + 8);
2709 }
2710 else
2711 {
2712 regcache->raw_write (fp0 + 2 * reg_index + 1, buffer);
2713 regcache->raw_write (fp0 + 2 * reg_index, buffer + 8);
2714 }
2715 }
2716
2717 /* Read method for POWER7 VSX pseudo-registers. */
2718 static enum register_status
2719 vsx_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2720 int reg_nr, gdb_byte *buffer)
2721 {
2722 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2723 int reg_index, vr0, fp0, vsr0_upper;
2724 enum register_status status;
2725
2726 if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2727 {
2728 reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2729 vr0 = PPC_VR0_REGNUM;
2730 fp0 = PPC_F0_REGNUM;
2731 vsr0_upper = PPC_VSR0_UPPER_REGNUM;
2732 }
2733 else
2734 {
2735 gdb_assert (IS_CVSX_PSEUDOREG (tdep, reg_nr));
2736
2737 reg_index = reg_nr - tdep->ppc_cvsr0_regnum;
2738 vr0 = PPC_CVR0_REGNUM;
2739 fp0 = PPC_CF0_REGNUM;
2740 vsr0_upper = PPC_CVSR0_UPPER_REGNUM;
2741 }
2742
2743 /* Read the portion that overlaps the VMX registers. */
2744 if (reg_index > 31)
2745 status = regcache->raw_read (vr0 + reg_index - 32, buffer);
2746 else
2747 /* Read the portion that overlaps the FPR registers. */
2748 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2749 {
2750 status = regcache->raw_read (fp0 + reg_index, buffer);
2751 if (status == REG_VALID)
2752 status = regcache->raw_read (vsr0_upper + reg_index,
2753 buffer + 8);
2754 }
2755 else
2756 {
2757 status = regcache->raw_read (fp0 + reg_index, buffer + 8);
2758 if (status == REG_VALID)
2759 status = regcache->raw_read (vsr0_upper + reg_index, buffer);
2760 }
2761
2762 return status;
2763 }
2764
2765 /* Write method for POWER7 VSX pseudo-registers. */
2766 static void
2767 vsx_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2768 int reg_nr, const gdb_byte *buffer)
2769 {
2770 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2771 int reg_index, vr0, fp0, vsr0_upper;
2772
2773 if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2774 {
2775 reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2776 vr0 = PPC_VR0_REGNUM;
2777 fp0 = PPC_F0_REGNUM;
2778 vsr0_upper = PPC_VSR0_UPPER_REGNUM;
2779 }
2780 else
2781 {
2782 gdb_assert (IS_CVSX_PSEUDOREG (tdep, reg_nr));
2783
2784 reg_index = reg_nr - tdep->ppc_cvsr0_regnum;
2785 vr0 = PPC_CVR0_REGNUM;
2786 fp0 = PPC_CF0_REGNUM;
2787 vsr0_upper = PPC_CVSR0_UPPER_REGNUM;
2788 }
2789
2790 /* Write the portion that overlaps the VMX registers. */
2791 if (reg_index > 31)
2792 regcache->raw_write (vr0 + reg_index - 32, buffer);
2793 else
2794 /* Write the portion that overlaps the FPR registers. */
2795 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2796 {
2797 regcache->raw_write (fp0 + reg_index, buffer);
2798 regcache->raw_write (vsr0_upper + reg_index, buffer + 8);
2799 }
2800 else
2801 {
2802 regcache->raw_write (fp0 + reg_index, buffer + 8);
2803 regcache->raw_write (vsr0_upper + reg_index, buffer);
2804 }
2805 }
2806
2807 /* Read method for POWER7 Extended FP pseudo-registers. */
2808 static enum register_status
2809 efp_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
2810 int reg_nr, gdb_byte *buffer)
2811 {
2812 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2813 int reg_index, vr0;
2814
2815 if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2816 {
2817 reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2818 vr0 = PPC_VR0_REGNUM;
2819 }
2820 else
2821 {
2822 gdb_assert (IS_CEFP_PSEUDOREG (tdep, reg_nr));
2823
2824 reg_index = reg_nr - tdep->ppc_cefpr0_regnum;
2825 vr0 = PPC_CVR0_REGNUM;
2826 }
2827
2828 int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
2829
2830 /* Read the portion that overlaps the VMX register. */
2831 return regcache->raw_read_part (vr0 + reg_index, offset,
2832 register_size (gdbarch, reg_nr),
2833 buffer);
2834 }
2835
2836 /* Write method for POWER7 Extended FP pseudo-registers. */
2837 static void
2838 efp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2839 int reg_nr, const gdb_byte *buffer)
2840 {
2841 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2842 int reg_index, vr0;
2843 int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
2844
2845 if (IS_EFP_PSEUDOREG (tdep, reg_nr))
2846 {
2847 reg_index = reg_nr - tdep->ppc_efpr0_regnum;
2848 vr0 = PPC_VR0_REGNUM;
2849 }
2850 else
2851 {
2852 gdb_assert (IS_CEFP_PSEUDOREG (tdep, reg_nr));
2853
2854 reg_index = reg_nr - tdep->ppc_cefpr0_regnum;
2855 vr0 = PPC_CVR0_REGNUM;
2856
2857 /* The call to raw_write_part fails silently if the initial read
2858 of the read-update-write sequence returns an invalid status,
2859 so we check this manually and throw an error if needed. */
2860 regcache->raw_update (vr0 + reg_index);
2861 if (regcache->get_register_status (vr0 + reg_index) != REG_VALID)
2862 error (_("Cannot write to the checkpointed EFP register, "
2863 "the corresponding vector register is unavailable."));
2864 }
2865
2866 /* Write the portion that overlaps the VMX register. */
2867 regcache->raw_write_part (vr0 + reg_index, offset,
2868 register_size (gdbarch, reg_nr), buffer);
2869 }
2870
2871 static enum register_status
2872 rs6000_pseudo_register_read (struct gdbarch *gdbarch,
2873 readable_regcache *regcache,
2874 int reg_nr, gdb_byte *buffer)
2875 {
2876 struct gdbarch *regcache_arch = regcache->arch ();
2877 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2878
2879 gdb_assert (regcache_arch == gdbarch);
2880
2881 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2882 return e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2883 else if (IS_DFP_PSEUDOREG (tdep, reg_nr)
2884 || IS_CDFP_PSEUDOREG (tdep, reg_nr))
2885 return dfp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2886 else if (IS_VSX_PSEUDOREG (tdep, reg_nr)
2887 || IS_CVSX_PSEUDOREG (tdep, reg_nr))
2888 return vsx_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2889 else if (IS_EFP_PSEUDOREG (tdep, reg_nr)
2890 || IS_CEFP_PSEUDOREG (tdep, reg_nr))
2891 return efp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2892 else
2893 internal_error (__FILE__, __LINE__,
2894 _("rs6000_pseudo_register_read: "
2895 "called on unexpected register '%s' (%d)"),
2896 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2897 }
2898
2899 static void
2900 rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2901 struct regcache *regcache,
2902 int reg_nr, const gdb_byte *buffer)
2903 {
2904 struct gdbarch *regcache_arch = regcache->arch ();
2905 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2906
2907 gdb_assert (regcache_arch == gdbarch);
2908
2909 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2910 e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2911 else if (IS_DFP_PSEUDOREG (tdep, reg_nr)
2912 || IS_CDFP_PSEUDOREG (tdep, reg_nr))
2913 dfp_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2914 else if (IS_VSX_PSEUDOREG (tdep, reg_nr)
2915 || IS_CVSX_PSEUDOREG (tdep, reg_nr))
2916 vsx_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2917 else if (IS_EFP_PSEUDOREG (tdep, reg_nr)
2918 || IS_CEFP_PSEUDOREG (tdep, reg_nr))
2919 efp_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2920 else
2921 internal_error (__FILE__, __LINE__,
2922 _("rs6000_pseudo_register_write: "
2923 "called on unexpected register '%s' (%d)"),
2924 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2925 }
2926
2927 /* Set the register mask in AX with the registers that form the DFP or
2928 checkpointed DFP pseudo-register REG_NR. */
2929
2930 static void
2931 dfp_ax_pseudo_register_collect (struct gdbarch *gdbarch,
2932 struct agent_expr *ax, int reg_nr)
2933 {
2934 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2935 int reg_index, fp0;
2936
2937 if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2938 {
2939 reg_index = reg_nr - tdep->ppc_dl0_regnum;
2940 fp0 = PPC_F0_REGNUM;
2941 }
2942 else
2943 {
2944 gdb_assert (IS_CDFP_PSEUDOREG (tdep, reg_nr));
2945
2946 reg_index = reg_nr - tdep->ppc_cdl0_regnum;
2947 fp0 = PPC_CF0_REGNUM;
2948 }
2949
2950 ax_reg_mask (ax, fp0 + 2 * reg_index);
2951 ax_reg_mask (ax, fp0 + 2 * reg_index + 1);
2952 }
2953
2954 /* Set the register mask in AX with the registers that form the VSX or
2955 checkpointed VSX pseudo-register REG_NR. */
2956
2957 static void
2958 vsx_ax_pseudo_register_collect (struct gdbarch *gdbarch,
2959 struct agent_expr *ax, int reg_nr)
2960 {
2961 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2962 int reg_index, vr0, fp0, vsr0_upper;
2963
2964 if (IS_VSX_PSEUDOREG (tdep, reg_nr))
2965 {
2966 reg_index = reg_nr - tdep->ppc_vsr0_regnum;
2967 vr0 = PPC_VR0_REGNUM;
2968 fp0 = PPC_F0_REGNUM;
2969 vsr0_upper = PPC_VSR0_UPPER_REGNUM;
2970 }
2971 else
2972 {
2973 gdb_assert (IS_CVSX_PSEUDOREG (tdep, reg_nr));
2974
2975 reg_index = reg_nr - tdep->ppc_cvsr0_regnum;
2976 vr0 = PPC_CVR0_REGNUM;
2977 fp0 = PPC_CF0_REGNUM;
2978 vsr0_upper = PPC_CVSR0_UPPER_REGNUM;
2979 }
2980
2981 if (reg_index > 31)
2982 {
2983 ax_reg_mask (ax, vr0 + reg_index - 32);
2984 }
2985 else
2986 {
2987 ax_reg_mask (ax, fp0 + reg_index);
2988 ax_reg_mask (ax, vsr0_upper + reg_index);
2989 }
2990 }
2991
2992 /* Set the register mask in AX with the register that corresponds to
2993 the EFP or checkpointed EFP pseudo-register REG_NR. */
2994
2995 static void
2996 efp_ax_pseudo_register_collect (struct gdbarch *gdbarch,
2997 struct agent_expr *ax, int reg_nr)
2998 {
2999 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3000 int reg_index, vr0;
3001
3002 if (IS_EFP_PSEUDOREG (tdep, reg_nr))
3003 {
3004 reg_index = reg_nr - tdep->ppc_efpr0_regnum;
3005 vr0 = PPC_VR0_REGNUM;
3006 }
3007 else
3008 {
3009 gdb_assert (IS_CEFP_PSEUDOREG (tdep, reg_nr));
3010
3011 reg_index = reg_nr - tdep->ppc_cefpr0_regnum;
3012 vr0 = PPC_CVR0_REGNUM;
3013 }
3014
3015 ax_reg_mask (ax, vr0 + reg_index);
3016 }
3017
3018 static int
3019 rs6000_ax_pseudo_register_collect (struct gdbarch *gdbarch,
3020 struct agent_expr *ax, int reg_nr)
3021 {
3022 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3023 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
3024 {
3025 int reg_index = reg_nr - tdep->ppc_ev0_regnum;
3026 ax_reg_mask (ax, tdep->ppc_gp0_regnum + reg_index);
3027 ax_reg_mask (ax, tdep->ppc_ev0_upper_regnum + reg_index);
3028 }
3029 else if (IS_DFP_PSEUDOREG (tdep, reg_nr)
3030 || IS_CDFP_PSEUDOREG (tdep, reg_nr))
3031 {
3032 dfp_ax_pseudo_register_collect (gdbarch, ax, reg_nr);
3033 }
3034 else if (IS_VSX_PSEUDOREG (tdep, reg_nr)
3035 || IS_CVSX_PSEUDOREG (tdep, reg_nr))
3036 {
3037 vsx_ax_pseudo_register_collect (gdbarch, ax, reg_nr);
3038 }
3039 else if (IS_EFP_PSEUDOREG (tdep, reg_nr)
3040 || IS_CEFP_PSEUDOREG (tdep, reg_nr))
3041 {
3042 efp_ax_pseudo_register_collect (gdbarch, ax, reg_nr);
3043 }
3044 else
3045 internal_error (__FILE__, __LINE__,
3046 _("rs6000_pseudo_register_collect: "
3047 "called on unexpected register '%s' (%d)"),
3048 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
3049 return 0;
3050 }
3051
3052
3053 static void
3054 rs6000_gen_return_address (struct gdbarch *gdbarch,
3055 struct agent_expr *ax, struct axs_value *value,
3056 CORE_ADDR scope)
3057 {
3058 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3059 value->type = register_type (gdbarch, tdep->ppc_lr_regnum);
3060 value->kind = axs_lvalue_register;
3061 value->u.reg = tdep->ppc_lr_regnum;
3062 }
3063
3064
3065 /* Convert a DBX STABS register number to a GDB register number. */
3066 static int
3067 rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
3068 {
3069 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3070
3071 if (0 <= num && num <= 31)
3072 return tdep->ppc_gp0_regnum + num;
3073 else if (32 <= num && num <= 63)
3074 /* FIXME: jimb/2004-05-05: What should we do when the debug info
3075 specifies registers the architecture doesn't have? Our
3076 callers don't check the value we return. */
3077 return tdep->ppc_fp0_regnum + (num - 32);
3078 else if (77 <= num && num <= 108)
3079 return tdep->ppc_vr0_regnum + (num - 77);
3080 else if (1200 <= num && num < 1200 + 32)
3081 return tdep->ppc_ev0_upper_regnum + (num - 1200);
3082 else
3083 switch (num)
3084 {
3085 case 64:
3086 return tdep->ppc_mq_regnum;
3087 case 65:
3088 return tdep->ppc_lr_regnum;
3089 case 66:
3090 return tdep->ppc_ctr_regnum;
3091 case 76:
3092 return tdep->ppc_xer_regnum;
3093 case 109:
3094 return tdep->ppc_vrsave_regnum;
3095 case 110:
3096 return tdep->ppc_vrsave_regnum - 1; /* vscr */
3097 case 111:
3098 return tdep->ppc_acc_regnum;
3099 case 112:
3100 return tdep->ppc_spefscr_regnum;
3101 default:
3102 return num;
3103 }
3104 }
3105
3106
3107 /* Convert a Dwarf 2 register number to a GDB register number. */
3108 static int
3109 rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
3110 {
3111 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3112
3113 if (0 <= num && num <= 31)
3114 return tdep->ppc_gp0_regnum + num;
3115 else if (32 <= num && num <= 63)
3116 /* FIXME: jimb/2004-05-05: What should we do when the debug info
3117 specifies registers the architecture doesn't have? Our
3118 callers don't check the value we return. */
3119 return tdep->ppc_fp0_regnum + (num - 32);
3120 else if (1124 <= num && num < 1124 + 32)
3121 return tdep->ppc_vr0_regnum + (num - 1124);
3122 else if (1200 <= num && num < 1200 + 32)
3123 return tdep->ppc_ev0_upper_regnum + (num - 1200);
3124 else
3125 switch (num)
3126 {
3127 case 64:
3128 return tdep->ppc_cr_regnum;
3129 case 67:
3130 return tdep->ppc_vrsave_regnum - 1; /* vscr */
3131 case 99:
3132 return tdep->ppc_acc_regnum;
3133 case 100:
3134 return tdep->ppc_mq_regnum;
3135 case 101:
3136 return tdep->ppc_xer_regnum;
3137 case 108:
3138 return tdep->ppc_lr_regnum;
3139 case 109:
3140 return tdep->ppc_ctr_regnum;
3141 case 356:
3142 return tdep->ppc_vrsave_regnum;
3143 case 612:
3144 return tdep->ppc_spefscr_regnum;
3145 default:
3146 return num;
3147 }
3148 }
3149
3150 /* Translate a .eh_frame register to DWARF register, or adjust a
3151 .debug_frame register. */
3152
3153 static int
3154 rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
3155 {
3156 /* GCC releases before 3.4 use GCC internal register numbering in
3157 .debug_frame (and .debug_info, et cetera). The numbering is
3158 different from the standard SysV numbering for everything except
3159 for GPRs and FPRs. We can not detect this problem in most cases
3160 - to get accurate debug info for variables living in lr, ctr, v0,
3161 et cetera, use a newer version of GCC. But we must detect
3162 one important case - lr is in column 65 in .debug_frame output,
3163 instead of 108.
3164
3165 GCC 3.4, and the "hammer" branch, have a related problem. They
3166 record lr register saves in .debug_frame as 108, but still record
3167 the return column as 65. We fix that up too.
3168
3169 We can do this because 65 is assigned to fpsr, and GCC never
3170 generates debug info referring to it. To add support for
3171 handwritten debug info that restores fpsr, we would need to add a
3172 producer version check to this. */
3173 if (!eh_frame_p)
3174 {
3175 if (num == 65)
3176 return 108;
3177 else
3178 return num;
3179 }
3180
3181 /* .eh_frame is GCC specific. For binary compatibility, it uses GCC
3182 internal register numbering; translate that to the standard DWARF2
3183 register numbering. */
3184 if (0 <= num && num <= 63) /* r0-r31,fp0-fp31 */
3185 return num;
3186 else if (68 <= num && num <= 75) /* cr0-cr8 */
3187 return num - 68 + 86;
3188 else if (77 <= num && num <= 108) /* vr0-vr31 */
3189 return num - 77 + 1124;
3190 else
3191 switch (num)
3192 {
3193 case 64: /* mq */
3194 return 100;
3195 case 65: /* lr */
3196 return 108;
3197 case 66: /* ctr */
3198 return 109;
3199 case 76: /* xer */
3200 return 101;
3201 case 109: /* vrsave */
3202 return 356;
3203 case 110: /* vscr */
3204 return 67;
3205 case 111: /* spe_acc */
3206 return 99;
3207 case 112: /* spefscr */
3208 return 612;
3209 default:
3210 return num;
3211 }
3212 }
3213 \f
3214
3215 /* Handling the various POWER/PowerPC variants. */
3216
3217 /* Information about a particular processor variant. */
3218
3219 struct variant
3220 {
3221 /* Name of this variant. */
3222 const char *name;
3223
3224 /* English description of the variant. */
3225 const char *description;
3226
3227 /* bfd_arch_info.arch corresponding to variant. */
3228 enum bfd_architecture arch;
3229
3230 /* bfd_arch_info.mach corresponding to variant. */
3231 unsigned long mach;
3232
3233 /* Target description for this variant. */
3234 struct target_desc **tdesc;
3235 };
3236
3237 static struct variant variants[] =
3238 {
3239 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
3240 bfd_mach_ppc, &tdesc_powerpc_altivec32},
3241 {"power", "POWER user-level", bfd_arch_rs6000,
3242 bfd_mach_rs6k, &tdesc_rs6000},
3243 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
3244 bfd_mach_ppc_403, &tdesc_powerpc_403},
3245 {"405", "IBM PowerPC 405", bfd_arch_powerpc,
3246 bfd_mach_ppc_405, &tdesc_powerpc_405},
3247 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
3248 bfd_mach_ppc_601, &tdesc_powerpc_601},
3249 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
3250 bfd_mach_ppc_602, &tdesc_powerpc_602},
3251 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
3252 bfd_mach_ppc_603, &tdesc_powerpc_603},
3253 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
3254 604, &tdesc_powerpc_604},
3255 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
3256 bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
3257 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
3258 bfd_mach_ppc_505, &tdesc_powerpc_505},
3259 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
3260 bfd_mach_ppc_860, &tdesc_powerpc_860},
3261 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
3262 bfd_mach_ppc_750, &tdesc_powerpc_750},
3263 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
3264 bfd_mach_ppc_7400, &tdesc_powerpc_7400},
3265 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
3266 bfd_mach_ppc_e500, &tdesc_powerpc_e500},
3267
3268 /* 64-bit */
3269 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
3270 bfd_mach_ppc64, &tdesc_powerpc_altivec64},
3271 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
3272 bfd_mach_ppc_620, &tdesc_powerpc_64},
3273 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
3274 bfd_mach_ppc_630, &tdesc_powerpc_64},
3275 {"a35", "PowerPC A35", bfd_arch_powerpc,
3276 bfd_mach_ppc_a35, &tdesc_powerpc_64},
3277 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
3278 bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
3279 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
3280 bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
3281
3282 /* FIXME: I haven't checked the register sets of the following. */
3283 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
3284 bfd_mach_rs6k_rs1, &tdesc_rs6000},
3285 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
3286 bfd_mach_rs6k_rsc, &tdesc_rs6000},
3287 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
3288 bfd_mach_rs6k_rs2, &tdesc_rs6000},
3289
3290 {0, 0, (enum bfd_architecture) 0, 0, 0}
3291 };
3292
3293 /* Return the variant corresponding to architecture ARCH and machine number
3294 MACH. If no such variant exists, return null. */
3295
3296 static const struct variant *
3297 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
3298 {
3299 const struct variant *v;
3300
3301 for (v = variants; v->name; v++)
3302 if (arch == v->arch && mach == v->mach)
3303 return v;
3304
3305 return NULL;
3306 }
3307
3308 \f
3309 static CORE_ADDR
3310 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3311 {
3312 return frame_unwind_register_unsigned (next_frame,
3313 gdbarch_pc_regnum (gdbarch));
3314 }
3315
3316 static struct frame_id
3317 rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3318 {
3319 return frame_id_build (get_frame_register_unsigned
3320 (this_frame, gdbarch_sp_regnum (gdbarch)),
3321 get_frame_pc (this_frame));
3322 }
3323
3324 struct rs6000_frame_cache
3325 {
3326 CORE_ADDR base;
3327 CORE_ADDR initial_sp;
3328 struct trad_frame_saved_reg *saved_regs;
3329
3330 /* Set BASE_P to true if this frame cache is properly initialized.
3331 Otherwise set to false because some registers or memory cannot
3332 collected. */
3333 int base_p;
3334 /* Cache PC for building unavailable frame. */
3335 CORE_ADDR pc;
3336 };
3337
3338 static struct rs6000_frame_cache *
3339 rs6000_frame_cache (struct frame_info *this_frame, void **this_cache)
3340 {
3341 struct rs6000_frame_cache *cache;
3342 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3343 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3344 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3345 struct rs6000_framedata fdata;
3346 int wordsize = tdep->wordsize;
3347 CORE_ADDR func = 0, pc = 0;
3348
3349 if ((*this_cache) != NULL)
3350 return (struct rs6000_frame_cache *) (*this_cache);
3351 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3352 (*this_cache) = cache;
3353 cache->pc = 0;
3354 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3355
3356 TRY
3357 {
3358 func = get_frame_func (this_frame);
3359 cache->pc = func;
3360 pc = get_frame_pc (this_frame);
3361 skip_prologue (gdbarch, func, pc, &fdata);
3362
3363 /* Figure out the parent's stack pointer. */
3364
3365 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
3366 address of the current frame. Things might be easier if the
3367 ->frame pointed to the outer-most address of the frame. In
3368 the mean time, the address of the prev frame is used as the
3369 base address of this frame. */
3370 cache->base = get_frame_register_unsigned
3371 (this_frame, gdbarch_sp_regnum (gdbarch));
3372 }
3373 CATCH (ex, RETURN_MASK_ERROR)
3374 {
3375 if (ex.error != NOT_AVAILABLE_ERROR)
3376 throw_exception (ex);
3377 return (struct rs6000_frame_cache *) (*this_cache);
3378 }
3379 END_CATCH
3380
3381 /* If the function appears to be frameless, check a couple of likely
3382 indicators that we have simply failed to find the frame setup.
3383 Two common cases of this are missing symbols (i.e.
3384 get_frame_func returns the wrong address or 0), and assembly
3385 stubs which have a fast exit path but set up a frame on the slow
3386 path.
3387
3388 If the LR appears to return to this function, then presume that
3389 we have an ABI compliant frame that we failed to find. */
3390 if (fdata.frameless && fdata.lr_offset == 0)
3391 {
3392 CORE_ADDR saved_lr;
3393 int make_frame = 0;
3394
3395 saved_lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3396 if (func == 0 && saved_lr == pc)
3397 make_frame = 1;
3398 else if (func != 0)
3399 {
3400 CORE_ADDR saved_func = get_pc_function_start (saved_lr);
3401 if (func == saved_func)
3402 make_frame = 1;
3403 }
3404
3405 if (make_frame)
3406 {
3407 fdata.frameless = 0;
3408 fdata.lr_offset = tdep->lr_frame_offset;
3409 }
3410 }
3411
3412 if (!fdata.frameless)
3413 {
3414 /* Frameless really means stackless. */
3415 ULONGEST backchain;
3416
3417 if (safe_read_memory_unsigned_integer (cache->base, wordsize,
3418 byte_order, &backchain))
3419 cache->base = (CORE_ADDR) backchain;
3420 }
3421
3422 trad_frame_set_value (cache->saved_regs,
3423 gdbarch_sp_regnum (gdbarch), cache->base);
3424
3425 /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3426 All fpr's from saved_fpr to fp31 are saved. */
3427
3428 if (fdata.saved_fpr >= 0)
3429 {
3430 int i;
3431 CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
3432
3433 /* If skip_prologue says floating-point registers were saved,
3434 but the current architecture has no floating-point registers,
3435 then that's strange. But we have no indices to even record
3436 the addresses under, so we just ignore it. */
3437 if (ppc_floating_point_unit_p (gdbarch))
3438 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
3439 {
3440 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3441 fpr_addr += 8;
3442 }
3443 }
3444
3445 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3446 All gpr's from saved_gpr to gpr31 are saved (except during the
3447 prologue). */
3448
3449 if (fdata.saved_gpr >= 0)
3450 {
3451 int i;
3452 CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
3453 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
3454 {
3455 if (fdata.gpr_mask & (1U << i))
3456 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
3457 gpr_addr += wordsize;
3458 }
3459 }
3460
3461 /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3462 All vr's from saved_vr to vr31 are saved. */
3463 if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
3464 {
3465 if (fdata.saved_vr >= 0)
3466 {
3467 int i;
3468 CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
3469 for (i = fdata.saved_vr; i < 32; i++)
3470 {
3471 cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
3472 vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
3473 }
3474 }
3475 }
3476
3477 /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3478 All vr's from saved_ev to ev31 are saved. ????? */
3479 if (tdep->ppc_ev0_regnum != -1)
3480 {
3481 if (fdata.saved_ev >= 0)
3482 {
3483 int i;
3484 CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
3485 CORE_ADDR off = (byte_order == BFD_ENDIAN_BIG ? 4 : 0);
3486
3487 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
3488 {
3489 cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
3490 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + off;
3491 ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
3492 }
3493 }
3494 }
3495
3496 /* If != 0, fdata.cr_offset is the offset from the frame that
3497 holds the CR. */
3498 if (fdata.cr_offset != 0)
3499 cache->saved_regs[tdep->ppc_cr_regnum].addr
3500 = cache->base + fdata.cr_offset;
3501
3502 /* If != 0, fdata.lr_offset is the offset from the frame that
3503 holds the LR. */
3504 if (fdata.lr_offset != 0)
3505 cache->saved_regs[tdep->ppc_lr_regnum].addr
3506 = cache->base + fdata.lr_offset;
3507 else if (fdata.lr_register != -1)
3508 cache->saved_regs[tdep->ppc_lr_regnum].realreg = fdata.lr_register;
3509 /* The PC is found in the link register. */
3510 cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3511 cache->saved_regs[tdep->ppc_lr_regnum];
3512
3513 /* If != 0, fdata.vrsave_offset is the offset from the frame that
3514 holds the VRSAVE. */
3515 if (fdata.vrsave_offset != 0)
3516 cache->saved_regs[tdep->ppc_vrsave_regnum].addr
3517 = cache->base + fdata.vrsave_offset;
3518
3519 if (fdata.alloca_reg < 0)
3520 /* If no alloca register used, then fi->frame is the value of the
3521 %sp for this frame, and it is good enough. */
3522 cache->initial_sp
3523 = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3524 else
3525 cache->initial_sp
3526 = get_frame_register_unsigned (this_frame, fdata.alloca_reg);
3527
3528 cache->base_p = 1;
3529 return cache;
3530 }
3531
3532 static void
3533 rs6000_frame_this_id (struct frame_info *this_frame, void **this_cache,
3534 struct frame_id *this_id)
3535 {
3536 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3537 this_cache);
3538
3539 if (!info->base_p)
3540 {
3541 (*this_id) = frame_id_build_unavailable_stack (info->pc);
3542 return;
3543 }
3544
3545 /* This marks the outermost frame. */
3546 if (info->base == 0)
3547 return;
3548
3549 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3550 }
3551
3552 static struct value *
3553 rs6000_frame_prev_register (struct frame_info *this_frame,
3554 void **this_cache, int regnum)
3555 {
3556 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3557 this_cache);
3558 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3559 }
3560
3561 static const struct frame_unwind rs6000_frame_unwind =
3562 {
3563 NORMAL_FRAME,
3564 default_frame_unwind_stop_reason,
3565 rs6000_frame_this_id,
3566 rs6000_frame_prev_register,
3567 NULL,
3568 default_frame_sniffer
3569 };
3570
3571 /* Allocate and initialize a frame cache for an epilogue frame.
3572 SP is restored and prev-PC is stored in LR. */
3573
3574 static struct rs6000_frame_cache *
3575 rs6000_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
3576 {
3577 struct rs6000_frame_cache *cache;
3578 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3579 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3580
3581 if (*this_cache)
3582 return (struct rs6000_frame_cache *) *this_cache;
3583
3584 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3585 (*this_cache) = cache;
3586 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3587
3588 TRY
3589 {
3590 /* At this point the stack looks as if we just entered the
3591 function, and the return address is stored in LR. */
3592 CORE_ADDR sp, lr;
3593
3594 sp = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3595 lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3596
3597 cache->base = sp;
3598 cache->initial_sp = sp;
3599
3600 trad_frame_set_value (cache->saved_regs,
3601 gdbarch_pc_regnum (gdbarch), lr);
3602 }
3603 CATCH (ex, RETURN_MASK_ERROR)
3604 {
3605 if (ex.error != NOT_AVAILABLE_ERROR)
3606 throw_exception (ex);
3607 }
3608 END_CATCH
3609
3610 return cache;
3611 }
3612
3613 /* Implementation of frame_unwind.this_id, as defined in frame_unwind.h.
3614 Return the frame ID of an epilogue frame. */
3615
3616 static void
3617 rs6000_epilogue_frame_this_id (struct frame_info *this_frame,
3618 void **this_cache, struct frame_id *this_id)
3619 {
3620 CORE_ADDR pc;
3621 struct rs6000_frame_cache *info =
3622 rs6000_epilogue_frame_cache (this_frame, this_cache);
3623
3624 pc = get_frame_func (this_frame);
3625 if (info->base == 0)
3626 (*this_id) = frame_id_build_unavailable_stack (pc);
3627 else
3628 (*this_id) = frame_id_build (info->base, pc);
3629 }
3630
3631 /* Implementation of frame_unwind.prev_register, as defined in frame_unwind.h.
3632 Return the register value of REGNUM in previous frame. */
3633
3634 static struct value *
3635 rs6000_epilogue_frame_prev_register (struct frame_info *this_frame,
3636 void **this_cache, int regnum)
3637 {
3638 struct rs6000_frame_cache *info =
3639 rs6000_epilogue_frame_cache (this_frame, this_cache);
3640 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3641 }
3642
3643 /* Implementation of frame_unwind.sniffer, as defined in frame_unwind.h.
3644 Check whether this an epilogue frame. */
3645
3646 static int
3647 rs6000_epilogue_frame_sniffer (const struct frame_unwind *self,
3648 struct frame_info *this_frame,
3649 void **this_prologue_cache)
3650 {
3651 if (frame_relative_level (this_frame) == 0)
3652 return rs6000_in_function_epilogue_frame_p (this_frame,
3653 get_frame_arch (this_frame),
3654 get_frame_pc (this_frame));
3655 else
3656 return 0;
3657 }
3658
3659 /* Frame unwinder for epilogue frame. This is required for reverse step-over
3660 a function without debug information. */
3661
3662 static const struct frame_unwind rs6000_epilogue_frame_unwind =
3663 {
3664 NORMAL_FRAME,
3665 default_frame_unwind_stop_reason,
3666 rs6000_epilogue_frame_this_id, rs6000_epilogue_frame_prev_register,
3667 NULL,
3668 rs6000_epilogue_frame_sniffer
3669 };
3670 \f
3671
3672 static CORE_ADDR
3673 rs6000_frame_base_address (struct frame_info *this_frame, void **this_cache)
3674 {
3675 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3676 this_cache);
3677 return info->initial_sp;
3678 }
3679
3680 static const struct frame_base rs6000_frame_base = {
3681 &rs6000_frame_unwind,
3682 rs6000_frame_base_address,
3683 rs6000_frame_base_address,
3684 rs6000_frame_base_address
3685 };
3686
3687 static const struct frame_base *
3688 rs6000_frame_base_sniffer (struct frame_info *this_frame)
3689 {
3690 return &rs6000_frame_base;
3691 }
3692
3693 /* DWARF-2 frame support. Used to handle the detection of
3694 clobbered registers during function calls. */
3695
3696 static void
3697 ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3698 struct dwarf2_frame_state_reg *reg,
3699 struct frame_info *this_frame)
3700 {
3701 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3702
3703 /* PPC32 and PPC64 ABI's are the same regarding volatile and
3704 non-volatile registers. We will use the same code for both. */
3705
3706 /* Call-saved GP registers. */
3707 if ((regnum >= tdep->ppc_gp0_regnum + 14
3708 && regnum <= tdep->ppc_gp0_regnum + 31)
3709 || (regnum == tdep->ppc_gp0_regnum + 1))
3710 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3711
3712 /* Call-clobbered GP registers. */
3713 if ((regnum >= tdep->ppc_gp0_regnum + 3
3714 && regnum <= tdep->ppc_gp0_regnum + 12)
3715 || (regnum == tdep->ppc_gp0_regnum))
3716 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3717
3718 /* Deal with FP registers, if supported. */
3719 if (tdep->ppc_fp0_regnum >= 0)
3720 {
3721 /* Call-saved FP registers. */
3722 if ((regnum >= tdep->ppc_fp0_regnum + 14
3723 && regnum <= tdep->ppc_fp0_regnum + 31))
3724 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3725
3726 /* Call-clobbered FP registers. */
3727 if ((regnum >= tdep->ppc_fp0_regnum
3728 && regnum <= tdep->ppc_fp0_regnum + 13))
3729 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3730 }
3731
3732 /* Deal with ALTIVEC registers, if supported. */
3733 if (tdep->ppc_vr0_regnum > 0 && tdep->ppc_vrsave_regnum > 0)
3734 {
3735 /* Call-saved Altivec registers. */
3736 if ((regnum >= tdep->ppc_vr0_regnum + 20
3737 && regnum <= tdep->ppc_vr0_regnum + 31)
3738 || regnum == tdep->ppc_vrsave_regnum)
3739 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3740
3741 /* Call-clobbered Altivec registers. */
3742 if ((regnum >= tdep->ppc_vr0_regnum
3743 && regnum <= tdep->ppc_vr0_regnum + 19))
3744 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3745 }
3746
3747 /* Handle PC register and Stack Pointer correctly. */
3748 if (regnum == gdbarch_pc_regnum (gdbarch))
3749 reg->how = DWARF2_FRAME_REG_RA;
3750 else if (regnum == gdbarch_sp_regnum (gdbarch))
3751 reg->how = DWARF2_FRAME_REG_CFA;
3752 }
3753
3754
3755 /* Return true if a .gnu_attributes section exists in BFD and it
3756 indicates we are using SPE extensions OR if a .PPC.EMB.apuinfo
3757 section exists in BFD and it indicates that SPE extensions are in
3758 use. Check the .gnu.attributes section first, as the binary might be
3759 compiled for SPE, but not actually using SPE instructions. */
3760
3761 static int
3762 bfd_uses_spe_extensions (bfd *abfd)
3763 {
3764 asection *sect;
3765 gdb_byte *contents = NULL;
3766 bfd_size_type size;
3767 gdb_byte *ptr;
3768 int success = 0;
3769
3770 if (!abfd)
3771 return 0;
3772
3773 #ifdef HAVE_ELF
3774 /* Using Tag_GNU_Power_ABI_Vector here is a bit of a hack, as the user
3775 could be using the SPE vector abi without actually using any spe
3776 bits whatsoever. But it's close enough for now. */
3777 int vector_abi = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_GNU,
3778 Tag_GNU_Power_ABI_Vector);
3779 if (vector_abi == 3)
3780 return 1;
3781 #endif
3782
3783 sect = bfd_get_section_by_name (abfd, ".PPC.EMB.apuinfo");
3784 if (!sect)
3785 return 0;
3786
3787 size = bfd_get_section_size (sect);
3788 contents = (gdb_byte *) xmalloc (size);
3789 if (!bfd_get_section_contents (abfd, sect, contents, 0, size))
3790 {
3791 xfree (contents);
3792 return 0;
3793 }
3794
3795 /* Parse the .PPC.EMB.apuinfo section. The layout is as follows:
3796
3797 struct {
3798 uint32 name_len;
3799 uint32 data_len;
3800 uint32 type;
3801 char name[name_len rounded up to 4-byte alignment];
3802 char data[data_len];
3803 };
3804
3805 Technically, there's only supposed to be one such structure in a
3806 given apuinfo section, but the linker is not always vigilant about
3807 merging apuinfo sections from input files. Just go ahead and parse
3808 them all, exiting early when we discover the binary uses SPE
3809 insns.
3810
3811 It's not specified in what endianness the information in this
3812 section is stored. Assume that it's the endianness of the BFD. */
3813 ptr = contents;
3814 while (1)
3815 {
3816 unsigned int name_len;
3817 unsigned int data_len;
3818 unsigned int type;
3819
3820 /* If we can't read the first three fields, we're done. */
3821 if (size < 12)
3822 break;
3823
3824 name_len = bfd_get_32 (abfd, ptr);
3825 name_len = (name_len + 3) & ~3U; /* Round to 4 bytes. */
3826 data_len = bfd_get_32 (abfd, ptr + 4);
3827 type = bfd_get_32 (abfd, ptr + 8);
3828 ptr += 12;
3829
3830 /* The name must be "APUinfo\0". */
3831 if (name_len != 8
3832 && strcmp ((const char *) ptr, "APUinfo") != 0)
3833 break;
3834 ptr += name_len;
3835
3836 /* The type must be 2. */
3837 if (type != 2)
3838 break;
3839
3840 /* The data is stored as a series of uint32. The upper half of
3841 each uint32 indicates the particular APU used and the lower
3842 half indicates the revision of that APU. We just care about
3843 the upper half. */
3844
3845 /* Not 4-byte quantities. */
3846 if (data_len & 3U)
3847 break;
3848
3849 while (data_len)
3850 {
3851 unsigned int apuinfo = bfd_get_32 (abfd, ptr);
3852 unsigned int apu = apuinfo >> 16;
3853 ptr += 4;
3854 data_len -= 4;
3855
3856 /* The SPE APU is 0x100; the SPEFP APU is 0x101. Accept
3857 either. */
3858 if (apu == 0x100 || apu == 0x101)
3859 {
3860 success = 1;
3861 data_len = 0;
3862 }
3863 }
3864
3865 if (success)
3866 break;
3867 }
3868
3869 xfree (contents);
3870 return success;
3871 }
3872
3873 /* These are macros for parsing instruction fields (I.1.6.28) */
3874
3875 #define PPC_FIELD(value, from, len) \
3876 (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1))
3877 #define PPC_SEXT(v, bs) \
3878 ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \
3879 ^ ((CORE_ADDR) 1 << ((bs) - 1))) \
3880 - ((CORE_ADDR) 1 << ((bs) - 1)))
3881 #define PPC_OP6(insn) PPC_FIELD (insn, 0, 6)
3882 #define PPC_EXTOP(insn) PPC_FIELD (insn, 21, 10)
3883 #define PPC_RT(insn) PPC_FIELD (insn, 6, 5)
3884 #define PPC_RS(insn) PPC_FIELD (insn, 6, 5)
3885 #define PPC_RA(insn) PPC_FIELD (insn, 11, 5)
3886 #define PPC_RB(insn) PPC_FIELD (insn, 16, 5)
3887 #define PPC_NB(insn) PPC_FIELD (insn, 16, 5)
3888 #define PPC_VRT(insn) PPC_FIELD (insn, 6, 5)
3889 #define PPC_FRT(insn) PPC_FIELD (insn, 6, 5)
3890 #define PPC_SPR(insn) (PPC_FIELD (insn, 11, 5) \
3891 | (PPC_FIELD (insn, 16, 5) << 5))
3892 #define PPC_BO(insn) PPC_FIELD (insn, 6, 5)
3893 #define PPC_T(insn) PPC_FIELD (insn, 6, 5)
3894 #define PPC_D(insn) PPC_SEXT (PPC_FIELD (insn, 16, 16), 16)
3895 #define PPC_DS(insn) PPC_SEXT (PPC_FIELD (insn, 16, 14), 14)
3896 #define PPC_DQ(insn) PPC_SEXT (PPC_FIELD (insn, 16, 12), 12)
3897 #define PPC_BIT(insn,n) ((insn & (1 << (31 - (n)))) ? 1 : 0)
3898 #define PPC_OE(insn) PPC_BIT (insn, 21)
3899 #define PPC_RC(insn) PPC_BIT (insn, 31)
3900 #define PPC_Rc(insn) PPC_BIT (insn, 21)
3901 #define PPC_LK(insn) PPC_BIT (insn, 31)
3902 #define PPC_TX(insn) PPC_BIT (insn, 31)
3903 #define PPC_LEV(insn) PPC_FIELD (insn, 20, 7)
3904
3905 #define PPC_XT(insn) ((PPC_TX (insn) << 5) | PPC_T (insn))
3906 #define PPC_XER_NB(xer) (xer & 0x7f)
3907
3908 /* Record Vector-Scalar Registers.
3909 For VSR less than 32, it's represented by an FPR and an VSR-upper register.
3910 Otherwise, it's just a VR register. Record them accordingly. */
3911
3912 static int
3913 ppc_record_vsr (struct regcache *regcache, struct gdbarch_tdep *tdep, int vsr)
3914 {
3915 if (vsr < 0 || vsr >= 64)
3916 return -1;
3917
3918 if (vsr >= 32)
3919 {
3920 if (tdep->ppc_vr0_regnum >= 0)
3921 record_full_arch_list_add_reg (regcache, tdep->ppc_vr0_regnum + vsr - 32);
3922 }
3923 else
3924 {
3925 if (tdep->ppc_fp0_regnum >= 0)
3926 record_full_arch_list_add_reg (regcache, tdep->ppc_fp0_regnum + vsr);
3927 if (tdep->ppc_vsr0_upper_regnum >= 0)
3928 record_full_arch_list_add_reg (regcache,
3929 tdep->ppc_vsr0_upper_regnum + vsr);
3930 }
3931
3932 return 0;
3933 }
3934
3935 /* Parse and record instructions primary opcode-4 at ADDR.
3936 Return 0 if successful. */
3937
3938 static int
3939 ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
3940 CORE_ADDR addr, uint32_t insn)
3941 {
3942 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3943 int ext = PPC_FIELD (insn, 21, 11);
3944 int vra = PPC_FIELD (insn, 11, 5);
3945
3946 switch (ext & 0x3f)
3947 {
3948 case 32: /* Vector Multiply-High-Add Signed Halfword Saturate */
3949 case 33: /* Vector Multiply-High-Round-Add Signed Halfword Saturate */
3950 case 39: /* Vector Multiply-Sum Unsigned Halfword Saturate */
3951 case 41: /* Vector Multiply-Sum Signed Halfword Saturate */
3952 record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
3953 /* FALL-THROUGH */
3954 case 42: /* Vector Select */
3955 case 43: /* Vector Permute */
3956 case 59: /* Vector Permute Right-indexed */
3957 case 44: /* Vector Shift Left Double by Octet Immediate */
3958 case 45: /* Vector Permute and Exclusive-OR */
3959 case 60: /* Vector Add Extended Unsigned Quadword Modulo */
3960 case 61: /* Vector Add Extended & write Carry Unsigned Quadword */
3961 case 62: /* Vector Subtract Extended Unsigned Quadword Modulo */
3962 case 63: /* Vector Subtract Extended & write Carry Unsigned Quadword */
3963 case 34: /* Vector Multiply-Low-Add Unsigned Halfword Modulo */
3964 case 35: /* Vector Multiply-Sum Unsigned Doubleword Modulo */
3965 case 36: /* Vector Multiply-Sum Unsigned Byte Modulo */
3966 case 37: /* Vector Multiply-Sum Mixed Byte Modulo */
3967 case 38: /* Vector Multiply-Sum Unsigned Halfword Modulo */
3968 case 40: /* Vector Multiply-Sum Signed Halfword Modulo */
3969 case 46: /* Vector Multiply-Add Single-Precision */
3970 case 47: /* Vector Negative Multiply-Subtract Single-Precision */
3971 record_full_arch_list_add_reg (regcache,
3972 tdep->ppc_vr0_regnum + PPC_VRT (insn));
3973 return 0;
3974
3975 case 48: /* Multiply-Add High Doubleword */
3976 case 49: /* Multiply-Add High Doubleword Unsigned */
3977 case 51: /* Multiply-Add Low Doubleword */
3978 record_full_arch_list_add_reg (regcache,
3979 tdep->ppc_gp0_regnum + PPC_RT (insn));
3980 return 0;
3981 }
3982
3983 switch ((ext & 0x1ff))
3984 {
3985 case 385:
3986 if (vra != 0 /* Decimal Convert To Signed Quadword */
3987 && vra != 2 /* Decimal Convert From Signed Quadword */
3988 && vra != 4 /* Decimal Convert To Zoned */
3989 && vra != 5 /* Decimal Convert To National */
3990 && vra != 6 /* Decimal Convert From Zoned */
3991 && vra != 7 /* Decimal Convert From National */
3992 && vra != 31) /* Decimal Set Sign */
3993 break;
3994 /* Fall through. */
3995 /* 5.16 Decimal Integer Arithmetic Instructions */
3996 case 1: /* Decimal Add Modulo */
3997 case 65: /* Decimal Subtract Modulo */
3998
3999 case 193: /* Decimal Shift */
4000 case 129: /* Decimal Unsigned Shift */
4001 case 449: /* Decimal Shift and Round */
4002
4003 case 257: /* Decimal Truncate */
4004 case 321: /* Decimal Unsigned Truncate */
4005
4006 /* Bit-21 should be set. */
4007 if (!PPC_BIT (insn, 21))
4008 break;
4009
4010 record_full_arch_list_add_reg (regcache,
4011 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4012 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4013 return 0;
4014 }
4015
4016 /* Bit-21 is used for RC */
4017 switch (ext & 0x3ff)
4018 {
4019 case 6: /* Vector Compare Equal To Unsigned Byte */
4020 case 70: /* Vector Compare Equal To Unsigned Halfword */
4021 case 134: /* Vector Compare Equal To Unsigned Word */
4022 case 199: /* Vector Compare Equal To Unsigned Doubleword */
4023 case 774: /* Vector Compare Greater Than Signed Byte */
4024 case 838: /* Vector Compare Greater Than Signed Halfword */
4025 case 902: /* Vector Compare Greater Than Signed Word */
4026 case 967: /* Vector Compare Greater Than Signed Doubleword */
4027 case 518: /* Vector Compare Greater Than Unsigned Byte */
4028 case 646: /* Vector Compare Greater Than Unsigned Word */
4029 case 582: /* Vector Compare Greater Than Unsigned Halfword */
4030 case 711: /* Vector Compare Greater Than Unsigned Doubleword */
4031 case 966: /* Vector Compare Bounds Single-Precision */
4032 case 198: /* Vector Compare Equal To Single-Precision */
4033 case 454: /* Vector Compare Greater Than or Equal To Single-Precision */
4034 case 710: /* Vector Compare Greater Than Single-Precision */
4035 case 7: /* Vector Compare Not Equal Byte */
4036 case 71: /* Vector Compare Not Equal Halfword */
4037 case 135: /* Vector Compare Not Equal Word */
4038 case 263: /* Vector Compare Not Equal or Zero Byte */
4039 case 327: /* Vector Compare Not Equal or Zero Halfword */
4040 case 391: /* Vector Compare Not Equal or Zero Word */
4041 if (PPC_Rc (insn))
4042 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4043 record_full_arch_list_add_reg (regcache,
4044 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4045 return 0;
4046 }
4047
4048 if (ext == 1538)
4049 {
4050 switch (vra)
4051 {
4052 case 0: /* Vector Count Leading Zero Least-Significant Bits
4053 Byte */
4054 case 1: /* Vector Count Trailing Zero Least-Significant Bits
4055 Byte */
4056 record_full_arch_list_add_reg (regcache,
4057 tdep->ppc_gp0_regnum + PPC_RT (insn));
4058 return 0;
4059
4060 case 6: /* Vector Negate Word */
4061 case 7: /* Vector Negate Doubleword */
4062 case 8: /* Vector Parity Byte Word */
4063 case 9: /* Vector Parity Byte Doubleword */
4064 case 10: /* Vector Parity Byte Quadword */
4065 case 16: /* Vector Extend Sign Byte To Word */
4066 case 17: /* Vector Extend Sign Halfword To Word */
4067 case 24: /* Vector Extend Sign Byte To Doubleword */
4068 case 25: /* Vector Extend Sign Halfword To Doubleword */
4069 case 26: /* Vector Extend Sign Word To Doubleword */
4070 case 28: /* Vector Count Trailing Zeros Byte */
4071 case 29: /* Vector Count Trailing Zeros Halfword */
4072 case 30: /* Vector Count Trailing Zeros Word */
4073 case 31: /* Vector Count Trailing Zeros Doubleword */
4074 record_full_arch_list_add_reg (regcache,
4075 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4076 return 0;
4077 }
4078 }
4079
4080 switch (ext)
4081 {
4082 case 142: /* Vector Pack Unsigned Halfword Unsigned Saturate */
4083 case 206: /* Vector Pack Unsigned Word Unsigned Saturate */
4084 case 270: /* Vector Pack Signed Halfword Unsigned Saturate */
4085 case 334: /* Vector Pack Signed Word Unsigned Saturate */
4086 case 398: /* Vector Pack Signed Halfword Signed Saturate */
4087 case 462: /* Vector Pack Signed Word Signed Saturate */
4088 case 1230: /* Vector Pack Unsigned Doubleword Unsigned Saturate */
4089 case 1358: /* Vector Pack Signed Doubleword Unsigned Saturate */
4090 case 1486: /* Vector Pack Signed Doubleword Signed Saturate */
4091 case 512: /* Vector Add Unsigned Byte Saturate */
4092 case 576: /* Vector Add Unsigned Halfword Saturate */
4093 case 640: /* Vector Add Unsigned Word Saturate */
4094 case 768: /* Vector Add Signed Byte Saturate */
4095 case 832: /* Vector Add Signed Halfword Saturate */
4096 case 896: /* Vector Add Signed Word Saturate */
4097 case 1536: /* Vector Subtract Unsigned Byte Saturate */
4098 case 1600: /* Vector Subtract Unsigned Halfword Saturate */
4099 case 1664: /* Vector Subtract Unsigned Word Saturate */
4100 case 1792: /* Vector Subtract Signed Byte Saturate */
4101 case 1856: /* Vector Subtract Signed Halfword Saturate */
4102 case 1920: /* Vector Subtract Signed Word Saturate */
4103
4104 case 1544: /* Vector Sum across Quarter Unsigned Byte Saturate */
4105 case 1800: /* Vector Sum across Quarter Signed Byte Saturate */
4106 case 1608: /* Vector Sum across Quarter Signed Halfword Saturate */
4107 case 1672: /* Vector Sum across Half Signed Word Saturate */
4108 case 1928: /* Vector Sum across Signed Word Saturate */
4109 case 970: /* Vector Convert To Signed Fixed-Point Word Saturate */
4110 case 906: /* Vector Convert To Unsigned Fixed-Point Word Saturate */
4111 record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
4112 /* FALL-THROUGH */
4113 case 12: /* Vector Merge High Byte */
4114 case 14: /* Vector Pack Unsigned Halfword Unsigned Modulo */
4115 case 76: /* Vector Merge High Halfword */
4116 case 78: /* Vector Pack Unsigned Word Unsigned Modulo */
4117 case 140: /* Vector Merge High Word */
4118 case 268: /* Vector Merge Low Byte */
4119 case 332: /* Vector Merge Low Halfword */
4120 case 396: /* Vector Merge Low Word */
4121 case 526: /* Vector Unpack High Signed Byte */
4122 case 590: /* Vector Unpack High Signed Halfword */
4123 case 654: /* Vector Unpack Low Signed Byte */
4124 case 718: /* Vector Unpack Low Signed Halfword */
4125 case 782: /* Vector Pack Pixel */
4126 case 846: /* Vector Unpack High Pixel */
4127 case 974: /* Vector Unpack Low Pixel */
4128 case 1102: /* Vector Pack Unsigned Doubleword Unsigned Modulo */
4129 case 1614: /* Vector Unpack High Signed Word */
4130 case 1676: /* Vector Merge Odd Word */
4131 case 1742: /* Vector Unpack Low Signed Word */
4132 case 1932: /* Vector Merge Even Word */
4133 case 524: /* Vector Splat Byte */
4134 case 588: /* Vector Splat Halfword */
4135 case 652: /* Vector Splat Word */
4136 case 780: /* Vector Splat Immediate Signed Byte */
4137 case 844: /* Vector Splat Immediate Signed Halfword */
4138 case 908: /* Vector Splat Immediate Signed Word */
4139 case 452: /* Vector Shift Left */
4140 case 708: /* Vector Shift Right */
4141 case 1036: /* Vector Shift Left by Octet */
4142 case 1100: /* Vector Shift Right by Octet */
4143 case 0: /* Vector Add Unsigned Byte Modulo */
4144 case 64: /* Vector Add Unsigned Halfword Modulo */
4145 case 128: /* Vector Add Unsigned Word Modulo */
4146 case 192: /* Vector Add Unsigned Doubleword Modulo */
4147 case 256: /* Vector Add Unsigned Quadword Modulo */
4148 case 320: /* Vector Add & write Carry Unsigned Quadword */
4149 case 384: /* Vector Add and Write Carry-Out Unsigned Word */
4150 case 8: /* Vector Multiply Odd Unsigned Byte */
4151 case 72: /* Vector Multiply Odd Unsigned Halfword */
4152 case 136: /* Vector Multiply Odd Unsigned Word */
4153 case 264: /* Vector Multiply Odd Signed Byte */
4154 case 328: /* Vector Multiply Odd Signed Halfword */
4155 case 392: /* Vector Multiply Odd Signed Word */
4156 case 520: /* Vector Multiply Even Unsigned Byte */
4157 case 584: /* Vector Multiply Even Unsigned Halfword */
4158 case 648: /* Vector Multiply Even Unsigned Word */
4159 case 776: /* Vector Multiply Even Signed Byte */
4160 case 840: /* Vector Multiply Even Signed Halfword */
4161 case 904: /* Vector Multiply Even Signed Word */
4162 case 137: /* Vector Multiply Unsigned Word Modulo */
4163 case 1024: /* Vector Subtract Unsigned Byte Modulo */
4164 case 1088: /* Vector Subtract Unsigned Halfword Modulo */
4165 case 1152: /* Vector Subtract Unsigned Word Modulo */
4166 case 1216: /* Vector Subtract Unsigned Doubleword Modulo */
4167 case 1280: /* Vector Subtract Unsigned Quadword Modulo */
4168 case 1344: /* Vector Subtract & write Carry Unsigned Quadword */
4169 case 1408: /* Vector Subtract and Write Carry-Out Unsigned Word */
4170 case 1282: /* Vector Average Signed Byte */
4171 case 1346: /* Vector Average Signed Halfword */
4172 case 1410: /* Vector Average Signed Word */
4173 case 1026: /* Vector Average Unsigned Byte */
4174 case 1090: /* Vector Average Unsigned Halfword */
4175 case 1154: /* Vector Average Unsigned Word */
4176 case 258: /* Vector Maximum Signed Byte */
4177 case 322: /* Vector Maximum Signed Halfword */
4178 case 386: /* Vector Maximum Signed Word */
4179 case 450: /* Vector Maximum Signed Doubleword */
4180 case 2: /* Vector Maximum Unsigned Byte */
4181 case 66: /* Vector Maximum Unsigned Halfword */
4182 case 130: /* Vector Maximum Unsigned Word */
4183 case 194: /* Vector Maximum Unsigned Doubleword */
4184 case 770: /* Vector Minimum Signed Byte */
4185 case 834: /* Vector Minimum Signed Halfword */
4186 case 898: /* Vector Minimum Signed Word */
4187 case 962: /* Vector Minimum Signed Doubleword */
4188 case 514: /* Vector Minimum Unsigned Byte */
4189 case 578: /* Vector Minimum Unsigned Halfword */
4190 case 642: /* Vector Minimum Unsigned Word */
4191 case 706: /* Vector Minimum Unsigned Doubleword */
4192 case 1028: /* Vector Logical AND */
4193 case 1668: /* Vector Logical Equivalent */
4194 case 1092: /* Vector Logical AND with Complement */
4195 case 1412: /* Vector Logical NAND */
4196 case 1348: /* Vector Logical OR with Complement */
4197 case 1156: /* Vector Logical OR */
4198 case 1284: /* Vector Logical NOR */
4199 case 1220: /* Vector Logical XOR */
4200 case 4: /* Vector Rotate Left Byte */
4201 case 132: /* Vector Rotate Left Word VX-form */
4202 case 68: /* Vector Rotate Left Halfword */
4203 case 196: /* Vector Rotate Left Doubleword */
4204 case 260: /* Vector Shift Left Byte */
4205 case 388: /* Vector Shift Left Word */
4206 case 324: /* Vector Shift Left Halfword */
4207 case 1476: /* Vector Shift Left Doubleword */
4208 case 516: /* Vector Shift Right Byte */
4209 case 644: /* Vector Shift Right Word */
4210 case 580: /* Vector Shift Right Halfword */
4211 case 1732: /* Vector Shift Right Doubleword */
4212 case 772: /* Vector Shift Right Algebraic Byte */
4213 case 900: /* Vector Shift Right Algebraic Word */
4214 case 836: /* Vector Shift Right Algebraic Halfword */
4215 case 964: /* Vector Shift Right Algebraic Doubleword */
4216 case 10: /* Vector Add Single-Precision */
4217 case 74: /* Vector Subtract Single-Precision */
4218 case 1034: /* Vector Maximum Single-Precision */
4219 case 1098: /* Vector Minimum Single-Precision */
4220 case 842: /* Vector Convert From Signed Fixed-Point Word */
4221 case 778: /* Vector Convert From Unsigned Fixed-Point Word */
4222 case 714: /* Vector Round to Single-Precision Integer toward -Infinity */
4223 case 522: /* Vector Round to Single-Precision Integer Nearest */
4224 case 650: /* Vector Round to Single-Precision Integer toward +Infinity */
4225 case 586: /* Vector Round to Single-Precision Integer toward Zero */
4226 case 394: /* Vector 2 Raised to the Exponent Estimate Floating-Point */
4227 case 458: /* Vector Log Base 2 Estimate Floating-Point */
4228 case 266: /* Vector Reciprocal Estimate Single-Precision */
4229 case 330: /* Vector Reciprocal Square Root Estimate Single-Precision */
4230 case 1288: /* Vector AES Cipher */
4231 case 1289: /* Vector AES Cipher Last */
4232 case 1352: /* Vector AES Inverse Cipher */
4233 case 1353: /* Vector AES Inverse Cipher Last */
4234 case 1480: /* Vector AES SubBytes */
4235 case 1730: /* Vector SHA-512 Sigma Doubleword */
4236 case 1666: /* Vector SHA-256 Sigma Word */
4237 case 1032: /* Vector Polynomial Multiply-Sum Byte */
4238 case 1160: /* Vector Polynomial Multiply-Sum Word */
4239 case 1096: /* Vector Polynomial Multiply-Sum Halfword */
4240 case 1224: /* Vector Polynomial Multiply-Sum Doubleword */
4241 case 1292: /* Vector Gather Bits by Bytes by Doubleword */
4242 case 1794: /* Vector Count Leading Zeros Byte */
4243 case 1858: /* Vector Count Leading Zeros Halfword */
4244 case 1922: /* Vector Count Leading Zeros Word */
4245 case 1986: /* Vector Count Leading Zeros Doubleword */
4246 case 1795: /* Vector Population Count Byte */
4247 case 1859: /* Vector Population Count Halfword */
4248 case 1923: /* Vector Population Count Word */
4249 case 1987: /* Vector Population Count Doubleword */
4250 case 1356: /* Vector Bit Permute Quadword */
4251 case 1484: /* Vector Bit Permute Doubleword */
4252 case 513: /* Vector Multiply-by-10 Unsigned Quadword */
4253 case 1: /* Vector Multiply-by-10 & write Carry Unsigned
4254 Quadword */
4255 case 577: /* Vector Multiply-by-10 Extended Unsigned Quadword */
4256 case 65: /* Vector Multiply-by-10 Extended & write Carry
4257 Unsigned Quadword */
4258 case 1027: /* Vector Absolute Difference Unsigned Byte */
4259 case 1091: /* Vector Absolute Difference Unsigned Halfword */
4260 case 1155: /* Vector Absolute Difference Unsigned Word */
4261 case 1796: /* Vector Shift Right Variable */
4262 case 1860: /* Vector Shift Left Variable */
4263 case 133: /* Vector Rotate Left Word then Mask Insert */
4264 case 197: /* Vector Rotate Left Doubleword then Mask Insert */
4265 case 389: /* Vector Rotate Left Word then AND with Mask */
4266 case 453: /* Vector Rotate Left Doubleword then AND with Mask */
4267 case 525: /* Vector Extract Unsigned Byte */
4268 case 589: /* Vector Extract Unsigned Halfword */
4269 case 653: /* Vector Extract Unsigned Word */
4270 case 717: /* Vector Extract Doubleword */
4271 case 781: /* Vector Insert Byte */
4272 case 845: /* Vector Insert Halfword */
4273 case 909: /* Vector Insert Word */
4274 case 973: /* Vector Insert Doubleword */
4275 record_full_arch_list_add_reg (regcache,
4276 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4277 return 0;
4278
4279 case 1549: /* Vector Extract Unsigned Byte Left-Indexed */
4280 case 1613: /* Vector Extract Unsigned Halfword Left-Indexed */
4281 case 1677: /* Vector Extract Unsigned Word Left-Indexed */
4282 case 1805: /* Vector Extract Unsigned Byte Right-Indexed */
4283 case 1869: /* Vector Extract Unsigned Halfword Right-Indexed */
4284 case 1933: /* Vector Extract Unsigned Word Right-Indexed */
4285 record_full_arch_list_add_reg (regcache,
4286 tdep->ppc_gp0_regnum + PPC_RT (insn));
4287 return 0;
4288
4289 case 1604: /* Move To Vector Status and Control Register */
4290 record_full_arch_list_add_reg (regcache, PPC_VSCR_REGNUM);
4291 return 0;
4292 case 1540: /* Move From Vector Status and Control Register */
4293 record_full_arch_list_add_reg (regcache,
4294 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4295 return 0;
4296 case 833: /* Decimal Copy Sign */
4297 record_full_arch_list_add_reg (regcache,
4298 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4299 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4300 return 0;
4301 }
4302
4303 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4304 "at %s, 4-%d.\n", insn, paddress (gdbarch, addr), ext);
4305 return -1;
4306 }
4307
4308 /* Parse and record instructions of primary opcode-19 at ADDR.
4309 Return 0 if successful. */
4310
4311 static int
4312 ppc_process_record_op19 (struct gdbarch *gdbarch, struct regcache *regcache,
4313 CORE_ADDR addr, uint32_t insn)
4314 {
4315 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4316 int ext = PPC_EXTOP (insn);
4317
4318 switch (ext & 0x01f)
4319 {
4320 case 2: /* Add PC Immediate Shifted */
4321 record_full_arch_list_add_reg (regcache,
4322 tdep->ppc_gp0_regnum + PPC_RT (insn));
4323 return 0;
4324 }
4325
4326 switch (ext)
4327 {
4328 case 0: /* Move Condition Register Field */
4329 case 33: /* Condition Register NOR */
4330 case 129: /* Condition Register AND with Complement */
4331 case 193: /* Condition Register XOR */
4332 case 225: /* Condition Register NAND */
4333 case 257: /* Condition Register AND */
4334 case 289: /* Condition Register Equivalent */
4335 case 417: /* Condition Register OR with Complement */
4336 case 449: /* Condition Register OR */
4337 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4338 return 0;
4339
4340 case 16: /* Branch Conditional */
4341 case 560: /* Branch Conditional to Branch Target Address Register */
4342 if ((PPC_BO (insn) & 0x4) == 0)
4343 record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
4344 /* FALL-THROUGH */
4345 case 528: /* Branch Conditional to Count Register */
4346 if (PPC_LK (insn))
4347 record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
4348 return 0;
4349
4350 case 150: /* Instruction Synchronize */
4351 /* Do nothing. */
4352 return 0;
4353 }
4354
4355 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4356 "at %s, 19-%d.\n", insn, paddress (gdbarch, addr), ext);
4357 return -1;
4358 }
4359
4360 /* Parse and record instructions of primary opcode-31 at ADDR.
4361 Return 0 if successful. */
4362
4363 static int
4364 ppc_process_record_op31 (struct gdbarch *gdbarch, struct regcache *regcache,
4365 CORE_ADDR addr, uint32_t insn)
4366 {
4367 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4368 int ext = PPC_EXTOP (insn);
4369 int tmp, nr, nb, i;
4370 CORE_ADDR at_dcsz, ea = 0;
4371 ULONGEST rb, ra, xer;
4372 int size = 0;
4373
4374 /* These instructions have OE bit. */
4375 switch (ext & 0x1ff)
4376 {
4377 /* These write RT and XER. Update CR if RC is set. */
4378 case 8: /* Subtract from carrying */
4379 case 10: /* Add carrying */
4380 case 136: /* Subtract from extended */
4381 case 138: /* Add extended */
4382 case 200: /* Subtract from zero extended */
4383 case 202: /* Add to zero extended */
4384 case 232: /* Subtract from minus one extended */
4385 case 234: /* Add to minus one extended */
4386 /* CA is always altered, but SO/OV are only altered when OE=1.
4387 In any case, XER is always altered. */
4388 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4389 if (PPC_RC (insn))
4390 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4391 record_full_arch_list_add_reg (regcache,
4392 tdep->ppc_gp0_regnum + PPC_RT (insn));
4393 return 0;
4394
4395 /* These write RT. Update CR if RC is set and update XER if OE is set. */
4396 case 40: /* Subtract from */
4397 case 104: /* Negate */
4398 case 233: /* Multiply low doubleword */
4399 case 235: /* Multiply low word */
4400 case 266: /* Add */
4401 case 393: /* Divide Doubleword Extended Unsigned */
4402 case 395: /* Divide Word Extended Unsigned */
4403 case 425: /* Divide Doubleword Extended */
4404 case 427: /* Divide Word Extended */
4405 case 457: /* Divide Doubleword Unsigned */
4406 case 459: /* Divide Word Unsigned */
4407 case 489: /* Divide Doubleword */
4408 case 491: /* Divide Word */
4409 if (PPC_OE (insn))
4410 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4411 /* FALL-THROUGH */
4412 case 9: /* Multiply High Doubleword Unsigned */
4413 case 11: /* Multiply High Word Unsigned */
4414 case 73: /* Multiply High Doubleword */
4415 case 75: /* Multiply High Word */
4416 if (PPC_RC (insn))
4417 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4418 record_full_arch_list_add_reg (regcache,
4419 tdep->ppc_gp0_regnum + PPC_RT (insn));
4420 return 0;
4421 }
4422
4423 if ((ext & 0x1f) == 15)
4424 {
4425 /* Integer Select. bit[16:20] is used for BC. */
4426 record_full_arch_list_add_reg (regcache,
4427 tdep->ppc_gp0_regnum + PPC_RT (insn));
4428 return 0;
4429 }
4430
4431 if ((ext & 0xff) == 170)
4432 {
4433 /* Add Extended using alternate carry bits */
4434 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4435 record_full_arch_list_add_reg (regcache,
4436 tdep->ppc_gp0_regnum + PPC_RT (insn));
4437 return 0;
4438 }
4439
4440 switch (ext)
4441 {
4442 case 78: /* Determine Leftmost Zero Byte */
4443 if (PPC_RC (insn))
4444 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4445 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4446 record_full_arch_list_add_reg (regcache,
4447 tdep->ppc_gp0_regnum + PPC_RT (insn));
4448 return 0;
4449
4450 /* These only write RT. */
4451 case 19: /* Move from condition register */
4452 /* Move From One Condition Register Field */
4453 case 74: /* Add and Generate Sixes */
4454 case 74 | 0x200: /* Add and Generate Sixes (bit-21 dont-care) */
4455 case 302: /* Move From Branch History Rolling Buffer */
4456 case 339: /* Move From Special Purpose Register */
4457 case 371: /* Move From Time Base [Phased-Out] */
4458 case 309: /* Load Doubleword Monitored Indexed */
4459 case 128: /* Set Boolean */
4460 case 755: /* Deliver A Random Number */
4461 record_full_arch_list_add_reg (regcache,
4462 tdep->ppc_gp0_regnum + PPC_RT (insn));
4463 return 0;
4464
4465 /* These only write to RA. */
4466 case 51: /* Move From VSR Doubleword */
4467 case 115: /* Move From VSR Word and Zero */
4468 case 122: /* Population count bytes */
4469 case 378: /* Population count words */
4470 case 506: /* Population count doublewords */
4471 case 154: /* Parity Word */
4472 case 186: /* Parity Doubleword */
4473 case 252: /* Bit Permute Doubleword */
4474 case 282: /* Convert Declets To Binary Coded Decimal */
4475 case 314: /* Convert Binary Coded Decimal To Declets */
4476 case 508: /* Compare bytes */
4477 case 307: /* Move From VSR Lower Doubleword */
4478 record_full_arch_list_add_reg (regcache,
4479 tdep->ppc_gp0_regnum + PPC_RA (insn));
4480 return 0;
4481
4482 /* These write CR and optional RA. */
4483 case 792: /* Shift Right Algebraic Word */
4484 case 794: /* Shift Right Algebraic Doubleword */
4485 case 824: /* Shift Right Algebraic Word Immediate */
4486 case 826: /* Shift Right Algebraic Doubleword Immediate (413) */
4487 case 826 | 1: /* Shift Right Algebraic Doubleword Immediate (413) */
4488 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4489 record_full_arch_list_add_reg (regcache,
4490 tdep->ppc_gp0_regnum + PPC_RA (insn));
4491 /* FALL-THROUGH */
4492 case 0: /* Compare */
4493 case 32: /* Compare logical */
4494 case 144: /* Move To Condition Register Fields */
4495 /* Move To One Condition Register Field */
4496 case 192: /* Compare Ranged Byte */
4497 case 224: /* Compare Equal Byte */
4498 case 576: /* Move XER to CR Extended */
4499 case 902: /* Paste (should always fail due to single-stepping and
4500 the memory location might not be accessible, so
4501 record only CR) */
4502 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4503 return 0;
4504
4505 /* These write to RT. Update RA if 'update indexed.' */
4506 case 53: /* Load Doubleword with Update Indexed */
4507 case 119: /* Load Byte and Zero with Update Indexed */
4508 case 311: /* Load Halfword and Zero with Update Indexed */
4509 case 55: /* Load Word and Zero with Update Indexed */
4510 case 375: /* Load Halfword Algebraic with Update Indexed */
4511 case 373: /* Load Word Algebraic with Update Indexed */
4512 record_full_arch_list_add_reg (regcache,
4513 tdep->ppc_gp0_regnum + PPC_RA (insn));
4514 /* FALL-THROUGH */
4515 case 21: /* Load Doubleword Indexed */
4516 case 52: /* Load Byte And Reserve Indexed */
4517 case 116: /* Load Halfword And Reserve Indexed */
4518 case 20: /* Load Word And Reserve Indexed */
4519 case 84: /* Load Doubleword And Reserve Indexed */
4520 case 87: /* Load Byte and Zero Indexed */
4521 case 279: /* Load Halfword and Zero Indexed */
4522 case 23: /* Load Word and Zero Indexed */
4523 case 343: /* Load Halfword Algebraic Indexed */
4524 case 341: /* Load Word Algebraic Indexed */
4525 case 790: /* Load Halfword Byte-Reverse Indexed */
4526 case 534: /* Load Word Byte-Reverse Indexed */
4527 case 532: /* Load Doubleword Byte-Reverse Indexed */
4528 case 582: /* Load Word Atomic */
4529 case 614: /* Load Doubleword Atomic */
4530 case 265: /* Modulo Unsigned Doubleword */
4531 case 777: /* Modulo Signed Doubleword */
4532 case 267: /* Modulo Unsigned Word */
4533 case 779: /* Modulo Signed Word */
4534 record_full_arch_list_add_reg (regcache,
4535 tdep->ppc_gp0_regnum + PPC_RT (insn));
4536 return 0;
4537
4538 case 597: /* Load String Word Immediate */
4539 case 533: /* Load String Word Indexed */
4540 if (ext == 597)
4541 {
4542 nr = PPC_NB (insn);
4543 if (nr == 0)
4544 nr = 32;
4545 }
4546 else
4547 {
4548 regcache_raw_read_unsigned (regcache, tdep->ppc_xer_regnum, &xer);
4549 nr = PPC_XER_NB (xer);
4550 }
4551
4552 nr = (nr + 3) >> 2;
4553
4554 /* If n=0, the contents of register RT are undefined. */
4555 if (nr == 0)
4556 nr = 1;
4557
4558 for (i = 0; i < nr; i++)
4559 record_full_arch_list_add_reg (regcache,
4560 tdep->ppc_gp0_regnum
4561 + ((PPC_RT (insn) + i) & 0x1f));
4562 return 0;
4563
4564 case 276: /* Load Quadword And Reserve Indexed */
4565 tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn) & ~1);
4566 record_full_arch_list_add_reg (regcache, tmp);
4567 record_full_arch_list_add_reg (regcache, tmp + 1);
4568 return 0;
4569
4570 /* These write VRT. */
4571 case 6: /* Load Vector for Shift Left Indexed */
4572 case 38: /* Load Vector for Shift Right Indexed */
4573 case 7: /* Load Vector Element Byte Indexed */
4574 case 39: /* Load Vector Element Halfword Indexed */
4575 case 71: /* Load Vector Element Word Indexed */
4576 case 103: /* Load Vector Indexed */
4577 case 359: /* Load Vector Indexed LRU */
4578 record_full_arch_list_add_reg (regcache,
4579 tdep->ppc_vr0_regnum + PPC_VRT (insn));
4580 return 0;
4581
4582 /* These write FRT. Update RA if 'update indexed.' */
4583 case 567: /* Load Floating-Point Single with Update Indexed */
4584 case 631: /* Load Floating-Point Double with Update Indexed */
4585 record_full_arch_list_add_reg (regcache,
4586 tdep->ppc_gp0_regnum + PPC_RA (insn));
4587 /* FALL-THROUGH */
4588 case 535: /* Load Floating-Point Single Indexed */
4589 case 599: /* Load Floating-Point Double Indexed */
4590 case 855: /* Load Floating-Point as Integer Word Algebraic Indexed */
4591 case 887: /* Load Floating-Point as Integer Word and Zero Indexed */
4592 record_full_arch_list_add_reg (regcache,
4593 tdep->ppc_fp0_regnum + PPC_FRT (insn));
4594 return 0;
4595
4596 case 791: /* Load Floating-Point Double Pair Indexed */
4597 tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
4598 record_full_arch_list_add_reg (regcache, tmp);
4599 record_full_arch_list_add_reg (regcache, tmp + 1);
4600 return 0;
4601
4602 case 179: /* Move To VSR Doubleword */
4603 case 211: /* Move To VSR Word Algebraic */
4604 case 243: /* Move To VSR Word and Zero */
4605 case 588: /* Load VSX Scalar Doubleword Indexed */
4606 case 524: /* Load VSX Scalar Single-Precision Indexed */
4607 case 76: /* Load VSX Scalar as Integer Word Algebraic Indexed */
4608 case 12: /* Load VSX Scalar as Integer Word and Zero Indexed */
4609 case 844: /* Load VSX Vector Doubleword*2 Indexed */
4610 case 332: /* Load VSX Vector Doubleword & Splat Indexed */
4611 case 780: /* Load VSX Vector Word*4 Indexed */
4612 case 268: /* Load VSX Vector Indexed */
4613 case 364: /* Load VSX Vector Word & Splat Indexed */
4614 case 812: /* Load VSX Vector Halfword*8 Indexed */
4615 case 876: /* Load VSX Vector Byte*16 Indexed */
4616 case 269: /* Load VSX Vector with Length */
4617 case 301: /* Load VSX Vector Left-justified with Length */
4618 case 781: /* Load VSX Scalar as Integer Byte & Zero Indexed */
4619 case 813: /* Load VSX Scalar as Integer Halfword & Zero Indexed */
4620 case 403: /* Move To VSR Word & Splat */
4621 case 435: /* Move To VSR Double Doubleword */
4622 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
4623 return 0;
4624
4625 /* These write RA. Update CR if RC is set. */
4626 case 24: /* Shift Left Word */
4627 case 26: /* Count Leading Zeros Word */
4628 case 27: /* Shift Left Doubleword */
4629 case 28: /* AND */
4630 case 58: /* Count Leading Zeros Doubleword */
4631 case 60: /* AND with Complement */
4632 case 124: /* NOR */
4633 case 284: /* Equivalent */
4634 case 316: /* XOR */
4635 case 476: /* NAND */
4636 case 412: /* OR with Complement */
4637 case 444: /* OR */
4638 case 536: /* Shift Right Word */
4639 case 539: /* Shift Right Doubleword */
4640 case 922: /* Extend Sign Halfword */
4641 case 954: /* Extend Sign Byte */
4642 case 986: /* Extend Sign Word */
4643 case 538: /* Count Trailing Zeros Word */
4644 case 570: /* Count Trailing Zeros Doubleword */
4645 case 890: /* Extend-Sign Word and Shift Left Immediate (445) */
4646 case 890 | 1: /* Extend-Sign Word and Shift Left Immediate (445) */
4647
4648 if (ext == 444 && tdep->ppc_ppr_regnum >= 0
4649 && (PPC_RS (insn) == PPC_RA (insn))
4650 && (PPC_RA (insn) == PPC_RB (insn))
4651 && !PPC_RC (insn))
4652 {
4653 /* or Rx,Rx,Rx alters PRI in PPR. */
4654 record_full_arch_list_add_reg (regcache, tdep->ppc_ppr_regnum);
4655 return 0;
4656 }
4657
4658 if (PPC_RC (insn))
4659 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4660 record_full_arch_list_add_reg (regcache,
4661 tdep->ppc_gp0_regnum + PPC_RA (insn));
4662 return 0;
4663
4664 /* Store memory. */
4665 case 181: /* Store Doubleword with Update Indexed */
4666 case 183: /* Store Word with Update Indexed */
4667 case 247: /* Store Byte with Update Indexed */
4668 case 439: /* Store Half Word with Update Indexed */
4669 case 695: /* Store Floating-Point Single with Update Indexed */
4670 case 759: /* Store Floating-Point Double with Update Indexed */
4671 record_full_arch_list_add_reg (regcache,
4672 tdep->ppc_gp0_regnum + PPC_RA (insn));
4673 /* FALL-THROUGH */
4674 case 135: /* Store Vector Element Byte Indexed */
4675 case 167: /* Store Vector Element Halfword Indexed */
4676 case 199: /* Store Vector Element Word Indexed */
4677 case 231: /* Store Vector Indexed */
4678 case 487: /* Store Vector Indexed LRU */
4679 case 716: /* Store VSX Scalar Doubleword Indexed */
4680 case 140: /* Store VSX Scalar as Integer Word Indexed */
4681 case 652: /* Store VSX Scalar Single-Precision Indexed */
4682 case 972: /* Store VSX Vector Doubleword*2 Indexed */
4683 case 908: /* Store VSX Vector Word*4 Indexed */
4684 case 149: /* Store Doubleword Indexed */
4685 case 151: /* Store Word Indexed */
4686 case 215: /* Store Byte Indexed */
4687 case 407: /* Store Half Word Indexed */
4688 case 694: /* Store Byte Conditional Indexed */
4689 case 726: /* Store Halfword Conditional Indexed */
4690 case 150: /* Store Word Conditional Indexed */
4691 case 214: /* Store Doubleword Conditional Indexed */
4692 case 182: /* Store Quadword Conditional Indexed */
4693 case 662: /* Store Word Byte-Reverse Indexed */
4694 case 918: /* Store Halfword Byte-Reverse Indexed */
4695 case 660: /* Store Doubleword Byte-Reverse Indexed */
4696 case 663: /* Store Floating-Point Single Indexed */
4697 case 727: /* Store Floating-Point Double Indexed */
4698 case 919: /* Store Floating-Point Double Pair Indexed */
4699 case 983: /* Store Floating-Point as Integer Word Indexed */
4700 case 396: /* Store VSX Vector Indexed */
4701 case 940: /* Store VSX Vector Halfword*8 Indexed */
4702 case 1004: /* Store VSX Vector Byte*16 Indexed */
4703 case 909: /* Store VSX Scalar as Integer Byte Indexed */
4704 case 941: /* Store VSX Scalar as Integer Halfword Indexed */
4705 if (ext == 694 || ext == 726 || ext == 150 || ext == 214 || ext == 182)
4706 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4707
4708 ra = 0;
4709 if (PPC_RA (insn) != 0)
4710 regcache_raw_read_unsigned (regcache,
4711 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4712 regcache_raw_read_unsigned (regcache,
4713 tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4714 ea = ra + rb;
4715
4716 switch (ext)
4717 {
4718 case 183: /* Store Word with Update Indexed */
4719 case 199: /* Store Vector Element Word Indexed */
4720 case 140: /* Store VSX Scalar as Integer Word Indexed */
4721 case 652: /* Store VSX Scalar Single-Precision Indexed */
4722 case 151: /* Store Word Indexed */
4723 case 150: /* Store Word Conditional Indexed */
4724 case 662: /* Store Word Byte-Reverse Indexed */
4725 case 663: /* Store Floating-Point Single Indexed */
4726 case 695: /* Store Floating-Point Single with Update Indexed */
4727 case 983: /* Store Floating-Point as Integer Word Indexed */
4728 size = 4;
4729 break;
4730 case 247: /* Store Byte with Update Indexed */
4731 case 135: /* Store Vector Element Byte Indexed */
4732 case 215: /* Store Byte Indexed */
4733 case 694: /* Store Byte Conditional Indexed */
4734 case 909: /* Store VSX Scalar as Integer Byte Indexed */
4735 size = 1;
4736 break;
4737 case 439: /* Store Halfword with Update Indexed */
4738 case 167: /* Store Vector Element Halfword Indexed */
4739 case 407: /* Store Halfword Indexed */
4740 case 726: /* Store Halfword Conditional Indexed */
4741 case 918: /* Store Halfword Byte-Reverse Indexed */
4742 case 941: /* Store VSX Scalar as Integer Halfword Indexed */
4743 size = 2;
4744 break;
4745 case 181: /* Store Doubleword with Update Indexed */
4746 case 716: /* Store VSX Scalar Doubleword Indexed */
4747 case 149: /* Store Doubleword Indexed */
4748 case 214: /* Store Doubleword Conditional Indexed */
4749 case 660: /* Store Doubleword Byte-Reverse Indexed */
4750 case 727: /* Store Floating-Point Double Indexed */
4751 case 759: /* Store Floating-Point Double with Update Indexed */
4752 size = 8;
4753 break;
4754 case 972: /* Store VSX Vector Doubleword*2 Indexed */
4755 case 908: /* Store VSX Vector Word*4 Indexed */
4756 case 182: /* Store Quadword Conditional Indexed */
4757 case 231: /* Store Vector Indexed */
4758 case 487: /* Store Vector Indexed LRU */
4759 case 919: /* Store Floating-Point Double Pair Indexed */
4760 case 396: /* Store VSX Vector Indexed */
4761 case 940: /* Store VSX Vector Halfword*8 Indexed */
4762 case 1004: /* Store VSX Vector Byte*16 Indexed */
4763 size = 16;
4764 break;
4765 default:
4766 gdb_assert (0);
4767 }
4768
4769 /* Align address for Store Vector instructions. */
4770 switch (ext)
4771 {
4772 case 167: /* Store Vector Element Halfword Indexed */
4773 addr = addr & ~0x1ULL;
4774 break;
4775
4776 case 199: /* Store Vector Element Word Indexed */
4777 addr = addr & ~0x3ULL;
4778 break;
4779
4780 case 231: /* Store Vector Indexed */
4781 case 487: /* Store Vector Indexed LRU */
4782 addr = addr & ~0xfULL;
4783 break;
4784 }
4785
4786 record_full_arch_list_add_mem (addr, size);
4787 return 0;
4788
4789 case 397: /* Store VSX Vector with Length */
4790 case 429: /* Store VSX Vector Left-justified with Length */
4791 ra = 0;
4792 if (PPC_RA (insn) != 0)
4793 regcache_raw_read_unsigned (regcache,
4794 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4795 ea = ra;
4796 regcache_raw_read_unsigned (regcache,
4797 tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4798 /* Store up to 16 bytes. */
4799 nb = (rb & 0xff) > 16 ? 16 : (rb & 0xff);
4800 if (nb > 0)
4801 record_full_arch_list_add_mem (ea, nb);
4802 return 0;
4803
4804 case 710: /* Store Word Atomic */
4805 case 742: /* Store Doubleword Atomic */
4806 ra = 0;
4807 if (PPC_RA (insn) != 0)
4808 regcache_raw_read_unsigned (regcache,
4809 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4810 ea = ra;
4811 switch (ext)
4812 {
4813 case 710: /* Store Word Atomic */
4814 size = 8;
4815 break;
4816 case 742: /* Store Doubleword Atomic */
4817 size = 16;
4818 break;
4819 default:
4820 gdb_assert (0);
4821 }
4822 record_full_arch_list_add_mem (ea, size);
4823 return 0;
4824
4825 case 725: /* Store String Word Immediate */
4826 ra = 0;
4827 if (PPC_RA (insn) != 0)
4828 regcache_raw_read_unsigned (regcache,
4829 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4830 ea += ra;
4831
4832 nb = PPC_NB (insn);
4833 if (nb == 0)
4834 nb = 32;
4835
4836 record_full_arch_list_add_mem (ea, nb);
4837
4838 return 0;
4839
4840 case 661: /* Store String Word Indexed */
4841 ra = 0;
4842 if (PPC_RA (insn) != 0)
4843 regcache_raw_read_unsigned (regcache,
4844 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4845 ea += ra;
4846
4847 regcache_raw_read_unsigned (regcache, tdep->ppc_xer_regnum, &xer);
4848 nb = PPC_XER_NB (xer);
4849
4850 if (nb != 0)
4851 {
4852 regcache_raw_read_unsigned (regcache,
4853 tdep->ppc_gp0_regnum + PPC_RB (insn),
4854 &rb);
4855 ea += rb;
4856 record_full_arch_list_add_mem (ea, nb);
4857 }
4858
4859 return 0;
4860
4861 case 467: /* Move To Special Purpose Register */
4862 switch (PPC_SPR (insn))
4863 {
4864 case 1: /* XER */
4865 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4866 return 0;
4867 case 3: /* DSCR */
4868 if (tdep->ppc_dscr_regnum >= 0)
4869 record_full_arch_list_add_reg (regcache, tdep->ppc_dscr_regnum);
4870 return 0;
4871 case 8: /* LR */
4872 record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
4873 return 0;
4874 case 9: /* CTR */
4875 record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
4876 return 0;
4877 case 256: /* VRSAVE */
4878 record_full_arch_list_add_reg (regcache, tdep->ppc_vrsave_regnum);
4879 return 0;
4880 case 815: /* TAR */
4881 if (tdep->ppc_tar_regnum >= 0)
4882 record_full_arch_list_add_reg (regcache, tdep->ppc_tar_regnum);
4883 return 0;
4884 case 896:
4885 case 898: /* PPR */
4886 if (tdep->ppc_ppr_regnum >= 0)
4887 record_full_arch_list_add_reg (regcache, tdep->ppc_ppr_regnum);
4888 return 0;
4889 }
4890
4891 goto UNKNOWN_OP;
4892
4893 case 147: /* Move To Split Little Endian */
4894 record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
4895 return 0;
4896
4897 case 512: /* Move to Condition Register from XER */
4898 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4899 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
4900 return 0;
4901
4902 case 4: /* Trap Word */
4903 case 68: /* Trap Doubleword */
4904 case 430: /* Clear BHRB */
4905 case 598: /* Synchronize */
4906 case 62: /* Wait for Interrupt */
4907 case 30: /* Wait */
4908 case 22: /* Instruction Cache Block Touch */
4909 case 854: /* Enforce In-order Execution of I/O */
4910 case 246: /* Data Cache Block Touch for Store */
4911 case 54: /* Data Cache Block Store */
4912 case 86: /* Data Cache Block Flush */
4913 case 278: /* Data Cache Block Touch */
4914 case 758: /* Data Cache Block Allocate */
4915 case 982: /* Instruction Cache Block Invalidate */
4916 case 774: /* Copy */
4917 case 838: /* CP_Abort */
4918 return 0;
4919
4920 case 654: /* Transaction Begin */
4921 case 686: /* Transaction End */
4922 case 750: /* Transaction Suspend or Resume */
4923 case 782: /* Transaction Abort Word Conditional */
4924 case 814: /* Transaction Abort Doubleword Conditional */
4925 case 846: /* Transaction Abort Word Conditional Immediate */
4926 case 878: /* Transaction Abort Doubleword Conditional Immediate */
4927 case 910: /* Transaction Abort */
4928 record_full_arch_list_add_reg (regcache, tdep->ppc_ps_regnum);
4929 /* FALL-THROUGH */
4930 case 718: /* Transaction Check */
4931 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4932 return 0;
4933
4934 case 1014: /* Data Cache Block set to Zero */
4935 if (target_auxv_search (current_top_target (), AT_DCACHEBSIZE, &at_dcsz) <= 0
4936 || at_dcsz == 0)
4937 at_dcsz = 128; /* Assume 128-byte cache line size (POWER8) */
4938
4939 ra = 0;
4940 if (PPC_RA (insn) != 0)
4941 regcache_raw_read_unsigned (regcache,
4942 tdep->ppc_gp0_regnum + PPC_RA (insn), &ra);
4943 regcache_raw_read_unsigned (regcache,
4944 tdep->ppc_gp0_regnum + PPC_RB (insn), &rb);
4945 ea = (ra + rb) & ~((ULONGEST) (at_dcsz - 1));
4946 record_full_arch_list_add_mem (ea, at_dcsz);
4947 return 0;
4948 }
4949
4950 UNKNOWN_OP:
4951 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4952 "at %s, 31-%d.\n", insn, paddress (gdbarch, addr), ext);
4953 return -1;
4954 }
4955
4956 /* Parse and record instructions of primary opcode-59 at ADDR.
4957 Return 0 if successful. */
4958
4959 static int
4960 ppc_process_record_op59 (struct gdbarch *gdbarch, struct regcache *regcache,
4961 CORE_ADDR addr, uint32_t insn)
4962 {
4963 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4964 int ext = PPC_EXTOP (insn);
4965
4966 switch (ext & 0x1f)
4967 {
4968 case 18: /* Floating Divide */
4969 case 20: /* Floating Subtract */
4970 case 21: /* Floating Add */
4971 case 22: /* Floating Square Root */
4972 case 24: /* Floating Reciprocal Estimate */
4973 case 25: /* Floating Multiply */
4974 case 26: /* Floating Reciprocal Square Root Estimate */
4975 case 28: /* Floating Multiply-Subtract */
4976 case 29: /* Floating Multiply-Add */
4977 case 30: /* Floating Negative Multiply-Subtract */
4978 case 31: /* Floating Negative Multiply-Add */
4979 record_full_arch_list_add_reg (regcache,
4980 tdep->ppc_fp0_regnum + PPC_FRT (insn));
4981 if (PPC_RC (insn))
4982 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
4983 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
4984
4985 return 0;
4986 }
4987
4988 switch (ext)
4989 {
4990 case 2: /* DFP Add */
4991 case 3: /* DFP Quantize */
4992 case 34: /* DFP Multiply */
4993 case 35: /* DFP Reround */
4994 case 67: /* DFP Quantize Immediate */
4995 case 99: /* DFP Round To FP Integer With Inexact */
4996 case 227: /* DFP Round To FP Integer Without Inexact */
4997 case 258: /* DFP Convert To DFP Long! */
4998 case 290: /* DFP Convert To Fixed */
4999 case 514: /* DFP Subtract */
5000 case 546: /* DFP Divide */
5001 case 770: /* DFP Round To DFP Short! */
5002 case 802: /* DFP Convert From Fixed */
5003 case 834: /* DFP Encode BCD To DPD */
5004 if (PPC_RC (insn))
5005 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5006 record_full_arch_list_add_reg (regcache,
5007 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5008 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5009 return 0;
5010
5011 case 130: /* DFP Compare Ordered */
5012 case 162: /* DFP Test Exponent */
5013 case 194: /* DFP Test Data Class */
5014 case 226: /* DFP Test Data Group */
5015 case 642: /* DFP Compare Unordered */
5016 case 674: /* DFP Test Significance */
5017 case 675: /* DFP Test Significance Immediate */
5018 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5019 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5020 return 0;
5021
5022 case 66: /* DFP Shift Significand Left Immediate */
5023 case 98: /* DFP Shift Significand Right Immediate */
5024 case 322: /* DFP Decode DPD To BCD */
5025 case 354: /* DFP Extract Biased Exponent */
5026 case 866: /* DFP Insert Biased Exponent */
5027 record_full_arch_list_add_reg (regcache,
5028 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5029 if (PPC_RC (insn))
5030 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5031 return 0;
5032
5033 case 846: /* Floating Convert From Integer Doubleword Single */
5034 case 974: /* Floating Convert From Integer Doubleword Unsigned
5035 Single */
5036 record_full_arch_list_add_reg (regcache,
5037 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5038 if (PPC_RC (insn))
5039 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5040 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5041
5042 return 0;
5043 }
5044
5045 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5046 "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
5047 return -1;
5048 }
5049
5050 /* Parse and record instructions of primary opcode-60 at ADDR.
5051 Return 0 if successful. */
5052
5053 static int
5054 ppc_process_record_op60 (struct gdbarch *gdbarch, struct regcache *regcache,
5055 CORE_ADDR addr, uint32_t insn)
5056 {
5057 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5058 int ext = PPC_EXTOP (insn);
5059
5060 switch (ext >> 2)
5061 {
5062 case 0: /* VSX Scalar Add Single-Precision */
5063 case 32: /* VSX Scalar Add Double-Precision */
5064 case 24: /* VSX Scalar Divide Single-Precision */
5065 case 56: /* VSX Scalar Divide Double-Precision */
5066 case 176: /* VSX Scalar Copy Sign Double-Precision */
5067 case 33: /* VSX Scalar Multiply-Add Double-Precision */
5068 case 41: /* ditto */
5069 case 1: /* VSX Scalar Multiply-Add Single-Precision */
5070 case 9: /* ditto */
5071 case 160: /* VSX Scalar Maximum Double-Precision */
5072 case 168: /* VSX Scalar Minimum Double-Precision */
5073 case 49: /* VSX Scalar Multiply-Subtract Double-Precision */
5074 case 57: /* ditto */
5075 case 17: /* VSX Scalar Multiply-Subtract Single-Precision */
5076 case 25: /* ditto */
5077 case 48: /* VSX Scalar Multiply Double-Precision */
5078 case 16: /* VSX Scalar Multiply Single-Precision */
5079 case 161: /* VSX Scalar Negative Multiply-Add Double-Precision */
5080 case 169: /* ditto */
5081 case 129: /* VSX Scalar Negative Multiply-Add Single-Precision */
5082 case 137: /* ditto */
5083 case 177: /* VSX Scalar Negative Multiply-Subtract Double-Precision */
5084 case 185: /* ditto */
5085 case 145: /* VSX Scalar Negative Multiply-Subtract Single-Precision */
5086 case 153: /* ditto */
5087 case 40: /* VSX Scalar Subtract Double-Precision */
5088 case 8: /* VSX Scalar Subtract Single-Precision */
5089 case 96: /* VSX Vector Add Double-Precision */
5090 case 64: /* VSX Vector Add Single-Precision */
5091 case 120: /* VSX Vector Divide Double-Precision */
5092 case 88: /* VSX Vector Divide Single-Precision */
5093 case 97: /* VSX Vector Multiply-Add Double-Precision */
5094 case 105: /* ditto */
5095 case 65: /* VSX Vector Multiply-Add Single-Precision */
5096 case 73: /* ditto */
5097 case 224: /* VSX Vector Maximum Double-Precision */
5098 case 192: /* VSX Vector Maximum Single-Precision */
5099 case 232: /* VSX Vector Minimum Double-Precision */
5100 case 200: /* VSX Vector Minimum Single-Precision */
5101 case 113: /* VSX Vector Multiply-Subtract Double-Precision */
5102 case 121: /* ditto */
5103 case 81: /* VSX Vector Multiply-Subtract Single-Precision */
5104 case 89: /* ditto */
5105 case 112: /* VSX Vector Multiply Double-Precision */
5106 case 80: /* VSX Vector Multiply Single-Precision */
5107 case 225: /* VSX Vector Negative Multiply-Add Double-Precision */
5108 case 233: /* ditto */
5109 case 193: /* VSX Vector Negative Multiply-Add Single-Precision */
5110 case 201: /* ditto */
5111 case 241: /* VSX Vector Negative Multiply-Subtract Double-Precision */
5112 case 249: /* ditto */
5113 case 209: /* VSX Vector Negative Multiply-Subtract Single-Precision */
5114 case 217: /* ditto */
5115 case 104: /* VSX Vector Subtract Double-Precision */
5116 case 72: /* VSX Vector Subtract Single-Precision */
5117 case 128: /* VSX Scalar Maximum Type-C Double-Precision */
5118 case 136: /* VSX Scalar Minimum Type-C Double-Precision */
5119 case 144: /* VSX Scalar Maximum Type-J Double-Precision */
5120 case 152: /* VSX Scalar Minimum Type-J Double-Precision */
5121 case 3: /* VSX Scalar Compare Equal Double-Precision */
5122 case 11: /* VSX Scalar Compare Greater Than Double-Precision */
5123 case 19: /* VSX Scalar Compare Greater Than or Equal
5124 Double-Precision */
5125 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5126 /* FALL-THROUGH */
5127 case 240: /* VSX Vector Copy Sign Double-Precision */
5128 case 208: /* VSX Vector Copy Sign Single-Precision */
5129 case 130: /* VSX Logical AND */
5130 case 138: /* VSX Logical AND with Complement */
5131 case 186: /* VSX Logical Equivalence */
5132 case 178: /* VSX Logical NAND */
5133 case 170: /* VSX Logical OR with Complement */
5134 case 162: /* VSX Logical NOR */
5135 case 146: /* VSX Logical OR */
5136 case 154: /* VSX Logical XOR */
5137 case 18: /* VSX Merge High Word */
5138 case 50: /* VSX Merge Low Word */
5139 case 10: /* VSX Permute Doubleword Immediate (DM=0) */
5140 case 10 | 0x20: /* VSX Permute Doubleword Immediate (DM=1) */
5141 case 10 | 0x40: /* VSX Permute Doubleword Immediate (DM=2) */
5142 case 10 | 0x60: /* VSX Permute Doubleword Immediate (DM=3) */
5143 case 2: /* VSX Shift Left Double by Word Immediate (SHW=0) */
5144 case 2 | 0x20: /* VSX Shift Left Double by Word Immediate (SHW=1) */
5145 case 2 | 0x40: /* VSX Shift Left Double by Word Immediate (SHW=2) */
5146 case 2 | 0x60: /* VSX Shift Left Double by Word Immediate (SHW=3) */
5147 case 216: /* VSX Vector Insert Exponent Single-Precision */
5148 case 248: /* VSX Vector Insert Exponent Double-Precision */
5149 case 26: /* VSX Vector Permute */
5150 case 58: /* VSX Vector Permute Right-indexed */
5151 case 213: /* VSX Vector Test Data Class Single-Precision (DC=0) */
5152 case 213 | 0x8: /* VSX Vector Test Data Class Single-Precision (DC=1) */
5153 case 245: /* VSX Vector Test Data Class Double-Precision (DC=0) */
5154 case 245 | 0x8: /* VSX Vector Test Data Class Double-Precision (DC=1) */
5155 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5156 return 0;
5157
5158 case 61: /* VSX Scalar Test for software Divide Double-Precision */
5159 case 125: /* VSX Vector Test for software Divide Double-Precision */
5160 case 93: /* VSX Vector Test for software Divide Single-Precision */
5161 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5162 return 0;
5163
5164 case 35: /* VSX Scalar Compare Unordered Double-Precision */
5165 case 43: /* VSX Scalar Compare Ordered Double-Precision */
5166 case 59: /* VSX Scalar Compare Exponents Double-Precision */
5167 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5168 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5169 return 0;
5170 }
5171
5172 switch ((ext >> 2) & 0x7f) /* Mask out Rc-bit. */
5173 {
5174 case 99: /* VSX Vector Compare Equal To Double-Precision */
5175 case 67: /* VSX Vector Compare Equal To Single-Precision */
5176 case 115: /* VSX Vector Compare Greater Than or
5177 Equal To Double-Precision */
5178 case 83: /* VSX Vector Compare Greater Than or
5179 Equal To Single-Precision */
5180 case 107: /* VSX Vector Compare Greater Than Double-Precision */
5181 case 75: /* VSX Vector Compare Greater Than Single-Precision */
5182 if (PPC_Rc (insn))
5183 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5184 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5185 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5186 return 0;
5187 }
5188
5189 switch (ext >> 1)
5190 {
5191 case 265: /* VSX Scalar round Double-Precision to
5192 Single-Precision and Convert to
5193 Single-Precision format */
5194 case 344: /* VSX Scalar truncate Double-Precision to
5195 Integer and Convert to Signed Integer
5196 Doubleword format with Saturate */
5197 case 88: /* VSX Scalar truncate Double-Precision to
5198 Integer and Convert to Signed Integer Word
5199 Format with Saturate */
5200 case 328: /* VSX Scalar truncate Double-Precision integer
5201 and Convert to Unsigned Integer Doubleword
5202 Format with Saturate */
5203 case 72: /* VSX Scalar truncate Double-Precision to
5204 Integer and Convert to Unsigned Integer Word
5205 Format with Saturate */
5206 case 329: /* VSX Scalar Convert Single-Precision to
5207 Double-Precision format */
5208 case 376: /* VSX Scalar Convert Signed Integer
5209 Doubleword to floating-point format and
5210 Round to Double-Precision format */
5211 case 312: /* VSX Scalar Convert Signed Integer
5212 Doubleword to floating-point format and
5213 round to Single-Precision */
5214 case 360: /* VSX Scalar Convert Unsigned Integer
5215 Doubleword to floating-point format and
5216 Round to Double-Precision format */
5217 case 296: /* VSX Scalar Convert Unsigned Integer
5218 Doubleword to floating-point format and
5219 Round to Single-Precision */
5220 case 73: /* VSX Scalar Round to Double-Precision Integer
5221 Using Round to Nearest Away */
5222 case 107: /* VSX Scalar Round to Double-Precision Integer
5223 Exact using Current rounding mode */
5224 case 121: /* VSX Scalar Round to Double-Precision Integer
5225 Using Round toward -Infinity */
5226 case 105: /* VSX Scalar Round to Double-Precision Integer
5227 Using Round toward +Infinity */
5228 case 89: /* VSX Scalar Round to Double-Precision Integer
5229 Using Round toward Zero */
5230 case 90: /* VSX Scalar Reciprocal Estimate Double-Precision */
5231 case 26: /* VSX Scalar Reciprocal Estimate Single-Precision */
5232 case 281: /* VSX Scalar Round to Single-Precision */
5233 case 74: /* VSX Scalar Reciprocal Square Root Estimate
5234 Double-Precision */
5235 case 10: /* VSX Scalar Reciprocal Square Root Estimate
5236 Single-Precision */
5237 case 75: /* VSX Scalar Square Root Double-Precision */
5238 case 11: /* VSX Scalar Square Root Single-Precision */
5239 case 393: /* VSX Vector round Double-Precision to
5240 Single-Precision and Convert to
5241 Single-Precision format */
5242 case 472: /* VSX Vector truncate Double-Precision to
5243 Integer and Convert to Signed Integer
5244 Doubleword format with Saturate */
5245 case 216: /* VSX Vector truncate Double-Precision to
5246 Integer and Convert to Signed Integer Word
5247 Format with Saturate */
5248 case 456: /* VSX Vector truncate Double-Precision to
5249 Integer and Convert to Unsigned Integer
5250 Doubleword format with Saturate */
5251 case 200: /* VSX Vector truncate Double-Precision to
5252 Integer and Convert to Unsigned Integer Word
5253 Format with Saturate */
5254 case 457: /* VSX Vector Convert Single-Precision to
5255 Double-Precision format */
5256 case 408: /* VSX Vector truncate Single-Precision to
5257 Integer and Convert to Signed Integer
5258 Doubleword format with Saturate */
5259 case 152: /* VSX Vector truncate Single-Precision to
5260 Integer and Convert to Signed Integer Word
5261 Format with Saturate */
5262 case 392: /* VSX Vector truncate Single-Precision to
5263 Integer and Convert to Unsigned Integer
5264 Doubleword format with Saturate */
5265 case 136: /* VSX Vector truncate Single-Precision to
5266 Integer and Convert to Unsigned Integer Word
5267 Format with Saturate */
5268 case 504: /* VSX Vector Convert and round Signed Integer
5269 Doubleword to Double-Precision format */
5270 case 440: /* VSX Vector Convert and round Signed Integer
5271 Doubleword to Single-Precision format */
5272 case 248: /* VSX Vector Convert Signed Integer Word to
5273 Double-Precision format */
5274 case 184: /* VSX Vector Convert and round Signed Integer
5275 Word to Single-Precision format */
5276 case 488: /* VSX Vector Convert and round Unsigned
5277 Integer Doubleword to Double-Precision format */
5278 case 424: /* VSX Vector Convert and round Unsigned
5279 Integer Doubleword to Single-Precision format */
5280 case 232: /* VSX Vector Convert and round Unsigned
5281 Integer Word to Double-Precision format */
5282 case 168: /* VSX Vector Convert and round Unsigned
5283 Integer Word to Single-Precision format */
5284 case 201: /* VSX Vector Round to Double-Precision
5285 Integer using round to Nearest Away */
5286 case 235: /* VSX Vector Round to Double-Precision
5287 Integer Exact using Current rounding mode */
5288 case 249: /* VSX Vector Round to Double-Precision
5289 Integer using round toward -Infinity */
5290 case 233: /* VSX Vector Round to Double-Precision
5291 Integer using round toward +Infinity */
5292 case 217: /* VSX Vector Round to Double-Precision
5293 Integer using round toward Zero */
5294 case 218: /* VSX Vector Reciprocal Estimate Double-Precision */
5295 case 154: /* VSX Vector Reciprocal Estimate Single-Precision */
5296 case 137: /* VSX Vector Round to Single-Precision Integer
5297 Using Round to Nearest Away */
5298 case 171: /* VSX Vector Round to Single-Precision Integer
5299 Exact Using Current rounding mode */
5300 case 185: /* VSX Vector Round to Single-Precision Integer
5301 Using Round toward -Infinity */
5302 case 169: /* VSX Vector Round to Single-Precision Integer
5303 Using Round toward +Infinity */
5304 case 153: /* VSX Vector Round to Single-Precision Integer
5305 Using round toward Zero */
5306 case 202: /* VSX Vector Reciprocal Square Root Estimate
5307 Double-Precision */
5308 case 138: /* VSX Vector Reciprocal Square Root Estimate
5309 Single-Precision */
5310 case 203: /* VSX Vector Square Root Double-Precision */
5311 case 139: /* VSX Vector Square Root Single-Precision */
5312 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5313 /* FALL-THROUGH */
5314 case 345: /* VSX Scalar Absolute Value Double-Precision */
5315 case 267: /* VSX Scalar Convert Scalar Single-Precision to
5316 Vector Single-Precision format Non-signalling */
5317 case 331: /* VSX Scalar Convert Single-Precision to
5318 Double-Precision format Non-signalling */
5319 case 361: /* VSX Scalar Negative Absolute Value Double-Precision */
5320 case 377: /* VSX Scalar Negate Double-Precision */
5321 case 473: /* VSX Vector Absolute Value Double-Precision */
5322 case 409: /* VSX Vector Absolute Value Single-Precision */
5323 case 489: /* VSX Vector Negative Absolute Value Double-Precision */
5324 case 425: /* VSX Vector Negative Absolute Value Single-Precision */
5325 case 505: /* VSX Vector Negate Double-Precision */
5326 case 441: /* VSX Vector Negate Single-Precision */
5327 case 164: /* VSX Splat Word */
5328 case 165: /* VSX Vector Extract Unsigned Word */
5329 case 181: /* VSX Vector Insert Word */
5330 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5331 return 0;
5332
5333 case 298: /* VSX Scalar Test Data Class Single-Precision */
5334 case 362: /* VSX Scalar Test Data Class Double-Precision */
5335 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5336 /* FALL-THROUGH */
5337 case 106: /* VSX Scalar Test for software Square Root
5338 Double-Precision */
5339 case 234: /* VSX Vector Test for software Square Root
5340 Double-Precision */
5341 case 170: /* VSX Vector Test for software Square Root
5342 Single-Precision */
5343 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5344 return 0;
5345
5346 case 347:
5347 switch (PPC_FIELD (insn, 11, 5))
5348 {
5349 case 0: /* VSX Scalar Extract Exponent Double-Precision */
5350 case 1: /* VSX Scalar Extract Significand Double-Precision */
5351 record_full_arch_list_add_reg (regcache,
5352 tdep->ppc_gp0_regnum + PPC_RT (insn));
5353 return 0;
5354 case 16: /* VSX Scalar Convert Half-Precision format to
5355 Double-Precision format */
5356 case 17: /* VSX Scalar round & Convert Double-Precision format
5357 to Half-Precision format */
5358 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5359 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5360 return 0;
5361 }
5362 break;
5363
5364 case 475:
5365 switch (PPC_FIELD (insn, 11, 5))
5366 {
5367 case 24: /* VSX Vector Convert Half-Precision format to
5368 Single-Precision format */
5369 case 25: /* VSX Vector round and Convert Single-Precision format
5370 to Half-Precision format */
5371 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5372 /* FALL-THROUGH */
5373 case 0: /* VSX Vector Extract Exponent Double-Precision */
5374 case 1: /* VSX Vector Extract Significand Double-Precision */
5375 case 7: /* VSX Vector Byte-Reverse Halfword */
5376 case 8: /* VSX Vector Extract Exponent Single-Precision */
5377 case 9: /* VSX Vector Extract Significand Single-Precision */
5378 case 15: /* VSX Vector Byte-Reverse Word */
5379 case 23: /* VSX Vector Byte-Reverse Doubleword */
5380 case 31: /* VSX Vector Byte-Reverse Quadword */
5381 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5382 return 0;
5383 }
5384 break;
5385 }
5386
5387 switch (ext)
5388 {
5389 case 360: /* VSX Vector Splat Immediate Byte */
5390 if (PPC_FIELD (insn, 11, 2) == 0)
5391 {
5392 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5393 return 0;
5394 }
5395 break;
5396 case 918: /* VSX Scalar Insert Exponent Double-Precision */
5397 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5398 return 0;
5399 }
5400
5401 if (((ext >> 3) & 0x3) == 3) /* VSX Select */
5402 {
5403 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5404 return 0;
5405 }
5406
5407 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5408 "at %s, 60-%d.\n", insn, paddress (gdbarch, addr), ext);
5409 return -1;
5410 }
5411
5412 /* Parse and record instructions of primary opcode-61 at ADDR.
5413 Return 0 if successful. */
5414
5415 static int
5416 ppc_process_record_op61 (struct gdbarch *gdbarch, struct regcache *regcache,
5417 CORE_ADDR addr, uint32_t insn)
5418 {
5419 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5420 ULONGEST ea = 0;
5421 int size;
5422
5423 switch (insn & 0x3)
5424 {
5425 case 0: /* Store Floating-Point Double Pair */
5426 case 2: /* Store VSX Scalar Doubleword */
5427 case 3: /* Store VSX Scalar Single */
5428 if (PPC_RA (insn) != 0)
5429 regcache_raw_read_unsigned (regcache,
5430 tdep->ppc_gp0_regnum + PPC_RA (insn),
5431 &ea);
5432 ea += PPC_DS (insn) << 2;
5433 switch (insn & 0x3)
5434 {
5435 case 0: /* Store Floating-Point Double Pair */
5436 size = 16;
5437 break;
5438 case 2: /* Store VSX Scalar Doubleword */
5439 size = 8;
5440 break;
5441 case 3: /* Store VSX Scalar Single */
5442 size = 4;
5443 break;
5444 default:
5445 gdb_assert (0);
5446 }
5447 record_full_arch_list_add_mem (ea, size);
5448 return 0;
5449 }
5450
5451 switch (insn & 0x7)
5452 {
5453 case 1: /* Load VSX Vector */
5454 ppc_record_vsr (regcache, tdep, PPC_XT (insn));
5455 return 0;
5456 case 5: /* Store VSX Vector */
5457 if (PPC_RA (insn) != 0)
5458 regcache_raw_read_unsigned (regcache,
5459 tdep->ppc_gp0_regnum + PPC_RA (insn),
5460 &ea);
5461 ea += PPC_DQ (insn) << 4;
5462 record_full_arch_list_add_mem (ea, 16);
5463 return 0;
5464 }
5465
5466 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5467 "at %s.\n", insn, paddress (gdbarch, addr));
5468 return -1;
5469 }
5470
5471 /* Parse and record instructions of primary opcode-63 at ADDR.
5472 Return 0 if successful. */
5473
5474 static int
5475 ppc_process_record_op63 (struct gdbarch *gdbarch, struct regcache *regcache,
5476 CORE_ADDR addr, uint32_t insn)
5477 {
5478 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5479 int ext = PPC_EXTOP (insn);
5480 int tmp;
5481
5482 switch (ext & 0x1f)
5483 {
5484 case 18: /* Floating Divide */
5485 case 20: /* Floating Subtract */
5486 case 21: /* Floating Add */
5487 case 22: /* Floating Square Root */
5488 case 24: /* Floating Reciprocal Estimate */
5489 case 25: /* Floating Multiply */
5490 case 26: /* Floating Reciprocal Square Root Estimate */
5491 case 28: /* Floating Multiply-Subtract */
5492 case 29: /* Floating Multiply-Add */
5493 case 30: /* Floating Negative Multiply-Subtract */
5494 case 31: /* Floating Negative Multiply-Add */
5495 record_full_arch_list_add_reg (regcache,
5496 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5497 if (PPC_RC (insn))
5498 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5499 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5500 return 0;
5501
5502 case 23: /* Floating Select */
5503 record_full_arch_list_add_reg (regcache,
5504 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5505 if (PPC_RC (insn))
5506 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5507 return 0;
5508 }
5509
5510 switch (ext & 0xff)
5511 {
5512 case 5: /* VSX Scalar Round to Quad-Precision Integer */
5513 case 37: /* VSX Scalar Round Quad-Precision to Double-Extended
5514 Precision */
5515 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5516 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5517 return 0;
5518 }
5519
5520 switch (ext)
5521 {
5522 case 2: /* DFP Add Quad */
5523 case 3: /* DFP Quantize Quad */
5524 case 34: /* DFP Multiply Quad */
5525 case 35: /* DFP Reround Quad */
5526 case 67: /* DFP Quantize Immediate Quad */
5527 case 99: /* DFP Round To FP Integer With Inexact Quad */
5528 case 227: /* DFP Round To FP Integer Without Inexact Quad */
5529 case 258: /* DFP Convert To DFP Extended Quad */
5530 case 514: /* DFP Subtract Quad */
5531 case 546: /* DFP Divide Quad */
5532 case 770: /* DFP Round To DFP Long Quad */
5533 case 802: /* DFP Convert From Fixed Quad */
5534 case 834: /* DFP Encode BCD To DPD Quad */
5535 if (PPC_RC (insn))
5536 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5537 tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
5538 record_full_arch_list_add_reg (regcache, tmp);
5539 record_full_arch_list_add_reg (regcache, tmp + 1);
5540 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5541 return 0;
5542
5543 case 130: /* DFP Compare Ordered Quad */
5544 case 162: /* DFP Test Exponent Quad */
5545 case 194: /* DFP Test Data Class Quad */
5546 case 226: /* DFP Test Data Group Quad */
5547 case 642: /* DFP Compare Unordered Quad */
5548 case 674: /* DFP Test Significance Quad */
5549 case 675: /* DFP Test Significance Immediate Quad */
5550 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5551 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5552 return 0;
5553
5554 case 66: /* DFP Shift Significand Left Immediate Quad */
5555 case 98: /* DFP Shift Significand Right Immediate Quad */
5556 case 322: /* DFP Decode DPD To BCD Quad */
5557 case 866: /* DFP Insert Biased Exponent Quad */
5558 tmp = tdep->ppc_fp0_regnum + (PPC_FRT (insn) & ~1);
5559 record_full_arch_list_add_reg (regcache, tmp);
5560 record_full_arch_list_add_reg (regcache, tmp + 1);
5561 if (PPC_RC (insn))
5562 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5563 return 0;
5564
5565 case 290: /* DFP Convert To Fixed Quad */
5566 record_full_arch_list_add_reg (regcache,
5567 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5568 if (PPC_RC (insn))
5569 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5570 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5571 return 0;
5572
5573 case 354: /* DFP Extract Biased Exponent Quad */
5574 record_full_arch_list_add_reg (regcache,
5575 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5576 if (PPC_RC (insn))
5577 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5578 return 0;
5579
5580 case 12: /* Floating Round to Single-Precision */
5581 case 14: /* Floating Convert To Integer Word */
5582 case 15: /* Floating Convert To Integer Word
5583 with round toward Zero */
5584 case 142: /* Floating Convert To Integer Word Unsigned */
5585 case 143: /* Floating Convert To Integer Word Unsigned
5586 with round toward Zero */
5587 case 392: /* Floating Round to Integer Nearest */
5588 case 424: /* Floating Round to Integer Toward Zero */
5589 case 456: /* Floating Round to Integer Plus */
5590 case 488: /* Floating Round to Integer Minus */
5591 case 814: /* Floating Convert To Integer Doubleword */
5592 case 815: /* Floating Convert To Integer Doubleword
5593 with round toward Zero */
5594 case 846: /* Floating Convert From Integer Doubleword */
5595 case 942: /* Floating Convert To Integer Doubleword Unsigned */
5596 case 943: /* Floating Convert To Integer Doubleword Unsigned
5597 with round toward Zero */
5598 case 974: /* Floating Convert From Integer Doubleword Unsigned */
5599 record_full_arch_list_add_reg (regcache,
5600 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5601 if (PPC_RC (insn))
5602 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5603 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5604 return 0;
5605
5606 case 583:
5607 switch (PPC_FIELD (insn, 11, 5))
5608 {
5609 case 1: /* Move From FPSCR & Clear Enables */
5610 case 20: /* Move From FPSCR Control & set DRN */
5611 case 21: /* Move From FPSCR Control & set DRN Immediate */
5612 case 22: /* Move From FPSCR Control & set RN */
5613 case 23: /* Move From FPSCR Control & set RN Immediate */
5614 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5615 /* Fall through. */
5616 case 0: /* Move From FPSCR */
5617 case 24: /* Move From FPSCR Lightweight */
5618 if (PPC_FIELD (insn, 11, 5) == 0 && PPC_RC (insn))
5619 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5620 record_full_arch_list_add_reg (regcache,
5621 tdep->ppc_fp0_regnum
5622 + PPC_FRT (insn));
5623 return 0;
5624 }
5625 break;
5626
5627 case 8: /* Floating Copy Sign */
5628 case 40: /* Floating Negate */
5629 case 72: /* Floating Move Register */
5630 case 136: /* Floating Negative Absolute Value */
5631 case 264: /* Floating Absolute Value */
5632 record_full_arch_list_add_reg (regcache,
5633 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5634 if (PPC_RC (insn))
5635 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5636 return 0;
5637
5638 case 838: /* Floating Merge Odd Word */
5639 case 966: /* Floating Merge Even Word */
5640 record_full_arch_list_add_reg (regcache,
5641 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5642 return 0;
5643
5644 case 38: /* Move To FPSCR Bit 1 */
5645 case 70: /* Move To FPSCR Bit 0 */
5646 case 134: /* Move To FPSCR Field Immediate */
5647 case 711: /* Move To FPSCR Fields */
5648 if (PPC_RC (insn))
5649 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5650 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5651 return 0;
5652
5653 case 0: /* Floating Compare Unordered */
5654 case 32: /* Floating Compare Ordered */
5655 case 64: /* Move to Condition Register from FPSCR */
5656 case 132: /* VSX Scalar Compare Ordered Quad-Precision */
5657 case 164: /* VSX Scalar Compare Exponents Quad-Precision */
5658 case 644: /* VSX Scalar Compare Unordered Quad-Precision */
5659 case 708: /* VSX Scalar Test Data Class Quad-Precision */
5660 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5661 /* FALL-THROUGH */
5662 case 128: /* Floating Test for software Divide */
5663 case 160: /* Floating Test for software Square Root */
5664 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5665 return 0;
5666
5667 case 4: /* VSX Scalar Add Quad-Precision */
5668 case 36: /* VSX Scalar Multiply Quad-Precision */
5669 case 388: /* VSX Scalar Multiply-Add Quad-Precision */
5670 case 420: /* VSX Scalar Multiply-Subtract Quad-Precision */
5671 case 452: /* VSX Scalar Negative Multiply-Add Quad-Precision */
5672 case 484: /* VSX Scalar Negative Multiply-Subtract
5673 Quad-Precision */
5674 case 516: /* VSX Scalar Subtract Quad-Precision */
5675 case 548: /* VSX Scalar Divide Quad-Precision */
5676 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5677 /* FALL-THROUGH */
5678 case 100: /* VSX Scalar Copy Sign Quad-Precision */
5679 case 868: /* VSX Scalar Insert Exponent Quad-Precision */
5680 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5681 return 0;
5682
5683 case 804:
5684 switch (PPC_FIELD (insn, 11, 5))
5685 {
5686 case 27: /* VSX Scalar Square Root Quad-Precision */
5687 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5688 /* FALL-THROUGH */
5689 case 0: /* VSX Scalar Absolute Quad-Precision */
5690 case 2: /* VSX Scalar Extract Exponent Quad-Precision */
5691 case 8: /* VSX Scalar Negative Absolute Quad-Precision */
5692 case 16: /* VSX Scalar Negate Quad-Precision */
5693 case 18: /* VSX Scalar Extract Significand Quad-Precision */
5694 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5695 return 0;
5696 }
5697 break;
5698
5699 case 836:
5700 switch (PPC_FIELD (insn, 11, 5))
5701 {
5702 case 1: /* VSX Scalar truncate & Convert Quad-Precision format
5703 to Unsigned Word format */
5704 case 2: /* VSX Scalar Convert Unsigned Doubleword format to
5705 Quad-Precision format */
5706 case 9: /* VSX Scalar truncate & Convert Quad-Precision format
5707 to Signed Word format */
5708 case 10: /* VSX Scalar Convert Signed Doubleword format to
5709 Quad-Precision format */
5710 case 17: /* VSX Scalar truncate & Convert Quad-Precision format
5711 to Unsigned Doubleword format */
5712 case 20: /* VSX Scalar round & Convert Quad-Precision format to
5713 Double-Precision format */
5714 case 22: /* VSX Scalar Convert Double-Precision format to
5715 Quad-Precision format */
5716 case 25: /* VSX Scalar truncate & Convert Quad-Precision format
5717 to Signed Doubleword format */
5718 record_full_arch_list_add_reg (regcache, tdep->ppc_fpscr_regnum);
5719 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5720 return 0;
5721 }
5722 }
5723
5724 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5725 "at %s, 63-%d.\n", insn, paddress (gdbarch, addr), ext);
5726 return -1;
5727 }
5728
5729 /* Parse the current instruction and record the values of the registers and
5730 memory that will be changed in current instruction to "record_arch_list".
5731 Return -1 if something wrong. */
5732
5733 int
5734 ppc_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
5735 CORE_ADDR addr)
5736 {
5737 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5738 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5739 uint32_t insn;
5740 int op6, tmp, i;
5741
5742 insn = read_memory_unsigned_integer (addr, 4, byte_order);
5743 op6 = PPC_OP6 (insn);
5744
5745 switch (op6)
5746 {
5747 case 2: /* Trap Doubleword Immediate */
5748 case 3: /* Trap Word Immediate */
5749 /* Do nothing. */
5750 break;
5751
5752 case 4:
5753 if (ppc_process_record_op4 (gdbarch, regcache, addr, insn) != 0)
5754 return -1;
5755 break;
5756
5757 case 17: /* System call */
5758 if (PPC_LEV (insn) != 0)
5759 goto UNKNOWN_OP;
5760
5761 if (tdep->ppc_syscall_record != NULL)
5762 {
5763 if (tdep->ppc_syscall_record (regcache) != 0)
5764 return -1;
5765 }
5766 else
5767 {
5768 printf_unfiltered (_("no syscall record support\n"));
5769 return -1;
5770 }
5771 break;
5772
5773 case 7: /* Multiply Low Immediate */
5774 record_full_arch_list_add_reg (regcache,
5775 tdep->ppc_gp0_regnum + PPC_RT (insn));
5776 break;
5777
5778 case 8: /* Subtract From Immediate Carrying */
5779 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
5780 record_full_arch_list_add_reg (regcache,
5781 tdep->ppc_gp0_regnum + PPC_RT (insn));
5782 break;
5783
5784 case 10: /* Compare Logical Immediate */
5785 case 11: /* Compare Immediate */
5786 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5787 break;
5788
5789 case 13: /* Add Immediate Carrying and Record */
5790 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5791 /* FALL-THROUGH */
5792 case 12: /* Add Immediate Carrying */
5793 record_full_arch_list_add_reg (regcache, tdep->ppc_xer_regnum);
5794 /* FALL-THROUGH */
5795 case 14: /* Add Immediate */
5796 case 15: /* Add Immediate Shifted */
5797 record_full_arch_list_add_reg (regcache,
5798 tdep->ppc_gp0_regnum + PPC_RT (insn));
5799 break;
5800
5801 case 16: /* Branch Conditional */
5802 if ((PPC_BO (insn) & 0x4) == 0)
5803 record_full_arch_list_add_reg (regcache, tdep->ppc_ctr_regnum);
5804 /* FALL-THROUGH */
5805 case 18: /* Branch */
5806 if (PPC_LK (insn))
5807 record_full_arch_list_add_reg (regcache, tdep->ppc_lr_regnum);
5808 break;
5809
5810 case 19:
5811 if (ppc_process_record_op19 (gdbarch, regcache, addr, insn) != 0)
5812 return -1;
5813 break;
5814
5815 case 20: /* Rotate Left Word Immediate then Mask Insert */
5816 case 21: /* Rotate Left Word Immediate then AND with Mask */
5817 case 23: /* Rotate Left Word then AND with Mask */
5818 case 30: /* Rotate Left Doubleword Immediate then Clear Left */
5819 /* Rotate Left Doubleword Immediate then Clear Right */
5820 /* Rotate Left Doubleword Immediate then Clear */
5821 /* Rotate Left Doubleword then Clear Left */
5822 /* Rotate Left Doubleword then Clear Right */
5823 /* Rotate Left Doubleword Immediate then Mask Insert */
5824 if (PPC_RC (insn))
5825 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5826 record_full_arch_list_add_reg (regcache,
5827 tdep->ppc_gp0_regnum + PPC_RA (insn));
5828 break;
5829
5830 case 28: /* AND Immediate */
5831 case 29: /* AND Immediate Shifted */
5832 record_full_arch_list_add_reg (regcache, tdep->ppc_cr_regnum);
5833 /* FALL-THROUGH */
5834 case 24: /* OR Immediate */
5835 case 25: /* OR Immediate Shifted */
5836 case 26: /* XOR Immediate */
5837 case 27: /* XOR Immediate Shifted */
5838 record_full_arch_list_add_reg (regcache,
5839 tdep->ppc_gp0_regnum + PPC_RA (insn));
5840 break;
5841
5842 case 31:
5843 if (ppc_process_record_op31 (gdbarch, regcache, addr, insn) != 0)
5844 return -1;
5845 break;
5846
5847 case 33: /* Load Word and Zero with Update */
5848 case 35: /* Load Byte and Zero with Update */
5849 case 41: /* Load Halfword and Zero with Update */
5850 case 43: /* Load Halfword Algebraic with Update */
5851 record_full_arch_list_add_reg (regcache,
5852 tdep->ppc_gp0_regnum + PPC_RA (insn));
5853 /* FALL-THROUGH */
5854 case 32: /* Load Word and Zero */
5855 case 34: /* Load Byte and Zero */
5856 case 40: /* Load Halfword and Zero */
5857 case 42: /* Load Halfword Algebraic */
5858 record_full_arch_list_add_reg (regcache,
5859 tdep->ppc_gp0_regnum + PPC_RT (insn));
5860 break;
5861
5862 case 46: /* Load Multiple Word */
5863 for (i = PPC_RT (insn); i < 32; i++)
5864 record_full_arch_list_add_reg (regcache, tdep->ppc_gp0_regnum + i);
5865 break;
5866
5867 case 56: /* Load Quadword */
5868 tmp = tdep->ppc_gp0_regnum + (PPC_RT (insn) & ~1);
5869 record_full_arch_list_add_reg (regcache, tmp);
5870 record_full_arch_list_add_reg (regcache, tmp + 1);
5871 break;
5872
5873 case 49: /* Load Floating-Point Single with Update */
5874 case 51: /* Load Floating-Point Double with Update */
5875 record_full_arch_list_add_reg (regcache,
5876 tdep->ppc_gp0_regnum + PPC_RA (insn));
5877 /* FALL-THROUGH */
5878 case 48: /* Load Floating-Point Single */
5879 case 50: /* Load Floating-Point Double */
5880 record_full_arch_list_add_reg (regcache,
5881 tdep->ppc_fp0_regnum + PPC_FRT (insn));
5882 break;
5883
5884 case 47: /* Store Multiple Word */
5885 {
5886 ULONGEST iaddr = 0;
5887
5888 if (PPC_RA (insn) != 0)
5889 regcache_raw_read_unsigned (regcache,
5890 tdep->ppc_gp0_regnum + PPC_RA (insn),
5891 &iaddr);
5892
5893 iaddr += PPC_D (insn);
5894 record_full_arch_list_add_mem (iaddr, 4 * (32 - PPC_RS (insn)));
5895 }
5896 break;
5897
5898 case 37: /* Store Word with Update */
5899 case 39: /* Store Byte with Update */
5900 case 45: /* Store Halfword with Update */
5901 case 53: /* Store Floating-Point Single with Update */
5902 case 55: /* Store Floating-Point Double with Update */
5903 record_full_arch_list_add_reg (regcache,
5904 tdep->ppc_gp0_regnum + PPC_RA (insn));
5905 /* FALL-THROUGH */
5906 case 36: /* Store Word */
5907 case 38: /* Store Byte */
5908 case 44: /* Store Halfword */
5909 case 52: /* Store Floating-Point Single */
5910 case 54: /* Store Floating-Point Double */
5911 {
5912 ULONGEST iaddr = 0;
5913 int size = -1;
5914
5915 if (PPC_RA (insn) != 0)
5916 regcache_raw_read_unsigned (regcache,
5917 tdep->ppc_gp0_regnum + PPC_RA (insn),
5918 &iaddr);
5919 iaddr += PPC_D (insn);
5920
5921 if (op6 == 36 || op6 == 37 || op6 == 52 || op6 == 53)
5922 size = 4;
5923 else if (op6 == 54 || op6 == 55)
5924 size = 8;
5925 else if (op6 == 44 || op6 == 45)
5926 size = 2;
5927 else if (op6 == 38 || op6 == 39)
5928 size = 1;
5929 else
5930 gdb_assert (0);
5931
5932 record_full_arch_list_add_mem (iaddr, size);
5933 }
5934 break;
5935
5936 case 57:
5937 switch (insn & 0x3)
5938 {
5939 case 0: /* Load Floating-Point Double Pair */
5940 tmp = tdep->ppc_fp0_regnum + (PPC_RT (insn) & ~1);
5941 record_full_arch_list_add_reg (regcache, tmp);
5942 record_full_arch_list_add_reg (regcache, tmp + 1);
5943 break;
5944 case 2: /* Load VSX Scalar Doubleword */
5945 case 3: /* Load VSX Scalar Single */
5946 ppc_record_vsr (regcache, tdep, PPC_VRT (insn) + 32);
5947 break;
5948 default:
5949 goto UNKNOWN_OP;
5950 }
5951 break;
5952
5953 case 58: /* Load Doubleword */
5954 /* Load Doubleword with Update */
5955 /* Load Word Algebraic */
5956 if (PPC_FIELD (insn, 30, 2) > 2)
5957 goto UNKNOWN_OP;
5958
5959 record_full_arch_list_add_reg (regcache,
5960 tdep->ppc_gp0_regnum + PPC_RT (insn));
5961 if (PPC_BIT (insn, 31))
5962 record_full_arch_list_add_reg (regcache,
5963 tdep->ppc_gp0_regnum + PPC_RA (insn));
5964 break;
5965
5966 case 59:
5967 if (ppc_process_record_op59 (gdbarch, regcache, addr, insn) != 0)
5968 return -1;
5969 break;
5970
5971 case 60:
5972 if (ppc_process_record_op60 (gdbarch, regcache, addr, insn) != 0)
5973 return -1;
5974 break;
5975
5976 case 61:
5977 if (ppc_process_record_op61 (gdbarch, regcache, addr, insn) != 0)
5978 return -1;
5979 break;
5980
5981 case 62: /* Store Doubleword */
5982 /* Store Doubleword with Update */
5983 /* Store Quadword with Update */
5984 {
5985 ULONGEST iaddr = 0;
5986 int size;
5987 int sub2 = PPC_FIELD (insn, 30, 2);
5988
5989 if (sub2 > 2)
5990 goto UNKNOWN_OP;
5991
5992 if (PPC_RA (insn) != 0)
5993 regcache_raw_read_unsigned (regcache,
5994 tdep->ppc_gp0_regnum + PPC_RA (insn),
5995 &iaddr);
5996
5997 size = (sub2 == 2) ? 16 : 8;
5998
5999 iaddr += PPC_DS (insn) << 2;
6000 record_full_arch_list_add_mem (iaddr, size);
6001
6002 if (op6 == 62 && sub2 == 1)
6003 record_full_arch_list_add_reg (regcache,
6004 tdep->ppc_gp0_regnum +
6005 PPC_RA (insn));
6006
6007 break;
6008 }
6009
6010 case 63:
6011 if (ppc_process_record_op63 (gdbarch, regcache, addr, insn) != 0)
6012 return -1;
6013 break;
6014
6015 default:
6016 UNKNOWN_OP:
6017 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
6018 "at %s, %d.\n", insn, paddress (gdbarch, addr), op6);
6019 return -1;
6020 }
6021
6022 if (record_full_arch_list_add_reg (regcache, PPC_PC_REGNUM))
6023 return -1;
6024 if (record_full_arch_list_add_end ())
6025 return -1;
6026 return 0;
6027 }
6028
6029 /* Initialize the current architecture based on INFO. If possible, re-use an
6030 architecture from ARCHES, which is a list of architectures already created
6031 during this debugging session.
6032
6033 Called e.g. at program startup, when reading a core file, and when reading
6034 a binary file. */
6035
6036 static struct gdbarch *
6037 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
6038 {
6039 struct gdbarch *gdbarch;
6040 struct gdbarch_tdep *tdep;
6041 int wordsize, from_xcoff_exec, from_elf_exec;
6042 enum bfd_architecture arch;
6043 unsigned long mach;
6044 bfd abfd;
6045 enum auto_boolean soft_float_flag = powerpc_soft_float_global;
6046 int soft_float;
6047 enum powerpc_long_double_abi long_double_abi = POWERPC_LONG_DOUBLE_AUTO;
6048 enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
6049 enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
6050 int have_fpu = 0, have_spe = 0, have_mq = 0, have_altivec = 0;
6051 int have_dfp = 0, have_vsx = 0, have_ppr = 0, have_dscr = 0;
6052 int have_tar = 0, have_ebb = 0, have_pmu = 0, have_htm_spr = 0;
6053 int have_htm_core = 0, have_htm_fpu = 0, have_htm_altivec = 0;
6054 int have_htm_vsx = 0, have_htm_ppr = 0, have_htm_dscr = 0;
6055 int have_htm_tar = 0;
6056 int tdesc_wordsize = -1;
6057 const struct target_desc *tdesc = info.target_desc;
6058 struct tdesc_arch_data *tdesc_data = NULL;
6059 int num_pseudoregs = 0;
6060 int cur_reg;
6061
6062 /* INFO may refer to a binary that is not of the PowerPC architecture,
6063 e.g. when debugging a stand-alone SPE executable on a Cell/B.E. system.
6064 In this case, we must not attempt to infer properties of the (PowerPC
6065 side) of the target system from properties of that executable. Trust
6066 the target description instead. */
6067 if (info.abfd
6068 && bfd_get_arch (info.abfd) != bfd_arch_powerpc
6069 && bfd_get_arch (info.abfd) != bfd_arch_rs6000)
6070 info.abfd = NULL;
6071
6072 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
6073 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
6074
6075 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
6076 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
6077
6078 /* Check word size. If INFO is from a binary file, infer it from
6079 that, else choose a likely default. */
6080 if (from_xcoff_exec)
6081 {
6082 if (bfd_xcoff_is_xcoff64 (info.abfd))
6083 wordsize = 8;
6084 else
6085 wordsize = 4;
6086 }
6087 else if (from_elf_exec)
6088 {
6089 if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6090 wordsize = 8;
6091 else
6092 wordsize = 4;
6093 }
6094 else if (tdesc_has_registers (tdesc))
6095 wordsize = -1;
6096 else
6097 {
6098 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
6099 wordsize = (info.bfd_arch_info->bits_per_word
6100 / info.bfd_arch_info->bits_per_byte);
6101 else
6102 wordsize = 4;
6103 }
6104
6105 /* Get the architecture and machine from the BFD. */
6106 arch = info.bfd_arch_info->arch;
6107 mach = info.bfd_arch_info->mach;
6108
6109 /* For e500 executables, the apuinfo section is of help here. Such
6110 section contains the identifier and revision number of each
6111 Application-specific Processing Unit that is present on the
6112 chip. The content of the section is determined by the assembler
6113 which looks at each instruction and determines which unit (and
6114 which version of it) can execute it. Grovel through the section
6115 looking for relevant e500 APUs. */
6116
6117 if (bfd_uses_spe_extensions (info.abfd))
6118 {
6119 arch = info.bfd_arch_info->arch;
6120 mach = bfd_mach_ppc_e500;
6121 bfd_default_set_arch_mach (&abfd, arch, mach);
6122 info.bfd_arch_info = bfd_get_arch_info (&abfd);
6123 }
6124
6125 /* Find a default target description which describes our register
6126 layout, if we do not already have one. */
6127 if (! tdesc_has_registers (tdesc))
6128 {
6129 const struct variant *v;
6130
6131 /* Choose variant. */
6132 v = find_variant_by_arch (arch, mach);
6133 if (!v)
6134 return NULL;
6135
6136 tdesc = *v->tdesc;
6137 }
6138
6139 gdb_assert (tdesc_has_registers (tdesc));
6140
6141 /* Check any target description for validity. */
6142 if (tdesc_has_registers (tdesc))
6143 {
6144 static const char *const gprs[] = {
6145 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
6146 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
6147 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
6148 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
6149 };
6150 const struct tdesc_feature *feature;
6151 int i, valid_p;
6152 static const char *const msr_names[] = { "msr", "ps" };
6153 static const char *const cr_names[] = { "cr", "cnd" };
6154 static const char *const ctr_names[] = { "ctr", "cnt" };
6155
6156 feature = tdesc_find_feature (tdesc,
6157 "org.gnu.gdb.power.core");
6158 if (feature == NULL)
6159 return NULL;
6160
6161 tdesc_data = tdesc_data_alloc ();
6162
6163 valid_p = 1;
6164 for (i = 0; i < ppc_num_gprs; i++)
6165 valid_p &= tdesc_numbered_register (feature, tdesc_data, i, gprs[i]);
6166 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_PC_REGNUM,
6167 "pc");
6168 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_LR_REGNUM,
6169 "lr");
6170 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_XER_REGNUM,
6171 "xer");
6172
6173 /* Allow alternate names for these registers, to accomodate GDB's
6174 historic naming. */
6175 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6176 PPC_MSR_REGNUM, msr_names);
6177 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6178 PPC_CR_REGNUM, cr_names);
6179 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6180 PPC_CTR_REGNUM, ctr_names);
6181
6182 if (!valid_p)
6183 {
6184 tdesc_data_cleanup (tdesc_data);
6185 return NULL;
6186 }
6187
6188 have_mq = tdesc_numbered_register (feature, tdesc_data, PPC_MQ_REGNUM,
6189 "mq");
6190
6191 tdesc_wordsize = tdesc_register_bitsize (feature, "pc") / 8;
6192 if (wordsize == -1)
6193 wordsize = tdesc_wordsize;
6194
6195 feature = tdesc_find_feature (tdesc,
6196 "org.gnu.gdb.power.fpu");
6197 if (feature != NULL)
6198 {
6199 static const char *const fprs[] = {
6200 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
6201 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
6202 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
6203 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
6204 };
6205 valid_p = 1;
6206 for (i = 0; i < ppc_num_fprs; i++)
6207 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6208 PPC_F0_REGNUM + i, fprs[i]);
6209 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6210 PPC_FPSCR_REGNUM, "fpscr");
6211
6212 if (!valid_p)
6213 {
6214 tdesc_data_cleanup (tdesc_data);
6215 return NULL;
6216 }
6217 have_fpu = 1;
6218
6219 /* The fpscr register was expanded in isa 2.05 to 64 bits
6220 along with the addition of the decimal floating point
6221 facility. */
6222 if (tdesc_register_bitsize (feature, "fpscr") > 32)
6223 have_dfp = 1;
6224 }
6225 else
6226 have_fpu = 0;
6227
6228 feature = tdesc_find_feature (tdesc,
6229 "org.gnu.gdb.power.altivec");
6230 if (feature != NULL)
6231 {
6232 static const char *const vector_regs[] = {
6233 "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
6234 "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
6235 "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
6236 "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
6237 };
6238
6239 valid_p = 1;
6240 for (i = 0; i < ppc_num_gprs; i++)
6241 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6242 PPC_VR0_REGNUM + i,
6243 vector_regs[i]);
6244 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6245 PPC_VSCR_REGNUM, "vscr");
6246 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6247 PPC_VRSAVE_REGNUM, "vrsave");
6248
6249 if (have_spe || !valid_p)
6250 {
6251 tdesc_data_cleanup (tdesc_data);
6252 return NULL;
6253 }
6254 have_altivec = 1;
6255 }
6256 else
6257 have_altivec = 0;
6258
6259 /* Check for POWER7 VSX registers support. */
6260 feature = tdesc_find_feature (tdesc,
6261 "org.gnu.gdb.power.vsx");
6262
6263 if (feature != NULL)
6264 {
6265 static const char *const vsx_regs[] = {
6266 "vs0h", "vs1h", "vs2h", "vs3h", "vs4h", "vs5h",
6267 "vs6h", "vs7h", "vs8h", "vs9h", "vs10h", "vs11h",
6268 "vs12h", "vs13h", "vs14h", "vs15h", "vs16h", "vs17h",
6269 "vs18h", "vs19h", "vs20h", "vs21h", "vs22h", "vs23h",
6270 "vs24h", "vs25h", "vs26h", "vs27h", "vs28h", "vs29h",
6271 "vs30h", "vs31h"
6272 };
6273
6274 valid_p = 1;
6275
6276 for (i = 0; i < ppc_num_vshrs; i++)
6277 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6278 PPC_VSR0_UPPER_REGNUM + i,
6279 vsx_regs[i]);
6280
6281 if (!valid_p || !have_fpu || !have_altivec)
6282 {
6283 tdesc_data_cleanup (tdesc_data);
6284 return NULL;
6285 }
6286
6287 have_vsx = 1;
6288 }
6289 else
6290 have_vsx = 0;
6291
6292 /* On machines supporting the SPE APU, the general-purpose registers
6293 are 64 bits long. There are SIMD vector instructions to treat them
6294 as pairs of floats, but the rest of the instruction set treats them
6295 as 32-bit registers, and only operates on their lower halves.
6296
6297 In the GDB regcache, we treat their high and low halves as separate
6298 registers. The low halves we present as the general-purpose
6299 registers, and then we have pseudo-registers that stitch together
6300 the upper and lower halves and present them as pseudo-registers.
6301
6302 Thus, the target description is expected to supply the upper
6303 halves separately. */
6304
6305 feature = tdesc_find_feature (tdesc,
6306 "org.gnu.gdb.power.spe");
6307 if (feature != NULL)
6308 {
6309 static const char *const upper_spe[] = {
6310 "ev0h", "ev1h", "ev2h", "ev3h",
6311 "ev4h", "ev5h", "ev6h", "ev7h",
6312 "ev8h", "ev9h", "ev10h", "ev11h",
6313 "ev12h", "ev13h", "ev14h", "ev15h",
6314 "ev16h", "ev17h", "ev18h", "ev19h",
6315 "ev20h", "ev21h", "ev22h", "ev23h",
6316 "ev24h", "ev25h", "ev26h", "ev27h",
6317 "ev28h", "ev29h", "ev30h", "ev31h"
6318 };
6319
6320 valid_p = 1;
6321 for (i = 0; i < ppc_num_gprs; i++)
6322 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6323 PPC_SPE_UPPER_GP0_REGNUM + i,
6324 upper_spe[i]);
6325 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6326 PPC_SPE_ACC_REGNUM, "acc");
6327 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6328 PPC_SPE_FSCR_REGNUM, "spefscr");
6329
6330 if (have_mq || have_fpu || !valid_p)
6331 {
6332 tdesc_data_cleanup (tdesc_data);
6333 return NULL;
6334 }
6335 have_spe = 1;
6336 }
6337 else
6338 have_spe = 0;
6339
6340 /* Program Priority Register. */
6341 feature = tdesc_find_feature (tdesc,
6342 "org.gnu.gdb.power.ppr");
6343 if (feature != NULL)
6344 {
6345 valid_p = 1;
6346 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6347 PPC_PPR_REGNUM, "ppr");
6348
6349 if (!valid_p)
6350 {
6351 tdesc_data_cleanup (tdesc_data);
6352 return NULL;
6353 }
6354 have_ppr = 1;
6355 }
6356 else
6357 have_ppr = 0;
6358
6359 /* Data Stream Control Register. */
6360 feature = tdesc_find_feature (tdesc,
6361 "org.gnu.gdb.power.dscr");
6362 if (feature != NULL)
6363 {
6364 valid_p = 1;
6365 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6366 PPC_DSCR_REGNUM, "dscr");
6367
6368 if (!valid_p)
6369 {
6370 tdesc_data_cleanup (tdesc_data);
6371 return NULL;
6372 }
6373 have_dscr = 1;
6374 }
6375 else
6376 have_dscr = 0;
6377
6378 /* Target Address Register. */
6379 feature = tdesc_find_feature (tdesc,
6380 "org.gnu.gdb.power.tar");
6381 if (feature != NULL)
6382 {
6383 valid_p = 1;
6384 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6385 PPC_TAR_REGNUM, "tar");
6386
6387 if (!valid_p)
6388 {
6389 tdesc_data_cleanup (tdesc_data);
6390 return NULL;
6391 }
6392 have_tar = 1;
6393 }
6394 else
6395 have_tar = 0;
6396
6397 /* Event-based Branching Registers. */
6398 feature = tdesc_find_feature (tdesc,
6399 "org.gnu.gdb.power.ebb");
6400 if (feature != NULL)
6401 {
6402 static const char *const ebb_regs[] = {
6403 "bescr", "ebbhr", "ebbrr"
6404 };
6405
6406 valid_p = 1;
6407 for (i = 0; i < ARRAY_SIZE (ebb_regs); i++)
6408 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6409 PPC_BESCR_REGNUM + i,
6410 ebb_regs[i]);
6411 if (!valid_p)
6412 {
6413 tdesc_data_cleanup (tdesc_data);
6414 return NULL;
6415 }
6416 have_ebb = 1;
6417 }
6418 else
6419 have_ebb = 0;
6420
6421 /* Subset of the ISA 2.07 Performance Monitor Registers provided
6422 by Linux. */
6423 feature = tdesc_find_feature (tdesc,
6424 "org.gnu.gdb.power.linux.pmu");
6425 if (feature != NULL)
6426 {
6427 valid_p = 1;
6428
6429 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6430 PPC_MMCR0_REGNUM,
6431 "mmcr0");
6432 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6433 PPC_MMCR2_REGNUM,
6434 "mmcr2");
6435 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6436 PPC_SIAR_REGNUM,
6437 "siar");
6438 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6439 PPC_SDAR_REGNUM,
6440 "sdar");
6441 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6442 PPC_SIER_REGNUM,
6443 "sier");
6444
6445 if (!valid_p)
6446 {
6447 tdesc_data_cleanup (tdesc_data);
6448 return NULL;
6449 }
6450 have_pmu = 1;
6451 }
6452 else
6453 have_pmu = 0;
6454
6455 /* Hardware Transactional Memory Registers. */
6456 feature = tdesc_find_feature (tdesc,
6457 "org.gnu.gdb.power.htm.spr");
6458 if (feature != NULL)
6459 {
6460 static const char *const tm_spr_regs[] = {
6461 "tfhar", "texasr", "tfiar"
6462 };
6463
6464 valid_p = 1;
6465 for (i = 0; i < ARRAY_SIZE (tm_spr_regs); i++)
6466 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6467 PPC_TFHAR_REGNUM + i,
6468 tm_spr_regs[i]);
6469 if (!valid_p)
6470 {
6471 tdesc_data_cleanup (tdesc_data);
6472 return NULL;
6473 }
6474
6475 have_htm_spr = 1;
6476 }
6477 else
6478 have_htm_spr = 0;
6479
6480 feature = tdesc_find_feature (tdesc,
6481 "org.gnu.gdb.power.htm.core");
6482 if (feature != NULL)
6483 {
6484 static const char *const cgprs[] = {
6485 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",
6486 "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14",
6487 "cr15", "cr16", "cr17", "cr18", "cr19", "cr20", "cr21",
6488 "cr22", "cr23", "cr24", "cr25", "cr26", "cr27", "cr28",
6489 "cr29", "cr30", "cr31", "ccr", "cxer", "clr", "cctr"
6490 };
6491
6492 valid_p = 1;
6493
6494 for (i = 0; i < ARRAY_SIZE (cgprs); i++)
6495 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6496 PPC_CR0_REGNUM + i,
6497 cgprs[i]);
6498 if (!valid_p)
6499 {
6500 tdesc_data_cleanup (tdesc_data);
6501 return NULL;
6502 }
6503
6504 have_htm_core = 1;
6505 }
6506 else
6507 have_htm_core = 0;
6508
6509 feature = tdesc_find_feature (tdesc,
6510 "org.gnu.gdb.power.htm.fpu");
6511 if (feature != NULL)
6512 {
6513 valid_p = 1;
6514
6515 static const char *const cfprs[] = {
6516 "cf0", "cf1", "cf2", "cf3", "cf4", "cf5", "cf6", "cf7",
6517 "cf8", "cf9", "cf10", "cf11", "cf12", "cf13", "cf14", "cf15",
6518 "cf16", "cf17", "cf18", "cf19", "cf20", "cf21", "cf22",
6519 "cf23", "cf24", "cf25", "cf26", "cf27", "cf28", "cf29",
6520 "cf30", "cf31", "cfpscr"
6521 };
6522
6523 for (i = 0; i < ARRAY_SIZE (cfprs); i++)
6524 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6525 PPC_CF0_REGNUM + i,
6526 cfprs[i]);
6527
6528 if (!valid_p)
6529 {
6530 tdesc_data_cleanup (tdesc_data);
6531 return NULL;
6532 }
6533 have_htm_fpu = 1;
6534 }
6535 else
6536 have_htm_fpu = 0;
6537
6538 feature = tdesc_find_feature (tdesc,
6539 "org.gnu.gdb.power.htm.altivec");
6540 if (feature != NULL)
6541 {
6542 valid_p = 1;
6543
6544 static const char *const cvmx[] = {
6545 "cvr0", "cvr1", "cvr2", "cvr3", "cvr4", "cvr5", "cvr6",
6546 "cvr7", "cvr8", "cvr9", "cvr10", "cvr11", "cvr12", "cvr13",
6547 "cvr14", "cvr15","cvr16", "cvr17", "cvr18", "cvr19", "cvr20",
6548 "cvr21", "cvr22", "cvr23", "cvr24", "cvr25", "cvr26",
6549 "cvr27", "cvr28", "cvr29", "cvr30", "cvr31", "cvscr",
6550 "cvrsave"
6551 };
6552
6553 for (i = 0; i < ARRAY_SIZE (cvmx); i++)
6554 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6555 PPC_CVR0_REGNUM + i,
6556 cvmx[i]);
6557
6558 if (!valid_p)
6559 {
6560 tdesc_data_cleanup (tdesc_data);
6561 return NULL;
6562 }
6563 have_htm_altivec = 1;
6564 }
6565 else
6566 have_htm_altivec = 0;
6567
6568 feature = tdesc_find_feature (tdesc,
6569 "org.gnu.gdb.power.htm.vsx");
6570 if (feature != NULL)
6571 {
6572 valid_p = 1;
6573
6574 static const char *const cvsx[] = {
6575 "cvs0h", "cvs1h", "cvs2h", "cvs3h", "cvs4h", "cvs5h",
6576 "cvs6h", "cvs7h", "cvs8h", "cvs9h", "cvs10h", "cvs11h",
6577 "cvs12h", "cvs13h", "cvs14h", "cvs15h", "cvs16h", "cvs17h",
6578 "cvs18h", "cvs19h", "cvs20h", "cvs21h", "cvs22h", "cvs23h",
6579 "cvs24h", "cvs25h", "cvs26h", "cvs27h", "cvs28h", "cvs29h",
6580 "cvs30h", "cvs31h"
6581 };
6582
6583 for (i = 0; i < ARRAY_SIZE (cvsx); i++)
6584 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6585 (PPC_CVSR0_UPPER_REGNUM
6586 + i),
6587 cvsx[i]);
6588
6589 if (!valid_p || !have_htm_fpu || !have_htm_altivec)
6590 {
6591 tdesc_data_cleanup (tdesc_data);
6592 return NULL;
6593 }
6594 have_htm_vsx = 1;
6595 }
6596 else
6597 have_htm_vsx = 0;
6598
6599 feature = tdesc_find_feature (tdesc,
6600 "org.gnu.gdb.power.htm.ppr");
6601 if (feature != NULL)
6602 {
6603 valid_p = tdesc_numbered_register (feature, tdesc_data,
6604 PPC_CPPR_REGNUM, "cppr");
6605
6606 if (!valid_p)
6607 {
6608 tdesc_data_cleanup (tdesc_data);
6609 return NULL;
6610 }
6611 have_htm_ppr = 1;
6612 }
6613 else
6614 have_htm_ppr = 0;
6615
6616 feature = tdesc_find_feature (tdesc,
6617 "org.gnu.gdb.power.htm.dscr");
6618 if (feature != NULL)
6619 {
6620 valid_p = tdesc_numbered_register (feature, tdesc_data,
6621 PPC_CDSCR_REGNUM, "cdscr");
6622
6623 if (!valid_p)
6624 {
6625 tdesc_data_cleanup (tdesc_data);
6626 return NULL;
6627 }
6628 have_htm_dscr = 1;
6629 }
6630 else
6631 have_htm_dscr = 0;
6632
6633 feature = tdesc_find_feature (tdesc,
6634 "org.gnu.gdb.power.htm.tar");
6635 if (feature != NULL)
6636 {
6637 valid_p = tdesc_numbered_register (feature, tdesc_data,
6638 PPC_CTAR_REGNUM, "ctar");
6639
6640 if (!valid_p)
6641 {
6642 tdesc_data_cleanup (tdesc_data);
6643 return NULL;
6644 }
6645 have_htm_tar = 1;
6646 }
6647 else
6648 have_htm_tar = 0;
6649 }
6650
6651 /* If we have a 64-bit binary on a 32-bit target, complain. Also
6652 complain for a 32-bit binary on a 64-bit target; we do not yet
6653 support that. For instance, the 32-bit ABI routines expect
6654 32-bit GPRs.
6655
6656 As long as there isn't an explicit target description, we'll
6657 choose one based on the BFD architecture and get a word size
6658 matching the binary (probably powerpc:common or
6659 powerpc:common64). So there is only trouble if a 64-bit target
6660 supplies a 64-bit description while debugging a 32-bit
6661 binary. */
6662 if (tdesc_wordsize != -1 && tdesc_wordsize != wordsize)
6663 {
6664 tdesc_data_cleanup (tdesc_data);
6665 return NULL;
6666 }
6667
6668 #ifdef HAVE_ELF
6669 if (from_elf_exec)
6670 {
6671 switch (elf_elfheader (info.abfd)->e_flags & EF_PPC64_ABI)
6672 {
6673 case 1:
6674 elf_abi = POWERPC_ELF_V1;
6675 break;
6676 case 2:
6677 elf_abi = POWERPC_ELF_V2;
6678 break;
6679 default:
6680 break;
6681 }
6682 }
6683
6684 if (soft_float_flag == AUTO_BOOLEAN_AUTO && from_elf_exec)
6685 {
6686 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6687 Tag_GNU_Power_ABI_FP) & 3)
6688 {
6689 case 1:
6690 soft_float_flag = AUTO_BOOLEAN_FALSE;
6691 break;
6692 case 2:
6693 soft_float_flag = AUTO_BOOLEAN_TRUE;
6694 break;
6695 default:
6696 break;
6697 }
6698 }
6699
6700 if (long_double_abi == POWERPC_LONG_DOUBLE_AUTO && from_elf_exec)
6701 {
6702 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6703 Tag_GNU_Power_ABI_FP) >> 2)
6704 {
6705 case 1:
6706 long_double_abi = POWERPC_LONG_DOUBLE_IBM128;
6707 break;
6708 case 3:
6709 long_double_abi = POWERPC_LONG_DOUBLE_IEEE128;
6710 break;
6711 default:
6712 break;
6713 }
6714 }
6715
6716 if (vector_abi == POWERPC_VEC_AUTO && from_elf_exec)
6717 {
6718 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6719 Tag_GNU_Power_ABI_Vector))
6720 {
6721 case 1:
6722 vector_abi = POWERPC_VEC_GENERIC;
6723 break;
6724 case 2:
6725 vector_abi = POWERPC_VEC_ALTIVEC;
6726 break;
6727 case 3:
6728 vector_abi = POWERPC_VEC_SPE;
6729 break;
6730 default:
6731 break;
6732 }
6733 }
6734 #endif
6735
6736 /* At this point, the only supported ELF-based 64-bit little-endian
6737 operating system is GNU/Linux, and this uses the ELFv2 ABI by
6738 default. All other supported ELF-based operating systems use the
6739 ELFv1 ABI by default. Therefore, if the ABI marker is missing,
6740 e.g. because we run a legacy binary, or have attached to a process
6741 and have not found any associated binary file, set the default
6742 according to this heuristic. */
6743 if (elf_abi == POWERPC_ELF_AUTO)
6744 {
6745 if (wordsize == 8 && info.byte_order == BFD_ENDIAN_LITTLE)
6746 elf_abi = POWERPC_ELF_V2;
6747 else
6748 elf_abi = POWERPC_ELF_V1;
6749 }
6750
6751 if (soft_float_flag == AUTO_BOOLEAN_TRUE)
6752 soft_float = 1;
6753 else if (soft_float_flag == AUTO_BOOLEAN_FALSE)
6754 soft_float = 0;
6755 else
6756 soft_float = !have_fpu;
6757
6758 /* If we have a hard float binary or setting but no floating point
6759 registers, downgrade to soft float anyway. We're still somewhat
6760 useful in this scenario. */
6761 if (!soft_float && !have_fpu)
6762 soft_float = 1;
6763
6764 /* Similarly for vector registers. */
6765 if (vector_abi == POWERPC_VEC_ALTIVEC && !have_altivec)
6766 vector_abi = POWERPC_VEC_GENERIC;
6767
6768 if (vector_abi == POWERPC_VEC_SPE && !have_spe)
6769 vector_abi = POWERPC_VEC_GENERIC;
6770
6771 if (vector_abi == POWERPC_VEC_AUTO)
6772 {
6773 if (have_altivec)
6774 vector_abi = POWERPC_VEC_ALTIVEC;
6775 else if (have_spe)
6776 vector_abi = POWERPC_VEC_SPE;
6777 else
6778 vector_abi = POWERPC_VEC_GENERIC;
6779 }
6780
6781 /* Do not limit the vector ABI based on available hardware, since we
6782 do not yet know what hardware we'll decide we have. Yuck! FIXME! */
6783
6784 /* Find a candidate among extant architectures. */
6785 for (arches = gdbarch_list_lookup_by_info (arches, &info);
6786 arches != NULL;
6787 arches = gdbarch_list_lookup_by_info (arches->next, &info))
6788 {
6789 /* Word size in the various PowerPC bfd_arch_info structs isn't
6790 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
6791 separate word size check. */
6792 tdep = gdbarch_tdep (arches->gdbarch);
6793 if (tdep && tdep->elf_abi != elf_abi)
6794 continue;
6795 if (tdep && tdep->soft_float != soft_float)
6796 continue;
6797 if (tdep && tdep->long_double_abi != long_double_abi)
6798 continue;
6799 if (tdep && tdep->vector_abi != vector_abi)
6800 continue;
6801 if (tdep && tdep->wordsize == wordsize)
6802 {
6803 if (tdesc_data != NULL)
6804 tdesc_data_cleanup (tdesc_data);
6805 return arches->gdbarch;
6806 }
6807 }
6808
6809 /* None found, create a new architecture from INFO, whose bfd_arch_info
6810 validity depends on the source:
6811 - executable useless
6812 - rs6000_host_arch() good
6813 - core file good
6814 - "set arch" trust blindly
6815 - GDB startup useless but harmless */
6816
6817 tdep = XCNEW (struct gdbarch_tdep);
6818 tdep->wordsize = wordsize;
6819 tdep->elf_abi = elf_abi;
6820 tdep->soft_float = soft_float;
6821 tdep->long_double_abi = long_double_abi;
6822 tdep->vector_abi = vector_abi;
6823
6824 gdbarch = gdbarch_alloc (&info, tdep);
6825
6826 tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
6827 tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
6828 tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
6829 tdep->ppc_cr_regnum = PPC_CR_REGNUM;
6830 tdep->ppc_lr_regnum = PPC_LR_REGNUM;
6831 tdep->ppc_ctr_regnum = PPC_CTR_REGNUM;
6832 tdep->ppc_xer_regnum = PPC_XER_REGNUM;
6833 tdep->ppc_mq_regnum = have_mq ? PPC_MQ_REGNUM : -1;
6834
6835 tdep->ppc_fp0_regnum = have_fpu ? PPC_F0_REGNUM : -1;
6836 tdep->ppc_fpscr_regnum = have_fpu ? PPC_FPSCR_REGNUM : -1;
6837 tdep->ppc_vsr0_upper_regnum = have_vsx ? PPC_VSR0_UPPER_REGNUM : -1;
6838 tdep->ppc_vr0_regnum = have_altivec ? PPC_VR0_REGNUM : -1;
6839 tdep->ppc_vrsave_regnum = have_altivec ? PPC_VRSAVE_REGNUM : -1;
6840 tdep->ppc_ev0_upper_regnum = have_spe ? PPC_SPE_UPPER_GP0_REGNUM : -1;
6841 tdep->ppc_acc_regnum = have_spe ? PPC_SPE_ACC_REGNUM : -1;
6842 tdep->ppc_spefscr_regnum = have_spe ? PPC_SPE_FSCR_REGNUM : -1;
6843 tdep->ppc_ppr_regnum = have_ppr ? PPC_PPR_REGNUM : -1;
6844 tdep->ppc_dscr_regnum = have_dscr ? PPC_DSCR_REGNUM : -1;
6845 tdep->ppc_tar_regnum = have_tar ? PPC_TAR_REGNUM : -1;
6846 tdep->have_ebb = have_ebb;
6847
6848 /* If additional pmu registers are added, care must be taken when
6849 setting new fields in the tdep below, to maintain compatibility
6850 with features that only provide some of the registers. Currently
6851 gdb access to the pmu registers is only supported in linux, and
6852 linux only provides a subset of the pmu registers defined in the
6853 architecture. */
6854
6855 tdep->ppc_mmcr0_regnum = have_pmu ? PPC_MMCR0_REGNUM : -1;
6856 tdep->ppc_mmcr2_regnum = have_pmu ? PPC_MMCR2_REGNUM : -1;
6857 tdep->ppc_siar_regnum = have_pmu ? PPC_SIAR_REGNUM : -1;
6858 tdep->ppc_sdar_regnum = have_pmu ? PPC_SDAR_REGNUM : -1;
6859 tdep->ppc_sier_regnum = have_pmu ? PPC_SIER_REGNUM : -1;
6860
6861 tdep->have_htm_spr = have_htm_spr;
6862 tdep->have_htm_core = have_htm_core;
6863 tdep->have_htm_fpu = have_htm_fpu;
6864 tdep->have_htm_altivec = have_htm_altivec;
6865 tdep->have_htm_vsx = have_htm_vsx;
6866 tdep->ppc_cppr_regnum = have_htm_ppr ? PPC_CPPR_REGNUM : -1;
6867 tdep->ppc_cdscr_regnum = have_htm_dscr ? PPC_CDSCR_REGNUM : -1;
6868 tdep->ppc_ctar_regnum = have_htm_tar ? PPC_CTAR_REGNUM : -1;
6869
6870 set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
6871 set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
6872 set_gdbarch_fp0_regnum (gdbarch, tdep->ppc_fp0_regnum);
6873 set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
6874
6875 /* The XML specification for PowerPC sensibly calls the MSR "msr".
6876 GDB traditionally called it "ps", though, so let GDB add an
6877 alias. */
6878 set_gdbarch_ps_regnum (gdbarch, tdep->ppc_ps_regnum);
6879
6880 if (wordsize == 8)
6881 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
6882 else
6883 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
6884
6885 /* Set lr_frame_offset. */
6886 if (wordsize == 8)
6887 tdep->lr_frame_offset = 16;
6888 else
6889 tdep->lr_frame_offset = 4;
6890
6891 if (have_spe || have_dfp || have_vsx || have_htm_fpu || have_htm_vsx)
6892 {
6893 set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
6894 set_gdbarch_pseudo_register_write (gdbarch,
6895 rs6000_pseudo_register_write);
6896 set_gdbarch_ax_pseudo_register_collect (gdbarch,
6897 rs6000_ax_pseudo_register_collect);
6898 }
6899
6900 set_gdbarch_gen_return_address (gdbarch, rs6000_gen_return_address);
6901
6902 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
6903
6904 set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
6905
6906 if (have_spe)
6907 num_pseudoregs += 32;
6908 if (have_dfp)
6909 num_pseudoregs += 16;
6910 if (have_vsx)
6911 /* Include both VSX and Extended FP registers. */
6912 num_pseudoregs += 96;
6913 if (have_htm_fpu)
6914 num_pseudoregs += 16;
6915 /* Include both checkpointed VSX and EFP registers. */
6916 if (have_htm_vsx)
6917 num_pseudoregs += 64 + 32;
6918
6919 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
6920
6921 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
6922 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
6923 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
6924 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
6925 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
6926 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
6927 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
6928 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
6929 set_gdbarch_char_signed (gdbarch, 0);
6930
6931 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
6932 if (wordsize == 8)
6933 /* PPC64 SYSV. */
6934 set_gdbarch_frame_red_zone_size (gdbarch, 288);
6935
6936 set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
6937 set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
6938 set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
6939
6940 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
6941 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
6942
6943 if (wordsize == 4)
6944 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
6945 else if (wordsize == 8)
6946 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
6947
6948 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
6949 set_gdbarch_stack_frame_destroyed_p (gdbarch, rs6000_stack_frame_destroyed_p);
6950 set_gdbarch_skip_main_prologue (gdbarch, rs6000_skip_main_prologue);
6951
6952 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6953
6954 set_gdbarch_breakpoint_kind_from_pc (gdbarch,
6955 rs6000_breakpoint::kind_from_pc);
6956 set_gdbarch_sw_breakpoint_from_kind (gdbarch,
6957 rs6000_breakpoint::bp_from_kind);
6958
6959 /* The value of symbols of type N_SO and N_FUN maybe null when
6960 it shouldn't be. */
6961 set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
6962
6963 /* Handles single stepping of atomic sequences. */
6964 set_gdbarch_software_single_step (gdbarch, ppc_deal_with_atomic_sequence);
6965
6966 /* Not sure on this. FIXMEmgo */
6967 set_gdbarch_frame_args_skip (gdbarch, 8);
6968
6969 /* Helpers for function argument information. */
6970 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
6971
6972 /* Trampoline. */
6973 set_gdbarch_in_solib_return_trampoline
6974 (gdbarch, rs6000_in_solib_return_trampoline);
6975 set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
6976
6977 /* Hook in the DWARF CFI frame unwinder. */
6978 dwarf2_append_unwinders (gdbarch);
6979 dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
6980
6981 /* Frame handling. */
6982 dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
6983
6984 /* Setup displaced stepping. */
6985 set_gdbarch_displaced_step_copy_insn (gdbarch,
6986 ppc_displaced_step_copy_insn);
6987 set_gdbarch_displaced_step_hw_singlestep (gdbarch,
6988 ppc_displaced_step_hw_singlestep);
6989 set_gdbarch_displaced_step_fixup (gdbarch, ppc_displaced_step_fixup);
6990 set_gdbarch_displaced_step_location (gdbarch,
6991 displaced_step_at_entry_point);
6992
6993 set_gdbarch_max_insn_length (gdbarch, PPC_INSN_SIZE);
6994
6995 /* Hook in ABI-specific overrides, if they have been registered. */
6996 info.target_desc = tdesc;
6997 info.tdesc_data = tdesc_data;
6998 gdbarch_init_osabi (info, gdbarch);
6999
7000 switch (info.osabi)
7001 {
7002 case GDB_OSABI_LINUX:
7003 case GDB_OSABI_NETBSD:
7004 case GDB_OSABI_UNKNOWN:
7005 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
7006 frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
7007 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
7008 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
7009 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
7010 break;
7011 default:
7012 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
7013
7014 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
7015 frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
7016 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
7017 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
7018 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
7019 }
7020
7021 set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
7022 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
7023
7024 /* Override the normal target description method to make the SPE upper
7025 halves anonymous. */
7026 set_gdbarch_register_name (gdbarch, rs6000_register_name);
7027
7028 /* Choose register numbers for all supported pseudo-registers. */
7029 tdep->ppc_ev0_regnum = -1;
7030 tdep->ppc_dl0_regnum = -1;
7031 tdep->ppc_vsr0_regnum = -1;
7032 tdep->ppc_efpr0_regnum = -1;
7033 tdep->ppc_cdl0_regnum = -1;
7034 tdep->ppc_cvsr0_regnum = -1;
7035 tdep->ppc_cefpr0_regnum = -1;
7036
7037 cur_reg = gdbarch_num_regs (gdbarch);
7038
7039 if (have_spe)
7040 {
7041 tdep->ppc_ev0_regnum = cur_reg;
7042 cur_reg += 32;
7043 }
7044 if (have_dfp)
7045 {
7046 tdep->ppc_dl0_regnum = cur_reg;
7047 cur_reg += 16;
7048 }
7049 if (have_vsx)
7050 {
7051 tdep->ppc_vsr0_regnum = cur_reg;
7052 cur_reg += 64;
7053 tdep->ppc_efpr0_regnum = cur_reg;
7054 cur_reg += 32;
7055 }
7056 if (have_htm_fpu)
7057 {
7058 tdep->ppc_cdl0_regnum = cur_reg;
7059 cur_reg += 16;
7060 }
7061 if (have_htm_vsx)
7062 {
7063 tdep->ppc_cvsr0_regnum = cur_reg;
7064 cur_reg += 64;
7065 tdep->ppc_cefpr0_regnum = cur_reg;
7066 cur_reg += 32;
7067 }
7068
7069 gdb_assert (gdbarch_num_cooked_regs (gdbarch) == cur_reg);
7070
7071 /* Register the ravenscar_arch_ops. */
7072 if (mach == bfd_mach_ppc_e500)
7073 register_e500_ravenscar_ops (gdbarch);
7074 else
7075 register_ppc_ravenscar_ops (gdbarch);
7076
7077 set_gdbarch_disassembler_options (gdbarch, &powerpc_disassembler_options);
7078 set_gdbarch_valid_disassembler_options (gdbarch,
7079 disassembler_options_powerpc ());
7080
7081 return gdbarch;
7082 }
7083
7084 static void
7085 rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
7086 {
7087 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7088
7089 if (tdep == NULL)
7090 return;
7091
7092 /* FIXME: Dump gdbarch_tdep. */
7093 }
7094
7095 /* PowerPC-specific commands. */
7096
7097 static void
7098 set_powerpc_command (const char *args, int from_tty)
7099 {
7100 printf_unfiltered (_("\
7101 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
7102 help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout);
7103 }
7104
7105 static void
7106 show_powerpc_command (const char *args, int from_tty)
7107 {
7108 cmd_show_list (showpowerpccmdlist, from_tty, "");
7109 }
7110
7111 static void
7112 powerpc_set_soft_float (const char *args, int from_tty,
7113 struct cmd_list_element *c)
7114 {
7115 struct gdbarch_info info;
7116
7117 /* Update the architecture. */
7118 gdbarch_info_init (&info);
7119 if (!gdbarch_update_p (info))
7120 internal_error (__FILE__, __LINE__, _("could not update architecture"));
7121 }
7122
7123 static void
7124 powerpc_set_vector_abi (const char *args, int from_tty,
7125 struct cmd_list_element *c)
7126 {
7127 struct gdbarch_info info;
7128 int vector_abi;
7129
7130 for (vector_abi = POWERPC_VEC_AUTO;
7131 vector_abi != POWERPC_VEC_LAST;
7132 vector_abi++)
7133 if (strcmp (powerpc_vector_abi_string,
7134 powerpc_vector_strings[vector_abi]) == 0)
7135 {
7136 powerpc_vector_abi_global = (enum powerpc_vector_abi) vector_abi;
7137 break;
7138 }
7139
7140 if (vector_abi == POWERPC_VEC_LAST)
7141 internal_error (__FILE__, __LINE__, _("Invalid vector ABI accepted: %s."),
7142 powerpc_vector_abi_string);
7143
7144 /* Update the architecture. */
7145 gdbarch_info_init (&info);
7146 if (!gdbarch_update_p (info))
7147 internal_error (__FILE__, __LINE__, _("could not update architecture"));
7148 }
7149
7150 /* Show the current setting of the exact watchpoints flag. */
7151
7152 static void
7153 show_powerpc_exact_watchpoints (struct ui_file *file, int from_tty,
7154 struct cmd_list_element *c,
7155 const char *value)
7156 {
7157 fprintf_filtered (file, _("Use of exact watchpoints is %s.\n"), value);
7158 }
7159
7160 /* Read a PPC instruction from memory. */
7161
7162 static unsigned int
7163 read_insn (struct frame_info *frame, CORE_ADDR pc)
7164 {
7165 struct gdbarch *gdbarch = get_frame_arch (frame);
7166 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7167
7168 return read_memory_unsigned_integer (pc, 4, byte_order);
7169 }
7170
7171 /* Return non-zero if the instructions at PC match the series
7172 described in PATTERN, or zero otherwise. PATTERN is an array of
7173 'struct ppc_insn_pattern' objects, terminated by an entry whose
7174 mask is zero.
7175
7176 When the match is successful, fill INSNS[i] with what PATTERN[i]
7177 matched. If PATTERN[i] is optional, and the instruction wasn't
7178 present, set INSNS[i] to 0 (which is not a valid PPC instruction).
7179 INSNS should have as many elements as PATTERN, minus the terminator.
7180 Note that, if PATTERN contains optional instructions which aren't
7181 present in memory, then INSNS will have holes, so INSNS[i] isn't
7182 necessarily the i'th instruction in memory. */
7183
7184 int
7185 ppc_insns_match_pattern (struct frame_info *frame, CORE_ADDR pc,
7186 const struct ppc_insn_pattern *pattern,
7187 unsigned int *insns)
7188 {
7189 int i;
7190 unsigned int insn;
7191
7192 for (i = 0, insn = 0; pattern[i].mask; i++)
7193 {
7194 if (insn == 0)
7195 insn = read_insn (frame, pc);
7196 insns[i] = 0;
7197 if ((insn & pattern[i].mask) == pattern[i].data)
7198 {
7199 insns[i] = insn;
7200 pc += 4;
7201 insn = 0;
7202 }
7203 else if (!pattern[i].optional)
7204 return 0;
7205 }
7206
7207 return 1;
7208 }
7209
7210 /* Return the 'd' field of the d-form instruction INSN, properly
7211 sign-extended. */
7212
7213 CORE_ADDR
7214 ppc_insn_d_field (unsigned int insn)
7215 {
7216 return ((((CORE_ADDR) insn & 0xffff) ^ 0x8000) - 0x8000);
7217 }
7218
7219 /* Return the 'ds' field of the ds-form instruction INSN, with the two
7220 zero bits concatenated at the right, and properly
7221 sign-extended. */
7222
7223 CORE_ADDR
7224 ppc_insn_ds_field (unsigned int insn)
7225 {
7226 return ((((CORE_ADDR) insn & 0xfffc) ^ 0x8000) - 0x8000);
7227 }
7228
7229 /* Initialization code. */
7230
7231 void
7232 _initialize_rs6000_tdep (void)
7233 {
7234 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
7235 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
7236
7237 /* Initialize the standard target descriptions. */
7238 initialize_tdesc_powerpc_32 ();
7239 initialize_tdesc_powerpc_altivec32 ();
7240 initialize_tdesc_powerpc_vsx32 ();
7241 initialize_tdesc_powerpc_403 ();
7242 initialize_tdesc_powerpc_403gc ();
7243 initialize_tdesc_powerpc_405 ();
7244 initialize_tdesc_powerpc_505 ();
7245 initialize_tdesc_powerpc_601 ();
7246 initialize_tdesc_powerpc_602 ();
7247 initialize_tdesc_powerpc_603 ();
7248 initialize_tdesc_powerpc_604 ();
7249 initialize_tdesc_powerpc_64 ();
7250 initialize_tdesc_powerpc_altivec64 ();
7251 initialize_tdesc_powerpc_vsx64 ();
7252 initialize_tdesc_powerpc_7400 ();
7253 initialize_tdesc_powerpc_750 ();
7254 initialize_tdesc_powerpc_860 ();
7255 initialize_tdesc_powerpc_e500 ();
7256 initialize_tdesc_rs6000 ();
7257
7258 /* Add root prefix command for all "set powerpc"/"show powerpc"
7259 commands. */
7260 add_prefix_cmd ("powerpc", no_class, set_powerpc_command,
7261 _("Various PowerPC-specific commands."),
7262 &setpowerpccmdlist, "set powerpc ", 0, &setlist);
7263
7264 add_prefix_cmd ("powerpc", no_class, show_powerpc_command,
7265 _("Various PowerPC-specific commands."),
7266 &showpowerpccmdlist, "show powerpc ", 0, &showlist);
7267
7268 /* Add a command to allow the user to force the ABI. */
7269 add_setshow_auto_boolean_cmd ("soft-float", class_support,
7270 &powerpc_soft_float_global,
7271 _("Set whether to use a soft-float ABI."),
7272 _("Show whether to use a soft-float ABI."),
7273 NULL,
7274 powerpc_set_soft_float, NULL,
7275 &setpowerpccmdlist, &showpowerpccmdlist);
7276
7277 add_setshow_enum_cmd ("vector-abi", class_support, powerpc_vector_strings,
7278 &powerpc_vector_abi_string,
7279 _("Set the vector ABI."),
7280 _("Show the vector ABI."),
7281 NULL, powerpc_set_vector_abi, NULL,
7282 &setpowerpccmdlist, &showpowerpccmdlist);
7283
7284 add_setshow_boolean_cmd ("exact-watchpoints", class_support,
7285 &target_exact_watchpoints,
7286 _("\
7287 Set whether to use just one debug register for watchpoints on scalars."),
7288 _("\
7289 Show whether to use just one debug register for watchpoints on scalars."),
7290 _("\
7291 If true, GDB will use only one debug register when watching a variable of\n\
7292 scalar type, thus assuming that the variable is accessed through the address\n\
7293 of its first byte."),
7294 NULL, show_powerpc_exact_watchpoints,
7295 &setpowerpccmdlist, &showpowerpccmdlist);
7296 }
This page took 0.332477 seconds and 4 git commands to generate.