]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/rs6000-tdep.c
Include PowerPC SPR numbers for special-purpose registers.
[thirdparty/binutils-gdb.git] / gdb / rs6000-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
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.
6
7 This file is part of GDB.
8
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.
13
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.
18
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. */
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"
31 #include "objfiles.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "regset.h"
35 #include "doublest.h"
36 #include "value.h"
37 #include "parser-defs.h"
38 #include "osabi.h"
39 #include "infcall.h"
40
41 #include "libbfd.h" /* for bfd_default_set_arch_mach */
42 #include "coff/internal.h" /* for libcoff.h */
43 #include "libcoff.h" /* for xcoff_data */
44 #include "coff/xcoff.h"
45 #include "libxcoff.h"
46
47 #include "elf-bfd.h"
48
49 #include "solib-svr4.h"
50 #include "ppc-tdep.h"
51
52 #include "gdb_assert.h"
53 #include "dis-asm.h"
54
55 #include "trad-frame.h"
56 #include "frame-unwind.h"
57 #include "frame-base.h"
58
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
70 /* To be used by skip_prologue. */
71
72 struct 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 */
79 int saved_vr; /* smallest # of saved vr */
80 int saved_ev; /* smallest # of saved ev */
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 */
86 int vr_offset; /* offset of saved vrs from prev sp */
87 int ev_offset; /* offset of saved evs from prev sp */
88 int lr_offset; /* offset of saved lr */
89 int cr_offset; /* offset of saved cr */
90 int vrsave_offset; /* offset of saved vrsave register */
91 };
92
93 /* Description of a single register. */
94
95 struct 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 */
101 unsigned char pseudo; /* whether register is pseudo */
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. */
105 };
106
107 /* Breakpoint shadows for the single step instructions will be kept here. */
108
109 static 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 }
116 stepBreaks[2];
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
122 CORE_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
127 void (*rs6000_set_host_arch_hook) (int) = NULL;
128
129 /* Static function prototypes */
130
131 static CORE_ADDR branch_dest (int opcode, int instr, CORE_ADDR pc,
132 CORE_ADDR safety);
133 static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR,
134 struct rs6000_framedata *);
135
136 /* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
137 int
138 altivec_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
147
148 /* Return true if REGNO is an SPE register, false otherwise. */
149 int
150 spe_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
175 /* Return non-zero if the architecture described by GDBARCH has
176 floating-point registers (f0 --- f31 and fpscr). */
177 int
178 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
179 {
180 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
181
182 return (tdep->ppc_fp0_regnum >= 0
183 && tdep->ppc_fpscr_regnum >= 0);
184 }
185 \f
186
187 /* Register set support functions. */
188
189 static void
190 ppc_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
197 static void
198 ppc_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
209 void
210 ppc_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
219 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
220 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
221 i++, offset += 4)
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
252 void
253 ppc_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
262 gdb_assert (ppc_floating_point_unit_p (gdbarch));
263
264 offset = offsets->f0_offset;
265 for (i = tdep->ppc_fp0_regnum;
266 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
267 i++, offset += 4)
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
283 void
284 ppc_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;
295 for (i = tdep->ppc_gp0_regnum;
296 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
297 i++, offset += 4)
298 {
299 if (regnum == -1 || regnum == i)
300 ppc_collect_reg (regcache, i, gregs, offset);
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
330 void
331 ppc_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
341 gdb_assert (ppc_floating_point_unit_p (gdbarch));
342
343 offset = offsets->f0_offset;
344 for (i = tdep->ppc_fp0_regnum;
345 i <= tdep->ppc_fp0_regnum + ppc_num_fprs;
346 i++, offset += 4)
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
357
358 /* Read a LEN-byte address from debugged memory address MEMADDR. */
359
360 static CORE_ADDR
361 read_memory_addr (CORE_ADDR memaddr, int len)
362 {
363 return read_memory_unsigned_integer (memaddr, len);
364 }
365
366 static CORE_ADDR
367 rs6000_skip_prologue (CORE_ADDR pc)
368 {
369 struct rs6000_framedata frame;
370 pc = skip_prologue (pc, 0, &frame);
371 return pc;
372 }
373
374
375 /* Fill in fi->saved_regs */
376
377 struct 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. */
384 CORE_ADDR initial_sp; /* initial stack pointer. */
385 };
386
387 /* Get the ith function argument for the current function. */
388 static CORE_ADDR
389 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi,
390 struct type *type)
391 {
392 CORE_ADDR addr;
393 get_frame_register (frame, 3 + argi, &addr);
394 return addr;
395 }
396
397 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
398
399 static CORE_ADDR
400 branch_dest (int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety)
401 {
402 CORE_ADDR dest;
403 int immediate;
404 int absolute;
405 int ext_op;
406
407 absolute = (int) ((instr >> 1) & 1);
408
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 {
432 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
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)
444 dest = read_memory_addr (get_frame_base (fi) + SIG_FRAME_PC_OFFSET,
445 gdbarch_tdep (current_gdbarch)->wordsize);
446 }
447 }
448
449 else if (ext_op == 528) /* br cond to count reg */
450 {
451 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum) & ~3;
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)
457 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
458 }
459 else
460 return -1;
461 break;
462
463 default:
464 return -1;
465 }
466 return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
467 }
468
469
470 /* Sequence of bytes for breakpoint instruction. */
471
472 const static unsigned char *
473 rs6000_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
474 {
475 static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
476 static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
477 *bp_size = 4;
478 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
479 return big_breakpoint;
480 else
481 return little_breakpoint;
482 }
483
484
485 /* AIX does not support PT_STEP. Simulate it. */
486
487 void
488 rs6000_software_single_step (enum target_signal signal,
489 int insert_breakpoints_p)
490 {
491 CORE_ADDR dummy;
492 int breakp_sz;
493 const char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz);
494 int ii, insn;
495 CORE_ADDR loc;
496 CORE_ADDR breaks[2];
497 int opcode;
498
499 if (insert_breakpoints_p)
500 {
501
502 loc = read_pc ();
503
504 insn = read_memory_integer (loc, 4);
505
506 breaks[0] = loc + breakp_sz;
507 opcode = insn >> 26;
508 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
509
510 /* Don't put two breakpoints on the same address. */
511 if (breaks[1] == breaks[0])
512 breaks[1] = -1;
513
514 stepBreaks[1].address = 0;
515
516 for (ii = 0; ii < 2; ++ii)
517 {
518
519 /* ignore invalid breakpoint. */
520 if (breaks[ii] == -1)
521 continue;
522 target_insert_breakpoint (breaks[ii], stepBreaks[ii].data);
523 stepBreaks[ii].address = breaks[ii];
524 }
525
526 }
527 else
528 {
529
530 /* remove step breakpoints. */
531 for (ii = 0; ii < 2; ++ii)
532 if (stepBreaks[ii].address != 0)
533 target_remove_breakpoint (stepBreaks[ii].address,
534 stepBreaks[ii].data);
535 }
536 errno = 0; /* FIXME, don't ignore errors! */
537 /* What errors? {read,write}_memory call error(). */
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:
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.
551 - saved_vr is the number of the first saved vr.
552 - saved_ev is the number of the first saved ev.
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.
557 - vr_offset is the offset of the first saved vr from the previous frame.
558 - ev_offset is the offset of the first saved ev from the previous frame.
559 - lr_offset is the offset of the saved lr
560 - cr_offset is the offset of the saved cr
561 - vrsave_offset is the offset of the saved vrsave register
562 */
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
571 /* Limit the number of skipped non-prologue instructions, as the examining
572 of the prologue is expensive. */
573 static 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. */
581
582 /* FIXME: cagney/2004-02-14: This function and logic have largely been
583 superseded by skip_prologue_using_sal. */
584
585 static CORE_ADDR
586 refine_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
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
631 static int
632 store_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 }
696
697 static CORE_ADDR
698 skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
699 {
700 CORE_ADDR orig_pc = pc;
701 CORE_ADDR last_prologue_pc = pc;
702 CORE_ADDR li_found_pc = 0;
703 char buf[4];
704 unsigned long op;
705 long offset = 0;
706 long vr_saved_offset = 0;
707 int lr_reg = -1;
708 int cr_reg = -1;
709 int vr_reg = -1;
710 int ev_reg = -1;
711 long ev_offset = 0;
712 int vrsave_reg = -1;
713 int reg;
714 int framep = 0;
715 int minimal_toc_loaded = 0;
716 int prev_insn_was_prologue_insn = 1;
717 int num_skip_non_prologue_insns = 0;
718 int r0_contains_arg = 0;
719 const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (current_gdbarch);
720 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
721
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);
736
737 memset (fdata, 0, sizeof (struct rs6000_framedata));
738 fdata->saved_gpr = -1;
739 fdata->saved_fpr = -1;
740 fdata->saved_vr = -1;
741 fdata->saved_ev = -1;
742 fdata->alloca_reg = -1;
743 fdata->frameless = 1;
744 fdata->nosavedpc = 1;
745
746 for (;; pc += 4)
747 {
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;
754
755 /* Stop scanning if we've hit the limit. */
756 if (lim_pc != 0 && pc >= lim_pc)
757 break;
758
759 prev_insn_was_prologue_insn = 1;
760
761 /* Fetch the instruction and convert it to an integer. */
762 if (target_read_memory (pc, buf, 4))
763 break;
764 op = extract_signed_integer (buf, 4);
765
766 if ((op & 0xfc1fffff) == 0x7c0802a6)
767 { /* mflr Rx */
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);
787 if (lr_reg == 0)
788 r0_contains_arg = 0;
789 continue;
790 }
791 else if ((op & 0xfc1fffff) == 0x7c000026)
792 { /* mfcr Rx */
793 cr_reg = (op & 0x03e00000);
794 if (cr_reg == 0)
795 r0_contains_arg = 0;
796 continue;
797
798 }
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;
808
809 }
810 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
811 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
812 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
813 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
814 {
815
816 reg = GET_SRC_REG (op);
817 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
818 {
819 fdata->saved_gpr = reg;
820 if ((op & 0xfc1f0003) == 0xf8010000)
821 op &= ~3UL;
822 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
823 }
824 continue;
825
826 }
827 else if ((op & 0xffff0000) == 0x60000000)
828 {
829 /* nop */
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
836 }
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;
842 r0_contains_arg = 0;
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;
851 r0_contains_arg = 0;
852 continue;
853
854 }
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;
864 fdata->nosavedpc = 0;
865 lr_reg = 0;
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 }
872 continue;
873
874 }
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;
884 cr_reg = 0;
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 }
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
904 }
905 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
906 in V.4 -mminimal-toc */
907 (op & 0xffff0000) == 0x3bde0000)
908 { /* addi 30,30,foo@l */
909 continue;
910
911 }
912 else if ((op & 0xfc000001) == 0x48000001)
913 { /* bl foo,
914 to save fprs??? */
915
916 fdata->frameless = 0;
917 /* Don't skip over the subroutine call if it is not within
918 the first three instructions of the prologue. */
919 if ((pc - orig_pc) > 8)
920 break;
921
922 op = read_memory_integer (pc + 4, 4);
923
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. */
928
929 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
930 break; /* don't skip over
931 this branch */
932 continue;
933
934 }
935 /* update stack pointer */
936 else if ((op & 0xfc1f0000) == 0x94010000)
937 { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */
938 fdata->frameless = 0;
939 fdata->offset = SIGNED_SHORT (op);
940 offset = fdata->offset;
941 continue;
942 }
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 */
960 fdata->frameless = 0;
961 offset = fdata->offset;
962 continue;
963 }
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,... */
967 && !minimal_toc_loaded)
968 {
969 minimal_toc_loaded = 1;
970 continue;
971
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) &&
978 ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
979 {
980 continue;
981
982 /* store parameters in stack */
983 }
984 /* Move parameters from argument registers to temporary register. */
985 else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
986 {
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;
996 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
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;
1005 fdata->alloca_reg = (tdep->ppc_gp0_regnum
1006 + ((op & ~0x38010000) >> 21));
1007 continue;
1008 }
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 */
1050 /* 001110 01110 00000 iiii iiii iiii iiii */
1051 else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */
1052 || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */
1053 {
1054 if ((op & 0xffff0000) == 0x38000000)
1055 r0_contains_arg = 0;
1056 li_found_pc = pc;
1057 vr_saved_offset = SIGNED_SHORT (op);
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;
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. */
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
1183 else
1184 {
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 */
1199 /* Never skip branches. */
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;
1210 }
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.
1220 We'd like to skip over it as well. Fortunately, xlc does some extra
1221 work before calling a function right after a prologue, thus we can
1222 single out such gcc2 behaviour. */
1223
1224
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) */
1231
1232 /* Check and see if we are in main. If so, skip over this
1233 initializer function as well. */
1234
1235 tmp = find_pc_misc_function (pc);
1236 if (tmp >= 0
1237 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
1238 return pc + 8;
1239 }
1240 }
1241 #endif /* 0 */
1242
1243 fdata->offset = -fdata->offset;
1244 return last_prologue_pc;
1245 }
1246
1247
1248 /*************************************************************************
1249 Support for creating pushing a dummy frame into the stack, and popping
1250 frames, etc.
1251 *************************************************************************/
1252
1253
1254 /* All the ABI's require 16 byte alignment. */
1255 static CORE_ADDR
1256 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1257 {
1258 return (addr & -16);
1259 }
1260
1261 /* Pass the arguments in either registers, or in the stack. In RS/6000,
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
1264 passed in r3..r10 registers. float and double parameters are
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
1267 parameter is copied into registers, the other half is pushed into
1268 stack.
1269
1270 Stack must be aligned on 64-bit boundaries when synthesizing
1271 function calls.
1272
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,
1275 starting from r4. */
1276
1277 static CORE_ADDR
1278 rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
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)
1282 {
1283 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1284 int ii;
1285 int len = 0;
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 */
1290 int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
1291 CORE_ADDR func_addr = find_function_addr (function, NULL);
1292
1293 struct value *arg = 0;
1294 struct type *type;
1295
1296 CORE_ADDR saved_sp;
1297
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
1303 /* The first eight words of ther arguments are passed in registers.
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 }
1317
1318 /*
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 */
1336
1337 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
1338 {
1339 int reg_size = DEPRECATED_REGISTER_RAW_SIZE (ii + 3);
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
1348 /* Floating point arguments are passed in fpr's, as well as gpr's.
1349 There are 13 fpr's reserved for passing parameters. At this point
1350 there is no way we would run out of them. */
1351
1352 if (len > 8)
1353 printf_unfiltered ("Fatal Error: a floating point parameter "
1354 "#%d with a size > 8 is found!\n", argno);
1355
1356 memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE
1357 (tdep->ppc_fp0_regnum + 1 + f_argno)],
1358 VALUE_CONTENTS (arg),
1359 len);
1360 ++f_argno;
1361 }
1362
1363 if (len > reg_size)
1364 {
1365
1366 /* Argument takes more than one register. */
1367 while (argbytes < len)
1368 {
1369 memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0,
1370 reg_size);
1371 memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)],
1372 ((char *) VALUE_CONTENTS (arg)) + argbytes,
1373 (len - argbytes) > reg_size
1374 ? reg_size : len - argbytes);
1375 ++ii, argbytes += reg_size;
1376
1377 if (ii >= 8)
1378 goto ran_out_of_registers_for_arguments;
1379 }
1380 argbytes = 0;
1381 --ii;
1382 }
1383 else
1384 {
1385 /* Argument can fit in one register. No problem. */
1386 int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
1387 memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, reg_size);
1388 memcpy ((char *)&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)] + adj,
1389 VALUE_CONTENTS (arg), len);
1390 }
1391 ++argno;
1392 }
1393
1394 ran_out_of_registers_for_arguments:
1395
1396 saved_sp = read_sp ();
1397
1398 /* Location for 8 parameters are always reserved. */
1399 sp -= wordsize * 8;
1400
1401 /* Another six words for back chain, TOC register, link register, etc. */
1402 sp -= wordsize * 6;
1403
1404 /* Stack pointer must be quadword aligned. */
1405 sp &= -16;
1406
1407 /* If there are more arguments, allocate space for them in
1408 the stack, then push them starting from the ninth one. */
1409
1410 if ((argno < nargs) || argbytes)
1411 {
1412 int space = 0, jj;
1413
1414 if (argbytes)
1415 {
1416 space += ((len - argbytes + 3) & -4);
1417 jj = argno + 1;
1418 }
1419 else
1420 jj = argno;
1421
1422 for (; jj < nargs; ++jj)
1423 {
1424 struct value *val = args[jj];
1425 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
1426 }
1427
1428 /* Add location required for the rest of the parameters. */
1429 space = (space + 15) & -16;
1430 sp -= space;
1431
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
1440 /* If the last argument copied into the registers didn't fit there
1441 completely, push the rest of it into stack. */
1442
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 }
1451
1452 /* Push the rest of the arguments into stack. */
1453 for (; argno < nargs; ++argno)
1454 {
1455
1456 arg = args[argno];
1457 type = check_typedef (VALUE_TYPE (arg));
1458 len = TYPE_LENGTH (type);
1459
1460
1461 /* Float types should be passed in fpr's, as well as in the
1462 stack. */
1463 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
1464 {
1465
1466 if (len > 8)
1467 printf_unfiltered ("Fatal Error: a floating point parameter"
1468 " #%d with a size > 8 is found!\n", argno);
1469
1470 memcpy (&(deprecated_registers
1471 [DEPRECATED_REGISTER_BYTE
1472 (tdep->ppc_fp0_regnum + 1 + f_argno)]),
1473 VALUE_CONTENTS (arg),
1474 len);
1475 ++f_argno;
1476 }
1477
1478 write_memory (sp + 24 + (ii * 4),
1479 (char *) VALUE_CONTENTS (arg),
1480 len);
1481 ii += ((len + 3) & -4) / 4;
1482 }
1483 }
1484
1485 /* Set the stack pointer. According to the ABI, the SP is meant to
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. */
1491 regcache_raw_write_signed (regcache, SP_REGNUM, sp);
1492
1493 /* Set back chain properly. */
1494 store_unsigned_integer (tmp_buffer, 4, saved_sp);
1495 write_memory (sp, tmp_buffer, 4);
1496
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
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
1509 target_store_registers (-1);
1510 return sp;
1511 }
1512
1513 /* PowerOpen always puts structures in memory. Vectors, which were
1514 added later, do get returned in a register though. */
1515
1516 static int
1517 rs6000_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
1525 static void
1526 rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
1527 {
1528 int offset = 0;
1529 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1530
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
1536 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1537 {
1538
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
1541 necessary. */
1542
1543 convert_typed_floating (&regbuf[DEPRECATED_REGISTER_BYTE
1544 (tdep->ppc_fp0_regnum + 1)],
1545 builtin_type_double,
1546 valbuf,
1547 valtype);
1548 }
1549 else if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY
1550 && TYPE_LENGTH (valtype) == 16
1551 && TYPE_VECTOR (valtype))
1552 {
1553 memcpy (valbuf, regbuf + DEPRECATED_REGISTER_BYTE (tdep->ppc_vr0_regnum + 2),
1554 TYPE_LENGTH (valtype));
1555 }
1556 else
1557 {
1558 /* return value is copied starting from r3. */
1559 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
1560 && TYPE_LENGTH (valtype) < DEPRECATED_REGISTER_RAW_SIZE (3))
1561 offset = DEPRECATED_REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
1562
1563 memcpy (valbuf,
1564 regbuf + DEPRECATED_REGISTER_BYTE (3) + offset,
1565 TYPE_LENGTH (valtype));
1566 }
1567 }
1568
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
1591 int
1592 rs6000_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
1604 indirect function call trampolines).
1605
1606 3. Skip bigtoc fixup code.
1607
1608 Result is desired PC to step until, or NULL if we are not in
1609 code that should be skipped. */
1610
1611 CORE_ADDR
1612 rs6000_skip_trampoline_code (CORE_ADDR pc)
1613 {
1614 unsigned int ii, op;
1615 int rel;
1616 CORE_ADDR solib_target_pc;
1617 struct minimal_symbol *msymbol;
1618
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
1629 };
1630
1631 /* Check for bigtoc fixup code. */
1632 msymbol = lookup_minimal_symbol_by_pc (pc);
1633 if (msymbol && rs6000_in_solib_return_trampoline (pc, DEPRECATED_SYMBOL_NAME (msymbol)))
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
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
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 */
1658 pc = read_memory_addr (ii, gdbarch_tdep (current_gdbarch)->wordsize); /* (r11) value */
1659 return pc;
1660 }
1661
1662 /* Return the size of register REG when words are WORDSIZE bytes long. If REG
1663 isn't available with that word size, return 0. */
1664
1665 static int
1666 regsize (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
1672 in the current architecture. */
1673
1674 static const char *
1675 rs6000_register_name (int n)
1676 {
1677 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1678 const struct reg *reg = tdep->regs + n;
1679
1680 if (!regsize (reg, tdep->wordsize))
1681 return NULL;
1682 return reg->name;
1683 }
1684
1685 /* Return the GDB type object for the "standard" data type
1686 of data in register N. */
1687
1688 static struct type *
1689 rs6000_register_type (struct gdbarch *gdbarch, int n)
1690 {
1691 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1692 const struct reg *reg = tdep->regs + n;
1693
1694 if (reg->fpr)
1695 return builtin_type_double;
1696 else
1697 {
1698 int size = regsize (reg, tdep->wordsize);
1699 switch (size)
1700 {
1701 case 0:
1702 return builtin_type_int0;
1703 case 4:
1704 return builtin_type_uint32;
1705 case 8:
1706 if (tdep->ppc_ev0_regnum <= n && n <= tdep->ppc_ev31_regnum)
1707 return builtin_type_vec64;
1708 else
1709 return builtin_type_uint64;
1710 break;
1711 case 16:
1712 return builtin_type_vec128;
1713 break;
1714 default:
1715 internal_error (__FILE__, __LINE__, "Register %d size %d unknown",
1716 n, size);
1717 }
1718 }
1719 }
1720
1721 /* The register format for RS/6000 floating point registers is always
1722 double, we need a conversion if the memory format is float. */
1723
1724 static int
1725 rs6000_convert_register_p (int regnum, struct type *type)
1726 {
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));
1732 }
1733
1734 static void
1735 rs6000_register_to_value (struct frame_info *frame,
1736 int regnum,
1737 struct type *type,
1738 void *to)
1739 {
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);
1745
1746 get_frame_register (frame, regnum, from);
1747 convert_typed_floating (from, builtin_type_double, to, type);
1748 }
1749
1750 static void
1751 rs6000_value_to_register (struct frame_info *frame,
1752 int regnum,
1753 struct type *type,
1754 const void *from)
1755 {
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);
1764 }
1765
1766 static void
1767 e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
1768 int reg_nr, void *buffer)
1769 {
1770 int base_regnum;
1771 int offset = 0;
1772 char temp_buffer[MAX_REGISTER_SIZE];
1773 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1774
1775 if (reg_nr >= tdep->ppc_gp0_regnum
1776 && reg_nr < tdep->ppc_gp0_regnum + ppc_num_gprs)
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
1789 static void
1790 e500_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;
1795 char temp_buffer[MAX_REGISTER_SIZE];
1796 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1797
1798 if (reg_nr >= tdep->ppc_gp0_regnum
1799 && reg_nr < tdep->ppc_gp0_regnum + ppc_num_gprs)
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
1817 /* Convert a DBX STABS register number to a GDB register number. */
1818 static int
1819 rs6000_stab_reg_to_regnum (int num)
1820 {
1821 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1822
1823 if (0 <= num && num <= 31)
1824 return tdep->ppc_gp0_regnum + num;
1825 else if (32 <= num && num <= 63)
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. */
1829 return tdep->ppc_fp0_regnum + (num - 32);
1830 else if (77 <= num && num <= 108)
1831 return tdep->ppc_vr0_regnum + (num - 77);
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;
1847 case 110:
1848 return tdep->ppc_vrsave_regnum - 1; /* vscr */
1849 case 111:
1850 return tdep->ppc_acc_regnum;
1851 case 112:
1852 return tdep->ppc_spefscr_regnum;
1853 default:
1854 return num;
1855 }
1856 }
1857
1858
1859 /* Convert a Dwarf 2 register number to a GDB register number. */
1860 static int
1861 rs6000_dwarf2_reg_to_regnum (int num)
1862 {
1863 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1864
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 }
1898 }
1899
1900
1901 static void
1902 rs6000_store_return_value (struct type *type,
1903 struct regcache *regcache,
1904 const void *valbuf)
1905 {
1906 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1907 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1908 int regnum = -1;
1909
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. */
1913 gdb_assert (ppc_floating_point_unit_p (gdbarch));
1914
1915 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1916 /* Floating point values are returned starting from FPR1 and up.
1917 Say a double_double_double type could be returned in
1918 FPR1/FPR2/FPR3 triple. */
1919 regnum = tdep->ppc_fp0_regnum + 1;
1920 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1921 {
1922 if (TYPE_LENGTH (type) == 16
1923 && TYPE_VECTOR (type))
1924 regnum = tdep->ppc_vr0_regnum + 2;
1925 else
1926 gdb_assert (0);
1927 }
1928 else
1929 /* Everything else is returned in GPR3 and up. */
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 }
1947 }
1948
1949
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
1954 static CORE_ADDR
1955 rs6000_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,
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). */
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;
1969 }
1970
1971 /* Hook called when a new child process is started. */
1972
1973 void
1974 rs6000_create_inferior (int pid)
1975 {
1976 if (rs6000_set_host_arch_hook)
1977 rs6000_set_host_arch_hook (pid);
1978 }
1979 \f
1980 /* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
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
1993 function pointers), find_function_addr uses this function to get the
1994 function address from a function pointer. */
1995
1996 /* Return real function address if ADDR (a function pointer) is in the data
1997 space and is therefore a special function pointer. */
1998
1999 static CORE_ADDR
2000 rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
2001 CORE_ADDR addr,
2002 struct target_ops *targ)
2003 {
2004 struct obj_section *s;
2005
2006 s = find_pc_section (addr);
2007 if (s && s->the_bfd_section->flags & SEC_CODE)
2008 return addr;
2009
2010 /* ADDR is in the data space, so it's a special function pointer. */
2011 return read_memory_addr (addr, gdbarch_tdep (current_gdbarch)->wordsize);
2012 }
2013 \f
2014
2015 /* Handling the various POWER/PowerPC variants. */
2016
2017
2018 /* The arrays here called registers_MUMBLE hold information about available
2019 registers.
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
2031 tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1
2032 pbu1 pbl2 pbu2
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
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. */
2051
2052 /* Convenience macros for populating register arrays. */
2053
2054 /* Within another macro, convert S to a string. */
2055
2056 #define STR(s) #s
2057
2058 /* Return a struct reg defining register NAME that's 32 bits on 32-bit systems
2059 and 64 bits on 64-bit systems. */
2060 #define R(name) { STR(name), 4, 8, 0, 0, -1 }
2061
2062 /* Return a struct reg defining register NAME that's 32 bits on all
2063 systems. */
2064 #define R4(name) { STR(name), 4, 4, 0, 0, -1 }
2065
2066 /* Return a struct reg defining register NAME that's 64 bits on all
2067 systems. */
2068 #define R8(name) { STR(name), 8, 8, 0, 0, -1 }
2069
2070 /* Return a struct reg defining register NAME that's 128 bits on all
2071 systems. */
2072 #define R16(name) { STR(name), 16, 16, 0, 0, -1 }
2073
2074 /* Return a struct reg defining floating-point register NAME. */
2075 #define F(name) { STR(name), 8, 8, 1, 0, -1 }
2076
2077 /* Return a struct reg defining a pseudo register NAME. */
2078 #define P(name) { STR(name), 4, 8, 0, 1, -1 }
2079
2080 /* Return a struct reg defining register NAME that's 32 bits on 32-bit
2081 systems and that doesn't exist on 64-bit systems. */
2082 #define R32(name) { STR(name), 4, 0, 0, 0, -1 }
2083
2084 /* Return a struct reg defining register NAME that's 64 bits on 64-bit
2085 systems and that doesn't exist on 32-bit systems. */
2086 #define R64(name) { STR(name), 0, 8, 0, 0, -1 }
2087
2088 /* Return a struct reg placeholder for a register that doesn't exist. */
2089 #define R0 { 0, 0, 0, 0, 0, -1 }
2090
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
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 \
2122 /* 66 */ R4(cr), S(lr), S(ctr), S4(xer), R4(fpscr)
2123
2124 /* UISA-level SPRs for PowerPC without floating point support. */
2125 #define PPC_UISA_NOFP_SPRS \
2126 /* 66 */ R4(cr), S(lr), S(ctr), S4(xer), R0
2127
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 \
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)
2146
2147 /* AltiVec registers. */
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
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), \
2167 /* 24 */ P(r24),P(r25),P(r26),P(r27),P(r28),P(r29),P(r30),P(r31)
2168
2169 /* IBM POWER (pre-PowerPC) architecture, user-level view. We only cover
2170 user-level SPR's. */
2171 static const struct reg registers_power[] =
2172 {
2173 COMMON_UISA_REGS,
2174 /* 66 */ R4(cnd), S(lr), S(cnt), S4(xer), S4(mq),
2175 /* 71 */ R4(fpscr)
2176 };
2177
2178 /* PowerPC UISA - a PPC processor as viewed by user-level code. A UISA-only
2179 view of the PowerPC. */
2180 static const struct reg registers_powerpc[] =
2181 {
2182 COMMON_UISA_REGS,
2183 PPC_UISA_SPRS,
2184 PPC_ALTIVEC_REGS
2185 };
2186
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. */
2200 static const struct reg registers_403[] =
2201 {
2202 COMMON_UISA_REGS,
2203 PPC_UISA_SPRS,
2204 PPC_SEGMENT_REGS,
2205 PPC_OEA_SPRS,
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)
2212 };
2213
2214 /* IBM PowerPC 403GC.
2215 See the comments about 'tcr' for the 403, above. */
2216 static const struct reg registers_403GC[] =
2217 {
2218 COMMON_UISA_REGS,
2219 PPC_UISA_SPRS,
2220 PPC_SEGMENT_REGS,
2221 PPC_OEA_SPRS,
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)
2230 };
2231
2232 /* Motorola PowerPC 505. */
2233 static const struct reg registers_505[] =
2234 {
2235 COMMON_UISA_REGS,
2236 PPC_UISA_SPRS,
2237 PPC_SEGMENT_REGS,
2238 PPC_OEA_SPRS,
2239 /* 119 */ S(eie), S(eid), S(nri)
2240 };
2241
2242 /* Motorola PowerPC 860 or 850. */
2243 static const struct reg registers_860[] =
2244 {
2245 COMMON_UISA_REGS,
2246 PPC_UISA_SPRS,
2247 PPC_SEGMENT_REGS,
2248 PPC_OEA_SPRS,
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)
2261 };
2262
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
2265 register is the stub's problem. */
2266 static const struct reg registers_601[] =
2267 {
2268 COMMON_UISA_REGS,
2269 PPC_UISA_SPRS,
2270 PPC_SEGMENT_REGS,
2271 PPC_OEA_SPRS,
2272 /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr),
2273 /* 123 */ S(pir), S(mq), S(rtcu), S(rtcl)
2274 };
2275
2276 /* Motorola PowerPC 602.
2277 See the notes under the 403 about 'tcr'. */
2278 static const struct reg registers_602[] =
2279 {
2280 COMMON_UISA_REGS,
2281 PPC_UISA_SPRS,
2282 PPC_SEGMENT_REGS,
2283 PPC_OEA_SPRS,
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)
2287 };
2288
2289 /* Motorola/IBM PowerPC 603 or 603e. */
2290 static const struct reg registers_603[] =
2291 {
2292 COMMON_UISA_REGS,
2293 PPC_UISA_SPRS,
2294 PPC_SEGMENT_REGS,
2295 PPC_OEA_SPRS,
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)
2299 };
2300
2301 /* Motorola PowerPC 604 or 604e. */
2302 static const struct reg registers_604[] =
2303 {
2304 COMMON_UISA_REGS,
2305 PPC_UISA_SPRS,
2306 PPC_SEGMENT_REGS,
2307 PPC_OEA_SPRS,
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)
2311 };
2312
2313 /* Motorola/IBM PowerPC 750 or 740. */
2314 static const struct reg registers_750[] =
2315 {
2316 COMMON_UISA_REGS,
2317 PPC_UISA_SPRS,
2318 PPC_SEGMENT_REGS,
2319 PPC_OEA_SPRS,
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)
2326 };
2327
2328
2329 /* Motorola PowerPC 7400. */
2330 static const struct reg registers_7400[] =
2331 {
2332 /* gpr0-gpr31, fpr0-fpr31 */
2333 COMMON_UISA_REGS,
2334 /* cr, lr, ctr, xer, fpscr */
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
2344 /* Motorola e500. */
2345 static 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,
2352 R8(acc), S4(spefscr),
2353 /* NOTE: Add new registers here the end of the raw register
2354 list and just before the first pseudo register. */
2355 /* 41...72 */
2356 PPC_GPRS_PSEUDO_REGS
2357 };
2358
2359 /* Information about a particular processor variant. */
2360
2361 struct variant
2362 {
2363 /* Name of this variant. */
2364 char *name;
2365
2366 /* English description of the variant. */
2367 char *description;
2368
2369 /* bfd_arch_info.arch corresponding to variant. */
2370 enum bfd_architecture arch;
2371
2372 /* bfd_arch_info.mach corresponding to variant. */
2373 unsigned long mach;
2374
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
2384 /* Table of register names; registers[R] is the name of the register
2385 number R. */
2386 const struct reg *regs;
2387 };
2388
2389 #define tot_num_registers(list) (sizeof (list) / sizeof((list)[0]))
2390
2391 static int
2392 num_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
2404 static int
2405 num_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 }
2416
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
2427 static struct variant variants[] =
2428 {
2429
2430 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
2431 bfd_mach_ppc, -1, -1, tot_num_registers (registers_powerpc),
2432 registers_powerpc},
2433 {"power", "POWER user-level", bfd_arch_rs6000,
2434 bfd_mach_rs6k, -1, -1, tot_num_registers (registers_power),
2435 registers_power},
2436 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
2437 bfd_mach_ppc_403, -1, -1, tot_num_registers (registers_403),
2438 registers_403},
2439 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
2440 bfd_mach_ppc_601, -1, -1, tot_num_registers (registers_601),
2441 registers_601},
2442 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
2443 bfd_mach_ppc_602, -1, -1, tot_num_registers (registers_602),
2444 registers_602},
2445 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
2446 bfd_mach_ppc_603, -1, -1, tot_num_registers (registers_603),
2447 registers_603},
2448 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
2449 604, -1, -1, tot_num_registers (registers_604),
2450 registers_604},
2451 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
2452 bfd_mach_ppc_403gc, -1, -1, tot_num_registers (registers_403GC),
2453 registers_403GC},
2454 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
2455 bfd_mach_ppc_505, -1, -1, tot_num_registers (registers_505),
2456 registers_505},
2457 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
2458 bfd_mach_ppc_860, -1, -1, tot_num_registers (registers_860),
2459 registers_860},
2460 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
2461 bfd_mach_ppc_750, -1, -1, tot_num_registers (registers_750),
2462 registers_750},
2463 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2464 bfd_mach_ppc_7400, -1, -1, tot_num_registers (registers_7400),
2465 registers_7400},
2466 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
2467 bfd_mach_ppc_e500, -1, -1, tot_num_registers (registers_e500),
2468 registers_e500},
2469
2470 /* 64-bit */
2471 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2472 bfd_mach_ppc64, -1, -1, tot_num_registers (registers_powerpc),
2473 registers_powerpc},
2474 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2475 bfd_mach_ppc_620, -1, -1, tot_num_registers (registers_powerpc),
2476 registers_powerpc},
2477 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2478 bfd_mach_ppc_630, -1, -1, tot_num_registers (registers_powerpc),
2479 registers_powerpc},
2480 {"a35", "PowerPC A35", bfd_arch_powerpc,
2481 bfd_mach_ppc_a35, -1, -1, tot_num_registers (registers_powerpc),
2482 registers_powerpc},
2483 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
2484 bfd_mach_ppc_rs64ii, -1, -1, tot_num_registers (registers_powerpc),
2485 registers_powerpc},
2486 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
2487 bfd_mach_ppc_rs64iii, -1, -1, tot_num_registers (registers_powerpc),
2488 registers_powerpc},
2489
2490 /* FIXME: I haven't checked the register sets of the following. */
2491 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
2492 bfd_mach_rs6k_rs1, -1, -1, tot_num_registers (registers_power),
2493 registers_power},
2494 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
2495 bfd_mach_rs6k_rsc, -1, -1, tot_num_registers (registers_power),
2496 registers_power},
2497 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
2498 bfd_mach_rs6k_rs2, -1, -1, tot_num_registers (registers_power),
2499 registers_power},
2500
2501 {0, 0, 0, 0, 0, 0, 0, 0}
2502 };
2503
2504 /* Initialize the number of registers and pseudo registers in each variant. */
2505
2506 static void
2507 init_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 }
2519
2520 /* Return the variant corresponding to architecture ARCH and machine number
2521 MACH. If no such variant exists, return null. */
2522
2523 static const struct variant *
2524 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
2525 {
2526 const struct variant *v;
2527
2528 for (v = variants; v->name; v++)
2529 if (arch == v->arch && mach == v->mach)
2530 return v;
2531
2532 return NULL;
2533 }
2534
2535 static int
2536 gdb_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 }
2543 \f
2544 static CORE_ADDR
2545 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2546 {
2547 return frame_unwind_register_unsigned (next_frame, PC_REGNUM);
2548 }
2549
2550 static struct frame_id
2551 rs6000_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
2558 struct rs6000_frame_cache
2559 {
2560 CORE_ADDR base;
2561 CORE_ADDR initial_sp;
2562 struct trad_frame_saved_reg *saved_regs;
2563 };
2564
2565 static struct rs6000_frame_cache *
2566 rs6000_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;
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))
2624 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
2625 {
2626 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
2627 fpr_addr += 8;
2628 }
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;
2638 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
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;
2669 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
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
2706 static void
2707 rs6000_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
2715 static void
2716 rs6000_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);
2724 trad_frame_prev_register (next_frame, info->saved_regs, regnum,
2725 optimizedp, lvalp, addrp, realnump, valuep);
2726 }
2727
2728 static const struct frame_unwind rs6000_frame_unwind =
2729 {
2730 NORMAL_FRAME,
2731 rs6000_frame_this_id,
2732 rs6000_frame_prev_register
2733 };
2734
2735 static const struct frame_unwind *
2736 rs6000_frame_sniffer (struct frame_info *next_frame)
2737 {
2738 return &rs6000_frame_unwind;
2739 }
2740
2741 \f
2742
2743 static CORE_ADDR
2744 rs6000_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
2752 static 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
2759 static const struct frame_base *
2760 rs6000_frame_base_sniffer (struct frame_info *next_frame)
2761 {
2762 return &rs6000_frame_base;
2763 }
2764
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.
2768
2769 Called e.g. at program startup, when reading a core file, and when reading
2770 a binary file. */
2771
2772 static struct gdbarch *
2773 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2774 {
2775 struct gdbarch *gdbarch;
2776 struct gdbarch_tdep *tdep;
2777 int wordsize, from_xcoff_exec, from_elf_exec, i, off;
2778 struct reg *regs;
2779 const struct variant *v;
2780 enum bfd_architecture arch;
2781 unsigned long mach;
2782 bfd abfd;
2783 int sysv_abi;
2784 asection *sect;
2785
2786 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
2787 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
2788
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
2794 /* Check word size. If INFO is from a binary file, infer it from
2795 that, else choose a likely default. */
2796 if (from_xcoff_exec)
2797 {
2798 if (bfd_xcoff_is_xcoff64 (info.abfd))
2799 wordsize = 8;
2800 else
2801 wordsize = 4;
2802 }
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 }
2810 else
2811 {
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;
2817 }
2818
2819 /* Find a candidate among extant architectures. */
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
2826 separate word size check. */
2827 tdep = gdbarch_tdep (arches->gdbarch);
2828 if (tdep && tdep->wordsize == wordsize)
2829 return arches->gdbarch;
2830 }
2831
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 */
2839
2840 if (!from_xcoff_exec)
2841 {
2842 arch = info.bfd_arch_info->arch;
2843 mach = info.bfd_arch_info->mach;
2844 }
2845 else
2846 {
2847 arch = bfd_arch_powerpc;
2848 bfd_default_set_arch_mach (&abfd, arch, 0);
2849 info.bfd_arch_info = bfd_get_arch_info (&abfd);
2850 mach = info.bfd_arch_info->mach;
2851 }
2852 tdep = xmalloc (sizeof (struct gdbarch_tdep));
2853 tdep->wordsize = wordsize;
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
2875 gdbarch = gdbarch_alloc (&info, tdep);
2876
2877 /* Initialize the number of real and pseudo registers in each variant. */
2878 init_variants ();
2879
2880 /* Choose variant. */
2881 v = find_variant_by_arch (arch, mach);
2882 if (!v)
2883 return NULL;
2884
2885 tdep->regs = v->regs;
2886
2887 tdep->ppc_gp0_regnum = 0;
2888 tdep->ppc_gprs_pseudo_p = 0;
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;
2897 else if (arch == bfd_arch_rs6000)
2898 tdep->ppc_mq_regnum = 70;
2899 else
2900 tdep->ppc_mq_regnum = -1;
2901 tdep->ppc_fp0_regnum = 32;
2902 tdep->ppc_fpscr_regnum = (arch == bfd_arch_rs6000) ? 71 : 70;
2903 tdep->ppc_sr0_regnum = 71;
2904 tdep->ppc_vr0_regnum = -1;
2905 tdep->ppc_vrsave_regnum = -1;
2906 tdep->ppc_ev0_regnum = -1;
2907 tdep->ppc_ev31_regnum = -1;
2908 tdep->ppc_acc_regnum = -1;
2909 tdep->ppc_spefscr_regnum = -1;
2910
2911 set_gdbarch_pc_regnum (gdbarch, 64);
2912 set_gdbarch_sp_regnum (gdbarch, 1);
2913 set_gdbarch_deprecated_fp_regnum (gdbarch, 1);
2914 if (sysv_abi && wordsize == 8)
2915 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
2916 else if (sysv_abi && wordsize == 4)
2917 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
2918 else
2919 {
2920 set_gdbarch_deprecated_extract_return_value (gdbarch, rs6000_extract_return_value);
2921 set_gdbarch_store_return_value (gdbarch, rs6000_store_return_value);
2922 }
2923
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
2932 if (v->arch == bfd_arch_rs6000)
2933 tdep->ppc_sr0_regnum = -1;
2934 else if (v->arch == bfd_arch_powerpc)
2935 switch (v->mach)
2936 {
2937 case bfd_mach_ppc:
2938 tdep->ppc_vr0_regnum = 71;
2939 tdep->ppc_vrsave_regnum = 104;
2940 break;
2941 case bfd_mach_ppc_7400:
2942 tdep->ppc_vr0_regnum = 119;
2943 tdep->ppc_vrsave_regnum = 152;
2944 break;
2945 case bfd_mach_ppc_e500:
2946 tdep->ppc_gp0_regnum = 41;
2947 tdep->ppc_gprs_pseudo_p = 1;
2948 tdep->ppc_toc_regnum = -1;
2949 tdep->ppc_ps_regnum = 1;
2950 tdep->ppc_cr_regnum = 2;
2951 tdep->ppc_lr_regnum = 3;
2952 tdep->ppc_ctr_regnum = 4;
2953 tdep->ppc_xer_regnum = 5;
2954 tdep->ppc_ev0_regnum = 7;
2955 tdep->ppc_ev31_regnum = 38;
2956 tdep->ppc_fp0_regnum = -1;
2957 tdep->ppc_fpscr_regnum = -1;
2958 tdep->ppc_sr0_regnum = -1;
2959 tdep->ppc_acc_regnum = 39;
2960 tdep->ppc_spefscr_regnum = 40;
2961 set_gdbarch_pc_regnum (gdbarch, 0);
2962 set_gdbarch_sp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
2963 set_gdbarch_deprecated_fp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
2964 set_gdbarch_pseudo_register_read (gdbarch, e500_pseudo_register_read);
2965 set_gdbarch_pseudo_register_write (gdbarch, e500_pseudo_register_write);
2966 break;
2967
2968 case bfd_mach_ppc64:
2969 case bfd_mach_ppc_620:
2970 case bfd_mach_ppc_630:
2971 case bfd_mach_ppc_a35:
2972 case bfd_mach_ppc_rs64ii:
2973 case bfd_mach_ppc_rs64iii:
2974 /* These processor's register sets don't have segment registers. */
2975 tdep->ppc_sr0_regnum = -1;
2976 break;
2977 }
2978 else
2979 internal_error (__FILE__, __LINE__,
2980 "rs6000_gdbarch_init: "
2981 "received unexpected BFD 'arch' value");
2982
2983 /* Sanity check on registers. */
2984 gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0);
2985
2986 /* Select instruction printer. */
2987 if (arch == bfd_arch_rs6000)
2988 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
2989 else
2990 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
2991
2992 set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
2993
2994 set_gdbarch_num_regs (gdbarch, v->nregs);
2995 set_gdbarch_num_pseudo_regs (gdbarch, v->npregs);
2996 set_gdbarch_register_name (gdbarch, rs6000_register_name);
2997 set_gdbarch_register_type (gdbarch, rs6000_register_type);
2998
2999 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3000 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
3001 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3002 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3003 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3004 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3005 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3006 if (sysv_abi)
3007 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
3008 else
3009 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3010 set_gdbarch_char_signed (gdbarch, 0);
3011
3012 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
3013 if (sysv_abi && wordsize == 8)
3014 /* PPC64 SYSV. */
3015 set_gdbarch_frame_red_zone_size (gdbarch, 288);
3016 else if (!sysv_abi && wordsize == 4)
3017 /* PowerOpen / AIX 32 bit. The saved area or red zone consists of
3018 19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
3019 Problem is, 220 isn't frame (16 byte) aligned. Round it up to
3020 224. */
3021 set_gdbarch_frame_red_zone_size (gdbarch, 224);
3022
3023 set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
3024 set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
3025 set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
3026
3027 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
3028 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
3029 /* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments()
3030 is correct for the SysV ABI when the wordsize is 8, but I'm also
3031 fairly certain that ppc_sysv_abi_push_arguments() will give even
3032 worse results since it only works for 32-bit code. So, for the moment,
3033 we're better off calling rs6000_push_arguments() since it works for
3034 64-bit code. At some point in the future, this matter needs to be
3035 revisited. */
3036 if (sysv_abi && wordsize == 4)
3037 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
3038 else if (sysv_abi && wordsize == 8)
3039 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
3040 else
3041 set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
3042
3043 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address);
3044
3045 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
3046 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3047 set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
3048
3049 /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN"
3050 for the descriptor and ".FN" for the entry-point -- a user
3051 specifying "break FN" will unexpectedly end up with a breakpoint
3052 on the descriptor and not the function. This architecture method
3053 transforms any breakpoints on descriptors into breakpoints on the
3054 corresponding entry point. */
3055 if (sysv_abi && wordsize == 8)
3056 set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address);
3057
3058 /* Not sure on this. FIXMEmgo */
3059 set_gdbarch_frame_args_skip (gdbarch, 8);
3060
3061 if (!sysv_abi)
3062 set_gdbarch_deprecated_use_struct_convention (gdbarch, rs6000_use_struct_convention);
3063
3064 if (!sysv_abi)
3065 {
3066 /* Handle RS/6000 function pointers (which are really function
3067 descriptors). */
3068 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
3069 rs6000_convert_from_func_ptr_addr);
3070 }
3071
3072 /* Helpers for function argument information. */
3073 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
3074
3075 /* Hook in ABI-specific overrides, if they have been registered. */
3076 gdbarch_init_osabi (info, gdbarch);
3077
3078 switch (info.osabi)
3079 {
3080 case GDB_OSABI_NETBSD_AOUT:
3081 case GDB_OSABI_NETBSD_ELF:
3082 case GDB_OSABI_UNKNOWN:
3083 case GDB_OSABI_LINUX:
3084 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3085 frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3086 set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3087 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3088 break;
3089 default:
3090 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3091
3092 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3093 frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3094 set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3095 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3096 }
3097
3098 if (from_xcoff_exec)
3099 {
3100 /* NOTE: jimix/2003-06-09: This test should really check for
3101 GDB_OSABI_AIX when that is defined and becomes
3102 available. (Actually, once things are properly split apart,
3103 the test goes away.) */
3104 /* RS6000/AIX does not support PT_STEP. Has to be simulated. */
3105 set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step);
3106 }
3107
3108 return gdbarch;
3109 }
3110
3111 static void
3112 rs6000_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3113 {
3114 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3115
3116 if (tdep == NULL)
3117 return;
3118
3119 /* FIXME: Dump gdbarch_tdep. */
3120 }
3121
3122 static struct cmd_list_element *info_powerpc_cmdlist = NULL;
3123
3124 static void
3125 rs6000_info_powerpc_command (char *args, int from_tty)
3126 {
3127 help_list (info_powerpc_cmdlist, "info powerpc ", class_info, gdb_stdout);
3128 }
3129
3130 /* Initialization code. */
3131
3132 extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */
3133
3134 void
3135 _initialize_rs6000_tdep (void)
3136 {
3137 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
3138 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
3139
3140 /* Add root prefix command for "info powerpc" commands */
3141 add_prefix_cmd ("powerpc", class_info, rs6000_info_powerpc_command,
3142 "Various POWERPC info specific commands.",
3143 &info_powerpc_cmdlist, "info powerpc ", 0, &infolist);
3144 }