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