2004-06-06 Randolph Chung <tausq@debian.org>
[deliverable/binutils-gdb.git] / gdb / rs6000-tdep.c
CommitLineData
c906108c 1/* Target-dependent code for GDB, the GNU debugger.
7aea86e6
AC
2
3 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
4 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
5 Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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 2 of the License, or
12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b
JM
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
c906108c
SS
23
24#include "defs.h"
25#include "frame.h"
26#include "inferior.h"
27#include "symtab.h"
28#include "target.h"
29#include "gdbcore.h"
30#include "gdbcmd.h"
c906108c 31#include "objfiles.h"
7a78ae4e 32#include "arch-utils.h"
4e052eda 33#include "regcache.h"
d195bc9f 34#include "regset.h"
d16aafd8 35#include "doublest.h"
fd0407d6 36#include "value.h"
1fcc0bb8 37#include "parser-defs.h"
4be87837 38#include "osabi.h"
7d9b040b 39#include "infcall.h"
7a78ae4e 40
2fccf04a 41#include "libbfd.h" /* for bfd_default_set_arch_mach */
7a78ae4e 42#include "coff/internal.h" /* for libcoff.h */
2fccf04a 43#include "libcoff.h" /* for xcoff_data */
11ed25ac
KB
44#include "coff/xcoff.h"
45#include "libxcoff.h"
7a78ae4e 46
9aa1e687 47#include "elf-bfd.h"
7a78ae4e 48
6ded7999 49#include "solib-svr4.h"
9aa1e687 50#include "ppc-tdep.h"
7a78ae4e 51
338ef23d 52#include "gdb_assert.h"
a89aa300 53#include "dis-asm.h"
338ef23d 54
61a65099
KB
55#include "trad-frame.h"
56#include "frame-unwind.h"
57#include "frame-base.h"
58
7a78ae4e
ND
59/* If the kernel has to deliver a signal, it pushes a sigcontext
60 structure on the stack and then calls the signal handler, passing
61 the address of the sigcontext in an argument register. Usually
62 the signal handler doesn't save this register, so we have to
63 access the sigcontext structure via an offset from the signal handler
64 frame.
65 The following constants were determined by experimentation on AIX 3.2. */
66#define SIG_FRAME_PC_OFFSET 96
67#define SIG_FRAME_LR_OFFSET 108
68#define SIG_FRAME_FP_OFFSET 284
69
7a78ae4e
ND
70/* To be used by skip_prologue. */
71
72struct rs6000_framedata
73 {
74 int offset; /* total size of frame --- the distance
75 by which we decrement sp to allocate
76 the frame */
77 int saved_gpr; /* smallest # of saved gpr */
78 int saved_fpr; /* smallest # of saved fpr */
6be8bc0c 79 int saved_vr; /* smallest # of saved vr */
96ff0de4 80 int saved_ev; /* smallest # of saved ev */
7a78ae4e
ND
81 int alloca_reg; /* alloca register number (frame ptr) */
82 char frameless; /* true if frameless functions. */
83 char nosavedpc; /* true if pc not saved. */
84 int gpr_offset; /* offset of saved gprs from prev sp */
85 int fpr_offset; /* offset of saved fprs from prev sp */
6be8bc0c 86 int vr_offset; /* offset of saved vrs from prev sp */
96ff0de4 87 int ev_offset; /* offset of saved evs from prev sp */
7a78ae4e
ND
88 int lr_offset; /* offset of saved lr */
89 int cr_offset; /* offset of saved cr */
6be8bc0c 90 int vrsave_offset; /* offset of saved vrsave register */
7a78ae4e
ND
91 };
92
93/* Description of a single register. */
94
95struct reg
96 {
97 char *name; /* name of register */
98 unsigned char sz32; /* size on 32-bit arch, 0 if nonextant */
99 unsigned char sz64; /* size on 64-bit arch, 0 if nonextant */
100 unsigned char fpr; /* whether register is floating-point */
489461e2 101 unsigned char pseudo; /* whether register is pseudo */
7a78ae4e
ND
102 };
103
c906108c
SS
104/* Breakpoint shadows for the single step instructions will be kept here. */
105
c5aa993b
JM
106static struct sstep_breaks
107 {
108 /* Address, or 0 if this is not in use. */
109 CORE_ADDR address;
110 /* Shadow contents. */
111 char data[4];
112 }
113stepBreaks[2];
c906108c
SS
114
115/* Hook for determining the TOC address when calling functions in the
116 inferior under AIX. The initialization code in rs6000-nat.c sets
117 this hook to point to find_toc_address. */
118
7a78ae4e
ND
119CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
120
121/* Hook to set the current architecture when starting a child process.
122 rs6000-nat.c sets this. */
123
124void (*rs6000_set_host_arch_hook) (int) = NULL;
c906108c
SS
125
126/* Static function prototypes */
127
a14ed312
KB
128static CORE_ADDR branch_dest (int opcode, int instr, CORE_ADDR pc,
129 CORE_ADDR safety);
077276e8
KB
130static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR,
131 struct rs6000_framedata *);
c906108c 132
64b84175
KB
133/* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
134int
135altivec_register_p (int regno)
136{
137 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
138 if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
139 return 0;
140 else
141 return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
142}
143
383f0f5b 144
867e2dc5
JB
145/* Return true if REGNO is an SPE register, false otherwise. */
146int
147spe_register_p (int regno)
148{
149 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
150
151 /* Is it a reference to EV0 -- EV31, and do we have those? */
152 if (tdep->ppc_ev0_regnum >= 0
153 && tdep->ppc_ev31_regnum >= 0
154 && tdep->ppc_ev0_regnum <= regno && regno <= tdep->ppc_ev31_regnum)
155 return 1;
156
157 /* Is it a reference to the 64-bit accumulator, and do we have that? */
158 if (tdep->ppc_acc_regnum >= 0
159 && tdep->ppc_acc_regnum == regno)
160 return 1;
161
162 /* Is it a reference to the SPE floating-point status and control register,
163 and do we have that? */
164 if (tdep->ppc_spefscr_regnum >= 0
165 && tdep->ppc_spefscr_regnum == regno)
166 return 1;
167
168 return 0;
169}
170
171
383f0f5b
JB
172/* Return non-zero if the architecture described by GDBARCH has
173 floating-point registers (f0 --- f31 and fpscr). */
0a613259
AC
174int
175ppc_floating_point_unit_p (struct gdbarch *gdbarch)
176{
383f0f5b
JB
177 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
178
179 return (tdep->ppc_fp0_regnum >= 0
180 && tdep->ppc_fpscr_regnum >= 0);
0a613259 181}
d195bc9f
MK
182\f
183
184/* Register set support functions. */
185
186static void
187ppc_supply_reg (struct regcache *regcache, int regnum,
188 const char *regs, size_t offset)
189{
190 if (regnum != -1 && offset != -1)
191 regcache_raw_supply (regcache, regnum, regs + offset);
192}
193
194static void
195ppc_collect_reg (const struct regcache *regcache, int regnum,
196 char *regs, size_t offset)
197{
198 if (regnum != -1 && offset != -1)
199 regcache_raw_collect (regcache, regnum, regs + offset);
200}
201
202/* Supply register REGNUM in the general-purpose register set REGSET
203 from the buffer specified by GREGS and LEN to register cache
204 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
205
206void
207ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
208 int regnum, const void *gregs, size_t len)
209{
210 struct gdbarch *gdbarch = get_regcache_arch (regcache);
211 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
212 const struct ppc_reg_offsets *offsets = regset->descr;
213 size_t offset;
214 int i;
215
cdf2c5f5 216 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
063715bf 217 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
cdf2c5f5 218 i++, offset += 4)
d195bc9f
MK
219 {
220 if (regnum == -1 || regnum == i)
221 ppc_supply_reg (regcache, i, gregs, offset);
222 }
223
224 if (regnum == -1 || regnum == PC_REGNUM)
225 ppc_supply_reg (regcache, PC_REGNUM, gregs, offsets->pc_offset);
226 if (regnum == -1 || regnum == tdep->ppc_ps_regnum)
227 ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
228 gregs, offsets->ps_offset);
229 if (regnum == -1 || regnum == tdep->ppc_cr_regnum)
230 ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
231 gregs, offsets->cr_offset);
232 if (regnum == -1 || regnum == tdep->ppc_lr_regnum)
233 ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
234 gregs, offsets->lr_offset);
235 if (regnum == -1 || regnum == tdep->ppc_ctr_regnum)
236 ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
237 gregs, offsets->ctr_offset);
238 if (regnum == -1 || regnum == tdep->ppc_xer_regnum)
239 ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
240 gregs, offsets->cr_offset);
241 if (regnum == -1 || regnum == tdep->ppc_mq_regnum)
242 ppc_supply_reg (regcache, tdep->ppc_mq_regnum, gregs, offsets->mq_offset);
243}
244
245/* Supply register REGNUM in the floating-point register set REGSET
246 from the buffer specified by FPREGS and LEN to register cache
247 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
248
249void
250ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
251 int regnum, const void *fpregs, size_t len)
252{
253 struct gdbarch *gdbarch = get_regcache_arch (regcache);
254 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
255 const struct ppc_reg_offsets *offsets = regset->descr;
256 size_t offset;
257 int i;
258
383f0f5b
JB
259 gdb_assert (ppc_floating_point_unit_p (gdbarch));
260
d195bc9f 261 offset = offsets->f0_offset;
366f009f
JB
262 for (i = tdep->ppc_fp0_regnum;
263 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
264 i++, offset += 4)
d195bc9f
MK
265 {
266 if (regnum == -1 || regnum == i)
267 ppc_supply_reg (regcache, i, fpregs, offset);
268 }
269
270 if (regnum == -1 || regnum == tdep->ppc_fpscr_regnum)
271 ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
272 fpregs, offsets->fpscr_offset);
273}
274
275/* Collect register REGNUM in the general-purpose register set
276 REGSET. from register cache REGCACHE into the buffer specified by
277 GREGS and LEN. If REGNUM is -1, do this for all registers in
278 REGSET. */
279
280void
281ppc_collect_gregset (const struct regset *regset,
282 const struct regcache *regcache,
283 int regnum, void *gregs, size_t len)
284{
285 struct gdbarch *gdbarch = get_regcache_arch (regcache);
286 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
287 const struct ppc_reg_offsets *offsets = regset->descr;
288 size_t offset;
289 int i;
290
291 offset = offsets->r0_offset;
cdf2c5f5 292 for (i = tdep->ppc_gp0_regnum;
063715bf 293 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
cdf2c5f5 294 i++, offset += 4)
d195bc9f
MK
295 {
296 if (regnum == -1 || regnum == i)
2e56e9c1 297 ppc_collect_reg (regcache, i, gregs, offset);
d195bc9f
MK
298 }
299
300 if (regnum == -1 || regnum == PC_REGNUM)
301 ppc_collect_reg (regcache, PC_REGNUM, gregs, offsets->pc_offset);
302 if (regnum == -1 || regnum == tdep->ppc_ps_regnum)
303 ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
304 gregs, offsets->ps_offset);
305 if (regnum == -1 || regnum == tdep->ppc_cr_regnum)
306 ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
307 gregs, offsets->cr_offset);
308 if (regnum == -1 || regnum == tdep->ppc_lr_regnum)
309 ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
310 gregs, offsets->lr_offset);
311 if (regnum == -1 || regnum == tdep->ppc_ctr_regnum)
312 ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
313 gregs, offsets->ctr_offset);
314 if (regnum == -1 || regnum == tdep->ppc_xer_regnum)
315 ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
316 gregs, offsets->xer_offset);
317 if (regnum == -1 || regnum == tdep->ppc_mq_regnum)
318 ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
319 gregs, offsets->mq_offset);
320}
321
322/* Collect register REGNUM in the floating-point register set
323 REGSET. from register cache REGCACHE into the buffer specified by
324 FPREGS and LEN. If REGNUM is -1, do this for all registers in
325 REGSET. */
326
327void
328ppc_collect_fpregset (const struct regset *regset,
329 const struct regcache *regcache,
330 int regnum, void *fpregs, size_t len)
331{
332 struct gdbarch *gdbarch = get_regcache_arch (regcache);
333 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
334 const struct ppc_reg_offsets *offsets = regset->descr;
335 size_t offset;
336 int i;
337
383f0f5b
JB
338 gdb_assert (ppc_floating_point_unit_p (gdbarch));
339
d195bc9f 340 offset = offsets->f0_offset;
366f009f
JB
341 for (i = tdep->ppc_fp0_regnum;
342 i <= tdep->ppc_fp0_regnum + ppc_num_fprs;
343 i++, offset += 4)
d195bc9f
MK
344 {
345 if (regnum == -1 || regnum == i)
346 ppc_collect_reg (regcache, regnum, fpregs, offset);
347 }
348
349 if (regnum == -1 || regnum == tdep->ppc_fpscr_regnum)
350 ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
351 fpregs, offsets->fpscr_offset);
352}
353\f
0a613259 354
7a78ae4e 355/* Read a LEN-byte address from debugged memory address MEMADDR. */
c906108c 356
7a78ae4e
ND
357static CORE_ADDR
358read_memory_addr (CORE_ADDR memaddr, int len)
359{
360 return read_memory_unsigned_integer (memaddr, len);
361}
c906108c 362
7a78ae4e
ND
363static CORE_ADDR
364rs6000_skip_prologue (CORE_ADDR pc)
b83266a0
SS
365{
366 struct rs6000_framedata frame;
077276e8 367 pc = skip_prologue (pc, 0, &frame);
b83266a0
SS
368 return pc;
369}
370
371
c906108c
SS
372/* Fill in fi->saved_regs */
373
374struct frame_extra_info
375{
376 /* Functions calling alloca() change the value of the stack
377 pointer. We need to use initial stack pointer (which is saved in
378 r31 by gcc) in such cases. If a compiler emits traceback table,
379 then we should use the alloca register specified in traceback
380 table. FIXME. */
c5aa993b 381 CORE_ADDR initial_sp; /* initial stack pointer. */
c906108c
SS
382};
383
143985b7 384/* Get the ith function argument for the current function. */
b9362cc7 385static CORE_ADDR
143985b7
AF
386rs6000_fetch_pointer_argument (struct frame_info *frame, int argi,
387 struct type *type)
388{
389 CORE_ADDR addr;
7f5f525d 390 get_frame_register (frame, 3 + argi, &addr);
143985b7
AF
391 return addr;
392}
393
c906108c
SS
394/* Calculate the destination of a branch/jump. Return -1 if not a branch. */
395
396static CORE_ADDR
7a78ae4e 397branch_dest (int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety)
c906108c
SS
398{
399 CORE_ADDR dest;
400 int immediate;
401 int absolute;
402 int ext_op;
403
404 absolute = (int) ((instr >> 1) & 1);
405
c5aa993b
JM
406 switch (opcode)
407 {
408 case 18:
409 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
410 if (absolute)
411 dest = immediate;
412 else
413 dest = pc + immediate;
414 break;
415
416 case 16:
417 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
418 if (absolute)
419 dest = immediate;
420 else
421 dest = pc + immediate;
422 break;
423
424 case 19:
425 ext_op = (instr >> 1) & 0x3ff;
426
427 if (ext_op == 16) /* br conditional register */
428 {
2188cbdd 429 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
c5aa993b
JM
430
431 /* If we are about to return from a signal handler, dest is
432 something like 0x3c90. The current frame is a signal handler
433 caller frame, upon completion of the sigreturn system call
434 execution will return to the saved PC in the frame. */
435 if (dest < TEXT_SEGMENT_BASE)
436 {
437 struct frame_info *fi;
438
439 fi = get_current_frame ();
440 if (fi != NULL)
8b36eed8 441 dest = read_memory_addr (get_frame_base (fi) + SIG_FRAME_PC_OFFSET,
21283beb 442 gdbarch_tdep (current_gdbarch)->wordsize);
c5aa993b
JM
443 }
444 }
445
446 else if (ext_op == 528) /* br cond to count reg */
447 {
2188cbdd 448 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum) & ~3;
c5aa993b
JM
449
450 /* If we are about to execute a system call, dest is something
451 like 0x22fc or 0x3b00. Upon completion the system call
452 will return to the address in the link register. */
453 if (dest < TEXT_SEGMENT_BASE)
2188cbdd 454 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
c5aa993b
JM
455 }
456 else
457 return -1;
458 break;
c906108c 459
c5aa993b
JM
460 default:
461 return -1;
462 }
c906108c
SS
463 return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
464}
465
466
467/* Sequence of bytes for breakpoint instruction. */
468
f4f9705a 469const static unsigned char *
7a78ae4e 470rs6000_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
c906108c 471{
aaab4dba
AC
472 static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
473 static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
c906108c 474 *bp_size = 4;
d7449b42 475 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
c906108c
SS
476 return big_breakpoint;
477 else
478 return little_breakpoint;
479}
480
481
482/* AIX does not support PT_STEP. Simulate it. */
483
484void
379d08a1
AC
485rs6000_software_single_step (enum target_signal signal,
486 int insert_breakpoints_p)
c906108c 487{
7c40d541
KB
488 CORE_ADDR dummy;
489 int breakp_sz;
f4f9705a 490 const char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz);
c906108c
SS
491 int ii, insn;
492 CORE_ADDR loc;
493 CORE_ADDR breaks[2];
494 int opcode;
495
c5aa993b
JM
496 if (insert_breakpoints_p)
497 {
c906108c 498
c5aa993b 499 loc = read_pc ();
c906108c 500
c5aa993b 501 insn = read_memory_integer (loc, 4);
c906108c 502
7c40d541 503 breaks[0] = loc + breakp_sz;
c5aa993b
JM
504 opcode = insn >> 26;
505 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
c906108c 506
c5aa993b
JM
507 /* Don't put two breakpoints on the same address. */
508 if (breaks[1] == breaks[0])
509 breaks[1] = -1;
c906108c 510
c5aa993b 511 stepBreaks[1].address = 0;
c906108c 512
c5aa993b
JM
513 for (ii = 0; ii < 2; ++ii)
514 {
c906108c 515
c5aa993b
JM
516 /* ignore invalid breakpoint. */
517 if (breaks[ii] == -1)
518 continue;
7c40d541 519 target_insert_breakpoint (breaks[ii], stepBreaks[ii].data);
c5aa993b
JM
520 stepBreaks[ii].address = breaks[ii];
521 }
c906108c 522
c5aa993b
JM
523 }
524 else
525 {
c906108c 526
c5aa993b
JM
527 /* remove step breakpoints. */
528 for (ii = 0; ii < 2; ++ii)
529 if (stepBreaks[ii].address != 0)
7c40d541
KB
530 target_remove_breakpoint (stepBreaks[ii].address,
531 stepBreaks[ii].data);
c5aa993b 532 }
c906108c 533 errno = 0; /* FIXME, don't ignore errors! */
c5aa993b 534 /* What errors? {read,write}_memory call error(). */
c906108c
SS
535}
536
537
538/* return pc value after skipping a function prologue and also return
539 information about a function frame.
540
541 in struct rs6000_framedata fdata:
c5aa993b
JM
542 - frameless is TRUE, if function does not have a frame.
543 - nosavedpc is TRUE, if function does not save %pc value in its frame.
544 - offset is the initial size of this stack frame --- the amount by
545 which we decrement the sp to allocate the frame.
546 - saved_gpr is the number of the first saved gpr.
547 - saved_fpr is the number of the first saved fpr.
6be8bc0c 548 - saved_vr is the number of the first saved vr.
96ff0de4 549 - saved_ev is the number of the first saved ev.
c5aa993b
JM
550 - alloca_reg is the number of the register used for alloca() handling.
551 Otherwise -1.
552 - gpr_offset is the offset of the first saved gpr from the previous frame.
553 - fpr_offset is the offset of the first saved fpr from the previous frame.
6be8bc0c 554 - vr_offset is the offset of the first saved vr from the previous frame.
96ff0de4 555 - ev_offset is the offset of the first saved ev from the previous frame.
c5aa993b
JM
556 - lr_offset is the offset of the saved lr
557 - cr_offset is the offset of the saved cr
6be8bc0c 558 - vrsave_offset is the offset of the saved vrsave register
c5aa993b 559 */
c906108c
SS
560
561#define SIGNED_SHORT(x) \
562 ((sizeof (short) == 2) \
563 ? ((int)(short)(x)) \
564 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
565
566#define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
567
55d05f3b
KB
568/* Limit the number of skipped non-prologue instructions, as the examining
569 of the prologue is expensive. */
570static int max_skip_non_prologue_insns = 10;
571
572/* Given PC representing the starting address of a function, and
573 LIM_PC which is the (sloppy) limit to which to scan when looking
574 for a prologue, attempt to further refine this limit by using
575 the line data in the symbol table. If successful, a better guess
576 on where the prologue ends is returned, otherwise the previous
577 value of lim_pc is returned. */
634aa483
AC
578
579/* FIXME: cagney/2004-02-14: This function and logic have largely been
580 superseded by skip_prologue_using_sal. */
581
55d05f3b
KB
582static CORE_ADDR
583refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc)
584{
585 struct symtab_and_line prologue_sal;
586
587 prologue_sal = find_pc_line (pc, 0);
588 if (prologue_sal.line != 0)
589 {
590 int i;
591 CORE_ADDR addr = prologue_sal.end;
592
593 /* Handle the case in which compiler's optimizer/scheduler
594 has moved instructions into the prologue. We scan ahead
595 in the function looking for address ranges whose corresponding
596 line number is less than or equal to the first one that we
597 found for the function. (It can be less than when the
598 scheduler puts a body instruction before the first prologue
599 instruction.) */
600 for (i = 2 * max_skip_non_prologue_insns;
601 i > 0 && (lim_pc == 0 || addr < lim_pc);
602 i--)
603 {
604 struct symtab_and_line sal;
605
606 sal = find_pc_line (addr, 0);
607 if (sal.line == 0)
608 break;
609 if (sal.line <= prologue_sal.line
610 && sal.symtab == prologue_sal.symtab)
611 {
612 prologue_sal = sal;
613 }
614 addr = sal.end;
615 }
616
617 if (lim_pc == 0 || prologue_sal.end < lim_pc)
618 lim_pc = prologue_sal.end;
619 }
620 return lim_pc;
621}
622
773df3e5
JB
623/* Return nonzero if the given instruction OP can be part of the prologue
624 of a function and saves a parameter on the stack. FRAMEP should be
625 set if one of the previous instructions in the function has set the
626 Frame Pointer. */
627
628static int
629store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
630{
631 /* Move parameters from argument registers to temporary register. */
632 if ((op & 0xfc0007fe) == 0x7c000378) /* mr(.) Rx,Ry */
633 {
634 /* Rx must be scratch register r0. */
635 const int rx_regno = (op >> 16) & 31;
636 /* Ry: Only r3 - r10 are used for parameter passing. */
637 const int ry_regno = GET_SRC_REG (op);
638
639 if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
640 {
641 *r0_contains_arg = 1;
642 return 1;
643 }
644 else
645 return 0;
646 }
647
648 /* Save a General Purpose Register on stack. */
649
650 if ((op & 0xfc1f0003) == 0xf8010000 || /* std Rx,NUM(r1) */
651 (op & 0xfc1f0000) == 0xd8010000) /* stfd Rx,NUM(r1) */
652 {
653 /* Rx: Only r3 - r10 are used for parameter passing. */
654 const int rx_regno = GET_SRC_REG (op);
655
656 return (rx_regno >= 3 && rx_regno <= 10);
657 }
658
659 /* Save a General Purpose Register on stack via the Frame Pointer. */
660
661 if (framep &&
662 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */
663 (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */
664 (op & 0xfc1f0000) == 0xd81f0000)) /* stfd Rx,NUM(r31) */
665 {
666 /* Rx: Usually, only r3 - r10 are used for parameter passing.
667 However, the compiler sometimes uses r0 to hold an argument. */
668 const int rx_regno = GET_SRC_REG (op);
669
670 return ((rx_regno >= 3 && rx_regno <= 10)
671 || (rx_regno == 0 && *r0_contains_arg));
672 }
673
674 if ((op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */
675 {
676 /* Only f2 - f8 are used for parameter passing. */
677 const int src_regno = GET_SRC_REG (op);
678
679 return (src_regno >= 2 && src_regno <= 8);
680 }
681
682 if (framep && ((op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */
683 {
684 /* Only f2 - f8 are used for parameter passing. */
685 const int src_regno = GET_SRC_REG (op);
686
687 return (src_regno >= 2 && src_regno <= 8);
688 }
689
690 /* Not an insn that saves a parameter on stack. */
691 return 0;
692}
55d05f3b 693
7a78ae4e 694static CORE_ADDR
077276e8 695skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
c906108c
SS
696{
697 CORE_ADDR orig_pc = pc;
55d05f3b 698 CORE_ADDR last_prologue_pc = pc;
6be8bc0c 699 CORE_ADDR li_found_pc = 0;
c906108c
SS
700 char buf[4];
701 unsigned long op;
702 long offset = 0;
6be8bc0c 703 long vr_saved_offset = 0;
482ca3f5
KB
704 int lr_reg = -1;
705 int cr_reg = -1;
6be8bc0c 706 int vr_reg = -1;
96ff0de4
EZ
707 int ev_reg = -1;
708 long ev_offset = 0;
6be8bc0c 709 int vrsave_reg = -1;
c906108c
SS
710 int reg;
711 int framep = 0;
712 int minimal_toc_loaded = 0;
ddb20c56 713 int prev_insn_was_prologue_insn = 1;
55d05f3b 714 int num_skip_non_prologue_insns = 0;
773df3e5 715 int r0_contains_arg = 0;
96ff0de4 716 const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (current_gdbarch);
6f99cb26 717 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
96ff0de4 718
55d05f3b
KB
719 /* Attempt to find the end of the prologue when no limit is specified.
720 Note that refine_prologue_limit() has been written so that it may
721 be used to "refine" the limits of non-zero PC values too, but this
722 is only safe if we 1) trust the line information provided by the
723 compiler and 2) iterate enough to actually find the end of the
724 prologue.
725
726 It may become a good idea at some point (for both performance and
727 accuracy) to unconditionally call refine_prologue_limit(). But,
728 until we can make a clear determination that this is beneficial,
729 we'll play it safe and only use it to obtain a limit when none
730 has been specified. */
731 if (lim_pc == 0)
732 lim_pc = refine_prologue_limit (pc, lim_pc);
c906108c 733
ddb20c56 734 memset (fdata, 0, sizeof (struct rs6000_framedata));
c906108c
SS
735 fdata->saved_gpr = -1;
736 fdata->saved_fpr = -1;
6be8bc0c 737 fdata->saved_vr = -1;
96ff0de4 738 fdata->saved_ev = -1;
c906108c
SS
739 fdata->alloca_reg = -1;
740 fdata->frameless = 1;
741 fdata->nosavedpc = 1;
742
55d05f3b 743 for (;; pc += 4)
c906108c 744 {
ddb20c56
KB
745 /* Sometimes it isn't clear if an instruction is a prologue
746 instruction or not. When we encounter one of these ambiguous
747 cases, we'll set prev_insn_was_prologue_insn to 0 (false).
748 Otherwise, we'll assume that it really is a prologue instruction. */
749 if (prev_insn_was_prologue_insn)
750 last_prologue_pc = pc;
55d05f3b
KB
751
752 /* Stop scanning if we've hit the limit. */
753 if (lim_pc != 0 && pc >= lim_pc)
754 break;
755
ddb20c56
KB
756 prev_insn_was_prologue_insn = 1;
757
55d05f3b 758 /* Fetch the instruction and convert it to an integer. */
ddb20c56
KB
759 if (target_read_memory (pc, buf, 4))
760 break;
761 op = extract_signed_integer (buf, 4);
c906108c 762
c5aa993b
JM
763 if ((op & 0xfc1fffff) == 0x7c0802a6)
764 { /* mflr Rx */
43b1ab88
AC
765 /* Since shared library / PIC code, which needs to get its
766 address at runtime, can appear to save more than one link
767 register vis:
768
769 *INDENT-OFF*
770 stwu r1,-304(r1)
771 mflr r3
772 bl 0xff570d0 (blrl)
773 stw r30,296(r1)
774 mflr r30
775 stw r31,300(r1)
776 stw r3,308(r1);
777 ...
778 *INDENT-ON*
779
780 remember just the first one, but skip over additional
781 ones. */
782 if (lr_reg < 0)
783 lr_reg = (op & 0x03e00000);
773df3e5
JB
784 if (lr_reg == 0)
785 r0_contains_arg = 0;
c5aa993b 786 continue;
c5aa993b
JM
787 }
788 else if ((op & 0xfc1fffff) == 0x7c000026)
789 { /* mfcr Rx */
98f08d3d 790 cr_reg = (op & 0x03e00000);
773df3e5
JB
791 if (cr_reg == 0)
792 r0_contains_arg = 0;
c5aa993b 793 continue;
c906108c 794
c906108c 795 }
c5aa993b
JM
796 else if ((op & 0xfc1f0000) == 0xd8010000)
797 { /* stfd Rx,NUM(r1) */
798 reg = GET_SRC_REG (op);
799 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
800 {
801 fdata->saved_fpr = reg;
802 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
803 }
804 continue;
c906108c 805
c5aa993b
JM
806 }
807 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
7a78ae4e
ND
808 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
809 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
810 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
c5aa993b
JM
811 {
812
813 reg = GET_SRC_REG (op);
814 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
815 {
816 fdata->saved_gpr = reg;
7a78ae4e 817 if ((op & 0xfc1f0003) == 0xf8010000)
98f08d3d 818 op &= ~3UL;
c5aa993b
JM
819 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
820 }
821 continue;
c906108c 822
ddb20c56
KB
823 }
824 else if ((op & 0xffff0000) == 0x60000000)
825 {
96ff0de4 826 /* nop */
ddb20c56
KB
827 /* Allow nops in the prologue, but do not consider them to
828 be part of the prologue unless followed by other prologue
829 instructions. */
830 prev_insn_was_prologue_insn = 0;
831 continue;
832
c906108c 833 }
c5aa993b
JM
834 else if ((op & 0xffff0000) == 0x3c000000)
835 { /* addis 0,0,NUM, used
836 for >= 32k frames */
837 fdata->offset = (op & 0x0000ffff) << 16;
838 fdata->frameless = 0;
773df3e5 839 r0_contains_arg = 0;
c5aa993b
JM
840 continue;
841
842 }
843 else if ((op & 0xffff0000) == 0x60000000)
844 { /* ori 0,0,NUM, 2nd ha
845 lf of >= 32k frames */
846 fdata->offset |= (op & 0x0000ffff);
847 fdata->frameless = 0;
773df3e5 848 r0_contains_arg = 0;
c5aa993b
JM
849 continue;
850
851 }
98f08d3d
KB
852 else if (lr_reg != -1 &&
853 /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
854 (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
855 /* stw Rx, NUM(r1) */
856 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
857 /* stwu Rx, NUM(r1) */
858 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
859 { /* where Rx == lr */
860 fdata->lr_offset = offset;
c5aa993b
JM
861 fdata->nosavedpc = 0;
862 lr_reg = 0;
98f08d3d
KB
863 if ((op & 0xfc000003) == 0xf8000000 || /* std */
864 (op & 0xfc000000) == 0x90000000) /* stw */
865 {
866 /* Does not update r1, so add displacement to lr_offset. */
867 fdata->lr_offset += SIGNED_SHORT (op);
868 }
c5aa993b
JM
869 continue;
870
871 }
98f08d3d
KB
872 else if (cr_reg != -1 &&
873 /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
874 (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
875 /* stw Rx, NUM(r1) */
876 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
877 /* stwu Rx, NUM(r1) */
878 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
879 { /* where Rx == cr */
880 fdata->cr_offset = offset;
c5aa993b 881 cr_reg = 0;
98f08d3d
KB
882 if ((op & 0xfc000003) == 0xf8000000 ||
883 (op & 0xfc000000) == 0x90000000)
884 {
885 /* Does not update r1, so add displacement to cr_offset. */
886 fdata->cr_offset += SIGNED_SHORT (op);
887 }
c5aa993b
JM
888 continue;
889
890 }
891 else if (op == 0x48000005)
892 { /* bl .+4 used in
893 -mrelocatable */
894 continue;
895
896 }
897 else if (op == 0x48000004)
898 { /* b .+4 (xlc) */
899 break;
900
c5aa993b 901 }
6be8bc0c
EZ
902 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
903 in V.4 -mminimal-toc */
c5aa993b
JM
904 (op & 0xffff0000) == 0x3bde0000)
905 { /* addi 30,30,foo@l */
906 continue;
c906108c 907
c5aa993b
JM
908 }
909 else if ((op & 0xfc000001) == 0x48000001)
910 { /* bl foo,
911 to save fprs??? */
c906108c 912
c5aa993b 913 fdata->frameless = 0;
6be8bc0c
EZ
914 /* Don't skip over the subroutine call if it is not within
915 the first three instructions of the prologue. */
c5aa993b
JM
916 if ((pc - orig_pc) > 8)
917 break;
918
919 op = read_memory_integer (pc + 4, 4);
920
6be8bc0c
EZ
921 /* At this point, make sure this is not a trampoline
922 function (a function that simply calls another functions,
923 and nothing else). If the next is not a nop, this branch
924 was part of the function prologue. */
c5aa993b
JM
925
926 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
927 break; /* don't skip over
928 this branch */
929 continue;
930
c5aa993b 931 }
98f08d3d
KB
932 /* update stack pointer */
933 else if ((op & 0xfc1f0000) == 0x94010000)
934 { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */
c5aa993b
JM
935 fdata->frameless = 0;
936 fdata->offset = SIGNED_SHORT (op);
937 offset = fdata->offset;
938 continue;
c5aa993b 939 }
98f08d3d
KB
940 else if ((op & 0xfc1f016a) == 0x7c01016e)
941 { /* stwux rX,r1,rY */
942 /* no way to figure out what r1 is going to be */
943 fdata->frameless = 0;
944 offset = fdata->offset;
945 continue;
946 }
947 else if ((op & 0xfc1f0003) == 0xf8010001)
948 { /* stdu rX,NUM(r1) */
949 fdata->frameless = 0;
950 fdata->offset = SIGNED_SHORT (op & ~3UL);
951 offset = fdata->offset;
952 continue;
953 }
954 else if ((op & 0xfc1f016a) == 0x7c01016a)
955 { /* stdux rX,r1,rY */
956 /* no way to figure out what r1 is going to be */
c5aa993b
JM
957 fdata->frameless = 0;
958 offset = fdata->offset;
959 continue;
c5aa993b 960 }
98f08d3d
KB
961 /* Load up minimal toc pointer */
962 else if (((op >> 22) == 0x20f || /* l r31,... or l r30,... */
963 (op >> 22) == 0x3af) /* ld r31,... or ld r30,... */
c5aa993b 964 && !minimal_toc_loaded)
98f08d3d 965 {
c5aa993b
JM
966 minimal_toc_loaded = 1;
967 continue;
968
f6077098
KB
969 /* move parameters from argument registers to local variable
970 registers */
971 }
972 else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */
973 (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */
974 (((op >> 21) & 31) <= 10) &&
96ff0de4 975 ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
f6077098
KB
976 {
977 continue;
978
c5aa993b
JM
979 /* store parameters in stack */
980 }
e802b915 981 /* Move parameters from argument registers to temporary register. */
773df3e5 982 else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
e802b915 983 {
c5aa993b
JM
984 continue;
985
986 /* Set up frame pointer */
987 }
988 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
989 || op == 0x7c3f0b78)
990 { /* mr r31, r1 */
991 fdata->frameless = 0;
992 framep = 1;
6f99cb26 993 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
c5aa993b
JM
994 continue;
995
996 /* Another way to set up the frame pointer. */
997 }
998 else if ((op & 0xfc1fffff) == 0x38010000)
999 { /* addi rX, r1, 0x0 */
1000 fdata->frameless = 0;
1001 framep = 1;
6f99cb26
AC
1002 fdata->alloca_reg = (tdep->ppc_gp0_regnum
1003 + ((op & ~0x38010000) >> 21));
c5aa993b 1004 continue;
c5aa993b 1005 }
6be8bc0c
EZ
1006 /* AltiVec related instructions. */
1007 /* Store the vrsave register (spr 256) in another register for
1008 later manipulation, or load a register into the vrsave
1009 register. 2 instructions are used: mfvrsave and
1010 mtvrsave. They are shorthand notation for mfspr Rn, SPR256
1011 and mtspr SPR256, Rn. */
1012 /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1013 mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110 */
1014 else if ((op & 0xfc1fffff) == 0x7c0042a6) /* mfvrsave Rn */
1015 {
1016 vrsave_reg = GET_SRC_REG (op);
1017 continue;
1018 }
1019 else if ((op & 0xfc1fffff) == 0x7c0043a6) /* mtvrsave Rn */
1020 {
1021 continue;
1022 }
1023 /* Store the register where vrsave was saved to onto the stack:
1024 rS is the register where vrsave was stored in a previous
1025 instruction. */
1026 /* 100100 sssss 00001 dddddddd dddddddd */
1027 else if ((op & 0xfc1f0000) == 0x90010000) /* stw rS, d(r1) */
1028 {
1029 if (vrsave_reg == GET_SRC_REG (op))
1030 {
1031 fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1032 vrsave_reg = -1;
1033 }
1034 continue;
1035 }
1036 /* Compute the new value of vrsave, by modifying the register
1037 where vrsave was saved to. */
1038 else if (((op & 0xfc000000) == 0x64000000) /* oris Ra, Rs, UIMM */
1039 || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1040 {
1041 continue;
1042 }
1043 /* li r0, SIMM (short for addi r0, 0, SIMM). This is the first
1044 in a pair of insns to save the vector registers on the
1045 stack. */
1046 /* 001110 00000 00000 iiii iiii iiii iiii */
96ff0de4
EZ
1047 /* 001110 01110 00000 iiii iiii iiii iiii */
1048 else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */
1049 || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */
6be8bc0c 1050 {
773df3e5
JB
1051 if ((op & 0xffff0000) == 0x38000000)
1052 r0_contains_arg = 0;
6be8bc0c
EZ
1053 li_found_pc = pc;
1054 vr_saved_offset = SIGNED_SHORT (op);
773df3e5
JB
1055
1056 /* This insn by itself is not part of the prologue, unless
1057 if part of the pair of insns mentioned above. So do not
1058 record this insn as part of the prologue yet. */
1059 prev_insn_was_prologue_insn = 0;
6be8bc0c
EZ
1060 }
1061 /* Store vector register S at (r31+r0) aligned to 16 bytes. */
1062 /* 011111 sssss 11111 00000 00111001110 */
1063 else if ((op & 0xfc1fffff) == 0x7c1f01ce) /* stvx Vs, R31, R0 */
1064 {
1065 if (pc == (li_found_pc + 4))
1066 {
1067 vr_reg = GET_SRC_REG (op);
1068 /* If this is the first vector reg to be saved, or if
1069 it has a lower number than others previously seen,
1070 reupdate the frame info. */
1071 if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1072 {
1073 fdata->saved_vr = vr_reg;
1074 fdata->vr_offset = vr_saved_offset + offset;
1075 }
1076 vr_saved_offset = -1;
1077 vr_reg = -1;
1078 li_found_pc = 0;
1079 }
1080 }
1081 /* End AltiVec related instructions. */
96ff0de4
EZ
1082
1083 /* Start BookE related instructions. */
1084 /* Store gen register S at (r31+uimm).
1085 Any register less than r13 is volatile, so we don't care. */
1086 /* 000100 sssss 11111 iiiii 01100100001 */
1087 else if (arch_info->mach == bfd_mach_ppc_e500
1088 && (op & 0xfc1f07ff) == 0x101f0321) /* evstdd Rs,uimm(R31) */
1089 {
1090 if ((op & 0x03e00000) >= 0x01a00000) /* Rs >= r13 */
1091 {
1092 unsigned int imm;
1093 ev_reg = GET_SRC_REG (op);
1094 imm = (op >> 11) & 0x1f;
1095 ev_offset = imm * 8;
1096 /* If this is the first vector reg to be saved, or if
1097 it has a lower number than others previously seen,
1098 reupdate the frame info. */
1099 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1100 {
1101 fdata->saved_ev = ev_reg;
1102 fdata->ev_offset = ev_offset + offset;
1103 }
1104 }
1105 continue;
1106 }
1107 /* Store gen register rS at (r1+rB). */
1108 /* 000100 sssss 00001 bbbbb 01100100000 */
1109 else if (arch_info->mach == bfd_mach_ppc_e500
1110 && (op & 0xffe007ff) == 0x13e00320) /* evstddx RS,R1,Rb */
1111 {
1112 if (pc == (li_found_pc + 4))
1113 {
1114 ev_reg = GET_SRC_REG (op);
1115 /* If this is the first vector reg to be saved, or if
1116 it has a lower number than others previously seen,
1117 reupdate the frame info. */
1118 /* We know the contents of rB from the previous instruction. */
1119 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1120 {
1121 fdata->saved_ev = ev_reg;
1122 fdata->ev_offset = vr_saved_offset + offset;
1123 }
1124 vr_saved_offset = -1;
1125 ev_reg = -1;
1126 li_found_pc = 0;
1127 }
1128 continue;
1129 }
1130 /* Store gen register r31 at (rA+uimm). */
1131 /* 000100 11111 aaaaa iiiii 01100100001 */
1132 else if (arch_info->mach == bfd_mach_ppc_e500
1133 && (op & 0xffe007ff) == 0x13e00321) /* evstdd R31,Ra,UIMM */
1134 {
1135 /* Wwe know that the source register is 31 already, but
1136 it can't hurt to compute it. */
1137 ev_reg = GET_SRC_REG (op);
1138 ev_offset = ((op >> 11) & 0x1f) * 8;
1139 /* If this is the first vector reg to be saved, or if
1140 it has a lower number than others previously seen,
1141 reupdate the frame info. */
1142 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1143 {
1144 fdata->saved_ev = ev_reg;
1145 fdata->ev_offset = ev_offset + offset;
1146 }
1147
1148 continue;
1149 }
1150 /* Store gen register S at (r31+r0).
1151 Store param on stack when offset from SP bigger than 4 bytes. */
1152 /* 000100 sssss 11111 00000 01100100000 */
1153 else if (arch_info->mach == bfd_mach_ppc_e500
1154 && (op & 0xfc1fffff) == 0x101f0320) /* evstddx Rs,R31,R0 */
1155 {
1156 if (pc == (li_found_pc + 4))
1157 {
1158 if ((op & 0x03e00000) >= 0x01a00000)
1159 {
1160 ev_reg = GET_SRC_REG (op);
1161 /* If this is the first vector reg to be saved, or if
1162 it has a lower number than others previously seen,
1163 reupdate the frame info. */
1164 /* We know the contents of r0 from the previous
1165 instruction. */
1166 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1167 {
1168 fdata->saved_ev = ev_reg;
1169 fdata->ev_offset = vr_saved_offset + offset;
1170 }
1171 ev_reg = -1;
1172 }
1173 vr_saved_offset = -1;
1174 li_found_pc = 0;
1175 continue;
1176 }
1177 }
1178 /* End BookE related instructions. */
1179
c5aa993b
JM
1180 else
1181 {
55d05f3b
KB
1182 /* Not a recognized prologue instruction.
1183 Handle optimizer code motions into the prologue by continuing
1184 the search if we have no valid frame yet or if the return
1185 address is not yet saved in the frame. */
1186 if (fdata->frameless == 0
1187 && (lr_reg == -1 || fdata->nosavedpc == 0))
1188 break;
1189
1190 if (op == 0x4e800020 /* blr */
1191 || op == 0x4e800420) /* bctr */
1192 /* Do not scan past epilogue in frameless functions or
1193 trampolines. */
1194 break;
1195 if ((op & 0xf4000000) == 0x40000000) /* bxx */
64366f1c 1196 /* Never skip branches. */
55d05f3b
KB
1197 break;
1198
1199 if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
1200 /* Do not scan too many insns, scanning insns is expensive with
1201 remote targets. */
1202 break;
1203
1204 /* Continue scanning. */
1205 prev_insn_was_prologue_insn = 0;
1206 continue;
c5aa993b 1207 }
c906108c
SS
1208 }
1209
1210#if 0
1211/* I have problems with skipping over __main() that I need to address
1212 * sometime. Previously, I used to use misc_function_vector which
1213 * didn't work as well as I wanted to be. -MGO */
1214
1215 /* If the first thing after skipping a prolog is a branch to a function,
1216 this might be a call to an initializer in main(), introduced by gcc2.
64366f1c 1217 We'd like to skip over it as well. Fortunately, xlc does some extra
c906108c 1218 work before calling a function right after a prologue, thus we can
64366f1c 1219 single out such gcc2 behaviour. */
c906108c 1220
c906108c 1221
c5aa993b
JM
1222 if ((op & 0xfc000001) == 0x48000001)
1223 { /* bl foo, an initializer function? */
1224 op = read_memory_integer (pc + 4, 4);
1225
1226 if (op == 0x4def7b82)
1227 { /* cror 0xf, 0xf, 0xf (nop) */
c906108c 1228
64366f1c
EZ
1229 /* Check and see if we are in main. If so, skip over this
1230 initializer function as well. */
c906108c 1231
c5aa993b 1232 tmp = find_pc_misc_function (pc);
6314a349
AC
1233 if (tmp >= 0
1234 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
c5aa993b
JM
1235 return pc + 8;
1236 }
c906108c 1237 }
c906108c 1238#endif /* 0 */
c5aa993b
JM
1239
1240 fdata->offset = -fdata->offset;
ddb20c56 1241 return last_prologue_pc;
c906108c
SS
1242}
1243
1244
1245/*************************************************************************
f6077098 1246 Support for creating pushing a dummy frame into the stack, and popping
c906108c
SS
1247 frames, etc.
1248*************************************************************************/
1249
c906108c 1250
11269d7e
AC
1251/* All the ABI's require 16 byte alignment. */
1252static CORE_ADDR
1253rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1254{
1255 return (addr & -16);
1256}
1257
7a78ae4e 1258/* Pass the arguments in either registers, or in the stack. In RS/6000,
c906108c
SS
1259 the first eight words of the argument list (that might be less than
1260 eight parameters if some parameters occupy more than one word) are
7a78ae4e 1261 passed in r3..r10 registers. float and double parameters are
64366f1c
EZ
1262 passed in fpr's, in addition to that. Rest of the parameters if any
1263 are passed in user stack. There might be cases in which half of the
c906108c
SS
1264 parameter is copied into registers, the other half is pushed into
1265 stack.
1266
7a78ae4e
ND
1267 Stack must be aligned on 64-bit boundaries when synthesizing
1268 function calls.
1269
c906108c
SS
1270 If the function is returning a structure, then the return address is passed
1271 in r3, then the first 7 words of the parameters can be passed in registers,
64366f1c 1272 starting from r4. */
c906108c 1273
7a78ae4e 1274static CORE_ADDR
7d9b040b 1275rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
77b2b6d4
AC
1276 struct regcache *regcache, CORE_ADDR bp_addr,
1277 int nargs, struct value **args, CORE_ADDR sp,
1278 int struct_return, CORE_ADDR struct_addr)
c906108c 1279{
7a41266b 1280 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
c906108c
SS
1281 int ii;
1282 int len = 0;
c5aa993b
JM
1283 int argno; /* current argument number */
1284 int argbytes; /* current argument byte */
1285 char tmp_buffer[50];
1286 int f_argno = 0; /* current floating point argno */
21283beb 1287 int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
7d9b040b 1288 CORE_ADDR func_addr = find_function_addr (function, NULL);
c906108c 1289
ea7c478f 1290 struct value *arg = 0;
c906108c
SS
1291 struct type *type;
1292
1293 CORE_ADDR saved_sp;
1294
383f0f5b
JB
1295 /* The calling convention this function implements assumes the
1296 processor has floating-point registers. We shouldn't be using it
1297 on PPC variants that lack them. */
1298 gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
1299
64366f1c 1300 /* The first eight words of ther arguments are passed in registers.
7a41266b
AC
1301 Copy them appropriately. */
1302 ii = 0;
1303
1304 /* If the function is returning a `struct', then the first word
1305 (which will be passed in r3) is used for struct return address.
1306 In that case we should advance one word and start from r4
1307 register to copy parameters. */
1308 if (struct_return)
1309 {
1310 regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
1311 struct_addr);
1312 ii++;
1313 }
c906108c
SS
1314
1315/*
c5aa993b
JM
1316 effectively indirect call... gcc does...
1317
1318 return_val example( float, int);
1319
1320 eabi:
1321 float in fp0, int in r3
1322 offset of stack on overflow 8/16
1323 for varargs, must go by type.
1324 power open:
1325 float in r3&r4, int in r5
1326 offset of stack on overflow different
1327 both:
1328 return in r3 or f0. If no float, must study how gcc emulates floats;
1329 pay attention to arg promotion.
1330 User may have to cast\args to handle promotion correctly
1331 since gdb won't know if prototype supplied or not.
1332 */
c906108c 1333
c5aa993b
JM
1334 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
1335 {
12c266ea 1336 int reg_size = DEPRECATED_REGISTER_RAW_SIZE (ii + 3);
c5aa993b
JM
1337
1338 arg = args[argno];
1339 type = check_typedef (VALUE_TYPE (arg));
1340 len = TYPE_LENGTH (type);
1341
1342 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1343 {
1344
64366f1c 1345 /* Floating point arguments are passed in fpr's, as well as gpr's.
c5aa993b 1346 There are 13 fpr's reserved for passing parameters. At this point
64366f1c 1347 there is no way we would run out of them. */
c5aa993b
JM
1348
1349 if (len > 8)
c2b6b4aa
JB
1350 printf_unfiltered ("Fatal Error: a floating point parameter "
1351 "#%d with a size > 8 is found!\n", argno);
c5aa993b 1352
366f009f
JB
1353 memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE
1354 (tdep->ppc_fp0_regnum + 1 + f_argno)],
c5aa993b
JM
1355 VALUE_CONTENTS (arg),
1356 len);
1357 ++f_argno;
1358 }
1359
f6077098 1360 if (len > reg_size)
c5aa993b
JM
1361 {
1362
64366f1c 1363 /* Argument takes more than one register. */
c5aa993b
JM
1364 while (argbytes < len)
1365 {
62700349 1366 memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0,
524d7c18 1367 reg_size);
62700349 1368 memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)],
c5aa993b 1369 ((char *) VALUE_CONTENTS (arg)) + argbytes,
f6077098
KB
1370 (len - argbytes) > reg_size
1371 ? reg_size : len - argbytes);
1372 ++ii, argbytes += reg_size;
c5aa993b
JM
1373
1374 if (ii >= 8)
1375 goto ran_out_of_registers_for_arguments;
1376 }
1377 argbytes = 0;
1378 --ii;
1379 }
1380 else
64366f1c
EZ
1381 {
1382 /* Argument can fit in one register. No problem. */
d7449b42 1383 int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
62700349
AC
1384 memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, reg_size);
1385 memcpy ((char *)&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)] + adj,
f6077098 1386 VALUE_CONTENTS (arg), len);
c5aa993b
JM
1387 }
1388 ++argno;
c906108c 1389 }
c906108c
SS
1390
1391ran_out_of_registers_for_arguments:
1392
7a78ae4e 1393 saved_sp = read_sp ();
cc9836a8 1394
64366f1c 1395 /* Location for 8 parameters are always reserved. */
7a78ae4e 1396 sp -= wordsize * 8;
f6077098 1397
64366f1c 1398 /* Another six words for back chain, TOC register, link register, etc. */
7a78ae4e 1399 sp -= wordsize * 6;
f6077098 1400
64366f1c 1401 /* Stack pointer must be quadword aligned. */
7a78ae4e 1402 sp &= -16;
c906108c 1403
64366f1c
EZ
1404 /* If there are more arguments, allocate space for them in
1405 the stack, then push them starting from the ninth one. */
c906108c 1406
c5aa993b
JM
1407 if ((argno < nargs) || argbytes)
1408 {
1409 int space = 0, jj;
c906108c 1410
c5aa993b
JM
1411 if (argbytes)
1412 {
1413 space += ((len - argbytes + 3) & -4);
1414 jj = argno + 1;
1415 }
1416 else
1417 jj = argno;
c906108c 1418
c5aa993b
JM
1419 for (; jj < nargs; ++jj)
1420 {
ea7c478f 1421 struct value *val = args[jj];
c5aa993b
JM
1422 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
1423 }
c906108c 1424
64366f1c 1425 /* Add location required for the rest of the parameters. */
f6077098 1426 space = (space + 15) & -16;
c5aa993b 1427 sp -= space;
c906108c 1428
7aea86e6
AC
1429 /* This is another instance we need to be concerned about
1430 securing our stack space. If we write anything underneath %sp
1431 (r1), we might conflict with the kernel who thinks he is free
1432 to use this area. So, update %sp first before doing anything
1433 else. */
1434
1435 regcache_raw_write_signed (regcache, SP_REGNUM, sp);
1436
64366f1c
EZ
1437 /* If the last argument copied into the registers didn't fit there
1438 completely, push the rest of it into stack. */
c906108c 1439
c5aa993b
JM
1440 if (argbytes)
1441 {
1442 write_memory (sp + 24 + (ii * 4),
1443 ((char *) VALUE_CONTENTS (arg)) + argbytes,
1444 len - argbytes);
1445 ++argno;
1446 ii += ((len - argbytes + 3) & -4) / 4;
1447 }
c906108c 1448
64366f1c 1449 /* Push the rest of the arguments into stack. */
c5aa993b
JM
1450 for (; argno < nargs; ++argno)
1451 {
c906108c 1452
c5aa993b
JM
1453 arg = args[argno];
1454 type = check_typedef (VALUE_TYPE (arg));
1455 len = TYPE_LENGTH (type);
c906108c
SS
1456
1457
64366f1c
EZ
1458 /* Float types should be passed in fpr's, as well as in the
1459 stack. */
c5aa993b
JM
1460 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
1461 {
c906108c 1462
c5aa993b 1463 if (len > 8)
c2b6b4aa
JB
1464 printf_unfiltered ("Fatal Error: a floating point parameter"
1465 " #%d with a size > 8 is found!\n", argno);
c906108c 1466
366f009f
JB
1467 memcpy (&(deprecated_registers
1468 [DEPRECATED_REGISTER_BYTE
1469 (tdep->ppc_fp0_regnum + 1 + f_argno)]),
c5aa993b
JM
1470 VALUE_CONTENTS (arg),
1471 len);
1472 ++f_argno;
1473 }
c906108c 1474
c2b6b4aa
JB
1475 write_memory (sp + 24 + (ii * 4),
1476 (char *) VALUE_CONTENTS (arg),
1477 len);
c5aa993b
JM
1478 ii += ((len + 3) & -4) / 4;
1479 }
c906108c 1480 }
c906108c 1481
69517000 1482 /* Set the stack pointer. According to the ABI, the SP is meant to
7aea86e6
AC
1483 be set _before_ the corresponding stack space is used. On AIX,
1484 this even applies when the target has been completely stopped!
1485 Not doing this can lead to conflicts with the kernel which thinks
1486 that it still has control over this not-yet-allocated stack
1487 region. */
33a7c2fc
AC
1488 regcache_raw_write_signed (regcache, SP_REGNUM, sp);
1489
7aea86e6
AC
1490 /* Set back chain properly. */
1491 store_unsigned_integer (tmp_buffer, 4, saved_sp);
1492 write_memory (sp, tmp_buffer, 4);
1493
e56a0ecc
AC
1494 /* Point the inferior function call's return address at the dummy's
1495 breakpoint. */
1496 regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
1497
794a477a
AC
1498 /* Set the TOC register, get the value from the objfile reader
1499 which, in turn, gets it from the VMAP table. */
1500 if (rs6000_find_toc_address_hook != NULL)
1501 {
1502 CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (func_addr);
1503 regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, tocvalue);
1504 }
1505
c906108c
SS
1506 target_store_registers (-1);
1507 return sp;
1508}
c906108c 1509
b9ff3018
AC
1510/* PowerOpen always puts structures in memory. Vectors, which were
1511 added later, do get returned in a register though. */
1512
1513static int
1514rs6000_use_struct_convention (int gcc_p, struct type *value_type)
1515{
1516 if ((TYPE_LENGTH (value_type) == 16 || TYPE_LENGTH (value_type) == 8)
1517 && TYPE_VECTOR (value_type))
1518 return 0;
1519 return 1;
1520}
1521
7a78ae4e
ND
1522static void
1523rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
c906108c
SS
1524{
1525 int offset = 0;
ace1378a 1526 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
c906108c 1527
383f0f5b
JB
1528 /* The calling convention this function implements assumes the
1529 processor has floating-point registers. We shouldn't be using it
1530 on PPC variants that lack them. */
1531 gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
1532
c5aa993b
JM
1533 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1534 {
c906108c 1535
c5aa993b
JM
1536 /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
1537 We need to truncate the return value into float size (4 byte) if
64366f1c 1538 necessary. */
c906108c 1539
65951cd9 1540 convert_typed_floating (&regbuf[DEPRECATED_REGISTER_BYTE
366f009f 1541 (tdep->ppc_fp0_regnum + 1)],
65951cd9
JG
1542 builtin_type_double,
1543 valbuf,
1544 valtype);
c5aa993b 1545 }
ace1378a
EZ
1546 else if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY
1547 && TYPE_LENGTH (valtype) == 16
1548 && TYPE_VECTOR (valtype))
1549 {
62700349 1550 memcpy (valbuf, regbuf + DEPRECATED_REGISTER_BYTE (tdep->ppc_vr0_regnum + 2),
ace1378a
EZ
1551 TYPE_LENGTH (valtype));
1552 }
c5aa993b
JM
1553 else
1554 {
1555 /* return value is copied starting from r3. */
d7449b42 1556 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
12c266ea
AC
1557 && TYPE_LENGTH (valtype) < DEPRECATED_REGISTER_RAW_SIZE (3))
1558 offset = DEPRECATED_REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
c5aa993b
JM
1559
1560 memcpy (valbuf,
62700349 1561 regbuf + DEPRECATED_REGISTER_BYTE (3) + offset,
c906108c 1562 TYPE_LENGTH (valtype));
c906108c 1563 }
c906108c
SS
1564}
1565
977adac5
ND
1566/* Return whether handle_inferior_event() should proceed through code
1567 starting at PC in function NAME when stepping.
1568
1569 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
1570 handle memory references that are too distant to fit in instructions
1571 generated by the compiler. For example, if 'foo' in the following
1572 instruction:
1573
1574 lwz r9,foo(r2)
1575
1576 is greater than 32767, the linker might replace the lwz with a branch to
1577 somewhere in @FIX1 that does the load in 2 instructions and then branches
1578 back to where execution should continue.
1579
1580 GDB should silently step over @FIX code, just like AIX dbx does.
1581 Unfortunately, the linker uses the "b" instruction for the branches,
1582 meaning that the link register doesn't get set. Therefore, GDB's usual
1583 step_over_function() mechanism won't work.
1584
1585 Instead, use the IN_SOLIB_RETURN_TRAMPOLINE and SKIP_TRAMPOLINE_CODE hooks
1586 in handle_inferior_event() to skip past @FIX code. */
1587
1588int
1589rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name)
1590{
1591 return name && !strncmp (name, "@FIX", 4);
1592}
1593
1594/* Skip code that the user doesn't want to see when stepping:
1595
1596 1. Indirect function calls use a piece of trampoline code to do context
1597 switching, i.e. to set the new TOC table. Skip such code if we are on
1598 its first instruction (as when we have single-stepped to here).
1599
1600 2. Skip shared library trampoline code (which is different from
c906108c 1601 indirect function call trampolines).
977adac5
ND
1602
1603 3. Skip bigtoc fixup code.
1604
c906108c 1605 Result is desired PC to step until, or NULL if we are not in
977adac5 1606 code that should be skipped. */
c906108c
SS
1607
1608CORE_ADDR
7a78ae4e 1609rs6000_skip_trampoline_code (CORE_ADDR pc)
c906108c 1610{
52f0bd74 1611 unsigned int ii, op;
977adac5 1612 int rel;
c906108c 1613 CORE_ADDR solib_target_pc;
977adac5 1614 struct minimal_symbol *msymbol;
c906108c 1615
c5aa993b
JM
1616 static unsigned trampoline_code[] =
1617 {
1618 0x800b0000, /* l r0,0x0(r11) */
1619 0x90410014, /* st r2,0x14(r1) */
1620 0x7c0903a6, /* mtctr r0 */
1621 0x804b0004, /* l r2,0x4(r11) */
1622 0x816b0008, /* l r11,0x8(r11) */
1623 0x4e800420, /* bctr */
1624 0x4e800020, /* br */
1625 0
c906108c
SS
1626 };
1627
977adac5
ND
1628 /* Check for bigtoc fixup code. */
1629 msymbol = lookup_minimal_symbol_by_pc (pc);
22abf04a 1630 if (msymbol && rs6000_in_solib_return_trampoline (pc, DEPRECATED_SYMBOL_NAME (msymbol)))
977adac5
ND
1631 {
1632 /* Double-check that the third instruction from PC is relative "b". */
1633 op = read_memory_integer (pc + 8, 4);
1634 if ((op & 0xfc000003) == 0x48000000)
1635 {
1636 /* Extract bits 6-29 as a signed 24-bit relative word address and
1637 add it to the containing PC. */
1638 rel = ((int)(op << 6) >> 6);
1639 return pc + 8 + rel;
1640 }
1641 }
1642
c906108c
SS
1643 /* If pc is in a shared library trampoline, return its target. */
1644 solib_target_pc = find_solib_trampoline_target (pc);
1645 if (solib_target_pc)
1646 return solib_target_pc;
1647
c5aa993b
JM
1648 for (ii = 0; trampoline_code[ii]; ++ii)
1649 {
1650 op = read_memory_integer (pc + (ii * 4), 4);
1651 if (op != trampoline_code[ii])
1652 return 0;
1653 }
1654 ii = read_register (11); /* r11 holds destination addr */
21283beb 1655 pc = read_memory_addr (ii, gdbarch_tdep (current_gdbarch)->wordsize); /* (r11) value */
c906108c
SS
1656 return pc;
1657}
1658
7a78ae4e 1659/* Return the size of register REG when words are WORDSIZE bytes long. If REG
64366f1c 1660 isn't available with that word size, return 0. */
7a78ae4e
ND
1661
1662static int
1663regsize (const struct reg *reg, int wordsize)
1664{
1665 return wordsize == 8 ? reg->sz64 : reg->sz32;
1666}
1667
1668/* Return the name of register number N, or null if no such register exists
64366f1c 1669 in the current architecture. */
7a78ae4e 1670
fa88f677 1671static const char *
7a78ae4e
ND
1672rs6000_register_name (int n)
1673{
21283beb 1674 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
7a78ae4e
ND
1675 const struct reg *reg = tdep->regs + n;
1676
1677 if (!regsize (reg, tdep->wordsize))
1678 return NULL;
1679 return reg->name;
1680}
1681
7a78ae4e
ND
1682/* Return the GDB type object for the "standard" data type
1683 of data in register N. */
1684
1685static struct type *
691d145a 1686rs6000_register_type (struct gdbarch *gdbarch, int n)
7a78ae4e 1687{
691d145a 1688 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7a78ae4e
ND
1689 const struct reg *reg = tdep->regs + n;
1690
1fcc0bb8
EZ
1691 if (reg->fpr)
1692 return builtin_type_double;
1693 else
1694 {
1695 int size = regsize (reg, tdep->wordsize);
1696 switch (size)
1697 {
449a5da4
AC
1698 case 0:
1699 return builtin_type_int0;
1700 case 4:
ed6edd9b 1701 return builtin_type_uint32;
1fcc0bb8 1702 case 8:
c8001721
EZ
1703 if (tdep->ppc_ev0_regnum <= n && n <= tdep->ppc_ev31_regnum)
1704 return builtin_type_vec64;
1705 else
ed6edd9b 1706 return builtin_type_uint64;
1fcc0bb8
EZ
1707 break;
1708 case 16:
08cf96df 1709 return builtin_type_vec128;
1fcc0bb8
EZ
1710 break;
1711 default:
449a5da4
AC
1712 internal_error (__FILE__, __LINE__, "Register %d size %d unknown",
1713 n, size);
1fcc0bb8
EZ
1714 }
1715 }
7a78ae4e
ND
1716}
1717
691d145a 1718/* The register format for RS/6000 floating point registers is always
64366f1c 1719 double, we need a conversion if the memory format is float. */
7a78ae4e
ND
1720
1721static int
691d145a 1722rs6000_convert_register_p (int regnum, struct type *type)
7a78ae4e 1723{
691d145a
JB
1724 const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum;
1725
1726 return (reg->fpr
1727 && TYPE_CODE (type) == TYPE_CODE_FLT
1728 && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type_double));
7a78ae4e
ND
1729}
1730
7a78ae4e 1731static void
691d145a
JB
1732rs6000_register_to_value (struct frame_info *frame,
1733 int regnum,
1734 struct type *type,
1735 void *to)
7a78ae4e 1736{
691d145a
JB
1737 const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum;
1738 char from[MAX_REGISTER_SIZE];
1739
1740 gdb_assert (reg->fpr);
1741 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
7a78ae4e 1742
691d145a
JB
1743 get_frame_register (frame, regnum, from);
1744 convert_typed_floating (from, builtin_type_double, to, type);
1745}
7a292a7a 1746
7a78ae4e 1747static void
691d145a
JB
1748rs6000_value_to_register (struct frame_info *frame,
1749 int regnum,
1750 struct type *type,
1751 const void *from)
7a78ae4e 1752{
691d145a
JB
1753 const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum;
1754 char to[MAX_REGISTER_SIZE];
1755
1756 gdb_assert (reg->fpr);
1757 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
1758
1759 convert_typed_floating (from, type, to, builtin_type_double);
1760 put_frame_register (frame, regnum, to);
7a78ae4e 1761}
c906108c 1762
c8001721
EZ
1763static void
1764e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
1765 int reg_nr, void *buffer)
1766{
1767 int base_regnum;
1768 int offset = 0;
d9d9c31f 1769 char temp_buffer[MAX_REGISTER_SIZE];
c8001721
EZ
1770 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1771
1772 if (reg_nr >= tdep->ppc_gp0_regnum
8bf659e8 1773 && reg_nr < tdep->ppc_gp0_regnum + ppc_num_gprs)
c8001721
EZ
1774 {
1775 base_regnum = reg_nr - tdep->ppc_gp0_regnum + tdep->ppc_ev0_regnum;
1776
1777 /* Build the value in the provided buffer. */
1778 /* Read the raw register of which this one is the lower portion. */
1779 regcache_raw_read (regcache, base_regnum, temp_buffer);
1780 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1781 offset = 4;
1782 memcpy ((char *) buffer, temp_buffer + offset, 4);
1783 }
1784}
1785
1786static void
1787e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
1788 int reg_nr, const void *buffer)
1789{
1790 int base_regnum;
1791 int offset = 0;
d9d9c31f 1792 char temp_buffer[MAX_REGISTER_SIZE];
c8001721
EZ
1793 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1794
1795 if (reg_nr >= tdep->ppc_gp0_regnum
8bf659e8 1796 && reg_nr < tdep->ppc_gp0_regnum + ppc_num_gprs)
c8001721
EZ
1797 {
1798 base_regnum = reg_nr - tdep->ppc_gp0_regnum + tdep->ppc_ev0_regnum;
1799 /* reg_nr is 32 bit here, and base_regnum is 64 bits. */
1800 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1801 offset = 4;
1802
1803 /* Let's read the value of the base register into a temporary
1804 buffer, so that overwriting the last four bytes with the new
1805 value of the pseudo will leave the upper 4 bytes unchanged. */
1806 regcache_raw_read (regcache, base_regnum, temp_buffer);
1807
1808 /* Write as an 8 byte quantity. */
1809 memcpy (temp_buffer + offset, (char *) buffer, 4);
1810 regcache_raw_write (regcache, base_regnum, temp_buffer);
1811 }
1812}
1813
18ed0c4e 1814/* Convert a DBX STABS register number to a GDB register number. */
c8001721 1815static int
18ed0c4e 1816rs6000_stab_reg_to_regnum (int num)
c8001721 1817{
9f744501 1818 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
c8001721 1819
9f744501
JB
1820 if (0 <= num && num <= 31)
1821 return tdep->ppc_gp0_regnum + num;
1822 else if (32 <= num && num <= 63)
383f0f5b
JB
1823 /* FIXME: jimb/2004-05-05: What should we do when the debug info
1824 specifies registers the architecture doesn't have? Our
1825 callers don't check the value we return. */
366f009f 1826 return tdep->ppc_fp0_regnum + (num - 32);
18ed0c4e
JB
1827 else if (77 <= num && num <= 108)
1828 return tdep->ppc_vr0_regnum + (num - 77);
9f744501
JB
1829 else if (1200 <= num && num < 1200 + 32)
1830 return tdep->ppc_ev0_regnum + (num - 1200);
1831 else
1832 switch (num)
1833 {
1834 case 64:
1835 return tdep->ppc_mq_regnum;
1836 case 65:
1837 return tdep->ppc_lr_regnum;
1838 case 66:
1839 return tdep->ppc_ctr_regnum;
1840 case 76:
1841 return tdep->ppc_xer_regnum;
1842 case 109:
1843 return tdep->ppc_vrsave_regnum;
18ed0c4e
JB
1844 case 110:
1845 return tdep->ppc_vrsave_regnum - 1; /* vscr */
867e2dc5 1846 case 111:
18ed0c4e 1847 return tdep->ppc_acc_regnum;
867e2dc5 1848 case 112:
18ed0c4e 1849 return tdep->ppc_spefscr_regnum;
9f744501
JB
1850 default:
1851 return num;
1852 }
18ed0c4e 1853}
9f744501 1854
9f744501 1855
18ed0c4e
JB
1856/* Convert a Dwarf 2 register number to a GDB register number. */
1857static int
1858rs6000_dwarf2_reg_to_regnum (int num)
1859{
1860 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
9f744501 1861
18ed0c4e
JB
1862 if (0 <= num && num <= 31)
1863 return tdep->ppc_gp0_regnum + num;
1864 else if (32 <= num && num <= 63)
1865 /* FIXME: jimb/2004-05-05: What should we do when the debug info
1866 specifies registers the architecture doesn't have? Our
1867 callers don't check the value we return. */
1868 return tdep->ppc_fp0_regnum + (num - 32);
1869 else if (1124 <= num && num < 1124 + 32)
1870 return tdep->ppc_vr0_regnum + (num - 1124);
1871 else if (1200 <= num && num < 1200 + 32)
1872 return tdep->ppc_ev0_regnum + (num - 1200);
1873 else
1874 switch (num)
1875 {
1876 case 67:
1877 return tdep->ppc_vrsave_regnum - 1; /* vscr */
1878 case 99:
1879 return tdep->ppc_acc_regnum;
1880 case 100:
1881 return tdep->ppc_mq_regnum;
1882 case 101:
1883 return tdep->ppc_xer_regnum;
1884 case 108:
1885 return tdep->ppc_lr_regnum;
1886 case 109:
1887 return tdep->ppc_ctr_regnum;
1888 case 356:
1889 return tdep->ppc_vrsave_regnum;
1890 case 612:
1891 return tdep->ppc_spefscr_regnum;
1892 default:
1893 return num;
1894 }
2188cbdd
EZ
1895}
1896
18ed0c4e 1897
7a78ae4e 1898static void
a3c001ce
JB
1899rs6000_store_return_value (struct type *type,
1900 struct regcache *regcache,
1901 const void *valbuf)
7a78ae4e 1902{
a3c001ce
JB
1903 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1904 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1905 int regnum = -1;
ace1378a 1906
383f0f5b
JB
1907 /* The calling convention this function implements assumes the
1908 processor has floating-point registers. We shouldn't be using it
1909 on PPC variants that lack them. */
a3c001ce 1910 gdb_assert (ppc_floating_point_unit_p (gdbarch));
383f0f5b 1911
7a78ae4e 1912 if (TYPE_CODE (type) == TYPE_CODE_FLT)
7a78ae4e
ND
1913 /* Floating point values are returned starting from FPR1 and up.
1914 Say a double_double_double type could be returned in
64366f1c 1915 FPR1/FPR2/FPR3 triple. */
a3c001ce 1916 regnum = tdep->ppc_fp0_regnum + 1;
ace1378a
EZ
1917 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1918 {
1919 if (TYPE_LENGTH (type) == 16
1920 && TYPE_VECTOR (type))
a3c001ce
JB
1921 regnum = tdep->ppc_vr0_regnum + 2;
1922 else
1923 gdb_assert (0);
ace1378a 1924 }
7a78ae4e 1925 else
64366f1c 1926 /* Everything else is returned in GPR3 and up. */
a3c001ce
JB
1927 regnum = tdep->ppc_gp0_regnum + 3;
1928
1929 {
1930 size_t bytes_written = 0;
1931
1932 while (bytes_written < TYPE_LENGTH (type))
1933 {
1934 /* How much of this value can we write to this register? */
1935 size_t bytes_to_write = min (TYPE_LENGTH (type) - bytes_written,
1936 register_size (gdbarch, regnum));
1937 regcache_cooked_write_part (regcache, regnum,
1938 0, bytes_to_write,
1939 (char *) valbuf + bytes_written);
1940 regnum++;
1941 bytes_written += bytes_to_write;
1942 }
1943 }
7a78ae4e
ND
1944}
1945
a3c001ce 1946
7a78ae4e
ND
1947/* Extract from an array REGBUF containing the (raw) register state
1948 the address in which a function should return its structure value,
1949 as a CORE_ADDR (or an expression that can be used as one). */
1950
1951static CORE_ADDR
11269d7e
AC
1952rs6000_extract_struct_value_address (struct regcache *regcache)
1953{
1954 /* FIXME: cagney/2002-09-26: PR gdb/724: When making an inferior
1955 function call GDB knows the address of the struct return value
1956 and hence, should not need to call this function. Unfortunately,
e8a8712a
AC
1957 the current call_function_by_hand() code only saves the most
1958 recent struct address leading to occasional calls. The code
1959 should instead maintain a stack of such addresses (in the dummy
1960 frame object). */
11269d7e
AC
1961 /* NOTE: cagney/2002-09-26: Return 0 which indicates that we've
1962 really got no idea where the return value is being stored. While
1963 r3, on function entry, contained the address it will have since
1964 been reused (scratch) and hence wouldn't be valid */
1965 return 0;
7a78ae4e
ND
1966}
1967
64366f1c 1968/* Hook called when a new child process is started. */
7a78ae4e
ND
1969
1970void
1971rs6000_create_inferior (int pid)
1972{
1973 if (rs6000_set_host_arch_hook)
1974 rs6000_set_host_arch_hook (pid);
c906108c
SS
1975}
1976\f
e2d0e7eb 1977/* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
7a78ae4e
ND
1978
1979 Usually a function pointer's representation is simply the address
1980 of the function. On the RS/6000 however, a function pointer is
1981 represented by a pointer to a TOC entry. This TOC entry contains
1982 three words, the first word is the address of the function, the
1983 second word is the TOC pointer (r2), and the third word is the
1984 static chain value. Throughout GDB it is currently assumed that a
1985 function pointer contains the address of the function, which is not
1986 easy to fix. In addition, the conversion of a function address to
1987 a function pointer would require allocation of a TOC entry in the
1988 inferior's memory space, with all its drawbacks. To be able to
1989 call C++ virtual methods in the inferior (which are called via
f517ea4e 1990 function pointers), find_function_addr uses this function to get the
7a78ae4e
ND
1991 function address from a function pointer. */
1992
f517ea4e
PS
1993/* Return real function address if ADDR (a function pointer) is in the data
1994 space and is therefore a special function pointer. */
c906108c 1995
b9362cc7 1996static CORE_ADDR
e2d0e7eb
AC
1997rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
1998 CORE_ADDR addr,
1999 struct target_ops *targ)
c906108c
SS
2000{
2001 struct obj_section *s;
2002
2003 s = find_pc_section (addr);
2004 if (s && s->the_bfd_section->flags & SEC_CODE)
7a78ae4e 2005 return addr;
c906108c 2006
7a78ae4e 2007 /* ADDR is in the data space, so it's a special function pointer. */
21283beb 2008 return read_memory_addr (addr, gdbarch_tdep (current_gdbarch)->wordsize);
c906108c 2009}
c906108c 2010\f
c5aa993b 2011
7a78ae4e 2012/* Handling the various POWER/PowerPC variants. */
c906108c
SS
2013
2014
7a78ae4e
ND
2015/* The arrays here called registers_MUMBLE hold information about available
2016 registers.
c906108c
SS
2017
2018 For each family of PPC variants, I've tried to isolate out the
2019 common registers and put them up front, so that as long as you get
2020 the general family right, GDB will correctly identify the registers
2021 common to that family. The common register sets are:
2022
2023 For the 60x family: hid0 hid1 iabr dabr pir
2024
2025 For the 505 and 860 family: eie eid nri
2026
2027 For the 403 and 403GC: icdbdr esr dear evpr cdbcr tsr tcr pit tbhi
c5aa993b
JM
2028 tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1
2029 pbu1 pbl2 pbu2
c906108c
SS
2030
2031 Most of these register groups aren't anything formal. I arrived at
2032 them by looking at the registers that occurred in more than one
6f5987a6
KB
2033 processor.
2034
2035 Note: kevinb/2002-04-30: Support for the fpscr register was added
2036 during April, 2002. Slot 70 is being used for PowerPC and slot 71
2037 for Power. For PowerPC, slot 70 was unused and was already in the
2038 PPC_UISA_SPRS which is ideally where fpscr should go. For Power,
2039 slot 70 was being used for "mq", so the next available slot (71)
2040 was chosen. It would have been nice to be able to make the
2041 register numbers the same across processor cores, but this wasn't
2042 possible without either 1) renumbering some registers for some
2043 processors or 2) assigning fpscr to a really high slot that's
2044 larger than any current register number. Doing (1) is bad because
2045 existing stubs would break. Doing (2) is undesirable because it
2046 would introduce a really large gap between fpscr and the rest of
2047 the registers for most processors. */
7a78ae4e 2048
64366f1c 2049/* Convenience macros for populating register arrays. */
7a78ae4e 2050
64366f1c 2051/* Within another macro, convert S to a string. */
7a78ae4e
ND
2052
2053#define STR(s) #s
2054
2055/* Return a struct reg defining register NAME that's 32 bits on 32-bit systems
64366f1c 2056 and 64 bits on 64-bit systems. */
489461e2 2057#define R(name) { STR(name), 4, 8, 0, 0 }
7a78ae4e
ND
2058
2059/* Return a struct reg defining register NAME that's 32 bits on all
64366f1c 2060 systems. */
489461e2 2061#define R4(name) { STR(name), 4, 4, 0, 0 }
7a78ae4e
ND
2062
2063/* Return a struct reg defining register NAME that's 64 bits on all
64366f1c 2064 systems. */
489461e2 2065#define R8(name) { STR(name), 8, 8, 0, 0 }
7a78ae4e 2066
1fcc0bb8 2067/* Return a struct reg defining register NAME that's 128 bits on all
64366f1c 2068 systems. */
489461e2 2069#define R16(name) { STR(name), 16, 16, 0, 0 }
1fcc0bb8 2070
64366f1c 2071/* Return a struct reg defining floating-point register NAME. */
489461e2
EZ
2072#define F(name) { STR(name), 8, 8, 1, 0 }
2073
64366f1c 2074/* Return a struct reg defining a pseudo register NAME. */
489461e2 2075#define P(name) { STR(name), 4, 8, 0, 1}
7a78ae4e
ND
2076
2077/* Return a struct reg defining register NAME that's 32 bits on 32-bit
64366f1c 2078 systems and that doesn't exist on 64-bit systems. */
489461e2 2079#define R32(name) { STR(name), 4, 0, 0, 0 }
7a78ae4e
ND
2080
2081/* Return a struct reg defining register NAME that's 64 bits on 64-bit
64366f1c 2082 systems and that doesn't exist on 32-bit systems. */
489461e2 2083#define R64(name) { STR(name), 0, 8, 0, 0 }
7a78ae4e 2084
64366f1c 2085/* Return a struct reg placeholder for a register that doesn't exist. */
489461e2 2086#define R0 { 0, 0, 0, 0, 0 }
7a78ae4e
ND
2087
2088/* UISA registers common across all architectures, including POWER. */
2089
2090#define COMMON_UISA_REGS \
2091 /* 0 */ R(r0), R(r1), R(r2), R(r3), R(r4), R(r5), R(r6), R(r7), \
2092 /* 8 */ R(r8), R(r9), R(r10),R(r11),R(r12),R(r13),R(r14),R(r15), \
2093 /* 16 */ R(r16),R(r17),R(r18),R(r19),R(r20),R(r21),R(r22),R(r23), \
2094 /* 24 */ R(r24),R(r25),R(r26),R(r27),R(r28),R(r29),R(r30),R(r31), \
2095 /* 32 */ F(f0), F(f1), F(f2), F(f3), F(f4), F(f5), F(f6), F(f7), \
2096 /* 40 */ F(f8), F(f9), F(f10),F(f11),F(f12),F(f13),F(f14),F(f15), \
2097 /* 48 */ F(f16),F(f17),F(f18),F(f19),F(f20),F(f21),F(f22),F(f23), \
2098 /* 56 */ F(f24),F(f25),F(f26),F(f27),F(f28),F(f29),F(f30),F(f31), \
2099 /* 64 */ R(pc), R(ps)
2100
ebeac11a
EZ
2101#define COMMON_UISA_NOFP_REGS \
2102 /* 0 */ R(r0), R(r1), R(r2), R(r3), R(r4), R(r5), R(r6), R(r7), \
2103 /* 8 */ R(r8), R(r9), R(r10),R(r11),R(r12),R(r13),R(r14),R(r15), \
2104 /* 16 */ R(r16),R(r17),R(r18),R(r19),R(r20),R(r21),R(r22),R(r23), \
2105 /* 24 */ R(r24),R(r25),R(r26),R(r27),R(r28),R(r29),R(r30),R(r31), \
2106 /* 32 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2107 /* 40 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2108 /* 48 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2109 /* 56 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2110 /* 64 */ R(pc), R(ps)
2111
7a78ae4e
ND
2112/* UISA-level SPRs for PowerPC. */
2113#define PPC_UISA_SPRS \
e3f36dbd 2114 /* 66 */ R4(cr), R(lr), R(ctr), R4(xer), R4(fpscr)
7a78ae4e 2115
c8001721
EZ
2116/* UISA-level SPRs for PowerPC without floating point support. */
2117#define PPC_UISA_NOFP_SPRS \
2118 /* 66 */ R4(cr), R(lr), R(ctr), R4(xer), R0
2119
7a78ae4e
ND
2120/* Segment registers, for PowerPC. */
2121#define PPC_SEGMENT_REGS \
2122 /* 71 */ R32(sr0), R32(sr1), R32(sr2), R32(sr3), \
2123 /* 75 */ R32(sr4), R32(sr5), R32(sr6), R32(sr7), \
2124 /* 79 */ R32(sr8), R32(sr9), R32(sr10), R32(sr11), \
2125 /* 83 */ R32(sr12), R32(sr13), R32(sr14), R32(sr15)
2126
2127/* OEA SPRs for PowerPC. */
2128#define PPC_OEA_SPRS \
2129 /* 87 */ R4(pvr), \
2130 /* 88 */ R(ibat0u), R(ibat0l), R(ibat1u), R(ibat1l), \
2131 /* 92 */ R(ibat2u), R(ibat2l), R(ibat3u), R(ibat3l), \
2132 /* 96 */ R(dbat0u), R(dbat0l), R(dbat1u), R(dbat1l), \
2133 /* 100 */ R(dbat2u), R(dbat2l), R(dbat3u), R(dbat3l), \
2134 /* 104 */ R(sdr1), R64(asr), R(dar), R4(dsisr), \
2135 /* 108 */ R(sprg0), R(sprg1), R(sprg2), R(sprg3), \
2136 /* 112 */ R(srr0), R(srr1), R(tbl), R(tbu), \
2137 /* 116 */ R4(dec), R(dabr), R4(ear)
2138
64366f1c 2139/* AltiVec registers. */
1fcc0bb8
EZ
2140#define PPC_ALTIVEC_REGS \
2141 /*119*/R16(vr0), R16(vr1), R16(vr2), R16(vr3), R16(vr4), R16(vr5), R16(vr6), R16(vr7), \
2142 /*127*/R16(vr8), R16(vr9), R16(vr10),R16(vr11),R16(vr12),R16(vr13),R16(vr14),R16(vr15), \
2143 /*135*/R16(vr16),R16(vr17),R16(vr18),R16(vr19),R16(vr20),R16(vr21),R16(vr22),R16(vr23), \
2144 /*143*/R16(vr24),R16(vr25),R16(vr26),R16(vr27),R16(vr28),R16(vr29),R16(vr30),R16(vr31), \
2145 /*151*/R4(vscr), R4(vrsave)
2146
c8001721
EZ
2147/* Vectors of hi-lo general purpose registers. */
2148#define PPC_EV_REGS \
2149 /* 0*/R8(ev0), R8(ev1), R8(ev2), R8(ev3), R8(ev4), R8(ev5), R8(ev6), R8(ev7), \
2150 /* 8*/R8(ev8), R8(ev9), R8(ev10),R8(ev11),R8(ev12),R8(ev13),R8(ev14),R8(ev15), \
2151 /*16*/R8(ev16),R8(ev17),R8(ev18),R8(ev19),R8(ev20),R8(ev21),R8(ev22),R8(ev23), \
2152 /*24*/R8(ev24),R8(ev25),R8(ev26),R8(ev27),R8(ev28),R8(ev29),R8(ev30),R8(ev31)
2153
2154/* Lower half of the EV registers. */
2155#define PPC_GPRS_PSEUDO_REGS \
2156 /* 0 */ P(r0), P(r1), P(r2), P(r3), P(r4), P(r5), P(r6), P(r7), \
2157 /* 8 */ P(r8), P(r9), P(r10),P(r11),P(r12),P(r13),P(r14),P(r15), \
2158 /* 16 */ P(r16),P(r17),P(r18),P(r19),P(r20),P(r21),P(r22),P(r23), \
338ef23d 2159 /* 24 */ P(r24),P(r25),P(r26),P(r27),P(r28),P(r29),P(r30),P(r31)
c8001721 2160
7a78ae4e 2161/* IBM POWER (pre-PowerPC) architecture, user-level view. We only cover
64366f1c 2162 user-level SPR's. */
7a78ae4e 2163static const struct reg registers_power[] =
c906108c 2164{
7a78ae4e 2165 COMMON_UISA_REGS,
e3f36dbd
KB
2166 /* 66 */ R4(cnd), R(lr), R(cnt), R4(xer), R4(mq),
2167 /* 71 */ R4(fpscr)
c906108c
SS
2168};
2169
7a78ae4e 2170/* PowerPC UISA - a PPC processor as viewed by user-level code. A UISA-only
64366f1c 2171 view of the PowerPC. */
7a78ae4e 2172static const struct reg registers_powerpc[] =
c906108c 2173{
7a78ae4e 2174 COMMON_UISA_REGS,
1fcc0bb8
EZ
2175 PPC_UISA_SPRS,
2176 PPC_ALTIVEC_REGS
c906108c
SS
2177};
2178
ebeac11a
EZ
2179/* PowerPC UISA - a PPC processor as viewed by user-level
2180 code, but without floating point registers. */
2181static const struct reg registers_powerpc_nofp[] =
2182{
2183 COMMON_UISA_NOFP_REGS,
2184 PPC_UISA_SPRS
2185};
2186
64366f1c 2187/* IBM PowerPC 403. */
7a78ae4e 2188static const struct reg registers_403[] =
c5aa993b 2189{
7a78ae4e
ND
2190 COMMON_UISA_REGS,
2191 PPC_UISA_SPRS,
2192 PPC_SEGMENT_REGS,
2193 PPC_OEA_SPRS,
2194 /* 119 */ R(icdbdr), R(esr), R(dear), R(evpr),
2195 /* 123 */ R(cdbcr), R(tsr), R(tcr), R(pit),
2196 /* 127 */ R(tbhi), R(tblo), R(srr2), R(srr3),
2197 /* 131 */ R(dbsr), R(dbcr), R(iac1), R(iac2),
2198 /* 135 */ R(dac1), R(dac2), R(dccr), R(iccr),
2199 /* 139 */ R(pbl1), R(pbu1), R(pbl2), R(pbu2)
c906108c
SS
2200};
2201
64366f1c 2202/* IBM PowerPC 403GC. */
7a78ae4e 2203static const struct reg registers_403GC[] =
c5aa993b 2204{
7a78ae4e
ND
2205 COMMON_UISA_REGS,
2206 PPC_UISA_SPRS,
2207 PPC_SEGMENT_REGS,
2208 PPC_OEA_SPRS,
2209 /* 119 */ R(icdbdr), R(esr), R(dear), R(evpr),
2210 /* 123 */ R(cdbcr), R(tsr), R(tcr), R(pit),
2211 /* 127 */ R(tbhi), R(tblo), R(srr2), R(srr3),
2212 /* 131 */ R(dbsr), R(dbcr), R(iac1), R(iac2),
2213 /* 135 */ R(dac1), R(dac2), R(dccr), R(iccr),
2214 /* 139 */ R(pbl1), R(pbu1), R(pbl2), R(pbu2),
2215 /* 143 */ R(zpr), R(pid), R(sgr), R(dcwr),
2216 /* 147 */ R(tbhu), R(tblu)
c906108c
SS
2217};
2218
64366f1c 2219/* Motorola PowerPC 505. */
7a78ae4e 2220static const struct reg registers_505[] =
c5aa993b 2221{
7a78ae4e
ND
2222 COMMON_UISA_REGS,
2223 PPC_UISA_SPRS,
2224 PPC_SEGMENT_REGS,
2225 PPC_OEA_SPRS,
2226 /* 119 */ R(eie), R(eid), R(nri)
c906108c
SS
2227};
2228
64366f1c 2229/* Motorola PowerPC 860 or 850. */
7a78ae4e 2230static const struct reg registers_860[] =
c5aa993b 2231{
7a78ae4e
ND
2232 COMMON_UISA_REGS,
2233 PPC_UISA_SPRS,
2234 PPC_SEGMENT_REGS,
2235 PPC_OEA_SPRS,
2236 /* 119 */ R(eie), R(eid), R(nri), R(cmpa),
2237 /* 123 */ R(cmpb), R(cmpc), R(cmpd), R(icr),
2238 /* 127 */ R(der), R(counta), R(countb), R(cmpe),
2239 /* 131 */ R(cmpf), R(cmpg), R(cmph), R(lctrl1),
2240 /* 135 */ R(lctrl2), R(ictrl), R(bar), R(ic_cst),
2241 /* 139 */ R(ic_adr), R(ic_dat), R(dc_cst), R(dc_adr),
2242 /* 143 */ R(dc_dat), R(dpdr), R(dpir), R(immr),
2243 /* 147 */ R(mi_ctr), R(mi_ap), R(mi_epn), R(mi_twc),
2244 /* 151 */ R(mi_rpn), R(md_ctr), R(m_casid), R(md_ap),
2245 /* 155 */ R(md_epn), R(md_twb), R(md_twc), R(md_rpn),
2246 /* 159 */ R(m_tw), R(mi_dbcam), R(mi_dbram0), R(mi_dbram1),
2247 /* 163 */ R(md_dbcam), R(md_dbram0), R(md_dbram1)
c906108c
SS
2248};
2249
7a78ae4e
ND
2250/* Motorola PowerPC 601. Note that the 601 has different register numbers
2251 for reading and writing RTCU and RTCL. However, how one reads and writes a
c906108c 2252 register is the stub's problem. */
7a78ae4e 2253static const struct reg registers_601[] =
c5aa993b 2254{
7a78ae4e
ND
2255 COMMON_UISA_REGS,
2256 PPC_UISA_SPRS,
2257 PPC_SEGMENT_REGS,
2258 PPC_OEA_SPRS,
2259 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2260 /* 123 */ R(pir), R(mq), R(rtcu), R(rtcl)
c906108c
SS
2261};
2262
64366f1c 2263/* Motorola PowerPC 602. */
7a78ae4e 2264static const struct reg registers_602[] =
c5aa993b 2265{
7a78ae4e
ND
2266 COMMON_UISA_REGS,
2267 PPC_UISA_SPRS,
2268 PPC_SEGMENT_REGS,
2269 PPC_OEA_SPRS,
2270 /* 119 */ R(hid0), R(hid1), R(iabr), R0,
2271 /* 123 */ R0, R(tcr), R(ibr), R(esassr),
2272 /* 127 */ R(sebr), R(ser), R(sp), R(lt)
c906108c
SS
2273};
2274
64366f1c 2275/* Motorola/IBM PowerPC 603 or 603e. */
7a78ae4e 2276static const struct reg registers_603[] =
c5aa993b 2277{
7a78ae4e
ND
2278 COMMON_UISA_REGS,
2279 PPC_UISA_SPRS,
2280 PPC_SEGMENT_REGS,
2281 PPC_OEA_SPRS,
2282 /* 119 */ R(hid0), R(hid1), R(iabr), R0,
2283 /* 123 */ R0, R(dmiss), R(dcmp), R(hash1),
2284 /* 127 */ R(hash2), R(imiss), R(icmp), R(rpa)
c906108c
SS
2285};
2286
64366f1c 2287/* Motorola PowerPC 604 or 604e. */
7a78ae4e 2288static const struct reg registers_604[] =
c5aa993b 2289{
7a78ae4e
ND
2290 COMMON_UISA_REGS,
2291 PPC_UISA_SPRS,
2292 PPC_SEGMENT_REGS,
2293 PPC_OEA_SPRS,
2294 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2295 /* 123 */ R(pir), R(mmcr0), R(pmc1), R(pmc2),
2296 /* 127 */ R(sia), R(sda)
c906108c
SS
2297};
2298
64366f1c 2299/* Motorola/IBM PowerPC 750 or 740. */
7a78ae4e 2300static const struct reg registers_750[] =
c5aa993b 2301{
7a78ae4e
ND
2302 COMMON_UISA_REGS,
2303 PPC_UISA_SPRS,
2304 PPC_SEGMENT_REGS,
2305 PPC_OEA_SPRS,
2306 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2307 /* 123 */ R0, R(ummcr0), R(upmc1), R(upmc2),
2308 /* 127 */ R(usia), R(ummcr1), R(upmc3), R(upmc4),
2309 /* 131 */ R(mmcr0), R(pmc1), R(pmc2), R(sia),
2310 /* 135 */ R(mmcr1), R(pmc3), R(pmc4), R(l2cr),
2311 /* 139 */ R(ictc), R(thrm1), R(thrm2), R(thrm3)
c906108c
SS
2312};
2313
2314
64366f1c 2315/* Motorola PowerPC 7400. */
1fcc0bb8
EZ
2316static const struct reg registers_7400[] =
2317{
2318 /* gpr0-gpr31, fpr0-fpr31 */
2319 COMMON_UISA_REGS,
13c7b1ca 2320 /* cr, lr, ctr, xer, fpscr */
1fcc0bb8
EZ
2321 PPC_UISA_SPRS,
2322 /* sr0-sr15 */
2323 PPC_SEGMENT_REGS,
2324 PPC_OEA_SPRS,
2325 /* vr0-vr31, vrsave, vscr */
2326 PPC_ALTIVEC_REGS
2327 /* FIXME? Add more registers? */
2328};
2329
c8001721
EZ
2330/* Motorola e500. */
2331static const struct reg registers_e500[] =
2332{
2333 R(pc), R(ps),
2334 /* cr, lr, ctr, xer, "" */
2335 PPC_UISA_NOFP_SPRS,
2336 /* 7...38 */
2337 PPC_EV_REGS,
338ef23d
AC
2338 R8(acc), R(spefscr),
2339 /* NOTE: Add new registers here the end of the raw register
2340 list and just before the first pseudo register. */
13c7b1ca 2341 /* 41...72 */
c8001721
EZ
2342 PPC_GPRS_PSEUDO_REGS
2343};
2344
c906108c 2345/* Information about a particular processor variant. */
7a78ae4e 2346
c906108c 2347struct variant
c5aa993b
JM
2348 {
2349 /* Name of this variant. */
2350 char *name;
c906108c 2351
c5aa993b
JM
2352 /* English description of the variant. */
2353 char *description;
c906108c 2354
64366f1c 2355 /* bfd_arch_info.arch corresponding to variant. */
7a78ae4e
ND
2356 enum bfd_architecture arch;
2357
64366f1c 2358 /* bfd_arch_info.mach corresponding to variant. */
7a78ae4e
ND
2359 unsigned long mach;
2360
489461e2
EZ
2361 /* Number of real registers. */
2362 int nregs;
2363
2364 /* Number of pseudo registers. */
2365 int npregs;
2366
2367 /* Number of total registers (the sum of nregs and npregs). */
2368 int num_tot_regs;
2369
c5aa993b
JM
2370 /* Table of register names; registers[R] is the name of the register
2371 number R. */
7a78ae4e 2372 const struct reg *regs;
c5aa993b 2373 };
c906108c 2374
489461e2
EZ
2375#define tot_num_registers(list) (sizeof (list) / sizeof((list)[0]))
2376
2377static int
2378num_registers (const struct reg *reg_list, int num_tot_regs)
2379{
2380 int i;
2381 int nregs = 0;
2382
2383 for (i = 0; i < num_tot_regs; i++)
2384 if (!reg_list[i].pseudo)
2385 nregs++;
2386
2387 return nregs;
2388}
2389
2390static int
2391num_pseudo_registers (const struct reg *reg_list, int num_tot_regs)
2392{
2393 int i;
2394 int npregs = 0;
2395
2396 for (i = 0; i < num_tot_regs; i++)
2397 if (reg_list[i].pseudo)
2398 npregs ++;
2399
2400 return npregs;
2401}
c906108c 2402
c906108c
SS
2403/* Information in this table comes from the following web sites:
2404 IBM: http://www.chips.ibm.com:80/products/embedded/
2405 Motorola: http://www.mot.com/SPS/PowerPC/
2406
2407 I'm sure I've got some of the variant descriptions not quite right.
2408 Please report any inaccuracies you find to GDB's maintainer.
2409
2410 If you add entries to this table, please be sure to allow the new
2411 value as an argument to the --with-cpu flag, in configure.in. */
2412
489461e2 2413static struct variant variants[] =
c906108c 2414{
489461e2 2415
7a78ae4e 2416 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
489461e2
EZ
2417 bfd_mach_ppc, -1, -1, tot_num_registers (registers_powerpc),
2418 registers_powerpc},
7a78ae4e 2419 {"power", "POWER user-level", bfd_arch_rs6000,
489461e2
EZ
2420 bfd_mach_rs6k, -1, -1, tot_num_registers (registers_power),
2421 registers_power},
7a78ae4e 2422 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
489461e2
EZ
2423 bfd_mach_ppc_403, -1, -1, tot_num_registers (registers_403),
2424 registers_403},
7a78ae4e 2425 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
489461e2
EZ
2426 bfd_mach_ppc_601, -1, -1, tot_num_registers (registers_601),
2427 registers_601},
7a78ae4e 2428 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
489461e2
EZ
2429 bfd_mach_ppc_602, -1, -1, tot_num_registers (registers_602),
2430 registers_602},
7a78ae4e 2431 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
489461e2
EZ
2432 bfd_mach_ppc_603, -1, -1, tot_num_registers (registers_603),
2433 registers_603},
7a78ae4e 2434 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
489461e2
EZ
2435 604, -1, -1, tot_num_registers (registers_604),
2436 registers_604},
7a78ae4e 2437 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
489461e2
EZ
2438 bfd_mach_ppc_403gc, -1, -1, tot_num_registers (registers_403GC),
2439 registers_403GC},
7a78ae4e 2440 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
489461e2
EZ
2441 bfd_mach_ppc_505, -1, -1, tot_num_registers (registers_505),
2442 registers_505},
7a78ae4e 2443 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
489461e2
EZ
2444 bfd_mach_ppc_860, -1, -1, tot_num_registers (registers_860),
2445 registers_860},
7a78ae4e 2446 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
489461e2
EZ
2447 bfd_mach_ppc_750, -1, -1, tot_num_registers (registers_750),
2448 registers_750},
1fcc0bb8 2449 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
489461e2
EZ
2450 bfd_mach_ppc_7400, -1, -1, tot_num_registers (registers_7400),
2451 registers_7400},
c8001721
EZ
2452 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
2453 bfd_mach_ppc_e500, -1, -1, tot_num_registers (registers_e500),
2454 registers_e500},
7a78ae4e 2455
5d57ee30
KB
2456 /* 64-bit */
2457 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
489461e2
EZ
2458 bfd_mach_ppc64, -1, -1, tot_num_registers (registers_powerpc),
2459 registers_powerpc},
7a78ae4e 2460 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
489461e2
EZ
2461 bfd_mach_ppc_620, -1, -1, tot_num_registers (registers_powerpc),
2462 registers_powerpc},
5d57ee30 2463 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
489461e2
EZ
2464 bfd_mach_ppc_630, -1, -1, tot_num_registers (registers_powerpc),
2465 registers_powerpc},
7a78ae4e 2466 {"a35", "PowerPC A35", bfd_arch_powerpc,
489461e2
EZ
2467 bfd_mach_ppc_a35, -1, -1, tot_num_registers (registers_powerpc),
2468 registers_powerpc},
5d57ee30 2469 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
489461e2
EZ
2470 bfd_mach_ppc_rs64ii, -1, -1, tot_num_registers (registers_powerpc),
2471 registers_powerpc},
5d57ee30 2472 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
489461e2
EZ
2473 bfd_mach_ppc_rs64iii, -1, -1, tot_num_registers (registers_powerpc),
2474 registers_powerpc},
5d57ee30 2475
64366f1c 2476 /* FIXME: I haven't checked the register sets of the following. */
7a78ae4e 2477 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
489461e2
EZ
2478 bfd_mach_rs6k_rs1, -1, -1, tot_num_registers (registers_power),
2479 registers_power},
7a78ae4e 2480 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
489461e2
EZ
2481 bfd_mach_rs6k_rsc, -1, -1, tot_num_registers (registers_power),
2482 registers_power},
7a78ae4e 2483 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
489461e2
EZ
2484 bfd_mach_rs6k_rs2, -1, -1, tot_num_registers (registers_power),
2485 registers_power},
7a78ae4e 2486
489461e2 2487 {0, 0, 0, 0, 0, 0, 0, 0}
c906108c
SS
2488};
2489
64366f1c 2490/* Initialize the number of registers and pseudo registers in each variant. */
489461e2
EZ
2491
2492static void
2493init_variants (void)
2494{
2495 struct variant *v;
2496
2497 for (v = variants; v->name; v++)
2498 {
2499 if (v->nregs == -1)
2500 v->nregs = num_registers (v->regs, v->num_tot_regs);
2501 if (v->npregs == -1)
2502 v->npregs = num_pseudo_registers (v->regs, v->num_tot_regs);
2503 }
2504}
c906108c 2505
7a78ae4e 2506/* Return the variant corresponding to architecture ARCH and machine number
64366f1c 2507 MACH. If no such variant exists, return null. */
c906108c 2508
7a78ae4e
ND
2509static const struct variant *
2510find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
c906108c 2511{
7a78ae4e 2512 const struct variant *v;
c5aa993b 2513
7a78ae4e
ND
2514 for (v = variants; v->name; v++)
2515 if (arch == v->arch && mach == v->mach)
2516 return v;
c906108c 2517
7a78ae4e 2518 return NULL;
c906108c 2519}
9364a0ef
EZ
2520
2521static int
2522gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
2523{
2524 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2525 return print_insn_big_powerpc (memaddr, info);
2526 else
2527 return print_insn_little_powerpc (memaddr, info);
2528}
7a78ae4e 2529\f
61a65099
KB
2530static CORE_ADDR
2531rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2532{
2533 return frame_unwind_register_unsigned (next_frame, PC_REGNUM);
2534}
2535
2536static struct frame_id
2537rs6000_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
2538{
2539 return frame_id_build (frame_unwind_register_unsigned (next_frame,
2540 SP_REGNUM),
2541 frame_pc_unwind (next_frame));
2542}
2543
2544struct rs6000_frame_cache
2545{
2546 CORE_ADDR base;
2547 CORE_ADDR initial_sp;
2548 struct trad_frame_saved_reg *saved_regs;
2549};
2550
2551static struct rs6000_frame_cache *
2552rs6000_frame_cache (struct frame_info *next_frame, void **this_cache)
2553{
2554 struct rs6000_frame_cache *cache;
2555 struct gdbarch *gdbarch = get_frame_arch (next_frame);
2556 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2557 struct rs6000_framedata fdata;
2558 int wordsize = tdep->wordsize;
2559
2560 if ((*this_cache) != NULL)
2561 return (*this_cache);
2562 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
2563 (*this_cache) = cache;
2564 cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
2565
2566 skip_prologue (frame_func_unwind (next_frame), frame_pc_unwind (next_frame),
2567 &fdata);
2568
2569 /* If there were any saved registers, figure out parent's stack
2570 pointer. */
2571 /* The following is true only if the frame doesn't have a call to
2572 alloca(), FIXME. */
2573
2574 if (fdata.saved_fpr == 0
2575 && fdata.saved_gpr == 0
2576 && fdata.saved_vr == 0
2577 && fdata.saved_ev == 0
2578 && fdata.lr_offset == 0
2579 && fdata.cr_offset == 0
2580 && fdata.vr_offset == 0
2581 && fdata.ev_offset == 0)
2582 cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2583 else
2584 {
2585 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
2586 address of the current frame. Things might be easier if the
2587 ->frame pointed to the outer-most address of the frame. In
2588 the mean time, the address of the prev frame is used as the
2589 base address of this frame. */
2590 cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2591 if (!fdata.frameless)
2592 /* Frameless really means stackless. */
2593 cache->base = read_memory_addr (cache->base, wordsize);
2594 }
2595 trad_frame_set_value (cache->saved_regs, SP_REGNUM, cache->base);
2596
2597 /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
2598 All fpr's from saved_fpr to fp31 are saved. */
2599
2600 if (fdata.saved_fpr >= 0)
2601 {
2602 int i;
2603 CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
383f0f5b
JB
2604
2605 /* If skip_prologue says floating-point registers were saved,
2606 but the current architecture has no floating-point registers,
2607 then that's strange. But we have no indices to even record
2608 the addresses under, so we just ignore it. */
2609 if (ppc_floating_point_unit_p (gdbarch))
063715bf 2610 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
383f0f5b
JB
2611 {
2612 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
2613 fpr_addr += 8;
2614 }
61a65099
KB
2615 }
2616
2617 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
2618 All gpr's from saved_gpr to gpr31 are saved. */
2619
2620 if (fdata.saved_gpr >= 0)
2621 {
2622 int i;
2623 CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
063715bf 2624 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
61a65099
KB
2625 {
2626 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
2627 gpr_addr += wordsize;
2628 }
2629 }
2630
2631 /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
2632 All vr's from saved_vr to vr31 are saved. */
2633 if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
2634 {
2635 if (fdata.saved_vr >= 0)
2636 {
2637 int i;
2638 CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
2639 for (i = fdata.saved_vr; i < 32; i++)
2640 {
2641 cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
2642 vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
2643 }
2644 }
2645 }
2646
2647 /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
2648 All vr's from saved_ev to ev31 are saved. ????? */
2649 if (tdep->ppc_ev0_regnum != -1 && tdep->ppc_ev31_regnum != -1)
2650 {
2651 if (fdata.saved_ev >= 0)
2652 {
2653 int i;
2654 CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
063715bf 2655 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
61a65099
KB
2656 {
2657 cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
2658 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4;
2659 ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
2660 }
2661 }
2662 }
2663
2664 /* If != 0, fdata.cr_offset is the offset from the frame that
2665 holds the CR. */
2666 if (fdata.cr_offset != 0)
2667 cache->saved_regs[tdep->ppc_cr_regnum].addr = cache->base + fdata.cr_offset;
2668
2669 /* If != 0, fdata.lr_offset is the offset from the frame that
2670 holds the LR. */
2671 if (fdata.lr_offset != 0)
2672 cache->saved_regs[tdep->ppc_lr_regnum].addr = cache->base + fdata.lr_offset;
2673 /* The PC is found in the link register. */
2674 cache->saved_regs[PC_REGNUM] = cache->saved_regs[tdep->ppc_lr_regnum];
2675
2676 /* If != 0, fdata.vrsave_offset is the offset from the frame that
2677 holds the VRSAVE. */
2678 if (fdata.vrsave_offset != 0)
2679 cache->saved_regs[tdep->ppc_vrsave_regnum].addr = cache->base + fdata.vrsave_offset;
2680
2681 if (fdata.alloca_reg < 0)
2682 /* If no alloca register used, then fi->frame is the value of the
2683 %sp for this frame, and it is good enough. */
2684 cache->initial_sp = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2685 else
2686 cache->initial_sp = frame_unwind_register_unsigned (next_frame,
2687 fdata.alloca_reg);
2688
2689 return cache;
2690}
2691
2692static void
2693rs6000_frame_this_id (struct frame_info *next_frame, void **this_cache,
2694 struct frame_id *this_id)
2695{
2696 struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
2697 this_cache);
2698 (*this_id) = frame_id_build (info->base, frame_func_unwind (next_frame));
2699}
2700
2701static void
2702rs6000_frame_prev_register (struct frame_info *next_frame,
2703 void **this_cache,
2704 int regnum, int *optimizedp,
2705 enum lval_type *lvalp, CORE_ADDR *addrp,
2706 int *realnump, void *valuep)
2707{
2708 struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
2709 this_cache);
2710 trad_frame_prev_register (next_frame, info->saved_regs, regnum,
2711 optimizedp, lvalp, addrp, realnump, valuep);
2712}
2713
2714static const struct frame_unwind rs6000_frame_unwind =
2715{
2716 NORMAL_FRAME,
2717 rs6000_frame_this_id,
2718 rs6000_frame_prev_register
2719};
2720
2721static const struct frame_unwind *
2722rs6000_frame_sniffer (struct frame_info *next_frame)
2723{
2724 return &rs6000_frame_unwind;
2725}
2726
2727\f
2728
2729static CORE_ADDR
2730rs6000_frame_base_address (struct frame_info *next_frame,
2731 void **this_cache)
2732{
2733 struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
2734 this_cache);
2735 return info->initial_sp;
2736}
2737
2738static const struct frame_base rs6000_frame_base = {
2739 &rs6000_frame_unwind,
2740 rs6000_frame_base_address,
2741 rs6000_frame_base_address,
2742 rs6000_frame_base_address
2743};
2744
2745static const struct frame_base *
2746rs6000_frame_base_sniffer (struct frame_info *next_frame)
2747{
2748 return &rs6000_frame_base;
2749}
2750
7a78ae4e
ND
2751/* Initialize the current architecture based on INFO. If possible, re-use an
2752 architecture from ARCHES, which is a list of architectures already created
2753 during this debugging session.
c906108c 2754
7a78ae4e 2755 Called e.g. at program startup, when reading a core file, and when reading
64366f1c 2756 a binary file. */
c906108c 2757
7a78ae4e
ND
2758static struct gdbarch *
2759rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2760{
2761 struct gdbarch *gdbarch;
2762 struct gdbarch_tdep *tdep;
9aa1e687 2763 int wordsize, from_xcoff_exec, from_elf_exec, power, i, off;
7a78ae4e
ND
2764 struct reg *regs;
2765 const struct variant *v;
2766 enum bfd_architecture arch;
2767 unsigned long mach;
2768 bfd abfd;
7b112f9c 2769 int sysv_abi;
5bf1c677 2770 asection *sect;
7a78ae4e 2771
9aa1e687 2772 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
7a78ae4e
ND
2773 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
2774
9aa1e687
KB
2775 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
2776 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
2777
2778 sysv_abi = info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
2779
e712c1cf 2780 /* Check word size. If INFO is from a binary file, infer it from
64366f1c 2781 that, else choose a likely default. */
9aa1e687 2782 if (from_xcoff_exec)
c906108c 2783 {
11ed25ac 2784 if (bfd_xcoff_is_xcoff64 (info.abfd))
7a78ae4e
ND
2785 wordsize = 8;
2786 else
2787 wordsize = 4;
c906108c 2788 }
9aa1e687
KB
2789 else if (from_elf_exec)
2790 {
2791 if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
2792 wordsize = 8;
2793 else
2794 wordsize = 4;
2795 }
c906108c 2796 else
7a78ae4e 2797 {
27b15785
KB
2798 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
2799 wordsize = info.bfd_arch_info->bits_per_word /
2800 info.bfd_arch_info->bits_per_byte;
2801 else
2802 wordsize = 4;
7a78ae4e 2803 }
c906108c 2804
64366f1c 2805 /* Find a candidate among extant architectures. */
7a78ae4e
ND
2806 for (arches = gdbarch_list_lookup_by_info (arches, &info);
2807 arches != NULL;
2808 arches = gdbarch_list_lookup_by_info (arches->next, &info))
2809 {
2810 /* Word size in the various PowerPC bfd_arch_info structs isn't
2811 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
64366f1c 2812 separate word size check. */
7a78ae4e 2813 tdep = gdbarch_tdep (arches->gdbarch);
4be87837 2814 if (tdep && tdep->wordsize == wordsize)
7a78ae4e
ND
2815 return arches->gdbarch;
2816 }
c906108c 2817
7a78ae4e
ND
2818 /* None found, create a new architecture from INFO, whose bfd_arch_info
2819 validity depends on the source:
2820 - executable useless
2821 - rs6000_host_arch() good
2822 - core file good
2823 - "set arch" trust blindly
2824 - GDB startup useless but harmless */
c906108c 2825
9aa1e687 2826 if (!from_xcoff_exec)
c906108c 2827 {
b732d07d 2828 arch = info.bfd_arch_info->arch;
7a78ae4e 2829 mach = info.bfd_arch_info->mach;
c906108c 2830 }
7a78ae4e 2831 else
c906108c 2832 {
7a78ae4e 2833 arch = bfd_arch_powerpc;
35cec841 2834 bfd_default_set_arch_mach (&abfd, arch, 0);
7a78ae4e 2835 info.bfd_arch_info = bfd_get_arch_info (&abfd);
35cec841 2836 mach = info.bfd_arch_info->mach;
7a78ae4e
ND
2837 }
2838 tdep = xmalloc (sizeof (struct gdbarch_tdep));
2839 tdep->wordsize = wordsize;
5bf1c677
EZ
2840
2841 /* For e500 executables, the apuinfo section is of help here. Such
2842 section contains the identifier and revision number of each
2843 Application-specific Processing Unit that is present on the
2844 chip. The content of the section is determined by the assembler
2845 which looks at each instruction and determines which unit (and
2846 which version of it) can execute it. In our case we just look for
2847 the existance of the section. */
2848
2849 if (info.abfd)
2850 {
2851 sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo");
2852 if (sect)
2853 {
2854 arch = info.bfd_arch_info->arch;
2855 mach = bfd_mach_ppc_e500;
2856 bfd_default_set_arch_mach (&abfd, arch, mach);
2857 info.bfd_arch_info = bfd_get_arch_info (&abfd);
2858 }
2859 }
2860
7a78ae4e
ND
2861 gdbarch = gdbarch_alloc (&info, tdep);
2862 power = arch == bfd_arch_rs6000;
2863
489461e2
EZ
2864 /* Initialize the number of real and pseudo registers in each variant. */
2865 init_variants ();
2866
64366f1c 2867 /* Choose variant. */
7a78ae4e
ND
2868 v = find_variant_by_arch (arch, mach);
2869 if (!v)
dd47e6fd
EZ
2870 return NULL;
2871
7a78ae4e
ND
2872 tdep->regs = v->regs;
2873
2188cbdd 2874 tdep->ppc_gp0_regnum = 0;
2188cbdd
EZ
2875 tdep->ppc_toc_regnum = 2;
2876 tdep->ppc_ps_regnum = 65;
2877 tdep->ppc_cr_regnum = 66;
2878 tdep->ppc_lr_regnum = 67;
2879 tdep->ppc_ctr_regnum = 68;
2880 tdep->ppc_xer_regnum = 69;
2881 if (v->mach == bfd_mach_ppc_601)
2882 tdep->ppc_mq_regnum = 124;
e3f36dbd 2883 else if (power)
2188cbdd 2884 tdep->ppc_mq_regnum = 70;
e3f36dbd
KB
2885 else
2886 tdep->ppc_mq_regnum = -1;
366f009f 2887 tdep->ppc_fp0_regnum = 32;
e3f36dbd 2888 tdep->ppc_fpscr_regnum = power ? 71 : 70;
baffbae0
JB
2889 tdep->ppc_vr0_regnum = -1;
2890 tdep->ppc_vrsave_regnum = -1;
2891 tdep->ppc_ev0_regnum = -1;
2892 tdep->ppc_ev31_regnum = -1;
867e2dc5
JB
2893 tdep->ppc_acc_regnum = -1;
2894 tdep->ppc_spefscr_regnum = -1;
2188cbdd 2895
c8001721
EZ
2896 set_gdbarch_pc_regnum (gdbarch, 64);
2897 set_gdbarch_sp_regnum (gdbarch, 1);
0ba6dca9 2898 set_gdbarch_deprecated_fp_regnum (gdbarch, 1);
afd48b75 2899 if (sysv_abi && wordsize == 8)
05580c65 2900 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
e754ae69 2901 else if (sysv_abi && wordsize == 4)
05580c65 2902 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
afd48b75
AC
2903 else
2904 {
2905 set_gdbarch_deprecated_extract_return_value (gdbarch, rs6000_extract_return_value);
a3c001ce 2906 set_gdbarch_store_return_value (gdbarch, rs6000_store_return_value);
afd48b75 2907 }
c8001721 2908
baffbae0
JB
2909 /* Set lr_frame_offset. */
2910 if (wordsize == 8)
2911 tdep->lr_frame_offset = 16;
2912 else if (sysv_abi)
2913 tdep->lr_frame_offset = 4;
2914 else
2915 tdep->lr_frame_offset = 8;
2916
1fcc0bb8
EZ
2917 if (v->arch == bfd_arch_powerpc)
2918 switch (v->mach)
2919 {
2920 case bfd_mach_ppc:
2921 tdep->ppc_vr0_regnum = 71;
2922 tdep->ppc_vrsave_regnum = 104;
2923 break;
2924 case bfd_mach_ppc_7400:
2925 tdep->ppc_vr0_regnum = 119;
54c2a1e6 2926 tdep->ppc_vrsave_regnum = 152;
c8001721
EZ
2927 break;
2928 case bfd_mach_ppc_e500:
338ef23d 2929 tdep->ppc_gp0_regnum = 41;
c8001721
EZ
2930 tdep->ppc_toc_regnum = -1;
2931 tdep->ppc_ps_regnum = 1;
2932 tdep->ppc_cr_regnum = 2;
2933 tdep->ppc_lr_regnum = 3;
2934 tdep->ppc_ctr_regnum = 4;
2935 tdep->ppc_xer_regnum = 5;
2936 tdep->ppc_ev0_regnum = 7;
2937 tdep->ppc_ev31_regnum = 38;
383f0f5b
JB
2938 tdep->ppc_fp0_regnum = -1;
2939 tdep->ppc_fpscr_regnum = -1;
867e2dc5
JB
2940 tdep->ppc_acc_regnum = 39;
2941 tdep->ppc_spefscr_regnum = 40;
c8001721 2942 set_gdbarch_pc_regnum (gdbarch, 0);
338ef23d 2943 set_gdbarch_sp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
0ba6dca9 2944 set_gdbarch_deprecated_fp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
c8001721
EZ
2945 set_gdbarch_pseudo_register_read (gdbarch, e500_pseudo_register_read);
2946 set_gdbarch_pseudo_register_write (gdbarch, e500_pseudo_register_write);
1fcc0bb8 2947 break;
1fcc0bb8
EZ
2948 }
2949
338ef23d
AC
2950 /* Sanity check on registers. */
2951 gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0);
2952
56a6dfb9
KB
2953 /* Select instruction printer. */
2954 if (arch == power)
9364a0ef 2955 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
56a6dfb9 2956 else
9364a0ef 2957 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
7495d1dc 2958
7a78ae4e 2959 set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
7a78ae4e
ND
2960
2961 set_gdbarch_num_regs (gdbarch, v->nregs);
c8001721 2962 set_gdbarch_num_pseudo_regs (gdbarch, v->npregs);
7a78ae4e 2963 set_gdbarch_register_name (gdbarch, rs6000_register_name);
691d145a 2964 set_gdbarch_register_type (gdbarch, rs6000_register_type);
7a78ae4e
ND
2965
2966 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
2967 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
2968 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2969 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
2970 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
2971 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2972 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
ab9fe00e
KB
2973 if (sysv_abi)
2974 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
2975 else
2976 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4e409299 2977 set_gdbarch_char_signed (gdbarch, 0);
7a78ae4e 2978
11269d7e 2979 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
8b148df9
AC
2980 if (sysv_abi && wordsize == 8)
2981 /* PPC64 SYSV. */
2982 set_gdbarch_frame_red_zone_size (gdbarch, 288);
2983 else if (!sysv_abi && wordsize == 4)
5bffac25
AC
2984 /* PowerOpen / AIX 32 bit. The saved area or red zone consists of
2985 19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
2986 Problem is, 220 isn't frame (16 byte) aligned. Round it up to
2987 224. */
2988 set_gdbarch_frame_red_zone_size (gdbarch, 224);
7a78ae4e 2989
691d145a
JB
2990 set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
2991 set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
2992 set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
2993
18ed0c4e
JB
2994 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
2995 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
2ea5f656
KB
2996 /* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments()
2997 is correct for the SysV ABI when the wordsize is 8, but I'm also
2998 fairly certain that ppc_sysv_abi_push_arguments() will give even
2999 worse results since it only works for 32-bit code. So, for the moment,
3000 we're better off calling rs6000_push_arguments() since it works for
3001 64-bit code. At some point in the future, this matter needs to be
3002 revisited. */
3003 if (sysv_abi && wordsize == 4)
77b2b6d4 3004 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
8be9034a
AC
3005 else if (sysv_abi && wordsize == 8)
3006 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
9aa1e687 3007 else
77b2b6d4 3008 set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
7a78ae4e 3009
74055713 3010 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address);
7a78ae4e
ND
3011
3012 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
3013 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
7a78ae4e
ND
3014 set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
3015
6066c3de
AC
3016 /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN"
3017 for the descriptor and ".FN" for the entry-point -- a user
3018 specifying "break FN" will unexpectedly end up with a breakpoint
3019 on the descriptor and not the function. This architecture method
3020 transforms any breakpoints on descriptors into breakpoints on the
3021 corresponding entry point. */
3022 if (sysv_abi && wordsize == 8)
3023 set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address);
3024
7a78ae4e
ND
3025 /* Not sure on this. FIXMEmgo */
3026 set_gdbarch_frame_args_skip (gdbarch, 8);
3027
05580c65 3028 if (!sysv_abi)
7b112f9c 3029 set_gdbarch_use_struct_convention (gdbarch,
b9ff3018 3030 rs6000_use_struct_convention);
8e0662df 3031
15813d3f
AC
3032 if (!sysv_abi)
3033 {
3034 /* Handle RS/6000 function pointers (which are really function
3035 descriptors). */
f517ea4e
PS
3036 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
3037 rs6000_convert_from_func_ptr_addr);
9aa1e687 3038 }
7a78ae4e 3039
143985b7
AF
3040 /* Helpers for function argument information. */
3041 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
3042
7b112f9c 3043 /* Hook in ABI-specific overrides, if they have been registered. */
4be87837 3044 gdbarch_init_osabi (info, gdbarch);
7b112f9c 3045
61a65099
KB
3046 switch (info.osabi)
3047 {
3048 case GDB_OSABI_NETBSD_AOUT:
3049 case GDB_OSABI_NETBSD_ELF:
3050 case GDB_OSABI_UNKNOWN:
3051 case GDB_OSABI_LINUX:
3052 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3053 frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3054 set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3055 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3056 break;
3057 default:
61a65099 3058 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
81332287
KB
3059
3060 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3061 frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3062 set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3063 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
61a65099
KB
3064 }
3065
ef5200c1
AC
3066 if (from_xcoff_exec)
3067 {
3068 /* NOTE: jimix/2003-06-09: This test should really check for
3069 GDB_OSABI_AIX when that is defined and becomes
3070 available. (Actually, once things are properly split apart,
3071 the test goes away.) */
3072 /* RS6000/AIX does not support PT_STEP. Has to be simulated. */
3073 set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step);
3074 }
3075
7a78ae4e 3076 return gdbarch;
c906108c
SS
3077}
3078
7b112f9c
JT
3079static void
3080rs6000_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3081{
3082 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3083
3084 if (tdep == NULL)
3085 return;
3086
4be87837 3087 /* FIXME: Dump gdbarch_tdep. */
7b112f9c
JT
3088}
3089
1fcc0bb8
EZ
3090static struct cmd_list_element *info_powerpc_cmdlist = NULL;
3091
3092static void
3093rs6000_info_powerpc_command (char *args, int from_tty)
3094{
3095 help_list (info_powerpc_cmdlist, "info powerpc ", class_info, gdb_stdout);
3096}
3097
c906108c
SS
3098/* Initialization code. */
3099
a78f21af 3100extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */
b9362cc7 3101
c906108c 3102void
fba45db2 3103_initialize_rs6000_tdep (void)
c906108c 3104{
7b112f9c
JT
3105 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
3106 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
1fcc0bb8
EZ
3107
3108 /* Add root prefix command for "info powerpc" commands */
3109 add_prefix_cmd ("powerpc", class_info, rs6000_info_powerpc_command,
3110 "Various POWERPC info specific commands.",
3111 &info_powerpc_cmdlist, "info powerpc ", 0, &infolist);
c906108c 3112}
This page took 1.197396 seconds and 4 git commands to generate.