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