1 /* Target-dependent code for GDB, the GNU debugger.
3 Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
30 #include "arch-utils.h"
35 #include "parser-defs.h"
38 #include "sim-regno.h"
39 #include "gdb/sim-ppc.h"
40 #include "reggroups.h"
41 #include "dwarf2-frame.h"
42 #include "target-descriptions.h"
43 #include "user-regs.h"
45 #include "libbfd.h" /* for bfd_default_set_arch_mach */
46 #include "coff/internal.h" /* for libcoff.h */
47 #include "libcoff.h" /* for xcoff_data */
48 #include "coff/xcoff.h"
54 #include "solib-svr4.h"
57 #include "gdb_assert.h"
60 #include "trad-frame.h"
61 #include "frame-unwind.h"
62 #include "frame-base.h"
64 #include "rs6000-tdep.h"
66 #include "features/rs6000/powerpc-32.c"
67 #include "features/rs6000/powerpc-403.c"
68 #include "features/rs6000/powerpc-403gc.c"
69 #include "features/rs6000/powerpc-505.c"
70 #include "features/rs6000/powerpc-601.c"
71 #include "features/rs6000/powerpc-602.c"
72 #include "features/rs6000/powerpc-603.c"
73 #include "features/rs6000/powerpc-604.c"
74 #include "features/rs6000/powerpc-64.c"
75 #include "features/rs6000/powerpc-7400.c"
76 #include "features/rs6000/powerpc-750.c"
77 #include "features/rs6000/powerpc-860.c"
78 #include "features/rs6000/powerpc-e500.c"
79 #include "features/rs6000/rs6000.c"
81 /* Determine if regnum is an SPE pseudo-register. */
82 #define IS_SPE_PSEUDOREG(tdep, regnum) ((tdep)->ppc_ev0_regnum >= 0 \
83 && (regnum) >= (tdep)->ppc_ev0_regnum \
84 && (regnum) < (tdep)->ppc_ev0_regnum + 32)
86 /* Determine if regnum is a decimal float pseudo-register. */
87 #define IS_DFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_dl0_regnum >= 0 \
88 && (regnum) >= (tdep)->ppc_dl0_regnum \
89 && (regnum) < (tdep)->ppc_dl0_regnum + 16)
91 /* The list of available "set powerpc ..." and "show powerpc ..."
93 static struct cmd_list_element *setpowerpccmdlist = NULL;
94 static struct cmd_list_element *showpowerpccmdlist = NULL;
96 static enum auto_boolean powerpc_soft_float_global = AUTO_BOOLEAN_AUTO;
98 /* The vector ABI to use. Keep this in sync with powerpc_vector_abi. */
99 static const char *powerpc_vector_strings[] =
108 /* A variable that can be configured by the user. */
109 static enum powerpc_vector_abi powerpc_vector_abi_global = POWERPC_VEC_AUTO;
110 static const char *powerpc_vector_abi_string = "auto";
112 /* If the kernel has to deliver a signal, it pushes a sigcontext
113 structure on the stack and then calls the signal handler, passing
114 the address of the sigcontext in an argument register. Usually
115 the signal handler doesn't save this register, so we have to
116 access the sigcontext structure via an offset from the signal handler
118 The following constants were determined by experimentation on AIX 3.2. */
119 #define SIG_FRAME_PC_OFFSET 96
120 #define SIG_FRAME_LR_OFFSET 108
121 #define SIG_FRAME_FP_OFFSET 284
123 /* To be used by skip_prologue. */
125 struct rs6000_framedata
127 int offset; /* total size of frame --- the distance
128 by which we decrement sp to allocate
130 int saved_gpr; /* smallest # of saved gpr */
131 int saved_fpr; /* smallest # of saved fpr */
132 int saved_vr; /* smallest # of saved vr */
133 int saved_ev; /* smallest # of saved ev */
134 int alloca_reg; /* alloca register number (frame ptr) */
135 char frameless; /* true if frameless functions. */
136 char nosavedpc; /* true if pc not saved. */
137 int gpr_offset; /* offset of saved gprs from prev sp */
138 int fpr_offset; /* offset of saved fprs from prev sp */
139 int vr_offset; /* offset of saved vrs from prev sp */
140 int ev_offset; /* offset of saved evs from prev sp */
141 int lr_offset; /* offset of saved lr */
142 int cr_offset; /* offset of saved cr */
143 int vrsave_offset; /* offset of saved vrsave register */
146 /* Description of a single register. */
150 char *name; /* name of register */
151 unsigned char sz32; /* size on 32-bit arch, 0 if nonexistent */
152 unsigned char sz64; /* size on 64-bit arch, 0 if nonexistent */
153 unsigned char fpr; /* whether register is floating-point */
154 unsigned char pseudo; /* whether register is pseudo */
155 int spr_num; /* PowerPC SPR number, or -1 if not an SPR.
156 This is an ISA SPR number, not a GDB
160 /* Hook for determining the TOC address when calling functions in the
161 inferior under AIX. The initialization code in rs6000-nat.c sets
162 this hook to point to find_toc_address. */
164 CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
166 /* Static function prototypes */
168 static CORE_ADDR branch_dest (struct frame_info *frame, int opcode,
169 int instr, CORE_ADDR pc, CORE_ADDR safety);
170 static CORE_ADDR skip_prologue (struct gdbarch *, CORE_ADDR, CORE_ADDR,
171 struct rs6000_framedata *);
173 /* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
175 altivec_register_p (struct gdbarch *gdbarch, int regno)
177 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
178 if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
181 return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
185 /* Return true if REGNO is an SPE register, false otherwise. */
187 spe_register_p (struct gdbarch *gdbarch, int regno)
189 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
191 /* Is it a reference to EV0 -- EV31, and do we have those? */
192 if (IS_SPE_PSEUDOREG (tdep, regno))
195 /* Is it a reference to one of the raw upper GPR halves? */
196 if (tdep->ppc_ev0_upper_regnum >= 0
197 && tdep->ppc_ev0_upper_regnum <= regno
198 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
201 /* Is it a reference to the 64-bit accumulator, and do we have that? */
202 if (tdep->ppc_acc_regnum >= 0
203 && tdep->ppc_acc_regnum == regno)
206 /* Is it a reference to the SPE floating-point status and control register,
207 and do we have that? */
208 if (tdep->ppc_spefscr_regnum >= 0
209 && tdep->ppc_spefscr_regnum == regno)
216 /* Return non-zero if the architecture described by GDBARCH has
217 floating-point registers (f0 --- f31 and fpscr). */
219 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
221 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
223 return (tdep->ppc_fp0_regnum >= 0
224 && tdep->ppc_fpscr_regnum >= 0);
227 /* Return non-zero if the architecture described by GDBARCH has
228 Altivec registers (vr0 --- vr31, vrsave and vscr). */
230 ppc_altivec_support_p (struct gdbarch *gdbarch)
232 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
234 return (tdep->ppc_vr0_regnum >= 0
235 && tdep->ppc_vrsave_regnum >= 0);
238 /* Check that TABLE[GDB_REGNO] is not already initialized, and then
241 This is a helper function for init_sim_regno_table, constructing
242 the table mapping GDB register numbers to sim register numbers; we
243 initialize every element in that table to -1 before we start
246 set_sim_regno (int *table, int gdb_regno, int sim_regno)
248 /* Make sure we don't try to assign any given GDB register a sim
249 register number more than once. */
250 gdb_assert (table[gdb_regno] == -1);
251 table[gdb_regno] = sim_regno;
255 /* Initialize ARCH->tdep->sim_regno, the table mapping GDB register
256 numbers to simulator register numbers, based on the values placed
257 in the ARCH->tdep->ppc_foo_regnum members. */
259 init_sim_regno_table (struct gdbarch *arch)
261 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
262 int total_regs = gdbarch_num_regs (arch);
263 int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int);
265 static const char *const segment_regs[] = {
266 "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
267 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
270 /* Presume that all registers not explicitly mentioned below are
271 unavailable from the sim. */
272 for (i = 0; i < total_regs; i++)
275 /* General-purpose registers. */
276 for (i = 0; i < ppc_num_gprs; i++)
277 set_sim_regno (sim_regno, tdep->ppc_gp0_regnum + i, sim_ppc_r0_regnum + i);
279 /* Floating-point registers. */
280 if (tdep->ppc_fp0_regnum >= 0)
281 for (i = 0; i < ppc_num_fprs; i++)
282 set_sim_regno (sim_regno,
283 tdep->ppc_fp0_regnum + i,
284 sim_ppc_f0_regnum + i);
285 if (tdep->ppc_fpscr_regnum >= 0)
286 set_sim_regno (sim_regno, tdep->ppc_fpscr_regnum, sim_ppc_fpscr_regnum);
288 set_sim_regno (sim_regno, gdbarch_pc_regnum (arch), sim_ppc_pc_regnum);
289 set_sim_regno (sim_regno, tdep->ppc_ps_regnum, sim_ppc_ps_regnum);
290 set_sim_regno (sim_regno, tdep->ppc_cr_regnum, sim_ppc_cr_regnum);
292 /* Segment registers. */
293 for (i = 0; i < ppc_num_srs; i++)
297 gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i], -1);
299 set_sim_regno (sim_regno, gdb_regno, sim_ppc_sr0_regnum + i);
302 /* Altivec registers. */
303 if (tdep->ppc_vr0_regnum >= 0)
305 for (i = 0; i < ppc_num_vrs; i++)
306 set_sim_regno (sim_regno,
307 tdep->ppc_vr0_regnum + i,
308 sim_ppc_vr0_regnum + i);
310 /* FIXME: jimb/2004-07-15: when we have tdep->ppc_vscr_regnum,
311 we can treat this more like the other cases. */
312 set_sim_regno (sim_regno,
313 tdep->ppc_vr0_regnum + ppc_num_vrs,
314 sim_ppc_vscr_regnum);
316 /* vsave is a special-purpose register, so the code below handles it. */
318 /* SPE APU (E500) registers. */
319 if (tdep->ppc_ev0_upper_regnum >= 0)
320 for (i = 0; i < ppc_num_gprs; i++)
321 set_sim_regno (sim_regno,
322 tdep->ppc_ev0_upper_regnum + i,
323 sim_ppc_rh0_regnum + i);
324 if (tdep->ppc_acc_regnum >= 0)
325 set_sim_regno (sim_regno, tdep->ppc_acc_regnum, sim_ppc_acc_regnum);
326 /* spefscr is a special-purpose register, so the code below handles it. */
329 /* Now handle all special-purpose registers. Verify that they
330 haven't mistakenly been assigned numbers by any of the above
332 for (i = 0; i < sim_ppc_num_sprs; i++)
334 const char *spr_name = sim_spr_register_name (i);
337 if (spr_name != NULL)
338 gdb_regno = user_reg_map_name_to_regnum (arch, spr_name, -1);
341 set_sim_regno (sim_regno, gdb_regno, sim_ppc_spr0_regnum + i);
345 /* Drop the initialized array into place. */
346 tdep->sim_regno = sim_regno;
350 /* Given a GDB register number REG, return the corresponding SIM
353 rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
355 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
358 if (tdep->sim_regno == NULL)
359 init_sim_regno_table (gdbarch);
362 && reg <= gdbarch_num_regs (gdbarch)
363 + gdbarch_num_pseudo_regs (gdbarch));
364 sim_regno = tdep->sim_regno[reg];
369 return LEGACY_SIM_REGNO_IGNORE;
374 /* Register set support functions. */
376 /* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
377 Write the register to REGCACHE. */
380 ppc_supply_reg (struct regcache *regcache, int regnum,
381 const gdb_byte *regs, size_t offset, int regsize)
383 if (regnum != -1 && offset != -1)
387 struct gdbarch *gdbarch = get_regcache_arch (regcache);
388 int gdb_regsize = register_size (gdbarch, regnum);
389 if (gdb_regsize < regsize
390 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
391 offset += regsize - gdb_regsize;
393 regcache_raw_supply (regcache, regnum, regs + offset);
397 /* Read register REGNUM from REGCACHE and store to REGS + OFFSET
398 in a field REGSIZE wide. Zero pad as necessary. */
401 ppc_collect_reg (const struct regcache *regcache, int regnum,
402 gdb_byte *regs, size_t offset, int regsize)
404 if (regnum != -1 && offset != -1)
408 struct gdbarch *gdbarch = get_regcache_arch (regcache);
409 int gdb_regsize = register_size (gdbarch, regnum);
410 if (gdb_regsize < regsize)
412 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
414 memset (regs + offset, 0, regsize - gdb_regsize);
415 offset += regsize - gdb_regsize;
418 memset (regs + offset + regsize - gdb_regsize, 0,
419 regsize - gdb_regsize);
422 regcache_raw_collect (regcache, regnum, regs + offset);
427 ppc_greg_offset (struct gdbarch *gdbarch,
428 struct gdbarch_tdep *tdep,
429 const struct ppc_reg_offsets *offsets,
433 *regsize = offsets->gpr_size;
434 if (regnum >= tdep->ppc_gp0_regnum
435 && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs)
436 return (offsets->r0_offset
437 + (regnum - tdep->ppc_gp0_regnum) * offsets->gpr_size);
439 if (regnum == gdbarch_pc_regnum (gdbarch))
440 return offsets->pc_offset;
442 if (regnum == tdep->ppc_ps_regnum)
443 return offsets->ps_offset;
445 if (regnum == tdep->ppc_lr_regnum)
446 return offsets->lr_offset;
448 if (regnum == tdep->ppc_ctr_regnum)
449 return offsets->ctr_offset;
451 *regsize = offsets->xr_size;
452 if (regnum == tdep->ppc_cr_regnum)
453 return offsets->cr_offset;
455 if (regnum == tdep->ppc_xer_regnum)
456 return offsets->xer_offset;
458 if (regnum == tdep->ppc_mq_regnum)
459 return offsets->mq_offset;
465 ppc_fpreg_offset (struct gdbarch_tdep *tdep,
466 const struct ppc_reg_offsets *offsets,
469 if (regnum >= tdep->ppc_fp0_regnum
470 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
471 return offsets->f0_offset + (regnum - tdep->ppc_fp0_regnum) * 8;
473 if (regnum == tdep->ppc_fpscr_regnum)
474 return offsets->fpscr_offset;
480 ppc_vrreg_offset (struct gdbarch_tdep *tdep,
481 const struct ppc_reg_offsets *offsets,
484 if (regnum >= tdep->ppc_vr0_regnum
485 && regnum < tdep->ppc_vr0_regnum + ppc_num_vrs)
486 return offsets->vr0_offset + (regnum - tdep->ppc_vr0_regnum) * 16;
488 if (regnum == tdep->ppc_vrsave_regnum - 1)
489 return offsets->vscr_offset;
491 if (regnum == tdep->ppc_vrsave_regnum)
492 return offsets->vrsave_offset;
497 /* Supply register REGNUM in the general-purpose register set REGSET
498 from the buffer specified by GREGS and LEN to register cache
499 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
502 ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
503 int regnum, const void *gregs, size_t len)
505 struct gdbarch *gdbarch = get_regcache_arch (regcache);
506 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
507 const struct ppc_reg_offsets *offsets = regset->descr;
514 int gpr_size = offsets->gpr_size;
516 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
517 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
518 i++, offset += gpr_size)
519 ppc_supply_reg (regcache, i, gregs, offset, gpr_size);
521 ppc_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
522 gregs, offsets->pc_offset, gpr_size);
523 ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
524 gregs, offsets->ps_offset, gpr_size);
525 ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
526 gregs, offsets->lr_offset, gpr_size);
527 ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
528 gregs, offsets->ctr_offset, gpr_size);
529 ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
530 gregs, offsets->cr_offset, offsets->xr_size);
531 ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
532 gregs, offsets->xer_offset, offsets->xr_size);
533 ppc_supply_reg (regcache, tdep->ppc_mq_regnum,
534 gregs, offsets->mq_offset, offsets->xr_size);
538 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, ®size);
539 ppc_supply_reg (regcache, regnum, gregs, offset, regsize);
542 /* Supply register REGNUM in the floating-point register set REGSET
543 from the buffer specified by FPREGS and LEN to register cache
544 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
547 ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
548 int regnum, const void *fpregs, size_t len)
550 struct gdbarch *gdbarch = get_regcache_arch (regcache);
551 struct gdbarch_tdep *tdep;
552 const struct ppc_reg_offsets *offsets;
555 if (!ppc_floating_point_unit_p (gdbarch))
558 tdep = gdbarch_tdep (gdbarch);
559 offsets = regset->descr;
564 for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
565 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
567 ppc_supply_reg (regcache, i, fpregs, offset, 8);
569 ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
570 fpregs, offsets->fpscr_offset, offsets->fpscr_size);
574 offset = ppc_fpreg_offset (tdep, offsets, regnum);
575 ppc_supply_reg (regcache, regnum, fpregs, offset,
576 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
579 /* Supply register REGNUM in the Altivec register set REGSET
580 from the buffer specified by VRREGS and LEN to register cache
581 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
584 ppc_supply_vrregset (const struct regset *regset, struct regcache *regcache,
585 int regnum, const void *vrregs, size_t len)
587 struct gdbarch *gdbarch = get_regcache_arch (regcache);
588 struct gdbarch_tdep *tdep;
589 const struct ppc_reg_offsets *offsets;
592 if (!ppc_altivec_support_p (gdbarch))
595 tdep = gdbarch_tdep (gdbarch);
596 offsets = regset->descr;
601 for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
602 i < tdep->ppc_vr0_regnum + ppc_num_vrs;
604 ppc_supply_reg (regcache, i, vrregs, offset, 16);
606 ppc_supply_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
607 vrregs, offsets->vscr_offset, 4);
609 ppc_supply_reg (regcache, tdep->ppc_vrsave_regnum,
610 vrregs, offsets->vrsave_offset, 4);
614 offset = ppc_vrreg_offset (tdep, offsets, regnum);
615 if (regnum != tdep->ppc_vrsave_regnum
616 && regnum != tdep->ppc_vrsave_regnum - 1)
617 ppc_supply_reg (regcache, regnum, vrregs, offset, 16);
619 ppc_supply_reg (regcache, regnum,
623 /* Collect register REGNUM in the general-purpose register set
624 REGSET from register cache REGCACHE into the buffer specified by
625 GREGS and LEN. If REGNUM is -1, do this for all registers in
629 ppc_collect_gregset (const struct regset *regset,
630 const struct regcache *regcache,
631 int regnum, void *gregs, size_t len)
633 struct gdbarch *gdbarch = get_regcache_arch (regcache);
634 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
635 const struct ppc_reg_offsets *offsets = regset->descr;
642 int gpr_size = offsets->gpr_size;
644 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
645 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
646 i++, offset += gpr_size)
647 ppc_collect_reg (regcache, i, gregs, offset, gpr_size);
649 ppc_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
650 gregs, offsets->pc_offset, gpr_size);
651 ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
652 gregs, offsets->ps_offset, gpr_size);
653 ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
654 gregs, offsets->lr_offset, gpr_size);
655 ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
656 gregs, offsets->ctr_offset, gpr_size);
657 ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
658 gregs, offsets->cr_offset, offsets->xr_size);
659 ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
660 gregs, offsets->xer_offset, offsets->xr_size);
661 ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
662 gregs, offsets->mq_offset, offsets->xr_size);
666 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, ®size);
667 ppc_collect_reg (regcache, regnum, gregs, offset, regsize);
670 /* Collect register REGNUM in the floating-point register set
671 REGSET from register cache REGCACHE into the buffer specified by
672 FPREGS and LEN. If REGNUM is -1, do this for all registers in
676 ppc_collect_fpregset (const struct regset *regset,
677 const struct regcache *regcache,
678 int regnum, void *fpregs, size_t len)
680 struct gdbarch *gdbarch = get_regcache_arch (regcache);
681 struct gdbarch_tdep *tdep;
682 const struct ppc_reg_offsets *offsets;
685 if (!ppc_floating_point_unit_p (gdbarch))
688 tdep = gdbarch_tdep (gdbarch);
689 offsets = regset->descr;
694 for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
695 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
697 ppc_collect_reg (regcache, i, fpregs, offset, 8);
699 ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
700 fpregs, offsets->fpscr_offset, offsets->fpscr_size);
704 offset = ppc_fpreg_offset (tdep, offsets, regnum);
705 ppc_collect_reg (regcache, regnum, fpregs, offset,
706 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
709 /* Collect register REGNUM in the Altivec register set
710 REGSET from register cache REGCACHE into the buffer specified by
711 VRREGS and LEN. If REGNUM is -1, do this for all registers in
715 ppc_collect_vrregset (const struct regset *regset,
716 const struct regcache *regcache,
717 int regnum, void *vrregs, size_t len)
719 struct gdbarch *gdbarch = get_regcache_arch (regcache);
720 struct gdbarch_tdep *tdep;
721 const struct ppc_reg_offsets *offsets;
724 if (!ppc_altivec_support_p (gdbarch))
727 tdep = gdbarch_tdep (gdbarch);
728 offsets = regset->descr;
733 for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
734 i < tdep->ppc_vr0_regnum + ppc_num_vrs;
736 ppc_collect_reg (regcache, i, vrregs, offset, 16);
738 ppc_collect_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
739 vrregs, offsets->vscr_offset, 4);
741 ppc_collect_reg (regcache, tdep->ppc_vrsave_regnum,
742 vrregs, offsets->vrsave_offset, 4);
746 offset = ppc_vrreg_offset (tdep, offsets, regnum);
747 if (regnum != tdep->ppc_vrsave_regnum
748 && regnum != tdep->ppc_vrsave_regnum - 1)
749 ppc_collect_reg (regcache, regnum, vrregs, offset, 16);
751 ppc_collect_reg (regcache, regnum,
756 /* Read a LEN-byte address from debugged memory address MEMADDR. */
759 read_memory_addr (CORE_ADDR memaddr, int len)
761 return read_memory_unsigned_integer (memaddr, len);
765 rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
767 struct rs6000_framedata frame;
768 CORE_ADDR limit_pc, func_addr;
770 /* See if we can determine the end of the prologue via the symbol table.
771 If so, then return either PC, or the PC after the prologue, whichever
773 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
775 CORE_ADDR post_prologue_pc = skip_prologue_using_sal (func_addr);
776 if (post_prologue_pc != 0)
777 return max (pc, post_prologue_pc);
780 /* Can't determine prologue from the symbol table, need to examine
783 /* Find an upper limit on the function prologue using the debug
784 information. If the debug information could not be used to provide
785 that bound, then use an arbitrary large number as the upper bound. */
786 limit_pc = skip_prologue_using_sal (pc);
788 limit_pc = pc + 100; /* Magic. */
790 pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
795 insn_changes_sp_or_jumps (unsigned long insn)
797 int opcode = (insn >> 26) & 0x03f;
798 int sd = (insn >> 21) & 0x01f;
799 int a = (insn >> 16) & 0x01f;
800 int subcode = (insn >> 1) & 0x3ff;
802 /* Changes the stack pointer. */
804 /* NOTE: There are many ways to change the value of a given register.
805 The ways below are those used when the register is R1, the SP,
806 in a funtion's epilogue. */
808 if (opcode == 31 && subcode == 444 && a == 1)
809 return 1; /* mr R1,Rn */
810 if (opcode == 14 && sd == 1)
811 return 1; /* addi R1,Rn,simm */
812 if (opcode == 58 && sd == 1)
813 return 1; /* ld R1,ds(Rn) */
815 /* Transfers control. */
821 if (opcode == 19 && subcode == 16)
823 if (opcode == 19 && subcode == 528)
824 return 1; /* bcctr */
829 /* Return true if we are in the function's epilogue, i.e. after the
830 instruction that destroyed the function's stack frame.
832 1) scan forward from the point of execution:
833 a) If you find an instruction that modifies the stack pointer
834 or transfers control (except a return), execution is not in
836 b) Stop scanning if you find a return instruction or reach the
837 end of the function or reach the hard limit for the size of
839 2) scan backward from the point of execution:
840 a) If you find an instruction that modifies the stack pointer,
841 execution *is* in an epilogue, return.
842 b) Stop scanning if you reach an instruction that transfers
843 control or the beginning of the function or reach the hard
844 limit for the size of an epilogue. */
847 rs6000_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
849 bfd_byte insn_buf[PPC_INSN_SIZE];
850 CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
852 struct frame_info *curfrm;
854 /* Find the search limits based on function boundaries and hard limit. */
856 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
859 epilogue_start = pc - PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
860 if (epilogue_start < func_start) epilogue_start = func_start;
862 epilogue_end = pc + PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
863 if (epilogue_end > func_end) epilogue_end = func_end;
865 curfrm = get_current_frame ();
867 /* Scan forward until next 'blr'. */
869 for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += PPC_INSN_SIZE)
871 if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
873 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE);
874 if (insn == 0x4e800020)
876 if (insn_changes_sp_or_jumps (insn))
880 /* Scan backward until adjustment to stack pointer (R1). */
882 for (scan_pc = pc - PPC_INSN_SIZE;
883 scan_pc >= epilogue_start;
884 scan_pc -= PPC_INSN_SIZE)
886 if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
888 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE);
889 if (insn_changes_sp_or_jumps (insn))
896 /* Get the ith function argument for the current function. */
898 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi,
901 return get_frame_register_unsigned (frame, 3 + argi);
904 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
907 branch_dest (struct frame_info *frame, int opcode, int instr,
908 CORE_ADDR pc, CORE_ADDR safety)
910 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
916 absolute = (int) ((instr >> 1) & 1);
921 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
925 dest = pc + immediate;
929 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
933 dest = pc + immediate;
937 ext_op = (instr >> 1) & 0x3ff;
939 if (ext_op == 16) /* br conditional register */
941 dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3;
943 /* If we are about to return from a signal handler, dest is
944 something like 0x3c90. The current frame is a signal handler
945 caller frame, upon completion of the sigreturn system call
946 execution will return to the saved PC in the frame. */
947 if (dest < tdep->text_segment_base)
948 dest = read_memory_addr (get_frame_base (frame) + SIG_FRAME_PC_OFFSET,
952 else if (ext_op == 528) /* br cond to count reg */
954 dest = get_frame_register_unsigned (frame, tdep->ppc_ctr_regnum) & ~3;
956 /* If we are about to execute a system call, dest is something
957 like 0x22fc or 0x3b00. Upon completion the system call
958 will return to the address in the link register. */
959 if (dest < tdep->text_segment_base)
960 dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3;
969 return (dest < tdep->text_segment_base) ? safety : dest;
973 /* Sequence of bytes for breakpoint instruction. */
975 const static unsigned char *
976 rs6000_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
979 static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
980 static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
982 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
983 return big_breakpoint;
985 return little_breakpoint;
989 /* Instruction masks used during single-stepping of atomic sequences. */
990 #define LWARX_MASK 0xfc0007fe
991 #define LWARX_INSTRUCTION 0x7c000028
992 #define LDARX_INSTRUCTION 0x7c0000A8
993 #define STWCX_MASK 0xfc0007ff
994 #define STWCX_INSTRUCTION 0x7c00012d
995 #define STDCX_INSTRUCTION 0x7c0001ad
996 #define BC_MASK 0xfc000000
997 #define BC_INSTRUCTION 0x40000000
999 /* Checks for an atomic sequence of instructions beginning with a LWARX/LDARX
1000 instruction and ending with a STWCX/STDCX instruction. If such a sequence
1001 is found, attempt to step through it. A breakpoint is placed at the end of
1005 deal_with_atomic_sequence (struct frame_info *frame)
1007 CORE_ADDR pc = get_frame_pc (frame);
1008 CORE_ADDR breaks[2] = {-1, -1};
1010 CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination. */
1011 CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */
1012 int insn = read_memory_integer (loc, PPC_INSN_SIZE);
1015 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
1016 const int atomic_sequence_length = 16; /* Instruction sequence length. */
1017 int opcode; /* Branch instruction's OPcode. */
1018 int bc_insn_count = 0; /* Conditional branch instruction count. */
1020 /* Assume all atomic sequences start with a lwarx/ldarx instruction. */
1021 if ((insn & LWARX_MASK) != LWARX_INSTRUCTION
1022 && (insn & LWARX_MASK) != LDARX_INSTRUCTION)
1025 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
1027 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
1029 loc += PPC_INSN_SIZE;
1030 insn = read_memory_integer (loc, PPC_INSN_SIZE);
1032 /* Assume that there is at most one conditional branch in the atomic
1033 sequence. If a conditional branch is found, put a breakpoint in
1034 its destination address. */
1035 if ((insn & BC_MASK) == BC_INSTRUCTION)
1037 if (bc_insn_count >= 1)
1038 return 0; /* More than one conditional branch found, fallback
1039 to the standard single-step code. */
1041 opcode = insn >> 26;
1042 branch_bp = branch_dest (frame, opcode, insn, pc, breaks[0]);
1044 if (branch_bp != -1)
1046 breaks[1] = branch_bp;
1052 if ((insn & STWCX_MASK) == STWCX_INSTRUCTION
1053 || (insn & STWCX_MASK) == STDCX_INSTRUCTION)
1057 /* Assume that the atomic sequence ends with a stwcx/stdcx instruction. */
1058 if ((insn & STWCX_MASK) != STWCX_INSTRUCTION
1059 && (insn & STWCX_MASK) != STDCX_INSTRUCTION)
1063 loc += PPC_INSN_SIZE;
1064 insn = read_memory_integer (loc, PPC_INSN_SIZE);
1066 /* Insert a breakpoint right after the end of the atomic sequence. */
1069 /* Check for duplicated breakpoints. Check also for a breakpoint
1070 placed (branch instruction's destination) at the stwcx/stdcx
1071 instruction, this resets the reservation and take us back to the
1072 lwarx/ldarx instruction at the beginning of the atomic sequence. */
1073 if (last_breakpoint && ((breaks[1] == breaks[0])
1074 || (breaks[1] == closing_insn)))
1075 last_breakpoint = 0;
1077 /* Effectively inserts the breakpoints. */
1078 for (index = 0; index <= last_breakpoint; index++)
1079 insert_single_step_breakpoint (breaks[index]);
1084 /* AIX does not support PT_STEP. Simulate it. */
1087 rs6000_software_single_step (struct frame_info *frame)
1091 const gdb_byte *breakp
1092 = rs6000_breakpoint_from_pc (get_frame_arch (frame), &dummy, &breakp_sz);
1095 CORE_ADDR breaks[2];
1098 loc = get_frame_pc (frame);
1100 insn = read_memory_integer (loc, 4);
1102 if (deal_with_atomic_sequence (frame))
1105 breaks[0] = loc + breakp_sz;
1106 opcode = insn >> 26;
1107 breaks[1] = branch_dest (frame, opcode, insn, loc, breaks[0]);
1109 /* Don't put two breakpoints on the same address. */
1110 if (breaks[1] == breaks[0])
1113 for (ii = 0; ii < 2; ++ii)
1115 /* ignore invalid breakpoint. */
1116 if (breaks[ii] == -1)
1118 insert_single_step_breakpoint (breaks[ii]);
1121 errno = 0; /* FIXME, don't ignore errors! */
1122 /* What errors? {read,write}_memory call error(). */
1127 #define SIGNED_SHORT(x) \
1128 ((sizeof (short) == 2) \
1129 ? ((int)(short)(x)) \
1130 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
1132 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
1134 /* Limit the number of skipped non-prologue instructions, as the examining
1135 of the prologue is expensive. */
1136 static int max_skip_non_prologue_insns = 10;
1138 /* Return nonzero if the given instruction OP can be part of the prologue
1139 of a function and saves a parameter on the stack. FRAMEP should be
1140 set if one of the previous instructions in the function has set the
1144 store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
1146 /* Move parameters from argument registers to temporary register. */
1147 if ((op & 0xfc0007fe) == 0x7c000378) /* mr(.) Rx,Ry */
1149 /* Rx must be scratch register r0. */
1150 const int rx_regno = (op >> 16) & 31;
1151 /* Ry: Only r3 - r10 are used for parameter passing. */
1152 const int ry_regno = GET_SRC_REG (op);
1154 if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
1156 *r0_contains_arg = 1;
1163 /* Save a General Purpose Register on stack. */
1165 if ((op & 0xfc1f0003) == 0xf8010000 || /* std Rx,NUM(r1) */
1166 (op & 0xfc1f0000) == 0xd8010000) /* stfd Rx,NUM(r1) */
1168 /* Rx: Only r3 - r10 are used for parameter passing. */
1169 const int rx_regno = GET_SRC_REG (op);
1171 return (rx_regno >= 3 && rx_regno <= 10);
1174 /* Save a General Purpose Register on stack via the Frame Pointer. */
1177 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */
1178 (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */
1179 (op & 0xfc1f0000) == 0xd81f0000)) /* stfd Rx,NUM(r31) */
1181 /* Rx: Usually, only r3 - r10 are used for parameter passing.
1182 However, the compiler sometimes uses r0 to hold an argument. */
1183 const int rx_regno = GET_SRC_REG (op);
1185 return ((rx_regno >= 3 && rx_regno <= 10)
1186 || (rx_regno == 0 && *r0_contains_arg));
1189 if ((op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */
1191 /* Only f2 - f8 are used for parameter passing. */
1192 const int src_regno = GET_SRC_REG (op);
1194 return (src_regno >= 2 && src_regno <= 8);
1197 if (framep && ((op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */
1199 /* Only f2 - f8 are used for parameter passing. */
1200 const int src_regno = GET_SRC_REG (op);
1202 return (src_regno >= 2 && src_regno <= 8);
1205 /* Not an insn that saves a parameter on stack. */
1209 /* Assuming that INSN is a "bl" instruction located at PC, return
1210 nonzero if the destination of the branch is a "blrl" instruction.
1212 This sequence is sometimes found in certain function prologues.
1213 It allows the function to load the LR register with a value that
1214 they can use to access PIC data using PC-relative offsets. */
1217 bl_to_blrl_insn_p (CORE_ADDR pc, int insn)
1224 absolute = (int) ((insn >> 1) & 1);
1225 immediate = ((insn & ~3) << 6) >> 6;
1229 dest = pc + immediate;
1231 dest_insn = read_memory_integer (dest, 4);
1232 if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
1238 /* return pc value after skipping a function prologue and also return
1239 information about a function frame.
1241 in struct rs6000_framedata fdata:
1242 - frameless is TRUE, if function does not have a frame.
1243 - nosavedpc is TRUE, if function does not save %pc value in its frame.
1244 - offset is the initial size of this stack frame --- the amount by
1245 which we decrement the sp to allocate the frame.
1246 - saved_gpr is the number of the first saved gpr.
1247 - saved_fpr is the number of the first saved fpr.
1248 - saved_vr is the number of the first saved vr.
1249 - saved_ev is the number of the first saved ev.
1250 - alloca_reg is the number of the register used for alloca() handling.
1252 - gpr_offset is the offset of the first saved gpr from the previous frame.
1253 - fpr_offset is the offset of the first saved fpr from the previous frame.
1254 - vr_offset is the offset of the first saved vr from the previous frame.
1255 - ev_offset is the offset of the first saved ev from the previous frame.
1256 - lr_offset is the offset of the saved lr
1257 - cr_offset is the offset of the saved cr
1258 - vrsave_offset is the offset of the saved vrsave register
1262 skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
1263 struct rs6000_framedata *fdata)
1265 CORE_ADDR orig_pc = pc;
1266 CORE_ADDR last_prologue_pc = pc;
1267 CORE_ADDR li_found_pc = 0;
1271 long vr_saved_offset = 0;
1277 int vrsave_reg = -1;
1280 int minimal_toc_loaded = 0;
1281 int prev_insn_was_prologue_insn = 1;
1282 int num_skip_non_prologue_insns = 0;
1283 int r0_contains_arg = 0;
1284 const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
1285 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1287 memset (fdata, 0, sizeof (struct rs6000_framedata));
1288 fdata->saved_gpr = -1;
1289 fdata->saved_fpr = -1;
1290 fdata->saved_vr = -1;
1291 fdata->saved_ev = -1;
1292 fdata->alloca_reg = -1;
1293 fdata->frameless = 1;
1294 fdata->nosavedpc = 1;
1298 /* Sometimes it isn't clear if an instruction is a prologue
1299 instruction or not. When we encounter one of these ambiguous
1300 cases, we'll set prev_insn_was_prologue_insn to 0 (false).
1301 Otherwise, we'll assume that it really is a prologue instruction. */
1302 if (prev_insn_was_prologue_insn)
1303 last_prologue_pc = pc;
1305 /* Stop scanning if we've hit the limit. */
1309 prev_insn_was_prologue_insn = 1;
1311 /* Fetch the instruction and convert it to an integer. */
1312 if (target_read_memory (pc, buf, 4))
1314 op = extract_unsigned_integer (buf, 4);
1316 if ((op & 0xfc1fffff) == 0x7c0802a6)
1318 /* Since shared library / PIC code, which needs to get its
1319 address at runtime, can appear to save more than one link
1333 remember just the first one, but skip over additional
1336 lr_reg = (op & 0x03e00000);
1338 r0_contains_arg = 0;
1341 else if ((op & 0xfc1fffff) == 0x7c000026)
1343 cr_reg = (op & 0x03e00000);
1345 r0_contains_arg = 0;
1349 else if ((op & 0xfc1f0000) == 0xd8010000)
1350 { /* stfd Rx,NUM(r1) */
1351 reg = GET_SRC_REG (op);
1352 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
1354 fdata->saved_fpr = reg;
1355 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
1360 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
1361 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
1362 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
1363 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
1366 reg = GET_SRC_REG (op);
1367 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
1369 fdata->saved_gpr = reg;
1370 if ((op & 0xfc1f0003) == 0xf8010000)
1372 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
1377 else if ((op & 0xffff0000) == 0x60000000)
1380 /* Allow nops in the prologue, but do not consider them to
1381 be part of the prologue unless followed by other prologue
1383 prev_insn_was_prologue_insn = 0;
1387 else if ((op & 0xffff0000) == 0x3c000000)
1388 { /* addis 0,0,NUM, used
1389 for >= 32k frames */
1390 fdata->offset = (op & 0x0000ffff) << 16;
1391 fdata->frameless = 0;
1392 r0_contains_arg = 0;
1396 else if ((op & 0xffff0000) == 0x60000000)
1397 { /* ori 0,0,NUM, 2nd ha
1398 lf of >= 32k frames */
1399 fdata->offset |= (op & 0x0000ffff);
1400 fdata->frameless = 0;
1401 r0_contains_arg = 0;
1405 else if (lr_reg >= 0 &&
1406 /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1407 (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
1408 /* stw Rx, NUM(r1) */
1409 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
1410 /* stwu Rx, NUM(r1) */
1411 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
1412 { /* where Rx == lr */
1413 fdata->lr_offset = offset;
1414 fdata->nosavedpc = 0;
1415 /* Invalidate lr_reg, but don't set it to -1.
1416 That would mean that it had never been set. */
1418 if ((op & 0xfc000003) == 0xf8000000 || /* std */
1419 (op & 0xfc000000) == 0x90000000) /* stw */
1421 /* Does not update r1, so add displacement to lr_offset. */
1422 fdata->lr_offset += SIGNED_SHORT (op);
1427 else if (cr_reg >= 0 &&
1428 /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1429 (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
1430 /* stw Rx, NUM(r1) */
1431 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
1432 /* stwu Rx, NUM(r1) */
1433 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
1434 { /* where Rx == cr */
1435 fdata->cr_offset = offset;
1436 /* Invalidate cr_reg, but don't set it to -1.
1437 That would mean that it had never been set. */
1439 if ((op & 0xfc000003) == 0xf8000000 ||
1440 (op & 0xfc000000) == 0x90000000)
1442 /* Does not update r1, so add displacement to cr_offset. */
1443 fdata->cr_offset += SIGNED_SHORT (op);
1448 else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
1450 /* bcl 20,xx,.+4 is used to get the current PC, with or without
1451 prediction bits. If the LR has already been saved, we can
1455 else if (op == 0x48000005)
1461 else if (op == 0x48000004)
1466 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
1467 in V.4 -mminimal-toc */
1468 (op & 0xffff0000) == 0x3bde0000)
1469 { /* addi 30,30,foo@l */
1473 else if ((op & 0xfc000001) == 0x48000001)
1477 fdata->frameless = 0;
1479 /* If the return address has already been saved, we can skip
1480 calls to blrl (for PIC). */
1481 if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op))
1484 /* Don't skip over the subroutine call if it is not within
1485 the first three instructions of the prologue and either
1486 we have no line table information or the line info tells
1487 us that the subroutine call is not part of the line
1488 associated with the prologue. */
1489 if ((pc - orig_pc) > 8)
1491 struct symtab_and_line prologue_sal = find_pc_line (orig_pc, 0);
1492 struct symtab_and_line this_sal = find_pc_line (pc, 0);
1494 if ((prologue_sal.line == 0) || (prologue_sal.line != this_sal.line))
1498 op = read_memory_integer (pc + 4, 4);
1500 /* At this point, make sure this is not a trampoline
1501 function (a function that simply calls another functions,
1502 and nothing else). If the next is not a nop, this branch
1503 was part of the function prologue. */
1505 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
1506 break; /* don't skip over
1511 /* update stack pointer */
1512 else if ((op & 0xfc1f0000) == 0x94010000)
1513 { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */
1514 fdata->frameless = 0;
1515 fdata->offset = SIGNED_SHORT (op);
1516 offset = fdata->offset;
1519 else if ((op & 0xfc1f016a) == 0x7c01016e)
1520 { /* stwux rX,r1,rY */
1521 /* no way to figure out what r1 is going to be */
1522 fdata->frameless = 0;
1523 offset = fdata->offset;
1526 else if ((op & 0xfc1f0003) == 0xf8010001)
1527 { /* stdu rX,NUM(r1) */
1528 fdata->frameless = 0;
1529 fdata->offset = SIGNED_SHORT (op & ~3UL);
1530 offset = fdata->offset;
1533 else if ((op & 0xfc1f016a) == 0x7c01016a)
1534 { /* stdux rX,r1,rY */
1535 /* no way to figure out what r1 is going to be */
1536 fdata->frameless = 0;
1537 offset = fdata->offset;
1540 else if ((op & 0xffff0000) == 0x38210000)
1541 { /* addi r1,r1,SIMM */
1542 fdata->frameless = 0;
1543 fdata->offset += SIGNED_SHORT (op);
1544 offset = fdata->offset;
1547 /* Load up minimal toc pointer. Do not treat an epilogue restore
1548 of r31 as a minimal TOC load. */
1549 else if (((op >> 22) == 0x20f || /* l r31,... or l r30,... */
1550 (op >> 22) == 0x3af) /* ld r31,... or ld r30,... */
1552 && !minimal_toc_loaded)
1554 minimal_toc_loaded = 1;
1557 /* move parameters from argument registers to local variable
1560 else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */
1561 (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */
1562 (((op >> 21) & 31) <= 10) &&
1563 ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
1567 /* store parameters in stack */
1569 /* Move parameters from argument registers to temporary register. */
1570 else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
1574 /* Set up frame pointer */
1576 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
1577 || op == 0x7c3f0b78)
1579 fdata->frameless = 0;
1581 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
1584 /* Another way to set up the frame pointer. */
1586 else if ((op & 0xfc1fffff) == 0x38010000)
1587 { /* addi rX, r1, 0x0 */
1588 fdata->frameless = 0;
1590 fdata->alloca_reg = (tdep->ppc_gp0_regnum
1591 + ((op & ~0x38010000) >> 21));
1594 /* AltiVec related instructions. */
1595 /* Store the vrsave register (spr 256) in another register for
1596 later manipulation, or load a register into the vrsave
1597 register. 2 instructions are used: mfvrsave and
1598 mtvrsave. They are shorthand notation for mfspr Rn, SPR256
1599 and mtspr SPR256, Rn. */
1600 /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1601 mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110 */
1602 else if ((op & 0xfc1fffff) == 0x7c0042a6) /* mfvrsave Rn */
1604 vrsave_reg = GET_SRC_REG (op);
1607 else if ((op & 0xfc1fffff) == 0x7c0043a6) /* mtvrsave Rn */
1611 /* Store the register where vrsave was saved to onto the stack:
1612 rS is the register where vrsave was stored in a previous
1614 /* 100100 sssss 00001 dddddddd dddddddd */
1615 else if ((op & 0xfc1f0000) == 0x90010000) /* stw rS, d(r1) */
1617 if (vrsave_reg == GET_SRC_REG (op))
1619 fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1624 /* Compute the new value of vrsave, by modifying the register
1625 where vrsave was saved to. */
1626 else if (((op & 0xfc000000) == 0x64000000) /* oris Ra, Rs, UIMM */
1627 || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1631 /* li r0, SIMM (short for addi r0, 0, SIMM). This is the first
1632 in a pair of insns to save the vector registers on the
1634 /* 001110 00000 00000 iiii iiii iiii iiii */
1635 /* 001110 01110 00000 iiii iiii iiii iiii */
1636 else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */
1637 || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */
1639 if ((op & 0xffff0000) == 0x38000000)
1640 r0_contains_arg = 0;
1642 vr_saved_offset = SIGNED_SHORT (op);
1644 /* This insn by itself is not part of the prologue, unless
1645 if part of the pair of insns mentioned above. So do not
1646 record this insn as part of the prologue yet. */
1647 prev_insn_was_prologue_insn = 0;
1649 /* Store vector register S at (r31+r0) aligned to 16 bytes. */
1650 /* 011111 sssss 11111 00000 00111001110 */
1651 else if ((op & 0xfc1fffff) == 0x7c1f01ce) /* stvx Vs, R31, R0 */
1653 if (pc == (li_found_pc + 4))
1655 vr_reg = GET_SRC_REG (op);
1656 /* If this is the first vector reg to be saved, or if
1657 it has a lower number than others previously seen,
1658 reupdate the frame info. */
1659 if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1661 fdata->saved_vr = vr_reg;
1662 fdata->vr_offset = vr_saved_offset + offset;
1664 vr_saved_offset = -1;
1669 /* End AltiVec related instructions. */
1671 /* Start BookE related instructions. */
1672 /* Store gen register S at (r31+uimm).
1673 Any register less than r13 is volatile, so we don't care. */
1674 /* 000100 sssss 11111 iiiii 01100100001 */
1675 else if (arch_info->mach == bfd_mach_ppc_e500
1676 && (op & 0xfc1f07ff) == 0x101f0321) /* evstdd Rs,uimm(R31) */
1678 if ((op & 0x03e00000) >= 0x01a00000) /* Rs >= r13 */
1681 ev_reg = GET_SRC_REG (op);
1682 imm = (op >> 11) & 0x1f;
1683 ev_offset = imm * 8;
1684 /* If this is the first vector reg to be saved, or if
1685 it has a lower number than others previously seen,
1686 reupdate the frame info. */
1687 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1689 fdata->saved_ev = ev_reg;
1690 fdata->ev_offset = ev_offset + offset;
1695 /* Store gen register rS at (r1+rB). */
1696 /* 000100 sssss 00001 bbbbb 01100100000 */
1697 else if (arch_info->mach == bfd_mach_ppc_e500
1698 && (op & 0xffe007ff) == 0x13e00320) /* evstddx RS,R1,Rb */
1700 if (pc == (li_found_pc + 4))
1702 ev_reg = GET_SRC_REG (op);
1703 /* If this is the first vector reg to be saved, or if
1704 it has a lower number than others previously seen,
1705 reupdate the frame info. */
1706 /* We know the contents of rB from the previous instruction. */
1707 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1709 fdata->saved_ev = ev_reg;
1710 fdata->ev_offset = vr_saved_offset + offset;
1712 vr_saved_offset = -1;
1718 /* Store gen register r31 at (rA+uimm). */
1719 /* 000100 11111 aaaaa iiiii 01100100001 */
1720 else if (arch_info->mach == bfd_mach_ppc_e500
1721 && (op & 0xffe007ff) == 0x13e00321) /* evstdd R31,Ra,UIMM */
1723 /* Wwe know that the source register is 31 already, but
1724 it can't hurt to compute it. */
1725 ev_reg = GET_SRC_REG (op);
1726 ev_offset = ((op >> 11) & 0x1f) * 8;
1727 /* If this is the first vector reg to be saved, or if
1728 it has a lower number than others previously seen,
1729 reupdate the frame info. */
1730 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1732 fdata->saved_ev = ev_reg;
1733 fdata->ev_offset = ev_offset + offset;
1738 /* Store gen register S at (r31+r0).
1739 Store param on stack when offset from SP bigger than 4 bytes. */
1740 /* 000100 sssss 11111 00000 01100100000 */
1741 else if (arch_info->mach == bfd_mach_ppc_e500
1742 && (op & 0xfc1fffff) == 0x101f0320) /* evstddx Rs,R31,R0 */
1744 if (pc == (li_found_pc + 4))
1746 if ((op & 0x03e00000) >= 0x01a00000)
1748 ev_reg = GET_SRC_REG (op);
1749 /* If this is the first vector reg to be saved, or if
1750 it has a lower number than others previously seen,
1751 reupdate the frame info. */
1752 /* We know the contents of r0 from the previous
1754 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1756 fdata->saved_ev = ev_reg;
1757 fdata->ev_offset = vr_saved_offset + offset;
1761 vr_saved_offset = -1;
1766 /* End BookE related instructions. */
1770 /* Not a recognized prologue instruction.
1771 Handle optimizer code motions into the prologue by continuing
1772 the search if we have no valid frame yet or if the return
1773 address is not yet saved in the frame. */
1774 if (fdata->frameless == 0 && fdata->nosavedpc == 0)
1777 if (op == 0x4e800020 /* blr */
1778 || op == 0x4e800420) /* bctr */
1779 /* Do not scan past epilogue in frameless functions or
1782 if ((op & 0xf4000000) == 0x40000000) /* bxx */
1783 /* Never skip branches. */
1786 if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
1787 /* Do not scan too many insns, scanning insns is expensive with
1791 /* Continue scanning. */
1792 prev_insn_was_prologue_insn = 0;
1798 /* I have problems with skipping over __main() that I need to address
1799 * sometime. Previously, I used to use misc_function_vector which
1800 * didn't work as well as I wanted to be. -MGO */
1802 /* If the first thing after skipping a prolog is a branch to a function,
1803 this might be a call to an initializer in main(), introduced by gcc2.
1804 We'd like to skip over it as well. Fortunately, xlc does some extra
1805 work before calling a function right after a prologue, thus we can
1806 single out such gcc2 behaviour. */
1809 if ((op & 0xfc000001) == 0x48000001)
1810 { /* bl foo, an initializer function? */
1811 op = read_memory_integer (pc + 4, 4);
1813 if (op == 0x4def7b82)
1814 { /* cror 0xf, 0xf, 0xf (nop) */
1816 /* Check and see if we are in main. If so, skip over this
1817 initializer function as well. */
1819 tmp = find_pc_misc_function (pc);
1821 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
1827 fdata->offset = -fdata->offset;
1828 return last_prologue_pc;
1832 /*************************************************************************
1833 Support for creating pushing a dummy frame into the stack, and popping
1835 *************************************************************************/
1838 /* All the ABI's require 16 byte alignment. */
1840 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1842 return (addr & -16);
1845 /* Pass the arguments in either registers, or in the stack. In RS/6000,
1846 the first eight words of the argument list (that might be less than
1847 eight parameters if some parameters occupy more than one word) are
1848 passed in r3..r10 registers. float and double parameters are
1849 passed in fpr's, in addition to that. Rest of the parameters if any
1850 are passed in user stack. There might be cases in which half of the
1851 parameter is copied into registers, the other half is pushed into
1854 Stack must be aligned on 64-bit boundaries when synthesizing
1857 If the function is returning a structure, then the return address is passed
1858 in r3, then the first 7 words of the parameters can be passed in registers,
1859 starting from r4. */
1862 rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1863 struct regcache *regcache, CORE_ADDR bp_addr,
1864 int nargs, struct value **args, CORE_ADDR sp,
1865 int struct_return, CORE_ADDR struct_addr)
1867 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1870 int argno; /* current argument number */
1871 int argbytes; /* current argument byte */
1872 gdb_byte tmp_buffer[50];
1873 int f_argno = 0; /* current floating point argno */
1874 int wordsize = gdbarch_tdep (gdbarch)->wordsize;
1875 CORE_ADDR func_addr = find_function_addr (function, NULL);
1877 struct value *arg = 0;
1882 /* The calling convention this function implements assumes the
1883 processor has floating-point registers. We shouldn't be using it
1884 on PPC variants that lack them. */
1885 gdb_assert (ppc_floating_point_unit_p (gdbarch));
1887 /* The first eight words of ther arguments are passed in registers.
1888 Copy them appropriately. */
1891 /* If the function is returning a `struct', then the first word
1892 (which will be passed in r3) is used for struct return address.
1893 In that case we should advance one word and start from r4
1894 register to copy parameters. */
1897 regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
1903 effectively indirect call... gcc does...
1905 return_val example( float, int);
1908 float in fp0, int in r3
1909 offset of stack on overflow 8/16
1910 for varargs, must go by type.
1912 float in r3&r4, int in r5
1913 offset of stack on overflow different
1915 return in r3 or f0. If no float, must study how gcc emulates floats;
1916 pay attention to arg promotion.
1917 User may have to cast\args to handle promotion correctly
1918 since gdb won't know if prototype supplied or not.
1921 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
1923 int reg_size = register_size (gdbarch, ii + 3);
1926 type = check_typedef (value_type (arg));
1927 len = TYPE_LENGTH (type);
1929 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1932 /* Floating point arguments are passed in fpr's, as well as gpr's.
1933 There are 13 fpr's reserved for passing parameters. At this point
1934 there is no way we would run out of them. */
1936 gdb_assert (len <= 8);
1938 regcache_cooked_write (regcache,
1939 tdep->ppc_fp0_regnum + 1 + f_argno,
1940 value_contents (arg));
1947 /* Argument takes more than one register. */
1948 while (argbytes < len)
1950 gdb_byte word[MAX_REGISTER_SIZE];
1951 memset (word, 0, reg_size);
1953 ((char *) value_contents (arg)) + argbytes,
1954 (len - argbytes) > reg_size
1955 ? reg_size : len - argbytes);
1956 regcache_cooked_write (regcache,
1957 tdep->ppc_gp0_regnum + 3 + ii,
1959 ++ii, argbytes += reg_size;
1962 goto ran_out_of_registers_for_arguments;
1969 /* Argument can fit in one register. No problem. */
1970 int adj = gdbarch_byte_order (gdbarch)
1971 == BFD_ENDIAN_BIG ? reg_size - len : 0;
1972 gdb_byte word[MAX_REGISTER_SIZE];
1974 memset (word, 0, reg_size);
1975 memcpy (word, value_contents (arg), len);
1976 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3 +ii, word);
1981 ran_out_of_registers_for_arguments:
1983 regcache_cooked_read_unsigned (regcache,
1984 gdbarch_sp_regnum (gdbarch),
1987 /* Location for 8 parameters are always reserved. */
1990 /* Another six words for back chain, TOC register, link register, etc. */
1993 /* Stack pointer must be quadword aligned. */
1996 /* If there are more arguments, allocate space for them in
1997 the stack, then push them starting from the ninth one. */
1999 if ((argno < nargs) || argbytes)
2005 space += ((len - argbytes + 3) & -4);
2011 for (; jj < nargs; ++jj)
2013 struct value *val = args[jj];
2014 space += ((TYPE_LENGTH (value_type (val))) + 3) & -4;
2017 /* Add location required for the rest of the parameters. */
2018 space = (space + 15) & -16;
2021 /* This is another instance we need to be concerned about
2022 securing our stack space. If we write anything underneath %sp
2023 (r1), we might conflict with the kernel who thinks he is free
2024 to use this area. So, update %sp first before doing anything
2027 regcache_raw_write_signed (regcache,
2028 gdbarch_sp_regnum (gdbarch), sp);
2030 /* If the last argument copied into the registers didn't fit there
2031 completely, push the rest of it into stack. */
2035 write_memory (sp + 24 + (ii * 4),
2036 value_contents (arg) + argbytes,
2039 ii += ((len - argbytes + 3) & -4) / 4;
2042 /* Push the rest of the arguments into stack. */
2043 for (; argno < nargs; ++argno)
2047 type = check_typedef (value_type (arg));
2048 len = TYPE_LENGTH (type);
2051 /* Float types should be passed in fpr's, as well as in the
2053 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
2056 gdb_assert (len <= 8);
2058 regcache_cooked_write (regcache,
2059 tdep->ppc_fp0_regnum + 1 + f_argno,
2060 value_contents (arg));
2064 write_memory (sp + 24 + (ii * 4), value_contents (arg), len);
2065 ii += ((len + 3) & -4) / 4;
2069 /* Set the stack pointer. According to the ABI, the SP is meant to
2070 be set _before_ the corresponding stack space is used. On AIX,
2071 this even applies when the target has been completely stopped!
2072 Not doing this can lead to conflicts with the kernel which thinks
2073 that it still has control over this not-yet-allocated stack
2075 regcache_raw_write_signed (regcache, gdbarch_sp_regnum (gdbarch), sp);
2077 /* Set back chain properly. */
2078 store_unsigned_integer (tmp_buffer, wordsize, saved_sp);
2079 write_memory (sp, tmp_buffer, wordsize);
2081 /* Point the inferior function call's return address at the dummy's
2083 regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
2085 /* Set the TOC register, get the value from the objfile reader
2086 which, in turn, gets it from the VMAP table. */
2087 if (rs6000_find_toc_address_hook != NULL)
2089 CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (func_addr);
2090 regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, tocvalue);
2093 target_store_registers (regcache, -1);
2097 static enum return_value_convention
2098 rs6000_return_value (struct gdbarch *gdbarch, struct type *func_type,
2099 struct type *valtype, struct regcache *regcache,
2100 gdb_byte *readbuf, const gdb_byte *writebuf)
2102 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2105 /* The calling convention this function implements assumes the
2106 processor has floating-point registers. We shouldn't be using it
2107 on PowerPC variants that lack them. */
2108 gdb_assert (ppc_floating_point_unit_p (gdbarch));
2110 /* AltiVec extension: Functions that declare a vector data type as a
2111 return value place that return value in VR2. */
2112 if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)
2113 && TYPE_LENGTH (valtype) == 16)
2116 regcache_cooked_read (regcache, tdep->ppc_vr0_regnum + 2, readbuf);
2118 regcache_cooked_write (regcache, tdep->ppc_vr0_regnum + 2, writebuf);
2120 return RETURN_VALUE_REGISTER_CONVENTION;
2123 /* If the called subprogram returns an aggregate, there exists an
2124 implicit first argument, whose value is the address of a caller-
2125 allocated buffer into which the callee is assumed to store its
2126 return value. All explicit parameters are appropriately
2128 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
2129 || TYPE_CODE (valtype) == TYPE_CODE_UNION
2130 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
2131 return RETURN_VALUE_STRUCT_CONVENTION;
2133 /* Scalar floating-point values are returned in FPR1 for float or
2134 double, and in FPR1:FPR2 for quadword precision. Fortran
2135 complex*8 and complex*16 are returned in FPR1:FPR2, and
2136 complex*32 is returned in FPR1:FPR4. */
2137 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
2138 && (TYPE_LENGTH (valtype) == 4 || TYPE_LENGTH (valtype) == 8))
2140 struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum);
2143 /* FIXME: kettenis/2007-01-01: Add support for quadword
2144 precision and complex. */
2148 regcache_cooked_read (regcache, tdep->ppc_fp0_regnum + 1, regval);
2149 convert_typed_floating (regval, regtype, readbuf, valtype);
2153 convert_typed_floating (writebuf, valtype, regval, regtype);
2154 regcache_cooked_write (regcache, tdep->ppc_fp0_regnum + 1, regval);
2157 return RETURN_VALUE_REGISTER_CONVENTION;
2160 /* Values of the types int, long, short, pointer, and char (length
2161 is less than or equal to four bytes), as well as bit values of
2162 lengths less than or equal to 32 bits, must be returned right
2163 justified in GPR3 with signed values sign extended and unsigned
2164 values zero extended, as necessary. */
2165 if (TYPE_LENGTH (valtype) <= tdep->wordsize)
2171 /* For reading we don't have to worry about sign extension. */
2172 regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
2174 store_unsigned_integer (readbuf, TYPE_LENGTH (valtype), regval);
2178 /* For writing, use unpack_long since that should handle any
2179 required sign extension. */
2180 regcache_cooked_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
2181 unpack_long (valtype, writebuf));
2184 return RETURN_VALUE_REGISTER_CONVENTION;
2187 /* Eight-byte non-floating-point scalar values must be returned in
2190 if (TYPE_LENGTH (valtype) == 8)
2192 gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_FLT);
2193 gdb_assert (tdep->wordsize == 4);
2199 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 3, regval);
2200 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 4,
2202 memcpy (readbuf, regval, 8);
2206 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3, writebuf);
2207 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 4,
2211 return RETURN_VALUE_REGISTER_CONVENTION;
2214 return RETURN_VALUE_STRUCT_CONVENTION;
2217 /* Return whether handle_inferior_event() should proceed through code
2218 starting at PC in function NAME when stepping.
2220 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2221 handle memory references that are too distant to fit in instructions
2222 generated by the compiler. For example, if 'foo' in the following
2227 is greater than 32767, the linker might replace the lwz with a branch to
2228 somewhere in @FIX1 that does the load in 2 instructions and then branches
2229 back to where execution should continue.
2231 GDB should silently step over @FIX code, just like AIX dbx does.
2232 Unfortunately, the linker uses the "b" instruction for the
2233 branches, meaning that the link register doesn't get set.
2234 Therefore, GDB's usual step_over_function () mechanism won't work.
2236 Instead, use the gdbarch_skip_trampoline_code and
2237 gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2241 rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name)
2243 return name && !strncmp (name, "@FIX", 4);
2246 /* Skip code that the user doesn't want to see when stepping:
2248 1. Indirect function calls use a piece of trampoline code to do context
2249 switching, i.e. to set the new TOC table. Skip such code if we are on
2250 its first instruction (as when we have single-stepped to here).
2252 2. Skip shared library trampoline code (which is different from
2253 indirect function call trampolines).
2255 3. Skip bigtoc fixup code.
2257 Result is desired PC to step until, or NULL if we are not in
2258 code that should be skipped. */
2261 rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2263 unsigned int ii, op;
2265 CORE_ADDR solib_target_pc;
2266 struct minimal_symbol *msymbol;
2268 static unsigned trampoline_code[] =
2270 0x800b0000, /* l r0,0x0(r11) */
2271 0x90410014, /* st r2,0x14(r1) */
2272 0x7c0903a6, /* mtctr r0 */
2273 0x804b0004, /* l r2,0x4(r11) */
2274 0x816b0008, /* l r11,0x8(r11) */
2275 0x4e800420, /* bctr */
2276 0x4e800020, /* br */
2280 /* Check for bigtoc fixup code. */
2281 msymbol = lookup_minimal_symbol_by_pc (pc);
2283 && rs6000_in_solib_return_trampoline (pc,
2284 DEPRECATED_SYMBOL_NAME (msymbol)))
2286 /* Double-check that the third instruction from PC is relative "b". */
2287 op = read_memory_integer (pc + 8, 4);
2288 if ((op & 0xfc000003) == 0x48000000)
2290 /* Extract bits 6-29 as a signed 24-bit relative word address and
2291 add it to the containing PC. */
2292 rel = ((int)(op << 6) >> 6);
2293 return pc + 8 + rel;
2297 /* If pc is in a shared library trampoline, return its target. */
2298 solib_target_pc = find_solib_trampoline_target (frame, pc);
2299 if (solib_target_pc)
2300 return solib_target_pc;
2302 for (ii = 0; trampoline_code[ii]; ++ii)
2304 op = read_memory_integer (pc + (ii * 4), 4);
2305 if (op != trampoline_code[ii])
2308 ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination addr */
2309 pc = read_memory_addr (ii,
2310 gdbarch_tdep (get_frame_arch (frame))->wordsize); /* (r11) value */
2314 /* ISA-specific vector types. */
2316 static struct type *
2317 rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2319 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2321 if (!tdep->ppc_builtin_type_vec64)
2323 /* The type we're building is this: */
2325 union __gdb_builtin_type_vec64
2329 int32_t v2_int32[2];
2330 int16_t v4_int16[4];
2337 t = init_composite_type ("__ppc_builtin_type_vec64", TYPE_CODE_UNION);
2338 append_composite_type_field (t, "uint64", builtin_type_int64);
2339 append_composite_type_field (t, "v2_float",
2340 init_vector_type (builtin_type_float, 2));
2341 append_composite_type_field (t, "v2_int32",
2342 init_vector_type (builtin_type_int32, 2));
2343 append_composite_type_field (t, "v4_int16",
2344 init_vector_type (builtin_type_int16, 4));
2345 append_composite_type_field (t, "v8_int8",
2346 init_vector_type (builtin_type_int8, 8));
2348 TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
2349 TYPE_NAME (t) = "ppc_builtin_type_vec64";
2350 tdep->ppc_builtin_type_vec64 = t;
2353 return tdep->ppc_builtin_type_vec64;
2356 /* Return the size of register REG when words are WORDSIZE bytes long. If REG
2357 isn't available with that word size, return 0. */
2360 regsize (const struct reg *reg, int wordsize)
2362 return wordsize == 8 ? reg->sz64 : reg->sz32;
2365 /* Return the name of register number REGNO, or the empty string if it
2366 is an anonymous register. */
2369 rs6000_register_name (struct gdbarch *gdbarch, int regno)
2371 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2373 /* The upper half "registers" have names in the XML description,
2374 but we present only the low GPRs and the full 64-bit registers
2376 if (tdep->ppc_ev0_upper_regnum >= 0
2377 && tdep->ppc_ev0_upper_regnum <= regno
2378 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
2381 /* Check if the SPE pseudo registers are available. */
2382 if (IS_SPE_PSEUDOREG (tdep, regno))
2384 static const char *const spe_regnames[] = {
2385 "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2386 "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2387 "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2388 "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2390 return spe_regnames[regno - tdep->ppc_ev0_regnum];
2393 /* Check if the decimal128 pseudo-registers are available. */
2394 if (IS_DFP_PSEUDOREG (tdep, regno))
2396 static const char *const dfp128_regnames[] = {
2397 "dl0", "dl1", "dl2", "dl3",
2398 "dl4", "dl5", "dl6", "dl7",
2399 "dl8", "dl9", "dl10", "dl11",
2400 "dl12", "dl13", "dl14", "dl15"
2402 return dfp128_regnames[regno - tdep->ppc_dl0_regnum];
2405 return tdesc_register_name (gdbarch, regno);
2408 /* Return the GDB type object for the "standard" data type of data in
2411 static struct type *
2412 rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2414 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2416 /* These are the only pseudo-registers we support. */
2417 gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2418 || IS_DFP_PSEUDOREG (tdep, regnum));
2420 /* These are the e500 pseudo-registers. */
2421 if (IS_SPE_PSEUDOREG (tdep, regnum))
2422 return rs6000_builtin_type_vec64 (gdbarch);
2424 /* Could only be the ppc decimal128 pseudo-registers. */
2425 return builtin_type (gdbarch)->builtin_declong;
2428 /* Is REGNUM a member of REGGROUP? */
2430 rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2431 struct reggroup *group)
2433 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2435 /* These are the only pseudo-registers we support. */
2436 gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2437 || IS_DFP_PSEUDOREG (tdep, regnum));
2439 /* These are the e500 pseudo-registers. */
2440 if (IS_SPE_PSEUDOREG (tdep, regnum))
2441 return group == all_reggroup || group == vector_reggroup;
2443 /* Could only be the ppc decimal128 pseudo-registers. */
2444 return group == all_reggroup || group == float_reggroup;
2447 /* The register format for RS/6000 floating point registers is always
2448 double, we need a conversion if the memory format is float. */
2451 rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2454 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2456 return (tdep->ppc_fp0_regnum >= 0
2457 && regnum >= tdep->ppc_fp0_regnum
2458 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs
2459 && TYPE_CODE (type) == TYPE_CODE_FLT
2460 && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type_double));
2464 rs6000_register_to_value (struct frame_info *frame,
2469 gdb_byte from[MAX_REGISTER_SIZE];
2471 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2473 get_frame_register (frame, regnum, from);
2474 convert_typed_floating (from, builtin_type_double, to, type);
2478 rs6000_value_to_register (struct frame_info *frame,
2481 const gdb_byte *from)
2483 gdb_byte to[MAX_REGISTER_SIZE];
2485 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2487 convert_typed_floating (from, type, to, builtin_type_double);
2488 put_frame_register (frame, regnum, to);
2491 /* Move SPE vector register values between a 64-bit buffer and the two
2492 32-bit raw register halves in a regcache. This function handles
2493 both splitting a 64-bit value into two 32-bit halves, and joining
2494 two halves into a whole 64-bit value, depending on the function
2495 passed as the MOVE argument.
2497 EV_REG must be the number of an SPE evN vector register --- a
2498 pseudoregister. REGCACHE must be a regcache, and BUFFER must be a
2501 Call MOVE once for each 32-bit half of that register, passing
2502 REGCACHE, the number of the raw register corresponding to that
2503 half, and the address of the appropriate half of BUFFER.
2505 For example, passing 'regcache_raw_read' as the MOVE function will
2506 fill BUFFER with the full 64-bit contents of EV_REG. Or, passing
2507 'regcache_raw_supply' will supply the contents of BUFFER to the
2508 appropriate pair of raw registers in REGCACHE.
2510 You may need to cast away some 'const' qualifiers when passing
2511 MOVE, since this function can't tell at compile-time which of
2512 REGCACHE or BUFFER is acting as the source of the data. If C had
2513 co-variant type qualifiers, ... */
2515 e500_move_ev_register (void (*move) (struct regcache *regcache,
2516 int regnum, gdb_byte *buf),
2517 struct regcache *regcache, int ev_reg,
2520 struct gdbarch *arch = get_regcache_arch (regcache);
2521 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2523 gdb_byte *byte_buffer = buffer;
2525 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2527 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2529 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2531 move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer);
2532 move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer + 4);
2536 move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer);
2537 move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer + 4);
2542 e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2543 int reg_nr, gdb_byte *buffer)
2545 e500_move_ev_register (regcache_raw_read, regcache, reg_nr, buffer);
2549 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2550 int reg_nr, const gdb_byte *buffer)
2552 e500_move_ev_register ((void (*) (struct regcache *, int, gdb_byte *))
2554 regcache, reg_nr, (gdb_byte *) buffer);
2557 /* Read method for PPC pseudo-registers. Currently this is handling the
2558 16 decimal128 registers that map into 16 pairs of FP registers. */
2560 ppc_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2561 int reg_nr, gdb_byte *buffer)
2563 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2564 int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2566 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2568 /* Read two FP registers to form a whole dl register. */
2569 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2570 2 * reg_index, buffer);
2571 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2572 2 * reg_index + 1, buffer + 8);
2576 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2577 2 * reg_index + 1, buffer + 8);
2578 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2579 2 * reg_index, buffer);
2583 /* Write method for PPC pseudo-registers. Currently this is handling the
2584 16 decimal128 registers that map into 16 pairs of FP registers. */
2586 ppc_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2587 int reg_nr, const gdb_byte *buffer)
2589 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2590 int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2592 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2594 /* Write each half of the dl register into a separate
2596 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2597 2 * reg_index, buffer);
2598 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2599 2 * reg_index + 1, buffer + 8);
2603 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2604 2 * reg_index + 1, buffer + 8);
2605 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2606 2 * reg_index, buffer);
2611 rs6000_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2612 int reg_nr, gdb_byte *buffer)
2614 struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2615 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2617 gdb_assert (regcache_arch == gdbarch);
2619 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2620 e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2621 else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2622 ppc_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2624 internal_error (__FILE__, __LINE__,
2625 _("rs6000_pseudo_register_read: "
2626 "called on unexpected register '%s' (%d)"),
2627 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2631 rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2632 struct regcache *regcache,
2633 int reg_nr, const gdb_byte *buffer)
2635 struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2636 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2638 gdb_assert (regcache_arch == gdbarch);
2640 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2641 e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2642 else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2643 ppc_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2645 internal_error (__FILE__, __LINE__,
2646 _("rs6000_pseudo_register_write: "
2647 "called on unexpected register '%s' (%d)"),
2648 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2651 /* Convert a DBX STABS register number to a GDB register number. */
2653 rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
2655 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2657 if (0 <= num && num <= 31)
2658 return tdep->ppc_gp0_regnum + num;
2659 else if (32 <= num && num <= 63)
2660 /* FIXME: jimb/2004-05-05: What should we do when the debug info
2661 specifies registers the architecture doesn't have? Our
2662 callers don't check the value we return. */
2663 return tdep->ppc_fp0_regnum + (num - 32);
2664 else if (77 <= num && num <= 108)
2665 return tdep->ppc_vr0_regnum + (num - 77);
2666 else if (1200 <= num && num < 1200 + 32)
2667 return tdep->ppc_ev0_regnum + (num - 1200);
2672 return tdep->ppc_mq_regnum;
2674 return tdep->ppc_lr_regnum;
2676 return tdep->ppc_ctr_regnum;
2678 return tdep->ppc_xer_regnum;
2680 return tdep->ppc_vrsave_regnum;
2682 return tdep->ppc_vrsave_regnum - 1; /* vscr */
2684 return tdep->ppc_acc_regnum;
2686 return tdep->ppc_spefscr_regnum;
2693 /* Convert a Dwarf 2 register number to a GDB register number. */
2695 rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
2697 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2699 if (0 <= num && num <= 31)
2700 return tdep->ppc_gp0_regnum + num;
2701 else if (32 <= num && num <= 63)
2702 /* FIXME: jimb/2004-05-05: What should we do when the debug info
2703 specifies registers the architecture doesn't have? Our
2704 callers don't check the value we return. */
2705 return tdep->ppc_fp0_regnum + (num - 32);
2706 else if (1124 <= num && num < 1124 + 32)
2707 return tdep->ppc_vr0_regnum + (num - 1124);
2708 else if (1200 <= num && num < 1200 + 32)
2709 return tdep->ppc_ev0_regnum + (num - 1200);
2714 return tdep->ppc_cr_regnum;
2716 return tdep->ppc_vrsave_regnum - 1; /* vscr */
2718 return tdep->ppc_acc_regnum;
2720 return tdep->ppc_mq_regnum;
2722 return tdep->ppc_xer_regnum;
2724 return tdep->ppc_lr_regnum;
2726 return tdep->ppc_ctr_regnum;
2728 return tdep->ppc_vrsave_regnum;
2730 return tdep->ppc_spefscr_regnum;
2736 /* Translate a .eh_frame register to DWARF register, or adjust a
2737 .debug_frame register. */
2740 rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
2742 /* GCC releases before 3.4 use GCC internal register numbering in
2743 .debug_frame (and .debug_info, et cetera). The numbering is
2744 different from the standard SysV numbering for everything except
2745 for GPRs and FPRs. We can not detect this problem in most cases
2746 - to get accurate debug info for variables living in lr, ctr, v0,
2747 et cetera, use a newer version of GCC. But we must detect
2748 one important case - lr is in column 65 in .debug_frame output,
2751 GCC 3.4, and the "hammer" branch, have a related problem. They
2752 record lr register saves in .debug_frame as 108, but still record
2753 the return column as 65. We fix that up too.
2755 We can do this because 65 is assigned to fpsr, and GCC never
2756 generates debug info referring to it. To add support for
2757 handwritten debug info that restores fpsr, we would need to add a
2758 producer version check to this. */
2767 /* .eh_frame is GCC specific. For binary compatibility, it uses GCC
2768 internal register numbering; translate that to the standard DWARF2
2769 register numbering. */
2770 if (0 <= num && num <= 63) /* r0-r31,fp0-fp31 */
2772 else if (68 <= num && num <= 75) /* cr0-cr8 */
2773 return num - 68 + 86;
2774 else if (77 <= num && num <= 108) /* vr0-vr31 */
2775 return num - 77 + 1124;
2787 case 109: /* vrsave */
2789 case 110: /* vscr */
2791 case 111: /* spe_acc */
2793 case 112: /* spefscr */
2800 /* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
2802 Usually a function pointer's representation is simply the address
2803 of the function. On the RS/6000 however, a function pointer is
2804 represented by a pointer to an OPD entry. This OPD entry contains
2805 three words, the first word is the address of the function, the
2806 second word is the TOC pointer (r2), and the third word is the
2807 static chain value. Throughout GDB it is currently assumed that a
2808 function pointer contains the address of the function, which is not
2809 easy to fix. In addition, the conversion of a function address to
2810 a function pointer would require allocation of an OPD entry in the
2811 inferior's memory space, with all its drawbacks. To be able to
2812 call C++ virtual methods in the inferior (which are called via
2813 function pointers), find_function_addr uses this function to get the
2814 function address from a function pointer. */
2816 /* Return real function address if ADDR (a function pointer) is in the data
2817 space and is therefore a special function pointer. */
2820 rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
2822 struct target_ops *targ)
2824 struct obj_section *s;
2826 s = find_pc_section (addr);
2827 if (s && s->the_bfd_section->flags & SEC_CODE)
2830 /* ADDR is in the data space, so it's a special function pointer. */
2831 return read_memory_addr (addr, gdbarch_tdep (gdbarch)->wordsize);
2835 /* Handling the various POWER/PowerPC variants. */
2837 /* Information about a particular processor variant. */
2841 /* Name of this variant. */
2844 /* English description of the variant. */
2847 /* bfd_arch_info.arch corresponding to variant. */
2848 enum bfd_architecture arch;
2850 /* bfd_arch_info.mach corresponding to variant. */
2853 /* Target description for this variant. */
2854 struct target_desc **tdesc;
2857 static struct variant variants[] =
2859 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
2860 bfd_mach_ppc, &tdesc_powerpc_32},
2861 {"power", "POWER user-level", bfd_arch_rs6000,
2862 bfd_mach_rs6k, &tdesc_rs6000},
2863 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
2864 bfd_mach_ppc_403, &tdesc_powerpc_403},
2865 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
2866 bfd_mach_ppc_601, &tdesc_powerpc_601},
2867 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
2868 bfd_mach_ppc_602, &tdesc_powerpc_602},
2869 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
2870 bfd_mach_ppc_603, &tdesc_powerpc_603},
2871 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
2872 604, &tdesc_powerpc_604},
2873 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
2874 bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
2875 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
2876 bfd_mach_ppc_505, &tdesc_powerpc_505},
2877 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
2878 bfd_mach_ppc_860, &tdesc_powerpc_860},
2879 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
2880 bfd_mach_ppc_750, &tdesc_powerpc_750},
2881 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2882 bfd_mach_ppc_7400, &tdesc_powerpc_7400},
2883 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
2884 bfd_mach_ppc_e500, &tdesc_powerpc_e500},
2887 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2888 bfd_mach_ppc64, &tdesc_powerpc_64},
2889 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2890 bfd_mach_ppc_620, &tdesc_powerpc_64},
2891 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2892 bfd_mach_ppc_630, &tdesc_powerpc_64},
2893 {"a35", "PowerPC A35", bfd_arch_powerpc,
2894 bfd_mach_ppc_a35, &tdesc_powerpc_64},
2895 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
2896 bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
2897 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
2898 bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
2900 /* FIXME: I haven't checked the register sets of the following. */
2901 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
2902 bfd_mach_rs6k_rs1, &tdesc_rs6000},
2903 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
2904 bfd_mach_rs6k_rsc, &tdesc_rs6000},
2905 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
2906 bfd_mach_rs6k_rs2, &tdesc_rs6000},
2911 /* Return the variant corresponding to architecture ARCH and machine number
2912 MACH. If no such variant exists, return null. */
2914 static const struct variant *
2915 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
2917 const struct variant *v;
2919 for (v = variants; v->name; v++)
2920 if (arch == v->arch && mach == v->mach)
2927 gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
2929 if (!info->disassembler_options)
2930 info->disassembler_options = "any";
2932 if (info->endian == BFD_ENDIAN_BIG)
2933 return print_insn_big_powerpc (memaddr, info);
2935 return print_insn_little_powerpc (memaddr, info);
2939 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2941 return frame_unwind_register_unsigned (next_frame,
2942 gdbarch_pc_regnum (gdbarch));
2945 static struct frame_id
2946 rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2948 return frame_id_build (get_frame_register_unsigned
2949 (this_frame, gdbarch_sp_regnum (gdbarch)),
2950 get_frame_pc (this_frame));
2953 struct rs6000_frame_cache
2956 CORE_ADDR initial_sp;
2957 struct trad_frame_saved_reg *saved_regs;
2960 static struct rs6000_frame_cache *
2961 rs6000_frame_cache (struct frame_info *this_frame, void **this_cache)
2963 struct rs6000_frame_cache *cache;
2964 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2965 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2966 struct rs6000_framedata fdata;
2967 int wordsize = tdep->wordsize;
2970 if ((*this_cache) != NULL)
2971 return (*this_cache);
2972 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
2973 (*this_cache) = cache;
2974 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2976 func = get_frame_func (this_frame);
2977 pc = get_frame_pc (this_frame);
2978 skip_prologue (gdbarch, func, pc, &fdata);
2980 /* Figure out the parent's stack pointer. */
2982 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
2983 address of the current frame. Things might be easier if the
2984 ->frame pointed to the outer-most address of the frame. In
2985 the mean time, the address of the prev frame is used as the
2986 base address of this frame. */
2987 cache->base = get_frame_register_unsigned
2988 (this_frame, gdbarch_sp_regnum (gdbarch));
2990 /* If the function appears to be frameless, check a couple of likely
2991 indicators that we have simply failed to find the frame setup.
2992 Two common cases of this are missing symbols (i.e.
2993 frame_func_unwind returns the wrong address or 0), and assembly
2994 stubs which have a fast exit path but set up a frame on the slow
2997 If the LR appears to return to this function, then presume that
2998 we have an ABI compliant frame that we failed to find. */
2999 if (fdata.frameless && fdata.lr_offset == 0)
3004 saved_lr = get_frame_register_unsigned (this_frame, tdep->ppc_lr_regnum);
3005 if (func == 0 && saved_lr == pc)
3009 CORE_ADDR saved_func = get_pc_function_start (saved_lr);
3010 if (func == saved_func)
3016 fdata.frameless = 0;
3017 fdata.lr_offset = tdep->lr_frame_offset;
3021 if (!fdata.frameless)
3022 /* Frameless really means stackless. */
3023 cache->base = read_memory_addr (cache->base, wordsize);
3025 trad_frame_set_value (cache->saved_regs,
3026 gdbarch_sp_regnum (gdbarch), cache->base);
3028 /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3029 All fpr's from saved_fpr to fp31 are saved. */
3031 if (fdata.saved_fpr >= 0)
3034 CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
3036 /* If skip_prologue says floating-point registers were saved,
3037 but the current architecture has no floating-point registers,
3038 then that's strange. But we have no indices to even record
3039 the addresses under, so we just ignore it. */
3040 if (ppc_floating_point_unit_p (gdbarch))
3041 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
3043 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3048 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3049 All gpr's from saved_gpr to gpr31 are saved. */
3051 if (fdata.saved_gpr >= 0)
3054 CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
3055 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
3057 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
3058 gpr_addr += wordsize;
3062 /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3063 All vr's from saved_vr to vr31 are saved. */
3064 if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
3066 if (fdata.saved_vr >= 0)
3069 CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
3070 for (i = fdata.saved_vr; i < 32; i++)
3072 cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
3073 vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
3078 /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3079 All vr's from saved_ev to ev31 are saved. ????? */
3080 if (tdep->ppc_ev0_regnum != -1)
3082 if (fdata.saved_ev >= 0)
3085 CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
3086 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
3088 cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
3089 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4;
3090 ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
3095 /* If != 0, fdata.cr_offset is the offset from the frame that
3097 if (fdata.cr_offset != 0)
3098 cache->saved_regs[tdep->ppc_cr_regnum].addr = cache->base + fdata.cr_offset;
3100 /* If != 0, fdata.lr_offset is the offset from the frame that
3102 if (fdata.lr_offset != 0)
3103 cache->saved_regs[tdep->ppc_lr_regnum].addr = cache->base + fdata.lr_offset;
3104 /* The PC is found in the link register. */
3105 cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3106 cache->saved_regs[tdep->ppc_lr_regnum];
3108 /* If != 0, fdata.vrsave_offset is the offset from the frame that
3109 holds the VRSAVE. */
3110 if (fdata.vrsave_offset != 0)
3111 cache->saved_regs[tdep->ppc_vrsave_regnum].addr = cache->base + fdata.vrsave_offset;
3113 if (fdata.alloca_reg < 0)
3114 /* If no alloca register used, then fi->frame is the value of the
3115 %sp for this frame, and it is good enough. */
3117 = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
3120 = get_frame_register_unsigned (this_frame, fdata.alloca_reg);
3126 rs6000_frame_this_id (struct frame_info *this_frame, void **this_cache,
3127 struct frame_id *this_id)
3129 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3131 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3134 static struct value *
3135 rs6000_frame_prev_register (struct frame_info *this_frame,
3136 void **this_cache, int regnum)
3138 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3140 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3143 static const struct frame_unwind rs6000_frame_unwind =
3146 rs6000_frame_this_id,
3147 rs6000_frame_prev_register,
3149 default_frame_sniffer
3154 rs6000_frame_base_address (struct frame_info *this_frame, void **this_cache)
3156 struct rs6000_frame_cache *info = rs6000_frame_cache (this_frame,
3158 return info->initial_sp;
3161 static const struct frame_base rs6000_frame_base = {
3162 &rs6000_frame_unwind,
3163 rs6000_frame_base_address,
3164 rs6000_frame_base_address,
3165 rs6000_frame_base_address
3168 static const struct frame_base *
3169 rs6000_frame_base_sniffer (struct frame_info *this_frame)
3171 return &rs6000_frame_base;
3174 /* DWARF-2 frame support. Used to handle the detection of
3175 clobbered registers during function calls. */
3178 ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3179 struct dwarf2_frame_state_reg *reg,
3180 struct frame_info *this_frame)
3182 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3184 /* PPC32 and PPC64 ABI's are the same regarding volatile and
3185 non-volatile registers. We will use the same code for both. */
3187 /* Call-saved GP registers. */
3188 if ((regnum >= tdep->ppc_gp0_regnum + 14
3189 && regnum <= tdep->ppc_gp0_regnum + 31)
3190 || (regnum == tdep->ppc_gp0_regnum + 1))
3191 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3193 /* Call-clobbered GP registers. */
3194 if ((regnum >= tdep->ppc_gp0_regnum + 3
3195 && regnum <= tdep->ppc_gp0_regnum + 12)
3196 || (regnum == tdep->ppc_gp0_regnum))
3197 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3199 /* Deal with FP registers, if supported. */
3200 if (tdep->ppc_fp0_regnum >= 0)
3202 /* Call-saved FP registers. */
3203 if ((regnum >= tdep->ppc_fp0_regnum + 14
3204 && regnum <= tdep->ppc_fp0_regnum + 31))
3205 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3207 /* Call-clobbered FP registers. */
3208 if ((regnum >= tdep->ppc_fp0_regnum
3209 && regnum <= tdep->ppc_fp0_regnum + 13))
3210 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3213 /* Deal with ALTIVEC registers, if supported. */
3214 if (tdep->ppc_vr0_regnum > 0 && tdep->ppc_vrsave_regnum > 0)
3216 /* Call-saved Altivec registers. */
3217 if ((regnum >= tdep->ppc_vr0_regnum + 20
3218 && regnum <= tdep->ppc_vr0_regnum + 31)
3219 || regnum == tdep->ppc_vrsave_regnum)
3220 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3222 /* Call-clobbered Altivec registers. */
3223 if ((regnum >= tdep->ppc_vr0_regnum
3224 && regnum <= tdep->ppc_vr0_regnum + 19))
3225 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3228 /* Handle PC register and Stack Pointer correctly. */
3229 if (regnum == gdbarch_pc_regnum (gdbarch))
3230 reg->how = DWARF2_FRAME_REG_RA;
3231 else if (regnum == gdbarch_sp_regnum (gdbarch))
3232 reg->how = DWARF2_FRAME_REG_CFA;
3236 /* Initialize the current architecture based on INFO. If possible, re-use an
3237 architecture from ARCHES, which is a list of architectures already created
3238 during this debugging session.
3240 Called e.g. at program startup, when reading a core file, and when reading
3243 static struct gdbarch *
3244 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3246 struct gdbarch *gdbarch;
3247 struct gdbarch_tdep *tdep;
3248 int wordsize, from_xcoff_exec, from_elf_exec;
3249 enum bfd_architecture arch;
3254 enum auto_boolean soft_float_flag = powerpc_soft_float_global;
3256 enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
3257 int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0;
3258 int tdesc_wordsize = -1;
3259 const struct target_desc *tdesc = info.target_desc;
3260 struct tdesc_arch_data *tdesc_data = NULL;
3261 int num_pseudoregs = 0;
3263 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
3264 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
3266 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
3267 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
3269 sysv_abi = info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
3271 /* Check word size. If INFO is from a binary file, infer it from
3272 that, else choose a likely default. */
3273 if (from_xcoff_exec)
3275 if (bfd_xcoff_is_xcoff64 (info.abfd))
3280 else if (from_elf_exec)
3282 if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
3287 else if (tdesc_has_registers (tdesc))
3291 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
3292 wordsize = info.bfd_arch_info->bits_per_word /
3293 info.bfd_arch_info->bits_per_byte;
3298 /* Get the architecture and machine from the BFD. */
3299 arch = info.bfd_arch_info->arch;
3300 mach = info.bfd_arch_info->mach;
3302 /* For e500 executables, the apuinfo section is of help here. Such
3303 section contains the identifier and revision number of each
3304 Application-specific Processing Unit that is present on the
3305 chip. The content of the section is determined by the assembler
3306 which looks at each instruction and determines which unit (and
3307 which version of it) can execute it. In our case we just look for
3308 the existance of the section. */
3312 sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo");
3315 arch = info.bfd_arch_info->arch;
3316 mach = bfd_mach_ppc_e500;
3317 bfd_default_set_arch_mach (&abfd, arch, mach);
3318 info.bfd_arch_info = bfd_get_arch_info (&abfd);
3322 /* Find a default target description which describes our register
3323 layout, if we do not already have one. */
3324 if (! tdesc_has_registers (tdesc))
3326 const struct variant *v;
3328 /* Choose variant. */
3329 v = find_variant_by_arch (arch, mach);
3336 gdb_assert (tdesc_has_registers (tdesc));
3338 /* Check any target description for validity. */
3339 if (tdesc_has_registers (tdesc))
3341 static const char *const gprs[] = {
3342 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
3343 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
3344 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
3345 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
3347 static const char *const segment_regs[] = {
3348 "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
3349 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
3351 const struct tdesc_feature *feature;
3353 static const char *const msr_names[] = { "msr", "ps" };
3354 static const char *const cr_names[] = { "cr", "cnd" };
3355 static const char *const ctr_names[] = { "ctr", "cnt" };
3357 feature = tdesc_find_feature (tdesc,
3358 "org.gnu.gdb.power.core");
3359 if (feature == NULL)
3362 tdesc_data = tdesc_data_alloc ();
3365 for (i = 0; i < ppc_num_gprs; i++)
3366 valid_p &= tdesc_numbered_register (feature, tdesc_data, i, gprs[i]);
3367 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_PC_REGNUM,
3369 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_LR_REGNUM,
3371 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_XER_REGNUM,
3374 /* Allow alternate names for these registers, to accomodate GDB's
3376 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3377 PPC_MSR_REGNUM, msr_names);
3378 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3379 PPC_CR_REGNUM, cr_names);
3380 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3381 PPC_CTR_REGNUM, ctr_names);
3385 tdesc_data_cleanup (tdesc_data);
3389 have_mq = tdesc_numbered_register (feature, tdesc_data, PPC_MQ_REGNUM,
3392 tdesc_wordsize = tdesc_register_size (feature, "pc") / 8;
3394 wordsize = tdesc_wordsize;
3396 feature = tdesc_find_feature (tdesc,
3397 "org.gnu.gdb.power.fpu");
3398 if (feature != NULL)
3400 static const char *const fprs[] = {
3401 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
3402 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
3403 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
3404 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
3407 for (i = 0; i < ppc_num_fprs; i++)
3408 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3409 PPC_F0_REGNUM + i, fprs[i]);
3410 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3411 PPC_FPSCR_REGNUM, "fpscr");
3415 tdesc_data_cleanup (tdesc_data);
3423 /* The DFP pseudo-registers will be available when there are floating
3425 have_dfp = have_fpu;
3427 feature = tdesc_find_feature (tdesc,
3428 "org.gnu.gdb.power.altivec");
3429 if (feature != NULL)
3431 static const char *const vector_regs[] = {
3432 "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
3433 "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
3434 "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
3435 "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
3439 for (i = 0; i < ppc_num_gprs; i++)
3440 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3443 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3444 PPC_VSCR_REGNUM, "vscr");
3445 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3446 PPC_VRSAVE_REGNUM, "vrsave");
3448 if (have_spe || !valid_p)
3450 tdesc_data_cleanup (tdesc_data);
3458 /* On machines supporting the SPE APU, the general-purpose registers
3459 are 64 bits long. There are SIMD vector instructions to treat them
3460 as pairs of floats, but the rest of the instruction set treats them
3461 as 32-bit registers, and only operates on their lower halves.
3463 In the GDB regcache, we treat their high and low halves as separate
3464 registers. The low halves we present as the general-purpose
3465 registers, and then we have pseudo-registers that stitch together
3466 the upper and lower halves and present them as pseudo-registers.
3468 Thus, the target description is expected to supply the upper
3469 halves separately. */
3471 feature = tdesc_find_feature (tdesc,
3472 "org.gnu.gdb.power.spe");
3473 if (feature != NULL)
3475 static const char *const upper_spe[] = {
3476 "ev0h", "ev1h", "ev2h", "ev3h",
3477 "ev4h", "ev5h", "ev6h", "ev7h",
3478 "ev8h", "ev9h", "ev10h", "ev11h",
3479 "ev12h", "ev13h", "ev14h", "ev15h",
3480 "ev16h", "ev17h", "ev18h", "ev19h",
3481 "ev20h", "ev21h", "ev22h", "ev23h",
3482 "ev24h", "ev25h", "ev26h", "ev27h",
3483 "ev28h", "ev29h", "ev30h", "ev31h"
3487 for (i = 0; i < ppc_num_gprs; i++)
3488 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3489 PPC_SPE_UPPER_GP0_REGNUM + i,
3491 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3492 PPC_SPE_ACC_REGNUM, "acc");
3493 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3494 PPC_SPE_FSCR_REGNUM, "spefscr");
3496 if (have_mq || have_fpu || !valid_p)
3498 tdesc_data_cleanup (tdesc_data);
3507 /* If we have a 64-bit binary on a 32-bit target, complain. Also
3508 complain for a 32-bit binary on a 64-bit target; we do not yet
3509 support that. For instance, the 32-bit ABI routines expect
3512 As long as there isn't an explicit target description, we'll
3513 choose one based on the BFD architecture and get a word size
3514 matching the binary (probably powerpc:common or
3515 powerpc:common64). So there is only trouble if a 64-bit target
3516 supplies a 64-bit description while debugging a 32-bit
3518 if (tdesc_wordsize != -1 && tdesc_wordsize != wordsize)
3520 tdesc_data_cleanup (tdesc_data);
3525 if (soft_float_flag == AUTO_BOOLEAN_AUTO && from_elf_exec)
3527 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
3528 Tag_GNU_Power_ABI_FP))
3531 soft_float_flag = AUTO_BOOLEAN_FALSE;
3534 soft_float_flag = AUTO_BOOLEAN_TRUE;
3541 if (vector_abi == POWERPC_VEC_AUTO && from_elf_exec)
3543 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
3544 Tag_GNU_Power_ABI_Vector))
3547 vector_abi = POWERPC_VEC_GENERIC;
3550 vector_abi = POWERPC_VEC_ALTIVEC;
3553 vector_abi = POWERPC_VEC_SPE;
3561 if (soft_float_flag == AUTO_BOOLEAN_TRUE)
3563 else if (soft_float_flag == AUTO_BOOLEAN_FALSE)
3566 soft_float = !have_fpu;
3568 /* If we have a hard float binary or setting but no floating point
3569 registers, downgrade to soft float anyway. We're still somewhat
3570 useful in this scenario. */
3571 if (!soft_float && !have_fpu)
3574 /* Similarly for vector registers. */
3575 if (vector_abi == POWERPC_VEC_ALTIVEC && !have_altivec)
3576 vector_abi = POWERPC_VEC_GENERIC;
3578 if (vector_abi == POWERPC_VEC_SPE && !have_spe)
3579 vector_abi = POWERPC_VEC_GENERIC;
3581 if (vector_abi == POWERPC_VEC_AUTO)
3584 vector_abi = POWERPC_VEC_ALTIVEC;
3586 vector_abi = POWERPC_VEC_SPE;
3588 vector_abi = POWERPC_VEC_GENERIC;
3591 /* Do not limit the vector ABI based on available hardware, since we
3592 do not yet know what hardware we'll decide we have. Yuck! FIXME! */
3594 /* Find a candidate among extant architectures. */
3595 for (arches = gdbarch_list_lookup_by_info (arches, &info);
3597 arches = gdbarch_list_lookup_by_info (arches->next, &info))
3599 /* Word size in the various PowerPC bfd_arch_info structs isn't
3600 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
3601 separate word size check. */
3602 tdep = gdbarch_tdep (arches->gdbarch);
3603 if (tdep && tdep->soft_float != soft_float)
3605 if (tdep && tdep->vector_abi != vector_abi)
3607 if (tdep && tdep->wordsize == wordsize)
3609 if (tdesc_data != NULL)
3610 tdesc_data_cleanup (tdesc_data);
3611 return arches->gdbarch;
3615 /* None found, create a new architecture from INFO, whose bfd_arch_info
3616 validity depends on the source:
3617 - executable useless
3618 - rs6000_host_arch() good
3620 - "set arch" trust blindly
3621 - GDB startup useless but harmless */
3623 tdep = XCALLOC (1, struct gdbarch_tdep);
3624 tdep->wordsize = wordsize;
3625 tdep->soft_float = soft_float;
3626 tdep->vector_abi = vector_abi;
3628 gdbarch = gdbarch_alloc (&info, tdep);
3630 tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
3631 tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
3632 tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
3633 tdep->ppc_cr_regnum = PPC_CR_REGNUM;
3634 tdep->ppc_lr_regnum = PPC_LR_REGNUM;
3635 tdep->ppc_ctr_regnum = PPC_CTR_REGNUM;
3636 tdep->ppc_xer_regnum = PPC_XER_REGNUM;
3637 tdep->ppc_mq_regnum = have_mq ? PPC_MQ_REGNUM : -1;
3639 tdep->ppc_fp0_regnum = have_fpu ? PPC_F0_REGNUM : -1;
3640 tdep->ppc_fpscr_regnum = have_fpu ? PPC_FPSCR_REGNUM : -1;
3641 tdep->ppc_vr0_regnum = have_altivec ? PPC_VR0_REGNUM : -1;
3642 tdep->ppc_vrsave_regnum = have_altivec ? PPC_VRSAVE_REGNUM : -1;
3643 tdep->ppc_ev0_upper_regnum = have_spe ? PPC_SPE_UPPER_GP0_REGNUM : -1;
3644 tdep->ppc_acc_regnum = have_spe ? PPC_SPE_ACC_REGNUM : -1;
3645 tdep->ppc_spefscr_regnum = have_spe ? PPC_SPE_FSCR_REGNUM : -1;
3647 set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
3648 set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
3649 set_gdbarch_deprecated_fp_regnum (gdbarch, PPC_R0_REGNUM + 1);
3650 set_gdbarch_fp0_regnum (gdbarch, tdep->ppc_fp0_regnum);
3651 set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
3653 /* The XML specification for PowerPC sensibly calls the MSR "msr".
3654 GDB traditionally called it "ps", though, so let GDB add an
3656 set_gdbarch_ps_regnum (gdbarch, tdep->ppc_ps_regnum);
3658 if (sysv_abi && wordsize == 8)
3659 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
3660 else if (sysv_abi && wordsize == 4)
3661 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
3663 set_gdbarch_return_value (gdbarch, rs6000_return_value);
3665 /* Set lr_frame_offset. */
3667 tdep->lr_frame_offset = 16;
3669 tdep->lr_frame_offset = 4;
3671 tdep->lr_frame_offset = 8;
3673 if (have_spe || have_dfp)
3675 set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
3676 set_gdbarch_pseudo_register_write (gdbarch, rs6000_pseudo_register_write);
3679 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3681 /* Select instruction printer. */
3682 if (arch == bfd_arch_rs6000)
3683 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
3685 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
3687 set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
3690 num_pseudoregs += 32;
3692 num_pseudoregs += 16;
3694 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
3696 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3697 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
3698 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3699 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3700 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3701 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3702 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3704 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
3706 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3707 set_gdbarch_char_signed (gdbarch, 0);
3709 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
3710 if (sysv_abi && wordsize == 8)
3712 set_gdbarch_frame_red_zone_size (gdbarch, 288);
3713 else if (!sysv_abi && wordsize == 4)
3714 /* PowerOpen / AIX 32 bit. The saved area or red zone consists of
3715 19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
3716 Problem is, 220 isn't frame (16 byte) aligned. Round it up to
3718 set_gdbarch_frame_red_zone_size (gdbarch, 224);
3720 set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
3721 set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
3722 set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
3724 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
3725 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
3727 if (sysv_abi && wordsize == 4)
3728 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
3729 else if (sysv_abi && wordsize == 8)
3730 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
3732 set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
3734 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
3735 set_gdbarch_in_function_epilogue_p (gdbarch, rs6000_in_function_epilogue_p);
3737 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3738 set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
3740 /* The value of symbols of type N_SO and N_FUN maybe null when
3742 set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
3744 /* Handles single stepping of atomic sequences. */
3745 set_gdbarch_software_single_step (gdbarch, deal_with_atomic_sequence);
3747 /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN"
3748 for the descriptor and ".FN" for the entry-point -- a user
3749 specifying "break FN" will unexpectedly end up with a breakpoint
3750 on the descriptor and not the function. This architecture method
3751 transforms any breakpoints on descriptors into breakpoints on the
3752 corresponding entry point. */
3753 if (sysv_abi && wordsize == 8)
3754 set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address);
3756 /* Not sure on this. FIXMEmgo */
3757 set_gdbarch_frame_args_skip (gdbarch, 8);
3761 /* Handle RS/6000 function pointers (which are really function
3763 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
3764 rs6000_convert_from_func_ptr_addr);
3767 /* Helpers for function argument information. */
3768 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
3771 set_gdbarch_in_solib_return_trampoline
3772 (gdbarch, rs6000_in_solib_return_trampoline);
3773 set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
3775 /* Hook in the DWARF CFI frame unwinder. */
3776 dwarf2_append_unwinders (gdbarch);
3777 dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
3779 /* Frame handling. */
3780 dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
3782 /* Hook in ABI-specific overrides, if they have been registered. */
3783 gdbarch_init_osabi (info, gdbarch);
3787 case GDB_OSABI_LINUX:
3788 case GDB_OSABI_NETBSD_AOUT:
3789 case GDB_OSABI_NETBSD_ELF:
3790 case GDB_OSABI_UNKNOWN:
3791 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3792 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
3793 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
3794 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3797 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3799 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3800 frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
3801 set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
3802 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3805 set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
3806 set_tdesc_pseudo_register_reggroup_p (gdbarch,
3807 rs6000_pseudo_register_reggroup_p);
3808 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3810 /* Override the normal target description method to make the SPE upper
3811 halves anonymous. */
3812 set_gdbarch_register_name (gdbarch, rs6000_register_name);
3814 /* Recording the numbering of pseudo registers. */
3815 tdep->ppc_ev0_regnum = have_spe ? gdbarch_num_regs (gdbarch) : -1;
3817 /* Set the register number for _Decimal128 pseudo-registers. */
3818 tdep->ppc_dl0_regnum = have_dfp? gdbarch_num_regs (gdbarch) : -1;
3820 if (have_dfp && have_spe)
3821 /* Put the _Decimal128 pseudo-registers after the SPE registers. */
3822 tdep->ppc_dl0_regnum += 32;
3828 rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3830 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3835 /* FIXME: Dump gdbarch_tdep. */
3838 /* PowerPC-specific commands. */
3841 set_powerpc_command (char *args, int from_tty)
3843 printf_unfiltered (_("\
3844 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
3845 help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout);
3849 show_powerpc_command (char *args, int from_tty)
3851 cmd_show_list (showpowerpccmdlist, from_tty, "");
3855 powerpc_set_soft_float (char *args, int from_tty,
3856 struct cmd_list_element *c)
3858 struct gdbarch_info info;
3860 /* Update the architecture. */
3861 gdbarch_info_init (&info);
3862 if (!gdbarch_update_p (info))
3863 internal_error (__FILE__, __LINE__, "could not update architecture");
3867 powerpc_set_vector_abi (char *args, int from_tty,
3868 struct cmd_list_element *c)
3870 struct gdbarch_info info;
3871 enum powerpc_vector_abi vector_abi;
3873 for (vector_abi = POWERPC_VEC_AUTO;
3874 vector_abi != POWERPC_VEC_LAST;
3876 if (strcmp (powerpc_vector_abi_string,
3877 powerpc_vector_strings[vector_abi]) == 0)
3879 powerpc_vector_abi_global = vector_abi;
3883 if (vector_abi == POWERPC_VEC_LAST)
3884 internal_error (__FILE__, __LINE__, _("Invalid vector ABI accepted: %s."),
3885 powerpc_vector_abi_string);
3887 /* Update the architecture. */
3888 gdbarch_info_init (&info);
3889 if (!gdbarch_update_p (info))
3890 internal_error (__FILE__, __LINE__, "could not update architecture");
3893 /* Initialization code. */
3895 extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */
3898 _initialize_rs6000_tdep (void)
3900 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
3901 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
3903 /* Initialize the standard target descriptions. */
3904 initialize_tdesc_powerpc_32 ();
3905 initialize_tdesc_powerpc_403 ();
3906 initialize_tdesc_powerpc_403gc ();
3907 initialize_tdesc_powerpc_505 ();
3908 initialize_tdesc_powerpc_601 ();
3909 initialize_tdesc_powerpc_602 ();
3910 initialize_tdesc_powerpc_603 ();
3911 initialize_tdesc_powerpc_604 ();
3912 initialize_tdesc_powerpc_64 ();
3913 initialize_tdesc_powerpc_7400 ();
3914 initialize_tdesc_powerpc_750 ();
3915 initialize_tdesc_powerpc_860 ();
3916 initialize_tdesc_powerpc_e500 ();
3917 initialize_tdesc_rs6000 ();
3919 /* Add root prefix command for all "set powerpc"/"show powerpc"
3921 add_prefix_cmd ("powerpc", no_class, set_powerpc_command,
3922 _("Various PowerPC-specific commands."),
3923 &setpowerpccmdlist, "set powerpc ", 0, &setlist);
3925 add_prefix_cmd ("powerpc", no_class, show_powerpc_command,
3926 _("Various PowerPC-specific commands."),
3927 &showpowerpccmdlist, "show powerpc ", 0, &showlist);
3929 /* Add a command to allow the user to force the ABI. */
3930 add_setshow_auto_boolean_cmd ("soft-float", class_support,
3931 &powerpc_soft_float_global,
3932 _("Set whether to use a soft-float ABI."),
3933 _("Show whether to use a soft-float ABI."),
3935 powerpc_set_soft_float, NULL,
3936 &setpowerpccmdlist, &showpowerpccmdlist);
3938 add_setshow_enum_cmd ("vector-abi", class_support, powerpc_vector_strings,
3939 &powerpc_vector_abi_string,
3940 _("Set the vector ABI."),
3941 _("Show the vector ABI."),
3942 NULL, powerpc_set_vector_abi, NULL,
3943 &setpowerpccmdlist, &showpowerpccmdlist);