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