Fix thinko in new weak undefined function test
[deliverable/binutils-gdb.git] / gdb / rs6000-tdep.c
CommitLineData
c906108c 1/* Target-dependent code for GDB, the GNU debugger.
7aea86e6 2
618f726f 3 Copyright (C) 1986-2016 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
21#include "frame.h"
22#include "inferior.h"
45741a9c 23#include "infrun.h"
c906108c
SS
24#include "symtab.h"
25#include "target.h"
26#include "gdbcore.h"
27#include "gdbcmd.h"
c906108c 28#include "objfiles.h"
7a78ae4e 29#include "arch-utils.h"
4e052eda 30#include "regcache.h"
d195bc9f 31#include "regset.h"
d16aafd8 32#include "doublest.h"
fd0407d6 33#include "value.h"
1fcc0bb8 34#include "parser-defs.h"
4be87837 35#include "osabi.h"
7d9b040b 36#include "infcall.h"
9f643768
JB
37#include "sim-regno.h"
38#include "gdb/sim-ppc.h"
6ced10dd 39#include "reggroups.h"
4fc771b8 40#include "dwarf2-frame.h"
7cc46491
DJ
41#include "target-descriptions.h"
42#include "user-regs.h"
b4cdae6f
WW
43#include "record-full.h"
44#include "auxv.h"
7a78ae4e 45
7a78ae4e 46#include "coff/internal.h" /* for libcoff.h */
2fccf04a 47#include "libcoff.h" /* for xcoff_data */
11ed25ac
KB
48#include "coff/xcoff.h"
49#include "libxcoff.h"
7a78ae4e 50
9aa1e687 51#include "elf-bfd.h"
55eddb0f 52#include "elf/ppc.h"
cd453cd0 53#include "elf/ppc64.h"
7a78ae4e 54
6ded7999 55#include "solib-svr4.h"
9aa1e687 56#include "ppc-tdep.h"
debb1f09 57#include "ppc-ravenscar-thread.h"
7a78ae4e 58
a89aa300 59#include "dis-asm.h"
338ef23d 60
61a65099
KB
61#include "trad-frame.h"
62#include "frame-unwind.h"
63#include "frame-base.h"
64
a67914de
MK
65#include "ax.h"
66#include "ax-gdb.h"
67
7cc46491 68#include "features/rs6000/powerpc-32.c"
7284e1be 69#include "features/rs6000/powerpc-altivec32.c"
604c2f83 70#include "features/rs6000/powerpc-vsx32.c"
7cc46491
DJ
71#include "features/rs6000/powerpc-403.c"
72#include "features/rs6000/powerpc-403gc.c"
4d09ffea 73#include "features/rs6000/powerpc-405.c"
7cc46491
DJ
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"
7284e1be 80#include "features/rs6000/powerpc-altivec64.c"
604c2f83 81#include "features/rs6000/powerpc-vsx64.c"
7cc46491
DJ
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
5a9e69ba
TJB
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
f949c649
TJB
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
604c2f83
LM
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 \
d9492458 106 && (regnum) < (tdep)->ppc_efpr0_regnum + ppc_num_efprs)
604c2f83 107
55eddb0f
DJ
108/* The list of available "set powerpc ..." and "show powerpc ..."
109 commands. */
110static struct cmd_list_element *setpowerpccmdlist = NULL;
111static struct cmd_list_element *showpowerpccmdlist = NULL;
112
113static 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. */
40478521 116static const char *const powerpc_vector_strings[] =
55eddb0f
DJ
117{
118 "auto",
119 "generic",
120 "altivec",
121 "spe",
122 NULL
123};
124
125/* A variable that can be configured by the user. */
126static enum powerpc_vector_abi powerpc_vector_abi_global = POWERPC_VEC_AUTO;
127static const char *powerpc_vector_abi_string = "auto";
128
0df8b418 129/* To be used by skip_prologue. */
7a78ae4e
ND
130
131struct 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 */
46a9b8ed 137 unsigned int gpr_mask; /* Each bit is an individual saved GPR. */
7a78ae4e 138 int saved_fpr; /* smallest # of saved fpr */
6be8bc0c 139 int saved_vr; /* smallest # of saved vr */
96ff0de4 140 int saved_ev; /* smallest # of saved ev */
7a78ae4e 141 int alloca_reg; /* alloca register number (frame ptr) */
0df8b418
MS
142 char frameless; /* true if frameless functions. */
143 char nosavedpc; /* true if pc not saved. */
46a9b8ed 144 char used_bl; /* true if link register clobbered */
7a78ae4e
ND
145 int gpr_offset; /* offset of saved gprs from prev sp */
146 int fpr_offset; /* offset of saved fprs from prev sp */
6be8bc0c 147 int vr_offset; /* offset of saved vrs from prev sp */
96ff0de4 148 int ev_offset; /* offset of saved evs from prev sp */
7a78ae4e 149 int lr_offset; /* offset of saved lr */
46a9b8ed 150 int lr_register; /* register of saved lr, if trustworthy */
7a78ae4e 151 int cr_offset; /* offset of saved cr */
6be8bc0c 152 int vrsave_offset; /* offset of saved vrsave register */
7a78ae4e
ND
153 };
154
c906108c 155
604c2f83
LM
156/* Is REGNO a VSX register? Return 1 if so, 0 otherwise. */
157int
158vsx_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
64b84175
KB
168/* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
169int
be8626e0 170altivec_register_p (struct gdbarch *gdbarch, int regno)
64b84175 171{
be8626e0 172 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
64b84175
KB
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
383f0f5b 179
867e2dc5
JB
180/* Return true if REGNO is an SPE register, false otherwise. */
181int
be8626e0 182spe_register_p (struct gdbarch *gdbarch, int regno)
867e2dc5 183{
be8626e0 184 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
867e2dc5
JB
185
186 /* Is it a reference to EV0 -- EV31, and do we have those? */
5a9e69ba 187 if (IS_SPE_PSEUDOREG (tdep, regno))
867e2dc5
JB
188 return 1;
189
6ced10dd
JB
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
867e2dc5
JB
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
383f0f5b
JB
211/* Return non-zero if the architecture described by GDBARCH has
212 floating-point registers (f0 --- f31 and fpscr). */
0a613259
AC
213int
214ppc_floating_point_unit_p (struct gdbarch *gdbarch)
215{
383f0f5b
JB
216 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
217
218 return (tdep->ppc_fp0_regnum >= 0
219 && tdep->ppc_fpscr_regnum >= 0);
0a613259 220}
9f643768 221
604c2f83
LM
222/* Return non-zero if the architecture described by GDBARCH has
223 VSX registers (vsr0 --- vsr63). */
63807e1d 224static int
604c2f83
LM
225ppc_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
06caf7d2
CES
232/* Return non-zero if the architecture described by GDBARCH has
233 Altivec registers (vr0 --- vr31, vrsave and vscr). */
234int
235ppc_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}
09991fa0
JB
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. */
9f643768
JB
250static void
251set_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
09991fa0
JB
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. */
9f643768
JB
263static void
264init_sim_regno_table (struct gdbarch *arch)
265{
266 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
7cc46491 267 int total_regs = gdbarch_num_regs (arch);
9f643768
JB
268 int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int);
269 int i;
7cc46491
DJ
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 };
9f643768
JB
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. */
7cc46491
DJ
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 }
9f643768
JB
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. */
6ced10dd
JB
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);
9f643768
JB
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
976102cd 333#ifdef WITH_PPC_SIM
9f643768
JB
334 /* Now handle all special-purpose registers. Verify that they
335 haven't mistakenly been assigned numbers by any of the above
7cc46491
DJ
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
9f643768
JB
349
350 /* Drop the initialized array into place. */
351 tdep->sim_regno = sim_regno;
352}
353
09991fa0
JB
354
355/* Given a GDB register number REG, return the corresponding SIM
356 register number. */
9f643768 357static int
e7faf938 358rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
9f643768 359{
e7faf938 360 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9f643768
JB
361 int sim_regno;
362
7cc46491 363 if (tdep->sim_regno == NULL)
e7faf938 364 init_sim_regno_table (gdbarch);
7cc46491 365
f57d151a 366 gdb_assert (0 <= reg
e7faf938
MD
367 && reg <= gdbarch_num_regs (gdbarch)
368 + gdbarch_num_pseudo_regs (gdbarch));
9f643768
JB
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
d195bc9f
MK
377\f
378
379/* Register set support functions. */
380
f2db237a
AM
381/* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
382 Write the register to REGCACHE. */
383
7284e1be 384void
d195bc9f 385ppc_supply_reg (struct regcache *regcache, int regnum,
f2db237a 386 const gdb_byte *regs, size_t offset, int regsize)
d195bc9f
MK
387{
388 if (regnum != -1 && offset != -1)
f2db237a
AM
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 }
d195bc9f
MK
400}
401
f2db237a
AM
402/* Read register REGNUM from REGCACHE and store to REGS + OFFSET
403 in a field REGSIZE wide. Zero pad as necessary. */
404
7284e1be 405void
d195bc9f 406ppc_collect_reg (const struct regcache *regcache, int regnum,
f2db237a 407 gdb_byte *regs, size_t offset, int regsize)
d195bc9f
MK
408{
409 if (regnum != -1 && offset != -1)
f2db237a
AM
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 }
d195bc9f
MK
429}
430
f2db237a
AM
431static int
432ppc_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
469static int
470ppc_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
06caf7d2
CES
484static int
485ppc_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
d195bc9f
MK
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
506void
507ppc_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);
19ba03f4
SM
512 const struct ppc_reg_offsets *offsets
513 = (const struct ppc_reg_offsets *) regset->regmap;
d195bc9f 514 size_t offset;
f2db237a 515 int regsize;
d195bc9f 516
f2db237a 517 if (regnum == -1)
d195bc9f 518 {
f2db237a
AM
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)
19ba03f4
SM
525 ppc_supply_reg (regcache, i, (const gdb_byte *) gregs, offset,
526 gpr_size);
f2db237a
AM
527
528 ppc_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
19ba03f4 529 (const gdb_byte *) gregs, offsets->pc_offset, gpr_size);
f2db237a 530 ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
19ba03f4 531 (const gdb_byte *) gregs, offsets->ps_offset, gpr_size);
f2db237a 532 ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
19ba03f4 533 (const gdb_byte *) gregs, offsets->lr_offset, gpr_size);
f2db237a 534 ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
19ba03f4 535 (const gdb_byte *) gregs, offsets->ctr_offset, gpr_size);
f2db237a 536 ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
19ba03f4
SM
537 (const gdb_byte *) gregs, offsets->cr_offset,
538 offsets->xr_size);
f2db237a 539 ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
19ba03f4
SM
540 (const gdb_byte *) gregs, offsets->xer_offset,
541 offsets->xr_size);
f2db237a 542 ppc_supply_reg (regcache, tdep->ppc_mq_regnum,
19ba03f4
SM
543 (const gdb_byte *) gregs, offsets->mq_offset,
544 offsets->xr_size);
f2db237a 545 return;
d195bc9f
MK
546 }
547
f2db237a 548 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
19ba03f4 549 ppc_supply_reg (regcache, regnum, (const gdb_byte *) gregs, offset, regsize);
d195bc9f
MK
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
556void
557ppc_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);
f2db237a
AM
561 struct gdbarch_tdep *tdep;
562 const struct ppc_reg_offsets *offsets;
d195bc9f 563 size_t offset;
d195bc9f 564
f2db237a
AM
565 if (!ppc_floating_point_unit_p (gdbarch))
566 return;
383f0f5b 567
f2db237a 568 tdep = gdbarch_tdep (gdbarch);
19ba03f4 569 offsets = (const struct ppc_reg_offsets *) regset->regmap;
f2db237a 570 if (regnum == -1)
d195bc9f 571 {
f2db237a
AM
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)
19ba03f4 577 ppc_supply_reg (regcache, i, (const gdb_byte *) fpregs, offset, 8);
f2db237a
AM
578
579 ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
19ba03f4
SM
580 (const gdb_byte *) fpregs, offsets->fpscr_offset,
581 offsets->fpscr_size);
f2db237a 582 return;
d195bc9f
MK
583 }
584
f2db237a 585 offset = ppc_fpreg_offset (tdep, offsets, regnum);
19ba03f4 586 ppc_supply_reg (regcache, regnum, (const gdb_byte *) fpregs, offset,
f2db237a 587 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
d195bc9f
MK
588}
589
604c2f83
LM
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
594void
595ppc_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++)
19ba03f4 613 ppc_supply_reg (regcache, i, (const gdb_byte *) vsxregs, 0, 8);
604c2f83
LM
614
615 return;
616 }
617 else
19ba03f4 618 ppc_supply_reg (regcache, regnum, (const gdb_byte *) vsxregs, 0, 8);
604c2f83
LM
619}
620
06caf7d2
CES
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
625void
626ppc_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);
19ba03f4 638 offsets = (const struct ppc_reg_offsets *) regset->regmap;
06caf7d2
CES
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)
19ba03f4 646 ppc_supply_reg (regcache, i, (const gdb_byte *) vrregs, offset, 16);
06caf7d2
CES
647
648 ppc_supply_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
19ba03f4 649 (const gdb_byte *) vrregs, offsets->vscr_offset, 4);
06caf7d2
CES
650
651 ppc_supply_reg (regcache, tdep->ppc_vrsave_regnum,
19ba03f4 652 (const gdb_byte *) vrregs, offsets->vrsave_offset, 4);
06caf7d2
CES
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)
19ba03f4 659 ppc_supply_reg (regcache, regnum, (const gdb_byte *) vrregs, offset, 16);
06caf7d2
CES
660 else
661 ppc_supply_reg (regcache, regnum,
19ba03f4 662 (const gdb_byte *) vrregs, offset, 4);
06caf7d2
CES
663}
664
d195bc9f 665/* Collect register REGNUM in the general-purpose register set
f2db237a 666 REGSET from register cache REGCACHE into the buffer specified by
d195bc9f
MK
667 GREGS and LEN. If REGNUM is -1, do this for all registers in
668 REGSET. */
669
670void
671ppc_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);
19ba03f4
SM
677 const struct ppc_reg_offsets *offsets
678 = (const struct ppc_reg_offsets *) regset->regmap;
d195bc9f 679 size_t offset;
f2db237a 680 int regsize;
d195bc9f 681
f2db237a 682 if (regnum == -1)
d195bc9f 683 {
f2db237a
AM
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)
19ba03f4 690 ppc_collect_reg (regcache, i, (gdb_byte *) gregs, offset, gpr_size);
f2db237a
AM
691
692 ppc_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
19ba03f4 693 (gdb_byte *) gregs, offsets->pc_offset, gpr_size);
f2db237a 694 ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
19ba03f4 695 (gdb_byte *) gregs, offsets->ps_offset, gpr_size);
f2db237a 696 ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
19ba03f4 697 (gdb_byte *) gregs, offsets->lr_offset, gpr_size);
f2db237a 698 ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
19ba03f4 699 (gdb_byte *) gregs, offsets->ctr_offset, gpr_size);
f2db237a 700 ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
19ba03f4
SM
701 (gdb_byte *) gregs, offsets->cr_offset,
702 offsets->xr_size);
f2db237a 703 ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
19ba03f4
SM
704 (gdb_byte *) gregs, offsets->xer_offset,
705 offsets->xr_size);
f2db237a 706 ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
19ba03f4
SM
707 (gdb_byte *) gregs, offsets->mq_offset,
708 offsets->xr_size);
f2db237a 709 return;
d195bc9f
MK
710 }
711
f2db237a 712 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
19ba03f4 713 ppc_collect_reg (regcache, regnum, (gdb_byte *) gregs, offset, regsize);
d195bc9f
MK
714}
715
716/* Collect register REGNUM in the floating-point register set
f2db237a 717 REGSET from register cache REGCACHE into the buffer specified by
d195bc9f
MK
718 FPREGS and LEN. If REGNUM is -1, do this for all registers in
719 REGSET. */
720
721void
722ppc_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);
f2db237a
AM
727 struct gdbarch_tdep *tdep;
728 const struct ppc_reg_offsets *offsets;
d195bc9f 729 size_t offset;
d195bc9f 730
f2db237a
AM
731 if (!ppc_floating_point_unit_p (gdbarch))
732 return;
383f0f5b 733
f2db237a 734 tdep = gdbarch_tdep (gdbarch);
19ba03f4 735 offsets = (const struct ppc_reg_offsets *) regset->regmap;
f2db237a 736 if (regnum == -1)
d195bc9f 737 {
f2db237a
AM
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)
19ba03f4 743 ppc_collect_reg (regcache, i, (gdb_byte *) fpregs, offset, 8);
f2db237a
AM
744
745 ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
19ba03f4
SM
746 (gdb_byte *) fpregs, offsets->fpscr_offset,
747 offsets->fpscr_size);
f2db237a 748 return;
d195bc9f
MK
749 }
750
f2db237a 751 offset = ppc_fpreg_offset (tdep, offsets, regnum);
19ba03f4 752 ppc_collect_reg (regcache, regnum, (gdb_byte *) fpregs, offset,
f2db237a 753 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
d195bc9f 754}
06caf7d2 755
604c2f83
LM
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
761void
762ppc_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++)
19ba03f4 781 ppc_collect_reg (regcache, i, (gdb_byte *) vsxregs, 0, 8);
604c2f83
LM
782
783 return;
784 }
785 else
19ba03f4 786 ppc_collect_reg (regcache, regnum, (gdb_byte *) vsxregs, 0, 8);
604c2f83
LM
787}
788
789
06caf7d2
CES
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
795void
796ppc_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);
19ba03f4 809 offsets = (const struct ppc_reg_offsets *) regset->regmap;
06caf7d2
CES
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)
19ba03f4 817 ppc_collect_reg (regcache, i, (gdb_byte *) vrregs, offset, 16);
06caf7d2
CES
818
819 ppc_collect_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
19ba03f4 820 (gdb_byte *) vrregs, offsets->vscr_offset, 4);
06caf7d2
CES
821
822 ppc_collect_reg (regcache, tdep->ppc_vrsave_regnum,
19ba03f4 823 (gdb_byte *) vrregs, offsets->vrsave_offset, 4);
06caf7d2
CES
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)
19ba03f4 830 ppc_collect_reg (regcache, regnum, (gdb_byte *) vrregs, offset, 16);
06caf7d2
CES
831 else
832 ppc_collect_reg (regcache, regnum,
19ba03f4 833 (gdb_byte *) vrregs, offset, 4);
06caf7d2 834}
d195bc9f 835\f
0a613259 836
0d1243d9
PG
837static int
838insn_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
889static int
2608dbf8
WW
890rs6000_in_function_epilogue_frame_p (struct frame_info *curfrm,
891 struct gdbarch *gdbarch, CORE_ADDR pc)
0d1243d9 892{
46a9b8ed 893 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 894 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
0d1243d9
PG
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;
0d1243d9
PG
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
0d1243d9
PG
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;
e17a4113 916 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
0d1243d9
PG
917 if (insn == 0x4e800020)
918 break;
46a9b8ed
DJ
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 }
0d1243d9
PG
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;
e17a4113 942 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
0d1243d9
PG
943 if (insn_changes_sp_or_jumps (insn))
944 return 1;
945 }
946
947 return 0;
948}
949
c9cf6e20 950/* Implement the stack_frame_destroyed_p gdbarch method. */
2608dbf8
WW
951
952static int
c9cf6e20 953rs6000_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
2608dbf8
WW
954{
955 return rs6000_in_function_epilogue_frame_p (get_current_frame (),
956 gdbarch, pc);
957}
958
143985b7 959/* Get the ith function argument for the current function. */
b9362cc7 960static CORE_ADDR
143985b7
AF
961rs6000_fetch_pointer_argument (struct frame_info *frame, int argi,
962 struct type *type)
963{
50fd1280 964 return get_frame_register_unsigned (frame, 3 + argi);
143985b7
AF
965}
966
c906108c
SS
967/* Sequence of bytes for breakpoint instruction. */
968
44d100c3 969static const unsigned char *
67d57894
MD
970rs6000_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
971 int *bp_size)
c906108c 972{
aaab4dba
AC
973 static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
974 static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
c906108c 975 *bp_size = 4;
67d57894 976 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
c906108c
SS
977 return big_breakpoint;
978 else
979 return little_breakpoint;
980}
981
f74c6cad
LM
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
7f03bd92
PA
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
1002static struct displaced_step_closure *
1003ppc_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);
224c3ddb 1008 gdb_byte *buf = (gdb_byte *) xmalloc (len);
7f03bd92
PA
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
f74c6cad
LM
1045/* Fix up the state of registers and memory after having single-stepped
1046 a displaced instruction. */
63807e1d 1047static void
f74c6cad 1048ppc_displaced_step_fixup (struct gdbarch *gdbarch,
63807e1d
PA
1049 struct displaced_step_closure *closure,
1050 CORE_ADDR from, CORE_ADDR to,
1051 struct regcache *regs)
f74c6cad 1052{
e17a4113 1053 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7f03bd92 1054 /* Our closure is a copy of the instruction. */
f74c6cad 1055 ULONGEST insn = extract_unsigned_integer ((gdb_byte *) closure,
e17a4113 1056 PPC_INSN_SIZE, byte_order);
f74c6cad
LM
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,
5af949e3
UW
1065 "displaced: (ppc) fixup (%s, %s)\n",
1066 paddress (gdbarch, from), paddress (gdbarch, to));
f74c6cad
LM
1067
1068
1069 /* Handle PC-relative branch instructions. */
1070 if (opcode == B_INSN || opcode == BC_INSN || opcode == BXL_INSN)
1071 {
a4fafde3 1072 ULONGEST current_pc;
f74c6cad
LM
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,
5af949e3
UW
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));
f74c6cad 1095
0df8b418
MS
1096 regcache_cooked_write_unsigned (regs,
1097 gdbarch_pc_regnum (gdbarch),
f74c6cad
LM
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,
5af949e3
UW
1123 "displaced: (ppc) adjusted LR to %s\n",
1124 paddress (gdbarch, from + PPC_INSN_SIZE));
f74c6cad
LM
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}
c906108c 1137
99e40580
UW
1138/* Always use hardware single-stepping to execute the
1139 displaced instruction. */
1140static int
1141ppc_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
1142 struct displaced_step_closure *closure)
1143{
1144 return 1;
1145}
1146
ce5eab59
UW
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
4a7622d1
UW
1152int
1153ppc_deal_with_atomic_sequence (struct frame_info *frame)
ce5eab59 1154{
a6d9a66e 1155 struct gdbarch *gdbarch = get_frame_arch (frame);
6c95b8df 1156 struct address_space *aspace = get_frame_address_space (frame);
e17a4113 1157 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
0b1b3e42 1158 CORE_ADDR pc = get_frame_pc (frame);
ce5eab59
UW
1159 CORE_ADDR breaks[2] = {-1, -1};
1160 CORE_ADDR loc = pc;
24d45690 1161 CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */
e17a4113 1162 int insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
ce5eab59
UW
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. */
ce5eab59
UW
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;
e17a4113 1179 insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
ce5eab59
UW
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. */
f74c6cad 1184 if ((insn & BRANCH_MASK) == BC_INSN)
ce5eab59 1185 {
a3769e0c
AM
1186 int immediate = ((insn & 0xfffc) ^ 0x8000) - 0x8000;
1187 int absolute = insn & 2;
4a7622d1 1188
ce5eab59
UW
1189 if (bc_insn_count >= 1)
1190 return 0; /* More than one conditional branch found, fallback
1191 to the standard single-step code. */
4a7622d1
UW
1192
1193 if (absolute)
1194 breaks[1] = immediate;
1195 else
a3769e0c 1196 breaks[1] = loc + immediate;
4a7622d1
UW
1197
1198 bc_insn_count++;
1199 last_breakpoint++;
ce5eab59
UW
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
24d45690 1212 closing_insn = loc;
ce5eab59 1213 loc += PPC_INSN_SIZE;
e17a4113 1214 insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order);
ce5eab59
UW
1215
1216 /* Insert a breakpoint right after the end of the atomic sequence. */
1217 breaks[0] = loc;
1218
24d45690 1219 /* Check for duplicated breakpoints. Check also for a breakpoint
a3769e0c
AM
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)))
ce5eab59
UW
1224 last_breakpoint = 0;
1225
1226 /* Effectively inserts the breakpoints. */
1227 for (index = 0; index <= last_breakpoint; index++)
6c95b8df 1228 insert_single_step_breakpoint (gdbarch, aspace, breaks[index]);
ce5eab59
UW
1229
1230 return 1;
1231}
1232
c906108c 1233
c906108c
SS
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
55d05f3b
KB
1241/* Limit the number of skipped non-prologue instructions, as the examining
1242 of the prologue is expensive. */
1243static int max_skip_non_prologue_insns = 10;
1244
773df3e5
JB
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
1250static int
1251store_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}
55d05f3b 1315
3c77c82a
DJ
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
1323static int
e17a4113 1324bl_to_blrl_insn_p (CORE_ADDR pc, int insn, enum bfd_endian byte_order)
3c77c82a 1325{
0b1b3e42
UW
1326 CORE_ADDR dest;
1327 int immediate;
1328 int absolute;
3c77c82a
DJ
1329 int dest_insn;
1330
0b1b3e42
UW
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
e17a4113 1338 dest_insn = read_memory_integer (dest, 4, byte_order);
3c77c82a
DJ
1339 if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
1340 return 1;
1341
1342 return 0;
1343}
1344
0df8b418 1345/* Masks for decoding a branch-and-link (bl) instruction.
8ab3d180
KB
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
de9f48f0 1359static unsigned long
e17a4113 1360rs6000_fetch_instruction (struct gdbarch *gdbarch, const CORE_ADDR pc)
de9f48f0 1361{
e17a4113 1362 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
de9f48f0
JG
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;
e17a4113 1369 op = extract_unsigned_integer (buf, 4, byte_order);
de9f48f0
JG
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
1379static CORE_ADDR
e17a4113 1380rs6000_skip_stack_check (struct gdbarch *gdbarch, const CORE_ADDR start_pc)
de9f48f0
JG
1381{
1382 CORE_ADDR pc = start_pc;
e17a4113 1383 unsigned long op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1384
1385 /* First possible sequence: A small number of probes.
1386 stw 0, -<some immediate>(1)
0df8b418 1387 [repeat this instruction any (small) number of times]. */
de9f48f0
JG
1388
1389 if ((op & 0xffff0000) == 0x90010000)
1390 {
1391 while ((op & 0xffff0000) == 0x90010000)
1392 {
1393 pc = pc + 4;
e17a4113 1394 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
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>
0df8b418 1409 [possibly one last probe: stw 0,<some immediate>(12)]. */
de9f48f0
JG
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;
e17a4113 1419 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1420 if ((op & 0xffff0000) != 0x3c000000)
1421 break;
1422
1423 pc = pc + 4;
e17a4113 1424 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1425 /* [possibly ori 0,0,<some immediate>] */
1426 if ((op & 0xffff0000) == 0x60000000)
1427 {
1428 pc = pc + 4;
e17a4113 1429 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1430 }
1431 /* add 0,12,0 */
1432 if (op != 0x7c0c0214)
1433 break;
1434
1435 /* cmpw 0,12,0 */
1436 pc = pc + 4;
e17a4113 1437 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1438 if (op != 0x7c0c0000)
1439 break;
1440
1441 /* beq 0,<disp> */
1442 pc = pc + 4;
e17a4113 1443 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1444 if ((op & 0xff9f0001) != 0x41820000)
1445 break;
1446
1447 /* addi 12,12,-<some immediate> */
1448 pc = pc + 4;
e17a4113 1449 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1450 if ((op & 0xffff0000) != 0x398c0000)
1451 break;
1452
1453 /* stw 0,0(12) */
1454 pc = pc + 4;
e17a4113 1455 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1456 if (op != 0x900c0000)
1457 break;
1458
1459 /* b <disp> */
1460 pc = pc + 4;
e17a4113 1461 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1462 if ((op & 0xfc000001) != 0x48000000)
1463 break;
1464
0df8b418 1465 /* [possibly one last probe: stw 0,<some immediate>(12)]. */
de9f48f0 1466 pc = pc + 4;
e17a4113 1467 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1468 if ((op & 0xffff0000) == 0x900c0000)
1469 {
1470 pc = pc + 4;
e17a4113 1471 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
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;
e17a4113 1508 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1509 if ((op & 0xffff0000) != 0x30000000)
1510 break;
1511 }
1512
1513 /* lis 12,<some immediate> */
1514 pc = pc + 4;
e17a4113 1515 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1516 if ((op & 0xffff0000) != 0x3d800000)
1517 break;
1518
1519 /* lwz 12,<some immediate>(12) */
1520 pc = pc + 4;
e17a4113 1521 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
1522 if ((op & 0xffff0000) != 0x818c0000)
1523 break;
1524
1525 /* twllt 0,12 */
1526 pc = pc + 4;
e17a4113 1527 op = rs6000_fetch_instruction (gdbarch, pc);
de9f48f0
JG
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
6a16c029
TJB
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
0df8b418 1559 - vrsave_offset is the offset of the saved vrsave register. */
6a16c029 1560
7a78ae4e 1561static CORE_ADDR
be8626e0
MD
1562skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
1563 struct rs6000_framedata *fdata)
c906108c
SS
1564{
1565 CORE_ADDR orig_pc = pc;
55d05f3b 1566 CORE_ADDR last_prologue_pc = pc;
6be8bc0c 1567 CORE_ADDR li_found_pc = 0;
50fd1280 1568 gdb_byte buf[4];
c906108c
SS
1569 unsigned long op;
1570 long offset = 0;
6be8bc0c 1571 long vr_saved_offset = 0;
482ca3f5
KB
1572 int lr_reg = -1;
1573 int cr_reg = -1;
6be8bc0c 1574 int vr_reg = -1;
96ff0de4
EZ
1575 int ev_reg = -1;
1576 long ev_offset = 0;
6be8bc0c 1577 int vrsave_reg = -1;
c906108c
SS
1578 int reg;
1579 int framep = 0;
1580 int minimal_toc_loaded = 0;
ddb20c56 1581 int prev_insn_was_prologue_insn = 1;
55d05f3b 1582 int num_skip_non_prologue_insns = 0;
773df3e5 1583 int r0_contains_arg = 0;
be8626e0
MD
1584 const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
1585 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 1586 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
c906108c 1587
ddb20c56 1588 memset (fdata, 0, sizeof (struct rs6000_framedata));
c906108c
SS
1589 fdata->saved_gpr = -1;
1590 fdata->saved_fpr = -1;
6be8bc0c 1591 fdata->saved_vr = -1;
96ff0de4 1592 fdata->saved_ev = -1;
c906108c
SS
1593 fdata->alloca_reg = -1;
1594 fdata->frameless = 1;
1595 fdata->nosavedpc = 1;
46a9b8ed 1596 fdata->lr_register = -1;
c906108c 1597
e17a4113 1598 pc = rs6000_skip_stack_check (gdbarch, pc);
de9f48f0
JG
1599 if (pc >= lim_pc)
1600 pc = lim_pc;
1601
55d05f3b 1602 for (;; pc += 4)
c906108c 1603 {
ddb20c56
KB
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).
0df8b418 1607 Otherwise, we'll assume that it really is a prologue instruction. */
ddb20c56
KB
1608 if (prev_insn_was_prologue_insn)
1609 last_prologue_pc = pc;
55d05f3b
KB
1610
1611 /* Stop scanning if we've hit the limit. */
4e463ff5 1612 if (pc >= lim_pc)
55d05f3b
KB
1613 break;
1614
ddb20c56
KB
1615 prev_insn_was_prologue_insn = 1;
1616
55d05f3b 1617 /* Fetch the instruction and convert it to an integer. */
ddb20c56
KB
1618 if (target_read_memory (pc, buf, 4))
1619 break;
e17a4113 1620 op = extract_unsigned_integer (buf, 4, byte_order);
c906108c 1621
c5aa993b
JM
1622 if ((op & 0xfc1fffff) == 0x7c0802a6)
1623 { /* mflr Rx */
43b1ab88
AC
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. */
721d14ba 1641 if (lr_reg == -1)
46a9b8ed 1642 lr_reg = (op & 0x03e00000) >> 21;
773df3e5
JB
1643 if (lr_reg == 0)
1644 r0_contains_arg = 0;
c5aa993b 1645 continue;
c5aa993b
JM
1646 }
1647 else if ((op & 0xfc1fffff) == 0x7c000026)
1648 { /* mfcr Rx */
98f08d3d 1649 cr_reg = (op & 0x03e00000);
773df3e5
JB
1650 if (cr_reg == 0)
1651 r0_contains_arg = 0;
c5aa993b 1652 continue;
c906108c 1653
c906108c 1654 }
c5aa993b
JM
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;
c906108c 1664
c5aa993b
JM
1665 }
1666 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
7a78ae4e
ND
1667 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
1668 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
1669 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
c5aa993b
JM
1670 {
1671
1672 reg = GET_SRC_REG (op);
46a9b8ed
DJ
1673 if ((op & 0xfc1f0000) == 0xbc010000)
1674 fdata->gpr_mask |= ~((1U << reg) - 1);
1675 else
1676 fdata->gpr_mask |= 1U << reg;
c5aa993b
JM
1677 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
1678 {
1679 fdata->saved_gpr = reg;
7a78ae4e 1680 if ((op & 0xfc1f0003) == 0xf8010000)
98f08d3d 1681 op &= ~3UL;
c5aa993b
JM
1682 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
1683 }
1684 continue;
c906108c 1685
ddb20c56 1686 }
ef1bc9e7
AM
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)
ddb20c56 1700 {
96ff0de4 1701 /* nop */
ddb20c56
KB
1702 /* Allow nops in the prologue, but do not consider them to
1703 be part of the prologue unless followed by other prologue
0df8b418 1704 instructions. */
ddb20c56
KB
1705 prev_insn_was_prologue_insn = 0;
1706 continue;
1707
c906108c 1708 }
c5aa993b 1709 else if ((op & 0xffff0000) == 0x3c000000)
ef1bc9e7 1710 { /* addis 0,0,NUM, used for >= 32k frames */
c5aa993b
JM
1711 fdata->offset = (op & 0x0000ffff) << 16;
1712 fdata->frameless = 0;
773df3e5 1713 r0_contains_arg = 0;
c5aa993b
JM
1714 continue;
1715
1716 }
1717 else if ((op & 0xffff0000) == 0x60000000)
ef1bc9e7 1718 { /* ori 0,0,NUM, 2nd half of >= 32k frames */
c5aa993b
JM
1719 fdata->offset |= (op & 0x0000ffff);
1720 fdata->frameless = 0;
773df3e5 1721 r0_contains_arg = 0;
c5aa993b
JM
1722 continue;
1723
1724 }
be723e22 1725 else if (lr_reg >= 0 &&
98f08d3d
KB
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;
c5aa993b 1734 fdata->nosavedpc = 0;
be723e22
MS
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;
98f08d3d
KB
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 }
c5aa993b
JM
1744 continue;
1745
1746 }
be723e22 1747 else if (cr_reg >= 0 &&
98f08d3d
KB
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;
be723e22
MS
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;
98f08d3d
KB
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 }
c5aa993b
JM
1765 continue;
1766
1767 }
721d14ba
DJ
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 }
c5aa993b
JM
1775 else if (op == 0x48000005)
1776 { /* bl .+4 used in
1777 -mrelocatable */
46a9b8ed 1778 fdata->used_bl = 1;
c5aa993b
JM
1779 continue;
1780
1781 }
1782 else if (op == 0x48000004)
1783 { /* b .+4 (xlc) */
1784 break;
1785
c5aa993b 1786 }
6be8bc0c
EZ
1787 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
1788 in V.4 -mminimal-toc */
c5aa993b
JM
1789 (op & 0xffff0000) == 0x3bde0000)
1790 { /* addi 30,30,foo@l */
1791 continue;
c906108c 1792
c5aa993b
JM
1793 }
1794 else if ((op & 0xfc000001) == 0x48000001)
1795 { /* bl foo,
0df8b418 1796 to save fprs??? */
c906108c 1797
c5aa993b 1798 fdata->frameless = 0;
3c77c82a
DJ
1799
1800 /* If the return address has already been saved, we can skip
1801 calls to blrl (for PIC). */
e17a4113 1802 if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op, byte_order))
46a9b8ed
DJ
1803 {
1804 fdata->used_bl = 1;
1805 continue;
1806 }
3c77c82a 1807
6be8bc0c 1808 /* Don't skip over the subroutine call if it is not within
ebd98106
FF
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. */
c5aa993b 1813 if ((pc - orig_pc) > 8)
ebd98106
FF
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
0df8b418
MS
1818 if ((prologue_sal.line == 0)
1819 || (prologue_sal.line != this_sal.line))
ebd98106
FF
1820 break;
1821 }
c5aa993b 1822
e17a4113 1823 op = read_memory_integer (pc + 4, 4, byte_order);
c5aa993b 1824
6be8bc0c
EZ
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
0df8b418 1828 was part of the function prologue. */
c5aa993b
JM
1829
1830 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
0df8b418
MS
1831 break; /* Don't skip over
1832 this branch. */
c5aa993b 1833
46a9b8ed
DJ
1834 fdata->used_bl = 1;
1835 continue;
c5aa993b 1836 }
98f08d3d
KB
1837 /* update stack pointer */
1838 else if ((op & 0xfc1f0000) == 0x94010000)
1839 { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */
c5aa993b
JM
1840 fdata->frameless = 0;
1841 fdata->offset = SIGNED_SHORT (op);
1842 offset = fdata->offset;
1843 continue;
c5aa993b 1844 }
98f08d3d
KB
1845 else if ((op & 0xfc1f016a) == 0x7c01016e)
1846 { /* stwux rX,r1,rY */
0df8b418 1847 /* No way to figure out what r1 is going to be. */
98f08d3d
KB
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 */
0df8b418 1861 /* No way to figure out what r1 is going to be. */
c5aa993b
JM
1862 fdata->frameless = 0;
1863 offset = fdata->offset;
1864 continue;
c5aa993b 1865 }
7313566f
FF
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 }
4e463ff5
DJ
1873 /* Load up minimal toc pointer. Do not treat an epilogue restore
1874 of r31 as a minimal TOC load. */
0df8b418
MS
1875 else if (((op >> 22) == 0x20f || /* l r31,... or l r30,... */
1876 (op >> 22) == 0x3af) /* ld r31,... or ld r30,... */
4e463ff5 1877 && !framep
c5aa993b 1878 && !minimal_toc_loaded)
98f08d3d 1879 {
c5aa993b
JM
1880 minimal_toc_loaded = 1;
1881 continue;
1882
f6077098
KB
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) &&
0df8b418
MS
1889 ((long) ((op >> 16) & 31)
1890 >= fdata->saved_gpr)) /* Rx: local var reg */
f6077098
KB
1891 {
1892 continue;
1893
c5aa993b
JM
1894 /* store parameters in stack */
1895 }
e802b915 1896 /* Move parameters from argument registers to temporary register. */
773df3e5 1897 else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
e802b915 1898 {
c5aa993b
JM
1899 continue;
1900
1901 /* Set up frame pointer */
1902 }
76219d77
JB
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 }
c5aa993b
JM
1912 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
1913 || op == 0x7c3f0b78)
1914 { /* mr r31, r1 */
1915 fdata->frameless = 0;
1916 framep = 1;
6f99cb26 1917 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
c5aa993b
JM
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;
6f99cb26
AC
1926 fdata->alloca_reg = (tdep->ppc_gp0_regnum
1927 + ((op & ~0x38010000) >> 21));
c5aa993b 1928 continue;
c5aa993b 1929 }
6be8bc0c
EZ
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 */
96ff0de4
EZ
1971 /* 001110 01110 00000 iiii iiii iiii iiii */
1972 else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */
1973 || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */
6be8bc0c 1974 {
773df3e5
JB
1975 if ((op & 0xffff0000) == 0x38000000)
1976 r0_contains_arg = 0;
6be8bc0c
EZ
1977 li_found_pc = pc;
1978 vr_saved_offset = SIGNED_SHORT (op);
773df3e5
JB
1979
1980 /* This insn by itself is not part of the prologue, unless
0df8b418 1981 if part of the pair of insns mentioned above. So do not
773df3e5
JB
1982 record this insn as part of the prologue yet. */
1983 prev_insn_was_prologue_insn = 0;
6be8bc0c
EZ
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. */
96ff0de4
EZ
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
c5aa993b
JM
2104 else
2105 {
46a9b8ed
DJ
2106 unsigned int all_mask = ~((1U << fdata->saved_gpr) - 1);
2107
55d05f3b
KB
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
46a9b8ed
DJ
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)
55d05f3b
KB
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 */
64366f1c 2123 /* Never skip branches. */
55d05f3b
KB
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;
c5aa993b 2134 }
c906108c
SS
2135 }
2136
2137#if 0
2138/* I have problems with skipping over __main() that I need to address
0df8b418 2139 * sometime. Previously, I used to use misc_function_vector which
c906108c
SS
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.
64366f1c 2144 We'd like to skip over it as well. Fortunately, xlc does some extra
c906108c 2145 work before calling a function right after a prologue, thus we can
64366f1c 2146 single out such gcc2 behaviour. */
c906108c 2147
c906108c 2148
c5aa993b 2149 if ((op & 0xfc000001) == 0x48000001)
0df8b418 2150 { /* bl foo, an initializer function? */
e17a4113 2151 op = read_memory_integer (pc + 4, 4, byte_order);
c5aa993b
JM
2152
2153 if (op == 0x4def7b82)
2154 { /* cror 0xf, 0xf, 0xf (nop) */
c906108c 2155
64366f1c
EZ
2156 /* Check and see if we are in main. If so, skip over this
2157 initializer function as well. */
c906108c 2158
c5aa993b 2159 tmp = find_pc_misc_function (pc);
6314a349
AC
2160 if (tmp >= 0
2161 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
c5aa993b
JM
2162 return pc + 8;
2163 }
c906108c 2164 }
c906108c 2165#endif /* 0 */
c5aa993b 2166
46a9b8ed
DJ
2167 if (pc == lim_pc && lr_reg >= 0)
2168 fdata->lr_register = lr_reg;
2169
c5aa993b 2170 fdata->offset = -fdata->offset;
ddb20c56 2171 return last_prologue_pc;
c906108c
SS
2172}
2173
7a78ae4e 2174static CORE_ADDR
4a7622d1 2175rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
c906108c 2176{
4a7622d1 2177 struct rs6000_framedata frame;
e3acb115 2178 CORE_ADDR limit_pc, func_addr, func_end_addr = 0;
c906108c 2179
4a7622d1
UW
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. */
e3acb115 2183 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
c5aa993b 2184 {
d80b854b
UW
2185 CORE_ADDR post_prologue_pc
2186 = skip_prologue_using_sal (gdbarch, func_addr);
4a7622d1
UW
2187 if (post_prologue_pc != 0)
2188 return max (pc, post_prologue_pc);
c906108c 2189 }
c906108c 2190
4a7622d1
UW
2191 /* Can't determine prologue from the symbol table, need to examine
2192 instructions. */
c906108c 2193
4a7622d1
UW
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. */
d80b854b 2197 limit_pc = skip_prologue_using_sal (gdbarch, pc);
4a7622d1
UW
2198 if (limit_pc == 0)
2199 limit_pc = pc + 100; /* Magic. */
794a477a 2200
e3acb115
JB
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
4a7622d1
UW
2206 pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
2207 return pc;
c906108c 2208}
c906108c 2209
8ab3d180
KB
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
63807e1d 2218static CORE_ADDR
8ab3d180
KB
2219rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
2220{
e17a4113 2221 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8ab3d180
KB
2222 gdb_byte buf[4];
2223 unsigned long op;
2224
2225 if (target_read_memory (pc, buf, 4))
2226 return pc;
e17a4113 2227 op = extract_unsigned_integer (buf, 4, byte_order);
8ab3d180
KB
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;
7cbd4a93 2233 struct bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
8ab3d180
KB
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. */
7cbd4a93 2238 if (s.minsym != NULL
efd66ac6
TT
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))
8ab3d180
KB
2242 pc += 4;
2243 }
2244 return pc;
2245}
383f0f5b 2246
4a7622d1
UW
2247/* All the ABI's require 16 byte alignment. */
2248static CORE_ADDR
2249rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2250{
2251 return (addr & -16);
c906108c
SS
2252}
2253
977adac5
ND
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.
2ec664f5
MS
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.
977adac5 2272
e76f05fa
UW
2273 Instead, use the gdbarch_skip_trampoline_code and
2274 gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2ec664f5 2275 @FIX code. */
977adac5 2276
63807e1d 2277static int
e17a4113 2278rs6000_in_solib_return_trampoline (struct gdbarch *gdbarch,
2c02bd72 2279 CORE_ADDR pc, const char *name)
977adac5 2280{
61012eef 2281 return name && startswith (name, "@FIX");
977adac5
ND
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
c906108c 2291 indirect function call trampolines).
977adac5
ND
2292
2293 3. Skip bigtoc fixup code.
2294
c906108c 2295 Result is desired PC to step until, or NULL if we are not in
977adac5 2296 code that should be skipped. */
c906108c 2297
63807e1d 2298static CORE_ADDR
52f729a7 2299rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
c906108c 2300{
e17a4113
UW
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);
52f0bd74 2304 unsigned int ii, op;
977adac5 2305 int rel;
c906108c 2306 CORE_ADDR solib_target_pc;
7cbd4a93 2307 struct bound_minimal_symbol msymbol;
c906108c 2308
c5aa993b
JM
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
c906108c
SS
2319 };
2320
977adac5
ND
2321 /* Check for bigtoc fixup code. */
2322 msymbol = lookup_minimal_symbol_by_pc (pc);
7cbd4a93 2323 if (msymbol.minsym
e17a4113 2324 && rs6000_in_solib_return_trampoline (gdbarch, pc,
efd66ac6 2325 MSYMBOL_LINKAGE_NAME (msymbol.minsym)))
977adac5
ND
2326 {
2327 /* Double-check that the third instruction from PC is relative "b". */
e17a4113 2328 op = read_memory_integer (pc + 8, 4, byte_order);
977adac5
ND
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
c906108c 2338 /* If pc is in a shared library trampoline, return its target. */
52f729a7 2339 solib_target_pc = find_solib_trampoline_target (frame, pc);
c906108c
SS
2340 if (solib_target_pc)
2341 return solib_target_pc;
2342
c5aa993b
JM
2343 for (ii = 0; trampoline_code[ii]; ++ii)
2344 {
e17a4113 2345 op = read_memory_integer (pc + (ii * 4), 4, byte_order);
c5aa993b
JM
2346 if (op != trampoline_code[ii])
2347 return 0;
2348 }
0df8b418
MS
2349 ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination
2350 addr. */
e17a4113 2351 pc = read_memory_unsigned_integer (ii, tdep->wordsize, byte_order);
c906108c
SS
2352 return pc;
2353}
2354
794ac428
UW
2355/* ISA-specific vector types. */
2356
2357static struct type *
2358rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2359{
2360 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2361
2362 if (!tdep->ppc_builtin_type_vec64)
2363 {
df4df182
UW
2364 const struct builtin_type *bt = builtin_type (gdbarch);
2365
794ac428
UW
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
e9bb382b
UW
2380 t = arch_composite_type (gdbarch,
2381 "__ppc_builtin_type_vec64", TYPE_CODE_UNION);
df4df182 2382 append_composite_type_field (t, "uint64", bt->builtin_int64);
794ac428 2383 append_composite_type_field (t, "v2_float",
df4df182 2384 init_vector_type (bt->builtin_float, 2));
794ac428 2385 append_composite_type_field (t, "v2_int32",
df4df182 2386 init_vector_type (bt->builtin_int32, 2));
794ac428 2387 append_composite_type_field (t, "v4_int16",
df4df182 2388 init_vector_type (bt->builtin_int16, 4));
794ac428 2389 append_composite_type_field (t, "v8_int8",
df4df182 2390 init_vector_type (bt->builtin_int8, 8));
794ac428 2391
876cecd0 2392 TYPE_VECTOR (t) = 1;
794ac428
UW
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
604c2f83
LM
2400/* Vector 128 type. */
2401
2402static struct type *
2403rs6000_builtin_type_vec128 (struct gdbarch *gdbarch)
2404{
2405 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2406
2407 if (!tdep->ppc_builtin_type_vec128)
2408 {
df4df182
UW
2409 const struct builtin_type *bt = builtin_type (gdbarch);
2410
604c2f83
LM
2411 /* The type we're building is this
2412
2413 type = union __ppc_builtin_type_vec128 {
2414 uint128_t uint128;
db9f5df8 2415 double v2_double[2];
604c2f83
LM
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
e9bb382b
UW
2425 t = arch_composite_type (gdbarch,
2426 "__ppc_builtin_type_vec128", TYPE_CODE_UNION);
df4df182 2427 append_composite_type_field (t, "uint128", bt->builtin_uint128);
db9f5df8
UW
2428 append_composite_type_field (t, "v2_double",
2429 init_vector_type (bt->builtin_double, 2));
604c2f83 2430 append_composite_type_field (t, "v4_float",
df4df182 2431 init_vector_type (bt->builtin_float, 4));
604c2f83 2432 append_composite_type_field (t, "v4_int32",
df4df182 2433 init_vector_type (bt->builtin_int32, 4));
604c2f83 2434 append_composite_type_field (t, "v8_int16",
df4df182 2435 init_vector_type (bt->builtin_int16, 8));
604c2f83 2436 append_composite_type_field (t, "v16_int8",
df4df182 2437 init_vector_type (bt->builtin_int8, 16));
604c2f83 2438
803e1097 2439 TYPE_VECTOR (t) = 1;
604c2f83
LM
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
7cc46491
DJ
2447/* Return the name of register number REGNO, or the empty string if it
2448 is an anonymous register. */
7a78ae4e 2449
fa88f677 2450static const char *
d93859e2 2451rs6000_register_name (struct gdbarch *gdbarch, int regno)
7a78ae4e 2452{
d93859e2 2453 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7a78ae4e 2454
7cc46491
DJ
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
604c2f83
LM
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
7cc46491 2469 /* Check if the SPE pseudo registers are available. */
5a9e69ba 2470 if (IS_SPE_PSEUDOREG (tdep, regno))
7cc46491
DJ
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
f949c649
TJB
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
604c2f83
LM
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
d93859e2 2523 return tdesc_register_name (gdbarch, regno);
7a78ae4e
ND
2524}
2525
7cc46491
DJ
2526/* Return the GDB type object for the "standard" data type of data in
2527 register N. */
7a78ae4e
ND
2528
2529static struct type *
7cc46491 2530rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
7a78ae4e 2531{
691d145a 2532 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7a78ae4e 2533
7cc46491 2534 /* These are the only pseudo-registers we support. */
f949c649 2535 gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
604c2f83
LM
2536 || IS_DFP_PSEUDOREG (tdep, regnum)
2537 || IS_VSX_PSEUDOREG (tdep, regnum)
2538 || IS_EFP_PSEUDOREG (tdep, regnum));
7cc46491 2539
f949c649
TJB
2540 /* These are the e500 pseudo-registers. */
2541 if (IS_SPE_PSEUDOREG (tdep, regnum))
2542 return rs6000_builtin_type_vec64 (gdbarch);
604c2f83
LM
2543 else if (IS_DFP_PSEUDOREG (tdep, regnum))
2544 /* PPC decimal128 pseudo-registers. */
f949c649 2545 return builtin_type (gdbarch)->builtin_declong;
604c2f83
LM
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;
7a78ae4e
ND
2552}
2553
c44ca51c
AC
2554/* Is REGNUM a member of REGGROUP? */
2555static int
7cc46491
DJ
2556rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2557 struct reggroup *group)
c44ca51c
AC
2558{
2559 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
c44ca51c 2560
7cc46491 2561 /* These are the only pseudo-registers we support. */
f949c649 2562 gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
604c2f83
LM
2563 || IS_DFP_PSEUDOREG (tdep, regnum)
2564 || IS_VSX_PSEUDOREG (tdep, regnum)
2565 || IS_EFP_PSEUDOREG (tdep, regnum));
c44ca51c 2566
604c2f83
LM
2567 /* These are the e500 pseudo-registers or the POWER7 VSX registers. */
2568 if (IS_SPE_PSEUDOREG (tdep, regnum) || IS_VSX_PSEUDOREG (tdep, regnum))
f949c649 2569 return group == all_reggroup || group == vector_reggroup;
7cc46491 2570 else
604c2f83 2571 /* PPC decimal128 or Extended FP pseudo-registers. */
f949c649 2572 return group == all_reggroup || group == float_reggroup;
c44ca51c
AC
2573}
2574
691d145a 2575/* The register format for RS/6000 floating point registers is always
64366f1c 2576 double, we need a conversion if the memory format is float. */
7a78ae4e
ND
2577
2578static int
0abe36f5
MD
2579rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2580 struct type *type)
7a78ae4e 2581{
0abe36f5 2582 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7cc46491
DJ
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
0dfff4cb
UW
2588 && TYPE_LENGTH (type)
2589 != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double));
7a78ae4e
ND
2590}
2591
8dccd430 2592static int
691d145a
JB
2593rs6000_register_to_value (struct frame_info *frame,
2594 int regnum,
2595 struct type *type,
8dccd430
PA
2596 gdb_byte *to,
2597 int *optimizedp, int *unavailablep)
7a78ae4e 2598{
0dfff4cb 2599 struct gdbarch *gdbarch = get_frame_arch (frame);
50fd1280 2600 gdb_byte from[MAX_REGISTER_SIZE];
691d145a 2601
691d145a 2602 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
7a78ae4e 2603
8dccd430
PA
2604 if (!get_frame_register_bytes (frame, regnum, 0,
2605 register_size (gdbarch, regnum),
2606 from, optimizedp, unavailablep))
2607 return 0;
2608
0dfff4cb
UW
2609 convert_typed_floating (from, builtin_type (gdbarch)->builtin_double,
2610 to, type);
8dccd430
PA
2611 *optimizedp = *unavailablep = 0;
2612 return 1;
691d145a 2613}
7a292a7a 2614
7a78ae4e 2615static void
691d145a
JB
2616rs6000_value_to_register (struct frame_info *frame,
2617 int regnum,
2618 struct type *type,
50fd1280 2619 const gdb_byte *from)
7a78ae4e 2620{
0dfff4cb 2621 struct gdbarch *gdbarch = get_frame_arch (frame);
50fd1280 2622 gdb_byte to[MAX_REGISTER_SIZE];
691d145a 2623
691d145a
JB
2624 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2625
0dfff4cb
UW
2626 convert_typed_floating (from, type,
2627 to, builtin_type (gdbarch)->builtin_double);
691d145a 2628 put_frame_register (frame, regnum, to);
7a78ae4e 2629}
c906108c 2630
05d1431c
PA
2631 /* The type of a function that moves the value of REG between CACHE
2632 or BUF --- in either direction. */
2633typedef enum register_status (*move_ev_register_func) (struct regcache *,
2634 int, void *);
2635
6ced10dd
JB
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, ... */
05d1431c
PA
2659
2660static enum register_status
2661e500_move_ev_register (move_ev_register_func move,
2662 struct regcache *regcache, int ev_reg, void *buffer)
6ced10dd
JB
2663{
2664 struct gdbarch *arch = get_regcache_arch (regcache);
2665 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2666 int reg_index;
19ba03f4 2667 gdb_byte *byte_buffer = (gdb_byte *) buffer;
05d1431c 2668 enum register_status status;
6ced10dd 2669
5a9e69ba 2670 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
6ced10dd
JB
2671
2672 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2673
8b164abb 2674 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
6ced10dd 2675 {
05d1431c
PA
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);
6ced10dd
JB
2681 }
2682 else
2683 {
05d1431c
PA
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);
6ced10dd 2688 }
05d1431c
PA
2689
2690 return status;
6ced10dd
JB
2691}
2692
05d1431c
PA
2693static enum register_status
2694do_regcache_raw_read (struct regcache *regcache, int regnum, void *buffer)
2695{
19ba03f4 2696 return regcache_raw_read (regcache, regnum, (gdb_byte *) buffer);
05d1431c
PA
2697}
2698
2699static enum register_status
2700do_regcache_raw_write (struct regcache *regcache, int regnum, void *buffer)
2701{
19ba03f4 2702 regcache_raw_write (regcache, regnum, (const gdb_byte *) buffer);
05d1431c
PA
2703
2704 return REG_VALID;
2705}
2706
2707static enum register_status
c8001721 2708e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
50fd1280 2709 int reg_nr, gdb_byte *buffer)
f949c649 2710{
05d1431c 2711 return e500_move_ev_register (do_regcache_raw_read, regcache, reg_nr, buffer);
f949c649
TJB
2712}
2713
2714static void
2715e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2716 int reg_nr, const gdb_byte *buffer)
2717{
05d1431c
PA
2718 e500_move_ev_register (do_regcache_raw_write, regcache,
2719 reg_nr, (void *) buffer);
f949c649
TJB
2720}
2721
604c2f83 2722/* Read method for DFP pseudo-registers. */
05d1431c 2723static enum register_status
604c2f83 2724dfp_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
f949c649
TJB
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;
05d1431c 2729 enum register_status status;
f949c649
TJB
2730
2731 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2732 {
2733 /* Read two FP registers to form a whole dl register. */
05d1431c
PA
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);
f949c649
TJB
2739 }
2740 else
2741 {
05d1431c 2742 status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
0ff3e01f 2743 2 * reg_index + 1, buffer);
05d1431c
PA
2744 if (status == REG_VALID)
2745 status = regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
0ff3e01f 2746 2 * reg_index, buffer + 8);
f949c649 2747 }
05d1431c
PA
2748
2749 return status;
f949c649
TJB
2750}
2751
604c2f83 2752/* Write method for DFP pseudo-registers. */
f949c649 2753static void
604c2f83 2754dfp_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
f949c649
TJB
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 +
0ff3e01f 2772 2 * reg_index + 1, buffer);
f949c649 2773 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
0ff3e01f 2774 2 * reg_index, buffer + 8);
f949c649
TJB
2775 }
2776}
2777
604c2f83 2778/* Read method for POWER7 VSX pseudo-registers. */
05d1431c 2779static enum register_status
604c2f83
LM
2780vsx_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;
05d1431c 2785 enum register_status status;
604c2f83
LM
2786
2787 /* Read the portion that overlaps the VMX registers. */
2788 if (reg_index > 31)
05d1431c
PA
2789 status = regcache_raw_read (regcache, tdep->ppc_vr0_regnum +
2790 reg_index - 32, buffer);
604c2f83
LM
2791 else
2792 /* Read the portion that overlaps the FPR registers. */
2793 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2794 {
05d1431c
PA
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);
604c2f83
LM
2800 }
2801 else
2802 {
05d1431c
PA
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);
604c2f83 2808 }
05d1431c
PA
2809
2810 return status;
604c2f83
LM
2811}
2812
2813/* Write method for POWER7 VSX pseudo-registers. */
2814static void
2815vsx_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. */
05d1431c 2844static enum register_status
604c2f83
LM
2845efpr_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;
084ee545 2850 int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
604c2f83 2851
d9492458 2852 /* Read the portion that overlaps the VMX register. */
084ee545
UW
2853 return regcache_raw_read_part (regcache, tdep->ppc_vr0_regnum + reg_index,
2854 offset, register_size (gdbarch, reg_nr),
2855 buffer);
604c2f83
LM
2856}
2857
2858/* Write method for POWER7 Extended FP pseudo-registers. */
2859static void
2860efpr_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;
084ee545 2865 int offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
604c2f83 2866
d9492458 2867 /* Write the portion that overlaps the VMX register. */
084ee545
UW
2868 regcache_raw_write_part (regcache, tdep->ppc_vr0_regnum + reg_index,
2869 offset, register_size (gdbarch, reg_nr),
2870 buffer);
604c2f83
LM
2871}
2872
05d1431c 2873static enum register_status
0df8b418
MS
2874rs6000_pseudo_register_read (struct gdbarch *gdbarch,
2875 struct regcache *regcache,
f949c649 2876 int reg_nr, gdb_byte *buffer)
c8001721 2877{
6ced10dd 2878 struct gdbarch *regcache_arch = get_regcache_arch (regcache);
c8001721
EZ
2879 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2880
6ced10dd 2881 gdb_assert (regcache_arch == gdbarch);
f949c649 2882
5a9e69ba 2883 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
05d1431c 2884 return e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
f949c649 2885 else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
05d1431c 2886 return dfp_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
604c2f83 2887 else if (IS_VSX_PSEUDOREG (tdep, reg_nr))
05d1431c 2888 return vsx_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
604c2f83 2889 else if (IS_EFP_PSEUDOREG (tdep, reg_nr))
05d1431c 2890 return efpr_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
6ced10dd 2891 else
a44bddec 2892 internal_error (__FILE__, __LINE__,
f949c649
TJB
2893 _("rs6000_pseudo_register_read: "
2894 "called on unexpected register '%s' (%d)"),
2895 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
c8001721
EZ
2896}
2897
2898static void
f949c649
TJB
2899rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2900 struct regcache *regcache,
2901 int reg_nr, const gdb_byte *buffer)
c8001721 2902{
6ced10dd 2903 struct gdbarch *regcache_arch = get_regcache_arch (regcache);
c8001721
EZ
2904 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2905
6ced10dd 2906 gdb_assert (regcache_arch == gdbarch);
f949c649 2907
5a9e69ba 2908 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
f949c649
TJB
2909 e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2910 else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
604c2f83
LM
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);
6ced10dd 2916 else
a44bddec 2917 internal_error (__FILE__, __LINE__,
f949c649
TJB
2918 _("rs6000_pseudo_register_write: "
2919 "called on unexpected register '%s' (%d)"),
2920 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
6ced10dd
JB
2921}
2922
2a2fa07b
MK
2923static int
2924rs6000_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
a67914de
MK
2967static void
2968rs6000_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
18ed0c4e 2979/* Convert a DBX STABS register number to a GDB register number. */
c8001721 2980static int
d3f73121 2981rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
c8001721 2982{
d3f73121 2983 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
c8001721 2984
9f744501
JB
2985 if (0 <= num && num <= 31)
2986 return tdep->ppc_gp0_regnum + num;
2987 else if (32 <= num && num <= 63)
383f0f5b
JB
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. */
366f009f 2991 return tdep->ppc_fp0_regnum + (num - 32);
18ed0c4e
JB
2992 else if (77 <= num && num <= 108)
2993 return tdep->ppc_vr0_regnum + (num - 77);
9f744501 2994 else if (1200 <= num && num < 1200 + 32)
e1ec1b42 2995 return tdep->ppc_ev0_upper_regnum + (num - 1200);
9f744501
JB
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;
18ed0c4e
JB
3009 case 110:
3010 return tdep->ppc_vrsave_regnum - 1; /* vscr */
867e2dc5 3011 case 111:
18ed0c4e 3012 return tdep->ppc_acc_regnum;
867e2dc5 3013 case 112:
18ed0c4e 3014 return tdep->ppc_spefscr_regnum;
9f744501
JB
3015 default:
3016 return num;
3017 }
18ed0c4e 3018}
9f744501 3019
9f744501 3020
18ed0c4e
JB
3021/* Convert a Dwarf 2 register number to a GDB register number. */
3022static int
d3f73121 3023rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
18ed0c4e 3024{
d3f73121 3025 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9f744501 3026
18ed0c4e
JB
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)
e1ec1b42 3037 return tdep->ppc_ev0_upper_regnum + (num - 1200);
18ed0c4e
JB
3038 else
3039 switch (num)
3040 {
a489f789
AS
3041 case 64:
3042 return tdep->ppc_cr_regnum;
18ed0c4e
JB
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 }
2188cbdd
EZ
3062}
3063
4fc771b8
DJ
3064/* Translate a .eh_frame register to DWARF register, or adjust a
3065 .debug_frame register. */
3066
3067static int
3068rs6000_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}
c906108c 3127\f
c5aa993b 3128
7a78ae4e 3129/* Handling the various POWER/PowerPC variants. */
c906108c 3130
c906108c 3131/* Information about a particular processor variant. */
7a78ae4e 3132
c906108c 3133struct variant
c5aa993b
JM
3134 {
3135 /* Name of this variant. */
3136 char *name;
c906108c 3137
c5aa993b
JM
3138 /* English description of the variant. */
3139 char *description;
c906108c 3140
64366f1c 3141 /* bfd_arch_info.arch corresponding to variant. */
7a78ae4e
ND
3142 enum bfd_architecture arch;
3143
64366f1c 3144 /* bfd_arch_info.mach corresponding to variant. */
7a78ae4e
ND
3145 unsigned long mach;
3146
7cc46491
DJ
3147 /* Target description for this variant. */
3148 struct target_desc **tdesc;
c5aa993b 3149 };
c906108c 3150
489461e2 3151static struct variant variants[] =
c906108c 3152{
7a78ae4e 3153 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
7284e1be 3154 bfd_mach_ppc, &tdesc_powerpc_altivec32},
7a78ae4e 3155 {"power", "POWER user-level", bfd_arch_rs6000,
7cc46491 3156 bfd_mach_rs6k, &tdesc_rs6000},
7a78ae4e 3157 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
7cc46491 3158 bfd_mach_ppc_403, &tdesc_powerpc_403},
4d09ffea
MS
3159 {"405", "IBM PowerPC 405", bfd_arch_powerpc,
3160 bfd_mach_ppc_405, &tdesc_powerpc_405},
7a78ae4e 3161 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
7cc46491 3162 bfd_mach_ppc_601, &tdesc_powerpc_601},
7a78ae4e 3163 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
7cc46491 3164 bfd_mach_ppc_602, &tdesc_powerpc_602},
7a78ae4e 3165 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
7cc46491 3166 bfd_mach_ppc_603, &tdesc_powerpc_603},
7a78ae4e 3167 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
7cc46491 3168 604, &tdesc_powerpc_604},
7a78ae4e 3169 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
7cc46491 3170 bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
7a78ae4e 3171 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
7cc46491 3172 bfd_mach_ppc_505, &tdesc_powerpc_505},
7a78ae4e 3173 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
7cc46491 3174 bfd_mach_ppc_860, &tdesc_powerpc_860},
7a78ae4e 3175 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
7cc46491 3176 bfd_mach_ppc_750, &tdesc_powerpc_750},
1fcc0bb8 3177 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
7cc46491 3178 bfd_mach_ppc_7400, &tdesc_powerpc_7400},
c8001721 3179 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
7cc46491 3180 bfd_mach_ppc_e500, &tdesc_powerpc_e500},
7a78ae4e 3181
5d57ee30
KB
3182 /* 64-bit */
3183 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
7284e1be 3184 bfd_mach_ppc64, &tdesc_powerpc_altivec64},
7a78ae4e 3185 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
7cc46491 3186 bfd_mach_ppc_620, &tdesc_powerpc_64},
5d57ee30 3187 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
7cc46491 3188 bfd_mach_ppc_630, &tdesc_powerpc_64},
7a78ae4e 3189 {"a35", "PowerPC A35", bfd_arch_powerpc,
7cc46491 3190 bfd_mach_ppc_a35, &tdesc_powerpc_64},
5d57ee30 3191 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
7cc46491 3192 bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
5d57ee30 3193 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
7cc46491 3194 bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
5d57ee30 3195
64366f1c 3196 /* FIXME: I haven't checked the register sets of the following. */
7a78ae4e 3197 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
7cc46491 3198 bfd_mach_rs6k_rs1, &tdesc_rs6000},
7a78ae4e 3199 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
7cc46491 3200 bfd_mach_rs6k_rsc, &tdesc_rs6000},
7a78ae4e 3201 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
7cc46491 3202 bfd_mach_rs6k_rs2, &tdesc_rs6000},
7a78ae4e 3203
3e45d68b 3204 {0, 0, (enum bfd_architecture) 0, 0, 0}
c906108c
SS
3205};
3206
7a78ae4e 3207/* Return the variant corresponding to architecture ARCH and machine number
64366f1c 3208 MACH. If no such variant exists, return null. */
c906108c 3209
7a78ae4e
ND
3210static const struct variant *
3211find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
c906108c 3212{
7a78ae4e 3213 const struct variant *v;
c5aa993b 3214
7a78ae4e
ND
3215 for (v = variants; v->name; v++)
3216 if (arch == v->arch && mach == v->mach)
3217 return v;
c906108c 3218
7a78ae4e 3219 return NULL;
c906108c 3220}
9364a0ef
EZ
3221
3222static int
3223gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
3224{
40887e1a 3225 if (info->endian == BFD_ENDIAN_BIG)
9364a0ef
EZ
3226 return print_insn_big_powerpc (memaddr, info);
3227 else
3228 return print_insn_little_powerpc (memaddr, info);
3229}
7a78ae4e 3230\f
61a65099
KB
3231static CORE_ADDR
3232rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3233{
3e8c568d 3234 return frame_unwind_register_unsigned (next_frame,
8b164abb 3235 gdbarch_pc_regnum (gdbarch));
61a65099
KB
3236}
3237
3238static struct frame_id
1af5d7ce 3239rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
61a65099 3240{
1af5d7ce
UW
3241 return frame_id_build (get_frame_register_unsigned
3242 (this_frame, gdbarch_sp_regnum (gdbarch)),
3243 get_frame_pc (this_frame));
61a65099
KB
3244}
3245
3246struct rs6000_frame_cache
3247{
3248 CORE_ADDR base;
3249 CORE_ADDR initial_sp;
3250 struct trad_frame_saved_reg *saved_regs;
50ae56ec
WW
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;
61a65099
KB
3258};
3259
3260static struct rs6000_frame_cache *
1af5d7ce 3261rs6000_frame_cache (struct frame_info *this_frame, void **this_cache)
61a65099
KB
3262{
3263 struct rs6000_frame_cache *cache;
1af5d7ce 3264 struct gdbarch *gdbarch = get_frame_arch (this_frame);
61a65099 3265 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 3266 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
61a65099
KB
3267 struct rs6000_framedata fdata;
3268 int wordsize = tdep->wordsize;
338435ef 3269 CORE_ADDR func = 0, pc = 0;
61a65099
KB
3270
3271 if ((*this_cache) != NULL)
19ba03f4 3272 return (struct rs6000_frame_cache *) (*this_cache);
61a65099
KB
3273 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
3274 (*this_cache) = cache;
50ae56ec 3275 cache->pc = 0;
1af5d7ce 3276 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
61a65099 3277
50ae56ec
WW
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);
1ed0c2a4 3299 return (struct rs6000_frame_cache *) (*this_cache);
50ae56ec
WW
3300 }
3301 END_CATCH
e10b1c4c
DJ
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.
ef02daa9 3306 get_frame_func returns the wrong address or 0), and assembly
e10b1c4c
DJ
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)
61a65099 3313 {
e10b1c4c
DJ
3314 CORE_ADDR saved_lr;
3315 int make_frame = 0;
3316
1af5d7ce 3317 saved_lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
e10b1c4c
DJ
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;
de6a76fd 3330 fdata.lr_offset = tdep->lr_frame_offset;
e10b1c4c 3331 }
61a65099 3332 }
e10b1c4c
DJ
3333
3334 if (!fdata.frameless)
9d9bf2df
EBM
3335 {
3336 /* Frameless really means stackless. */
cc2c4da8 3337 ULONGEST backchain;
9d9bf2df 3338
cc2c4da8
MK
3339 if (safe_read_memory_unsigned_integer (cache->base, wordsize,
3340 byte_order, &backchain))
9d9bf2df
EBM
3341 cache->base = (CORE_ADDR) backchain;
3342 }
e10b1c4c 3343
3e8c568d 3344 trad_frame_set_value (cache->saved_regs,
8b164abb 3345 gdbarch_sp_regnum (gdbarch), cache->base);
61a65099
KB
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;
383f0f5b
JB
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))
063715bf 3360 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
383f0f5b
JB
3361 {
3362 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3363 fpr_addr += 8;
3364 }
61a65099
KB
3365 }
3366
3367 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
46a9b8ed
DJ
3368 All gpr's from saved_gpr to gpr31 are saved (except during the
3369 prologue). */
61a65099
KB
3370
3371 if (fdata.saved_gpr >= 0)
3372 {
3373 int i;
3374 CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
063715bf 3375 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
61a65099 3376 {
46a9b8ed
DJ
3377 if (fdata.gpr_mask & (1U << i))
3378 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
61a65099
KB
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.
0df8b418 3400 All vr's from saved_ev to ev31 are saved. ????? */
5a9e69ba 3401 if (tdep->ppc_ev0_regnum != -1)
61a65099
KB
3402 {
3403 if (fdata.saved_ev >= 0)
3404 {
3405 int i;
3406 CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
dea80df0
MR
3407 CORE_ADDR off = (byte_order == BFD_ENDIAN_BIG ? 4 : 0);
3408
063715bf 3409 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
61a65099
KB
3410 {
3411 cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
dea80df0 3412 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + off;
61a65099 3413 ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
dea80df0 3414 }
61a65099
KB
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)
0df8b418
MS
3421 cache->saved_regs[tdep->ppc_cr_regnum].addr
3422 = cache->base + fdata.cr_offset;
61a65099
KB
3423
3424 /* If != 0, fdata.lr_offset is the offset from the frame that
3425 holds the LR. */
3426 if (fdata.lr_offset != 0)
0df8b418
MS
3427 cache->saved_regs[tdep->ppc_lr_regnum].addr
3428 = cache->base + fdata.lr_offset;
46a9b8ed
DJ
3429 else if (fdata.lr_register != -1)
3430 cache->saved_regs[tdep->ppc_lr_regnum].realreg = fdata.lr_register;
61a65099 3431 /* The PC is found in the link register. */
8b164abb 3432 cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3e8c568d 3433 cache->saved_regs[tdep->ppc_lr_regnum];
61a65099
KB
3434
3435 /* If != 0, fdata.vrsave_offset is the offset from the frame that
3436 holds the VRSAVE. */
3437 if (fdata.vrsave_offset != 0)
0df8b418
MS
3438 cache->saved_regs[tdep->ppc_vrsave_regnum].addr
3439 = cache->base + fdata.vrsave_offset;
61a65099
KB
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. */
1af5d7ce
UW
3444 cache->initial_sp
3445 = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
61a65099 3446 else
1af5d7ce
UW
3447 cache->initial_sp
3448 = get_frame_register_unsigned (this_frame, fdata.alloca_reg);
61a65099 3449
50ae56ec 3450 cache->base_p = 1;
61a65099
KB
3451 return cache;
3452}
3453
3454static void
1af5d7ce 3455rs6000_frame_this_id (struct frame_info *this_frame, void **this_cache,
61a65099
KB
3456 struct frame_id *this_id)
3457{
1af5d7ce 3458 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
61a65099 3459 this_cache);
50ae56ec
WW
3460
3461 if (!info->base_p)
3462 {
3463 (*this_id) = frame_id_build_unavailable_stack (info->pc);
3464 return;
3465 }
3466
5b197912
UW
3467 /* This marks the outermost frame. */
3468 if (info->base == 0)
3469 return;
3470
1af5d7ce 3471 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
61a65099
KB
3472}
3473
1af5d7ce
UW
3474static struct value *
3475rs6000_frame_prev_register (struct frame_info *this_frame,
3476 void **this_cache, int regnum)
61a65099 3477{
1af5d7ce 3478 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
61a65099 3479 this_cache);
1af5d7ce 3480 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
61a65099
KB
3481}
3482
3483static const struct frame_unwind rs6000_frame_unwind =
3484{
3485 NORMAL_FRAME,
8fbca658 3486 default_frame_unwind_stop_reason,
61a65099 3487 rs6000_frame_this_id,
1af5d7ce
UW
3488 rs6000_frame_prev_register,
3489 NULL,
3490 default_frame_sniffer
61a65099 3491};
2608dbf8 3492
ddeca1df
WW
3493/* Allocate and initialize a frame cache for an epilogue frame.
3494 SP is restored and prev-PC is stored in LR. */
3495
2608dbf8
WW
3496static struct rs6000_frame_cache *
3497rs6000_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
3498{
2608dbf8
WW
3499 struct rs6000_frame_cache *cache;
3500 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3501 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2608dbf8
WW
3502
3503 if (*this_cache)
19ba03f4 3504 return (struct rs6000_frame_cache *) *this_cache;
2608dbf8
WW
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
492d29ea 3510 TRY
2608dbf8
WW
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 }
492d29ea 3525 CATCH (ex, RETURN_MASK_ERROR)
7556d4a4
PA
3526 {
3527 if (ex.error != NOT_AVAILABLE_ERROR)
3528 throw_exception (ex);
3529 }
492d29ea 3530 END_CATCH
2608dbf8
WW
3531
3532 return cache;
3533}
3534
ddeca1df
WW
3535/* Implementation of frame_unwind.this_id, as defined in frame_unwind.h.
3536 Return the frame ID of an epilogue frame. */
3537
2608dbf8
WW
3538static void
3539rs6000_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
ddeca1df
WW
3553/* Implementation of frame_unwind.prev_register, as defined in frame_unwind.h.
3554 Return the register value of REGNUM in previous frame. */
3555
2608dbf8
WW
3556static struct value *
3557rs6000_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
ddeca1df
WW
3565/* Implementation of frame_unwind.sniffer, as defined in frame_unwind.h.
3566 Check whether this an epilogue frame. */
3567
2608dbf8
WW
3568static int
3569rs6000_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
ddeca1df
WW
3581/* Frame unwinder for epilogue frame. This is required for reverse step-over
3582 a function without debug information. */
3583
2608dbf8
WW
3584static 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};
61a65099
KB
3592\f
3593
3594static CORE_ADDR
1af5d7ce 3595rs6000_frame_base_address (struct frame_info *this_frame, void **this_cache)
61a65099 3596{
1af5d7ce 3597 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
61a65099
KB
3598 this_cache);
3599 return info->initial_sp;
3600}
3601
3602static 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
3609static const struct frame_base *
1af5d7ce 3610rs6000_frame_base_sniffer (struct frame_info *this_frame)
61a65099
KB
3611{
3612 return &rs6000_frame_base;
3613}
3614
9274a07c
LM
3615/* DWARF-2 frame support. Used to handle the detection of
3616 clobbered registers during function calls. */
3617
3618static void
3619ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3620 struct dwarf2_frame_state_reg *reg,
4a4e5149 3621 struct frame_info *this_frame)
9274a07c
LM
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. */
40a6adc1 3670 if (regnum == gdbarch_pc_regnum (gdbarch))
9274a07c 3671 reg->how = DWARF2_FRAME_REG_RA;
40a6adc1 3672 else if (regnum == gdbarch_sp_regnum (gdbarch))
9274a07c
LM
3673 reg->how = DWARF2_FRAME_REG_CFA;
3674}
3675
3676
74af9197
NF
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
3683static int
3684bfd_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
50a99728 3696#ifdef HAVE_ELF
74af9197
NF
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;
50a99728 3704#endif
74af9197
NF
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);
224c3ddb 3711 contents = (gdb_byte *) xmalloc (size);
74af9197
NF
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
b4cdae6f
WW
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
ddeca1df
WW
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. */
b4cdae6f
WW
3833
3834static int
3835ppc_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
ddeca1df
WW
3857/* Parse and record instructions primary opcode-4 at ADDR.
3858 Return 0 if successful. */
b4cdae6f
WW
3859
3860static int
3861ppc_process_record_op4 (struct gdbarch *gdbarch, struct regcache *regcache,
ddeca1df 3862 CORE_ADDR addr, uint32_t insn)
b4cdae6f
WW
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
810c1026
WW
4121 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4122 "at %s, 4-%d.\n", insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
4123 return -1;
4124}
4125
ddeca1df
WW
4126/* Parse and record instructions of primary opcode-19 at ADDR.
4127 Return 0 if successful. */
b4cdae6f
WW
4128
4129static int
4130ppc_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
810c1026
WW
4165 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4166 "at %s, 19-%d.\n", insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
4167 return -1;
4168}
4169
ddeca1df
WW
4170/* Parse and record instructions of primary opcode-31 at ADDR.
4171 Return 0 if successful. */
b4cdae6f
WW
4172
4173static int
4174ppc_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. "
810c1026
WW
4624 "%08x at %s, 31-%d.\n",
4625 insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
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
bec734b2 4633 ra = 0;
b4cdae6f
WW
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
4644UNKNOWN_OP:
810c1026
WW
4645 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4646 "at %s, 31-%d.\n", insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
4647 return -1;
4648}
4649
ddeca1df
WW
4650/* Parse and record instructions of primary opcode-59 at ADDR.
4651 Return 0 if successful. */
b4cdae6f
WW
4652
4653static int
4654ppc_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
810c1026
WW
4738 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
4739 "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
4740 return -1;
4741}
4742
ddeca1df
WW
4743/* Parse and record instructions of primary opcode-60 at ADDR.
4744 Return 0 if successful. */
b4cdae6f
WW
4745
4746static int
4747ppc_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);
b4cdae6f
WW
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
810c1026
WW
5021 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5022 "at %s, 60-%d.\n", insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
5023 return -1;
5024}
5025
ddeca1df
WW
5026/* Parse and record instructions of primary opcode-63 at ADDR.
5027 Return 0 if successful. */
b4cdae6f
WW
5028
5029static int
5030ppc_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
810c1026
WW
5188 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5189 "at %s, 59-%d.\n", insn, paddress (gdbarch, addr), ext);
b4cdae6f
WW
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
5197int
5198ppc_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:
5467UNKNOWN_OP:
810c1026
WW
5468 fprintf_unfiltered (gdb_stdlog, "Warning: Don't know how to record %08x "
5469 "at %s, %d.\n", insn, paddress (gdbarch, addr), op6);
b4cdae6f
WW
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
7a78ae4e
ND
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.
c906108c 5483
7a78ae4e 5484 Called e.g. at program startup, when reading a core file, and when reading
64366f1c 5485 a binary file. */
c906108c 5486
7a78ae4e
ND
5487static struct gdbarch *
5488rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
5489{
5490 struct gdbarch *gdbarch;
5491 struct gdbarch_tdep *tdep;
7cc46491 5492 int wordsize, from_xcoff_exec, from_elf_exec;
7a78ae4e
ND
5493 enum bfd_architecture arch;
5494 unsigned long mach;
5495 bfd abfd;
55eddb0f
DJ
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;
cd453cd0 5499 enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
604c2f83
LM
5500 int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0,
5501 have_vsx = 0;
7cc46491
DJ
5502 int tdesc_wordsize = -1;
5503 const struct target_desc *tdesc = info.target_desc;
5504 struct tdesc_arch_data *tdesc_data = NULL;
f949c649 5505 int num_pseudoregs = 0;
604c2f83 5506 int cur_reg;
7a78ae4e 5507
f4d9bade
UW
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
9aa1e687 5518 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
7a78ae4e
ND
5519 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
5520
9aa1e687
KB
5521 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
5522 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
5523
e712c1cf 5524 /* Check word size. If INFO is from a binary file, infer it from
64366f1c 5525 that, else choose a likely default. */
9aa1e687 5526 if (from_xcoff_exec)
c906108c 5527 {
11ed25ac 5528 if (bfd_xcoff_is_xcoff64 (info.abfd))
7a78ae4e
ND
5529 wordsize = 8;
5530 else
5531 wordsize = 4;
c906108c 5532 }
9aa1e687
KB
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 }
7cc46491
DJ
5540 else if (tdesc_has_registers (tdesc))
5541 wordsize = -1;
c906108c 5542 else
7a78ae4e 5543 {
27b15785 5544 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
16d8013c
JB
5545 wordsize = (info.bfd_arch_info->bits_per_word
5546 / info.bfd_arch_info->bits_per_byte);
27b15785
KB
5547 else
5548 wordsize = 4;
7a78ae4e 5549 }
c906108c 5550
475bbd17
JB
5551 /* Get the architecture and machine from the BFD. */
5552 arch = info.bfd_arch_info->arch;
5553 mach = info.bfd_arch_info->mach;
5bf1c677
EZ
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
74af9197
NF
5560 which version of it) can execute it. Grovel through the section
5561 looking for relevant e500 APUs. */
5bf1c677 5562
74af9197 5563 if (bfd_uses_spe_extensions (info.abfd))
5bf1c677 5564 {
74af9197
NF
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);
5bf1c677
EZ
5569 }
5570
7cc46491
DJ
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 };
7cc46491
DJ
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
f949c649
TJB
5668 /* The DFP pseudo-registers will be available when there are floating
5669 point registers. */
5670 have_dfp = have_fpu;
5671
7cc46491
DJ
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
604c2f83
LM
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
7cc46491
DJ
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
55eddb0f 5801#ifdef HAVE_ELF
cd453cd0
UW
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
55eddb0f
DJ
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
cd453cd0
UW
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
55eddb0f
DJ
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
7cc46491
DJ
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);
cd453cd0
UW
5910 if (tdep && tdep->elf_abi != elf_abi)
5911 continue;
55eddb0f
DJ
5912 if (tdep && tdep->soft_float != soft_float)
5913 continue;
5914 if (tdep && tdep->vector_abi != vector_abi)
5915 continue;
7cc46491
DJ
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
fc270c35 5932 tdep = XCNEW (struct gdbarch_tdep);
7cc46491 5933 tdep->wordsize = wordsize;
cd453cd0 5934 tdep->elf_abi = elf_abi;
55eddb0f
DJ
5935 tdep->soft_float = soft_float;
5936 tdep->vector_abi = vector_abi;
7cc46491 5937
7a78ae4e 5938 gdbarch = gdbarch_alloc (&info, tdep);
7a78ae4e 5939
7cc46491
DJ
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;
604c2f83 5951 tdep->ppc_vsr0_upper_regnum = have_vsx ? PPC_VSR0_UPPER_REGNUM : -1;
7cc46491
DJ
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);
9f643768 5962 set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
7cc46491
DJ
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
4a7622d1 5969 if (wordsize == 8)
05580c65 5970 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
afd48b75 5971 else
4a7622d1 5972 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
c8001721 5973
baffbae0
JB
5974 /* Set lr_frame_offset. */
5975 if (wordsize == 8)
5976 tdep->lr_frame_offset = 16;
baffbae0 5977 else
4a7622d1 5978 tdep->lr_frame_offset = 4;
baffbae0 5979
604c2f83 5980 if (have_spe || have_dfp || have_vsx)
7cc46491 5981 {
f949c649 5982 set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
0df8b418
MS
5983 set_gdbarch_pseudo_register_write (gdbarch,
5984 rs6000_pseudo_register_write);
2a2fa07b
MK
5985 set_gdbarch_ax_pseudo_register_collect (gdbarch,
5986 rs6000_ax_pseudo_register_collect);
7cc46491 5987 }
1fcc0bb8 5988
a67914de
MK
5989 set_gdbarch_gen_return_address (gdbarch, rs6000_gen_return_address);
5990
e0d24f8d
WZ
5991 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
5992
56a6dfb9 5993 /* Select instruction printer. */
708ff411 5994 if (arch == bfd_arch_rs6000)
9364a0ef 5995 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
56a6dfb9 5996 else
9364a0ef 5997 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
7495d1dc 5998
5a9e69ba 5999 set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
f949c649
TJB
6000
6001 if (have_spe)
6002 num_pseudoregs += 32;
6003 if (have_dfp)
6004 num_pseudoregs += 16;
604c2f83
LM
6005 if (have_vsx)
6006 /* Include both VSX and Extended FP registers. */
6007 num_pseudoregs += 96;
f949c649
TJB
6008
6009 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
7a78ae4e
ND
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);
4a7622d1 6018 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
4e409299 6019 set_gdbarch_char_signed (gdbarch, 0);
7a78ae4e 6020
11269d7e 6021 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
4a7622d1 6022 if (wordsize == 8)
8b148df9
AC
6023 /* PPC64 SYSV. */
6024 set_gdbarch_frame_red_zone_size (gdbarch, 288);
7a78ae4e 6025
691d145a
JB
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
18ed0c4e
JB
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);
d217aaed 6032
4a7622d1 6033 if (wordsize == 4)
77b2b6d4 6034 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
4a7622d1 6035 else if (wordsize == 8)
8be9034a 6036 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
7a78ae4e 6037
7a78ae4e 6038 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
c9cf6e20 6039 set_gdbarch_stack_frame_destroyed_p (gdbarch, rs6000_stack_frame_destroyed_p);
8ab3d180 6040 set_gdbarch_skip_main_prologue (gdbarch, rs6000_skip_main_prologue);
0d1243d9 6041
7a78ae4e 6042 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
7a78ae4e
ND
6043 set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
6044
203c3895 6045 /* The value of symbols of type N_SO and N_FUN maybe null when
0df8b418 6046 it shouldn't be. */
203c3895
UW
6047 set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
6048
ce5eab59 6049 /* Handles single stepping of atomic sequences. */
4a7622d1 6050 set_gdbarch_software_single_step (gdbarch, ppc_deal_with_atomic_sequence);
ce5eab59 6051
0df8b418 6052 /* Not sure on this. FIXMEmgo */
7a78ae4e
ND
6053 set_gdbarch_frame_args_skip (gdbarch, 8);
6054
143985b7
AF
6055 /* Helpers for function argument information. */
6056 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
6057
6f7f3f0d
UW
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
4fc771b8 6063 /* Hook in the DWARF CFI frame unwinder. */
1af5d7ce 6064 dwarf2_append_unwinders (gdbarch);
4fc771b8
DJ
6065 dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
6066
9274a07c
LM
6067 /* Frame handling. */
6068 dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
6069
2454a024
UW
6070 /* Setup displaced stepping. */
6071 set_gdbarch_displaced_step_copy_insn (gdbarch,
7f03bd92 6072 ppc_displaced_step_copy_insn);
99e40580
UW
6073 set_gdbarch_displaced_step_hw_singlestep (gdbarch,
6074 ppc_displaced_step_hw_singlestep);
2454a024
UW
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
7b112f9c 6083 /* Hook in ABI-specific overrides, if they have been registered. */
8a4c2d24 6084 info.target_desc = tdesc;
ede5f151 6085 info.tdep_info = tdesc_data;
4be87837 6086 gdbarch_init_osabi (info, gdbarch);
7b112f9c 6087
61a65099
KB
6088 switch (info.osabi)
6089 {
f5aecab8 6090 case GDB_OSABI_LINUX:
61a65099
KB
6091 case GDB_OSABI_NETBSD_AOUT:
6092 case GDB_OSABI_NETBSD_ELF:
6093 case GDB_OSABI_UNKNOWN:
61a65099 6094 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
2608dbf8 6095 frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
1af5d7ce
UW
6096 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
6097 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
61a65099
KB
6098 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
6099 break;
6100 default:
61a65099 6101 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
81332287
KB
6102
6103 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
2608dbf8 6104 frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
1af5d7ce
UW
6105 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
6106 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
81332287 6107 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
61a65099
KB
6108 }
6109
7cc46491
DJ
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
604c2f83
LM
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;
9f643768 6124
604c2f83
LM
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 }
f949c649 6144
604c2f83
LM
6145 gdb_assert (gdbarch_num_regs (gdbarch)
6146 + gdbarch_num_pseudo_regs (gdbarch) == cur_reg);
f949c649 6147
debb1f09
JB
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
7a78ae4e 6154 return gdbarch;
c906108c
SS
6155}
6156
7b112f9c 6157static void
8b164abb 6158rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
7b112f9c 6159{
8b164abb 6160 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7b112f9c
JT
6161
6162 if (tdep == NULL)
6163 return;
6164
4be87837 6165 /* FIXME: Dump gdbarch_tdep. */
7b112f9c
JT
6166}
6167
55eddb0f
DJ
6168/* PowerPC-specific commands. */
6169
6170static void
6171set_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
6178static void
6179show_powerpc_command (char *args, int from_tty)
6180{
6181 cmd_show_list (showpowerpccmdlist, from_tty, "");
6182}
6183
6184static void
6185powerpc_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))
9b20d036 6193 internal_error (__FILE__, __LINE__, _("could not update architecture"));
55eddb0f
DJ
6194}
6195
6196static void
6197powerpc_set_vector_abi (char *args, int from_tty,
6198 struct cmd_list_element *c)
6199{
6200 struct gdbarch_info info;
570dc176 6201 int vector_abi;
55eddb0f
DJ
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 {
aead7601 6209 powerpc_vector_abi_global = (enum powerpc_vector_abi) vector_abi;
55eddb0f
DJ
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))
9b20d036 6220 internal_error (__FILE__, __LINE__, _("could not update architecture"));
55eddb0f
DJ
6221}
6222
e09342b5
TJB
6223/* Show the current setting of the exact watchpoints flag. */
6224
6225static void
6226show_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
845d4708 6233/* Read a PPC instruction from memory. */
d78489bf
AT
6234
6235static unsigned int
845d4708 6236read_insn (struct frame_info *frame, CORE_ADDR pc)
d78489bf 6237{
845d4708
AM
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);
d78489bf
AT
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
6257int
845d4708
AM
6258ppc_insns_match_pattern (struct frame_info *frame, CORE_ADDR pc,
6259 struct ppc_insn_pattern *pattern,
6260 unsigned int *insns)
d78489bf
AT
6261{
6262 int i;
845d4708 6263 unsigned int insn;
d78489bf 6264
845d4708 6265 for (i = 0, insn = 0; pattern[i].mask; i++)
d78489bf 6266 {
845d4708
AM
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)
d78489bf
AT
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
6286CORE_ADDR
6287ppc_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
6296CORE_ADDR
6297ppc_insn_ds_field (unsigned int insn)
6298{
6299 return ((((CORE_ADDR) insn & 0xfffc) ^ 0x8000) - 0x8000);
6300}
6301
c906108c
SS
6302/* Initialization code. */
6303
0df8b418
MS
6304/* -Wmissing-prototypes */
6305extern initialize_file_ftype _initialize_rs6000_tdep;
b9362cc7 6306
c906108c 6307void
fba45db2 6308_initialize_rs6000_tdep (void)
c906108c 6309{
7b112f9c
JT
6310 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
6311 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
7cc46491
DJ
6312
6313 /* Initialize the standard target descriptions. */
6314 initialize_tdesc_powerpc_32 ();
7284e1be 6315 initialize_tdesc_powerpc_altivec32 ();
604c2f83 6316 initialize_tdesc_powerpc_vsx32 ();
7cc46491
DJ
6317 initialize_tdesc_powerpc_403 ();
6318 initialize_tdesc_powerpc_403gc ();
4d09ffea 6319 initialize_tdesc_powerpc_405 ();
7cc46491
DJ
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 ();
7284e1be 6326 initialize_tdesc_powerpc_altivec64 ();
604c2f83 6327 initialize_tdesc_powerpc_vsx64 ();
7cc46491
DJ
6328 initialize_tdesc_powerpc_7400 ();
6329 initialize_tdesc_powerpc_750 ();
6330 initialize_tdesc_powerpc_860 ();
6331 initialize_tdesc_powerpc_e500 ();
6332 initialize_tdesc_rs6000 ();
55eddb0f
DJ
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);
e09342b5
TJB
6359
6360 add_setshow_boolean_cmd ("exact-watchpoints", class_support,
6361 &target_exact_watchpoints,
6362 _("\
6363Set whether to use just one debug register for watchpoints on scalars."),
6364 _("\
6365Show whether to use just one debug register for watchpoints on scalars."),
6366 _("\
6367If true, GDB will use only one debug register when watching a variable of\n\
6368scalar type, thus assuming that the variable is accessed through the address\n\
6369of its first byte."),
6370 NULL, show_powerpc_exact_watchpoints,
6371 &setpowerpccmdlist, &showpowerpccmdlist);
c906108c 6372}
This page took 2.237706 seconds and 4 git commands to generate.