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