]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/rs6000-tdep.c
2008-01-30 Luis Machado <luisgpm@br.ibm.com>
[thirdparty/binutils-gdb.git] / gdb / rs6000-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3 Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
5 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "frame.h"
24 #include "inferior.h"
25 #include "symtab.h"
26 #include "target.h"
27 #include "gdbcore.h"
28 #include "gdbcmd.h"
29 #include "objfiles.h"
30 #include "arch-utils.h"
31 #include "regcache.h"
32 #include "regset.h"
33 #include "doublest.h"
34 #include "value.h"
35 #include "parser-defs.h"
36 #include "osabi.h"
37 #include "infcall.h"
38 #include "sim-regno.h"
39 #include "gdb/sim-ppc.h"
40 #include "reggroups.h"
41 #include "dwarf2-frame.h"
42 #include "target-descriptions.h"
43 #include "user-regs.h"
44
45 #include "libbfd.h" /* for bfd_default_set_arch_mach */
46 #include "coff/internal.h" /* for libcoff.h */
47 #include "libcoff.h" /* for xcoff_data */
48 #include "coff/xcoff.h"
49 #include "libxcoff.h"
50
51 #include "elf-bfd.h"
52 #include "elf/ppc.h"
53
54 #include "solib-svr4.h"
55 #include "ppc-tdep.h"
56
57 #include "gdb_assert.h"
58 #include "dis-asm.h"
59
60 #include "trad-frame.h"
61 #include "frame-unwind.h"
62 #include "frame-base.h"
63
64 #include "rs6000-tdep.h"
65
66 #include "features/rs6000/powerpc-32.c"
67 #include "features/rs6000/powerpc-403.c"
68 #include "features/rs6000/powerpc-403gc.c"
69 #include "features/rs6000/powerpc-505.c"
70 #include "features/rs6000/powerpc-601.c"
71 #include "features/rs6000/powerpc-602.c"
72 #include "features/rs6000/powerpc-603.c"
73 #include "features/rs6000/powerpc-604.c"
74 #include "features/rs6000/powerpc-64.c"
75 #include "features/rs6000/powerpc-7400.c"
76 #include "features/rs6000/powerpc-750.c"
77 #include "features/rs6000/powerpc-860.c"
78 #include "features/rs6000/powerpc-e500.c"
79 #include "features/rs6000/rs6000.c"
80
81 /* Determine if regnum is an SPE pseudo-register. */
82 #define IS_SPE_PSEUDOREG(tdep, regnum) ((tdep)->ppc_ev0_regnum >= 0 \
83 && (regnum) >= (tdep)->ppc_ev0_regnum \
84 && (regnum) < (tdep)->ppc_ev0_regnum + 32)
85
86 /* Determine if regnum is a decimal float pseudo-register. */
87 #define IS_DFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_dl0_regnum >= 0 \
88 && (regnum) >= (tdep)->ppc_dl0_regnum \
89 && (regnum) < (tdep)->ppc_dl0_regnum + 16)
90
91 /* The list of available "set powerpc ..." and "show powerpc ..."
92 commands. */
93 static struct cmd_list_element *setpowerpccmdlist = NULL;
94 static struct cmd_list_element *showpowerpccmdlist = NULL;
95
96 static enum auto_boolean powerpc_soft_float_global = AUTO_BOOLEAN_AUTO;
97
98 /* The vector ABI to use. Keep this in sync with powerpc_vector_abi. */
99 static const char *powerpc_vector_strings[] =
100 {
101 "auto",
102 "generic",
103 "altivec",
104 "spe",
105 NULL
106 };
107
108 /* A variable that can be configured by the user. */
109 static enum powerpc_vector_abi powerpc_vector_abi_global = POWERPC_VEC_AUTO;
110 static const char *powerpc_vector_abi_string = "auto";
111
112 /* If the kernel has to deliver a signal, it pushes a sigcontext
113 structure on the stack and then calls the signal handler, passing
114 the address of the sigcontext in an argument register. Usually
115 the signal handler doesn't save this register, so we have to
116 access the sigcontext structure via an offset from the signal handler
117 frame.
118 The following constants were determined by experimentation on AIX 3.2. */
119 #define SIG_FRAME_PC_OFFSET 96
120 #define SIG_FRAME_LR_OFFSET 108
121 #define SIG_FRAME_FP_OFFSET 284
122
123 /* To be used by skip_prologue. */
124
125 struct rs6000_framedata
126 {
127 int offset; /* total size of frame --- the distance
128 by which we decrement sp to allocate
129 the frame */
130 int saved_gpr; /* smallest # of saved gpr */
131 int saved_fpr; /* smallest # of saved fpr */
132 int saved_vr; /* smallest # of saved vr */
133 int saved_ev; /* smallest # of saved ev */
134 int alloca_reg; /* alloca register number (frame ptr) */
135 char frameless; /* true if frameless functions. */
136 char nosavedpc; /* true if pc not saved. */
137 int gpr_offset; /* offset of saved gprs from prev sp */
138 int fpr_offset; /* offset of saved fprs from prev sp */
139 int vr_offset; /* offset of saved vrs from prev sp */
140 int ev_offset; /* offset of saved evs from prev sp */
141 int lr_offset; /* offset of saved lr */
142 int cr_offset; /* offset of saved cr */
143 int vrsave_offset; /* offset of saved vrsave register */
144 };
145
146 /* Description of a single register. */
147
148 struct reg
149 {
150 char *name; /* name of register */
151 unsigned char sz32; /* size on 32-bit arch, 0 if nonexistent */
152 unsigned char sz64; /* size on 64-bit arch, 0 if nonexistent */
153 unsigned char fpr; /* whether register is floating-point */
154 unsigned char pseudo; /* whether register is pseudo */
155 int spr_num; /* PowerPC SPR number, or -1 if not an SPR.
156 This is an ISA SPR number, not a GDB
157 register number. */
158 };
159
160 /* Hook for determining the TOC address when calling functions in the
161 inferior under AIX. The initialization code in rs6000-nat.c sets
162 this hook to point to find_toc_address. */
163
164 CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
165
166 /* Static function prototypes */
167
168 static CORE_ADDR branch_dest (struct frame_info *frame, int opcode,
169 int instr, CORE_ADDR pc, CORE_ADDR safety);
170 static CORE_ADDR skip_prologue (struct gdbarch *, CORE_ADDR, CORE_ADDR,
171 struct rs6000_framedata *);
172
173 /* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
174 int
175 altivec_register_p (struct gdbarch *gdbarch, int regno)
176 {
177 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
178 if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
179 return 0;
180 else
181 return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
182 }
183
184
185 /* Return true if REGNO is an SPE register, false otherwise. */
186 int
187 spe_register_p (struct gdbarch *gdbarch, int regno)
188 {
189 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
190
191 /* Is it a reference to EV0 -- EV31, and do we have those? */
192 if (IS_SPE_PSEUDOREG (tdep, regno))
193 return 1;
194
195 /* Is it a reference to one of the raw upper GPR halves? */
196 if (tdep->ppc_ev0_upper_regnum >= 0
197 && tdep->ppc_ev0_upper_regnum <= regno
198 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
199 return 1;
200
201 /* Is it a reference to the 64-bit accumulator, and do we have that? */
202 if (tdep->ppc_acc_regnum >= 0
203 && tdep->ppc_acc_regnum == regno)
204 return 1;
205
206 /* Is it a reference to the SPE floating-point status and control register,
207 and do we have that? */
208 if (tdep->ppc_spefscr_regnum >= 0
209 && tdep->ppc_spefscr_regnum == regno)
210 return 1;
211
212 return 0;
213 }
214
215
216 /* Return non-zero if the architecture described by GDBARCH has
217 floating-point registers (f0 --- f31 and fpscr). */
218 int
219 ppc_floating_point_unit_p (struct gdbarch *gdbarch)
220 {
221 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
222
223 return (tdep->ppc_fp0_regnum >= 0
224 && tdep->ppc_fpscr_regnum >= 0);
225 }
226
227 /* Return non-zero if the architecture described by GDBARCH has
228 Altivec registers (vr0 --- vr31, vrsave and vscr). */
229 int
230 ppc_altivec_support_p (struct gdbarch *gdbarch)
231 {
232 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
233
234 return (tdep->ppc_vr0_regnum >= 0
235 && tdep->ppc_vrsave_regnum >= 0);
236 }
237
238 /* Check that TABLE[GDB_REGNO] is not already initialized, and then
239 set it to SIM_REGNO.
240
241 This is a helper function for init_sim_regno_table, constructing
242 the table mapping GDB register numbers to sim register numbers; we
243 initialize every element in that table to -1 before we start
244 filling it in. */
245 static void
246 set_sim_regno (int *table, int gdb_regno, int sim_regno)
247 {
248 /* Make sure we don't try to assign any given GDB register a sim
249 register number more than once. */
250 gdb_assert (table[gdb_regno] == -1);
251 table[gdb_regno] = sim_regno;
252 }
253
254
255 /* Initialize ARCH->tdep->sim_regno, the table mapping GDB register
256 numbers to simulator register numbers, based on the values placed
257 in the ARCH->tdep->ppc_foo_regnum members. */
258 static void
259 init_sim_regno_table (struct gdbarch *arch)
260 {
261 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
262 int total_regs = gdbarch_num_regs (arch);
263 int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int);
264 int i;
265 static const char *const segment_regs[] = {
266 "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
267 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
268 };
269
270 /* Presume that all registers not explicitly mentioned below are
271 unavailable from the sim. */
272 for (i = 0; i < total_regs; i++)
273 sim_regno[i] = -1;
274
275 /* General-purpose registers. */
276 for (i = 0; i < ppc_num_gprs; i++)
277 set_sim_regno (sim_regno, tdep->ppc_gp0_regnum + i, sim_ppc_r0_regnum + i);
278
279 /* Floating-point registers. */
280 if (tdep->ppc_fp0_regnum >= 0)
281 for (i = 0; i < ppc_num_fprs; i++)
282 set_sim_regno (sim_regno,
283 tdep->ppc_fp0_regnum + i,
284 sim_ppc_f0_regnum + i);
285 if (tdep->ppc_fpscr_regnum >= 0)
286 set_sim_regno (sim_regno, tdep->ppc_fpscr_regnum, sim_ppc_fpscr_regnum);
287
288 set_sim_regno (sim_regno, gdbarch_pc_regnum (arch), sim_ppc_pc_regnum);
289 set_sim_regno (sim_regno, tdep->ppc_ps_regnum, sim_ppc_ps_regnum);
290 set_sim_regno (sim_regno, tdep->ppc_cr_regnum, sim_ppc_cr_regnum);
291
292 /* Segment registers. */
293 for (i = 0; i < ppc_num_srs; i++)
294 {
295 int gdb_regno;
296
297 gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i], -1);
298 if (gdb_regno >= 0)
299 set_sim_regno (sim_regno, gdb_regno, sim_ppc_sr0_regnum + i);
300 }
301
302 /* Altivec registers. */
303 if (tdep->ppc_vr0_regnum >= 0)
304 {
305 for (i = 0; i < ppc_num_vrs; i++)
306 set_sim_regno (sim_regno,
307 tdep->ppc_vr0_regnum + i,
308 sim_ppc_vr0_regnum + i);
309
310 /* FIXME: jimb/2004-07-15: when we have tdep->ppc_vscr_regnum,
311 we can treat this more like the other cases. */
312 set_sim_regno (sim_regno,
313 tdep->ppc_vr0_regnum + ppc_num_vrs,
314 sim_ppc_vscr_regnum);
315 }
316 /* vsave is a special-purpose register, so the code below handles it. */
317
318 /* SPE APU (E500) registers. */
319 if (tdep->ppc_ev0_upper_regnum >= 0)
320 for (i = 0; i < ppc_num_gprs; i++)
321 set_sim_regno (sim_regno,
322 tdep->ppc_ev0_upper_regnum + i,
323 sim_ppc_rh0_regnum + i);
324 if (tdep->ppc_acc_regnum >= 0)
325 set_sim_regno (sim_regno, tdep->ppc_acc_regnum, sim_ppc_acc_regnum);
326 /* spefscr is a special-purpose register, so the code below handles it. */
327
328 #ifdef WITH_SIM
329 /* Now handle all special-purpose registers. Verify that they
330 haven't mistakenly been assigned numbers by any of the above
331 code. */
332 for (i = 0; i < sim_ppc_num_sprs; i++)
333 {
334 const char *spr_name = sim_spr_register_name (i);
335 int gdb_regno = -1;
336
337 if (spr_name != NULL)
338 gdb_regno = user_reg_map_name_to_regnum (arch, spr_name, -1);
339
340 if (gdb_regno != -1)
341 set_sim_regno (sim_regno, gdb_regno, sim_ppc_spr0_regnum + i);
342 }
343 #endif
344
345 /* Drop the initialized array into place. */
346 tdep->sim_regno = sim_regno;
347 }
348
349
350 /* Given a GDB register number REG, return the corresponding SIM
351 register number. */
352 static int
353 rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
354 {
355 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
356 int sim_regno;
357
358 if (tdep->sim_regno == NULL)
359 init_sim_regno_table (gdbarch);
360
361 gdb_assert (0 <= reg
362 && reg <= gdbarch_num_regs (gdbarch)
363 + gdbarch_num_pseudo_regs (gdbarch));
364 sim_regno = tdep->sim_regno[reg];
365
366 if (sim_regno >= 0)
367 return sim_regno;
368 else
369 return LEGACY_SIM_REGNO_IGNORE;
370 }
371
372 \f
373
374 /* Register set support functions. */
375
376 /* REGS + OFFSET contains register REGNUM in a field REGSIZE wide.
377 Write the register to REGCACHE. */
378
379 static void
380 ppc_supply_reg (struct regcache *regcache, int regnum,
381 const gdb_byte *regs, size_t offset, int regsize)
382 {
383 if (regnum != -1 && offset != -1)
384 {
385 if (regsize > 4)
386 {
387 struct gdbarch *gdbarch = get_regcache_arch (regcache);
388 int gdb_regsize = register_size (gdbarch, regnum);
389 if (gdb_regsize < regsize
390 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
391 offset += regsize - gdb_regsize;
392 }
393 regcache_raw_supply (regcache, regnum, regs + offset);
394 }
395 }
396
397 /* Read register REGNUM from REGCACHE and store to REGS + OFFSET
398 in a field REGSIZE wide. Zero pad as necessary. */
399
400 static void
401 ppc_collect_reg (const struct regcache *regcache, int regnum,
402 gdb_byte *regs, size_t offset, int regsize)
403 {
404 if (regnum != -1 && offset != -1)
405 {
406 if (regsize > 4)
407 {
408 struct gdbarch *gdbarch = get_regcache_arch (regcache);
409 int gdb_regsize = register_size (gdbarch, regnum);
410 if (gdb_regsize < regsize)
411 {
412 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
413 {
414 memset (regs + offset, 0, regsize - gdb_regsize);
415 offset += regsize - gdb_regsize;
416 }
417 else
418 memset (regs + offset + regsize - gdb_regsize, 0,
419 regsize - gdb_regsize);
420 }
421 }
422 regcache_raw_collect (regcache, regnum, regs + offset);
423 }
424 }
425
426 static int
427 ppc_greg_offset (struct gdbarch *gdbarch,
428 struct gdbarch_tdep *tdep,
429 const struct ppc_reg_offsets *offsets,
430 int regnum,
431 int *regsize)
432 {
433 *regsize = offsets->gpr_size;
434 if (regnum >= tdep->ppc_gp0_regnum
435 && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs)
436 return (offsets->r0_offset
437 + (regnum - tdep->ppc_gp0_regnum) * offsets->gpr_size);
438
439 if (regnum == gdbarch_pc_regnum (gdbarch))
440 return offsets->pc_offset;
441
442 if (regnum == tdep->ppc_ps_regnum)
443 return offsets->ps_offset;
444
445 if (regnum == tdep->ppc_lr_regnum)
446 return offsets->lr_offset;
447
448 if (regnum == tdep->ppc_ctr_regnum)
449 return offsets->ctr_offset;
450
451 *regsize = offsets->xr_size;
452 if (regnum == tdep->ppc_cr_regnum)
453 return offsets->cr_offset;
454
455 if (regnum == tdep->ppc_xer_regnum)
456 return offsets->xer_offset;
457
458 if (regnum == tdep->ppc_mq_regnum)
459 return offsets->mq_offset;
460
461 return -1;
462 }
463
464 static int
465 ppc_fpreg_offset (struct gdbarch_tdep *tdep,
466 const struct ppc_reg_offsets *offsets,
467 int regnum)
468 {
469 if (regnum >= tdep->ppc_fp0_regnum
470 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
471 return offsets->f0_offset + (regnum - tdep->ppc_fp0_regnum) * 8;
472
473 if (regnum == tdep->ppc_fpscr_regnum)
474 return offsets->fpscr_offset;
475
476 return -1;
477 }
478
479 static int
480 ppc_vrreg_offset (struct gdbarch_tdep *tdep,
481 const struct ppc_reg_offsets *offsets,
482 int regnum)
483 {
484 if (regnum >= tdep->ppc_vr0_regnum
485 && regnum < tdep->ppc_vr0_regnum + ppc_num_vrs)
486 return offsets->vr0_offset + (regnum - tdep->ppc_vr0_regnum) * 16;
487
488 if (regnum == tdep->ppc_vrsave_regnum - 1)
489 return offsets->vscr_offset;
490
491 if (regnum == tdep->ppc_vrsave_regnum)
492 return offsets->vrsave_offset;
493
494 return -1;
495 }
496
497 /* Supply register REGNUM in the general-purpose register set REGSET
498 from the buffer specified by GREGS and LEN to register cache
499 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
500
501 void
502 ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
503 int regnum, const void *gregs, size_t len)
504 {
505 struct gdbarch *gdbarch = get_regcache_arch (regcache);
506 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
507 const struct ppc_reg_offsets *offsets = regset->descr;
508 size_t offset;
509 int regsize;
510
511 if (regnum == -1)
512 {
513 int i;
514 int gpr_size = offsets->gpr_size;
515
516 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
517 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
518 i++, offset += gpr_size)
519 ppc_supply_reg (regcache, i, gregs, offset, gpr_size);
520
521 ppc_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
522 gregs, offsets->pc_offset, gpr_size);
523 ppc_supply_reg (regcache, tdep->ppc_ps_regnum,
524 gregs, offsets->ps_offset, gpr_size);
525 ppc_supply_reg (regcache, tdep->ppc_lr_regnum,
526 gregs, offsets->lr_offset, gpr_size);
527 ppc_supply_reg (regcache, tdep->ppc_ctr_regnum,
528 gregs, offsets->ctr_offset, gpr_size);
529 ppc_supply_reg (regcache, tdep->ppc_cr_regnum,
530 gregs, offsets->cr_offset, offsets->xr_size);
531 ppc_supply_reg (regcache, tdep->ppc_xer_regnum,
532 gregs, offsets->xer_offset, offsets->xr_size);
533 ppc_supply_reg (regcache, tdep->ppc_mq_regnum,
534 gregs, offsets->mq_offset, offsets->xr_size);
535 return;
536 }
537
538 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
539 ppc_supply_reg (regcache, regnum, gregs, offset, regsize);
540 }
541
542 /* Supply register REGNUM in the floating-point register set REGSET
543 from the buffer specified by FPREGS and LEN to register cache
544 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
545
546 void
547 ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache,
548 int regnum, const void *fpregs, size_t len)
549 {
550 struct gdbarch *gdbarch = get_regcache_arch (regcache);
551 struct gdbarch_tdep *tdep;
552 const struct ppc_reg_offsets *offsets;
553 size_t offset;
554
555 if (!ppc_floating_point_unit_p (gdbarch))
556 return;
557
558 tdep = gdbarch_tdep (gdbarch);
559 offsets = regset->descr;
560 if (regnum == -1)
561 {
562 int i;
563
564 for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
565 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
566 i++, offset += 8)
567 ppc_supply_reg (regcache, i, fpregs, offset, 8);
568
569 ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum,
570 fpregs, offsets->fpscr_offset, offsets->fpscr_size);
571 return;
572 }
573
574 offset = ppc_fpreg_offset (tdep, offsets, regnum);
575 ppc_supply_reg (regcache, regnum, fpregs, offset,
576 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
577 }
578
579 /* Supply register REGNUM in the Altivec register set REGSET
580 from the buffer specified by VRREGS and LEN to register cache
581 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
582
583 void
584 ppc_supply_vrregset (const struct regset *regset, struct regcache *regcache,
585 int regnum, const void *vrregs, size_t len)
586 {
587 struct gdbarch *gdbarch = get_regcache_arch (regcache);
588 struct gdbarch_tdep *tdep;
589 const struct ppc_reg_offsets *offsets;
590 size_t offset;
591
592 if (!ppc_altivec_support_p (gdbarch))
593 return;
594
595 tdep = gdbarch_tdep (gdbarch);
596 offsets = regset->descr;
597 if (regnum == -1)
598 {
599 int i;
600
601 for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
602 i < tdep->ppc_vr0_regnum + ppc_num_vrs;
603 i++, offset += 16)
604 ppc_supply_reg (regcache, i, vrregs, offset, 16);
605
606 ppc_supply_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
607 vrregs, offsets->vscr_offset, 4);
608
609 ppc_supply_reg (regcache, tdep->ppc_vrsave_regnum,
610 vrregs, offsets->vrsave_offset, 4);
611 return;
612 }
613
614 offset = ppc_vrreg_offset (tdep, offsets, regnum);
615 if (regnum != tdep->ppc_vrsave_regnum
616 && regnum != tdep->ppc_vrsave_regnum - 1)
617 ppc_supply_reg (regcache, regnum, vrregs, offset, 16);
618 else
619 ppc_supply_reg (regcache, regnum,
620 vrregs, offset, 4);
621 }
622
623 /* Collect register REGNUM in the general-purpose register set
624 REGSET from register cache REGCACHE into the buffer specified by
625 GREGS and LEN. If REGNUM is -1, do this for all registers in
626 REGSET. */
627
628 void
629 ppc_collect_gregset (const struct regset *regset,
630 const struct regcache *regcache,
631 int regnum, void *gregs, size_t len)
632 {
633 struct gdbarch *gdbarch = get_regcache_arch (regcache);
634 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
635 const struct ppc_reg_offsets *offsets = regset->descr;
636 size_t offset;
637 int regsize;
638
639 if (regnum == -1)
640 {
641 int i;
642 int gpr_size = offsets->gpr_size;
643
644 for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
645 i < tdep->ppc_gp0_regnum + ppc_num_gprs;
646 i++, offset += gpr_size)
647 ppc_collect_reg (regcache, i, gregs, offset, gpr_size);
648
649 ppc_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
650 gregs, offsets->pc_offset, gpr_size);
651 ppc_collect_reg (regcache, tdep->ppc_ps_regnum,
652 gregs, offsets->ps_offset, gpr_size);
653 ppc_collect_reg (regcache, tdep->ppc_lr_regnum,
654 gregs, offsets->lr_offset, gpr_size);
655 ppc_collect_reg (regcache, tdep->ppc_ctr_regnum,
656 gregs, offsets->ctr_offset, gpr_size);
657 ppc_collect_reg (regcache, tdep->ppc_cr_regnum,
658 gregs, offsets->cr_offset, offsets->xr_size);
659 ppc_collect_reg (regcache, tdep->ppc_xer_regnum,
660 gregs, offsets->xer_offset, offsets->xr_size);
661 ppc_collect_reg (regcache, tdep->ppc_mq_regnum,
662 gregs, offsets->mq_offset, offsets->xr_size);
663 return;
664 }
665
666 offset = ppc_greg_offset (gdbarch, tdep, offsets, regnum, &regsize);
667 ppc_collect_reg (regcache, regnum, gregs, offset, regsize);
668 }
669
670 /* Collect register REGNUM in the floating-point register set
671 REGSET from register cache REGCACHE into the buffer specified by
672 FPREGS and LEN. If REGNUM is -1, do this for all registers in
673 REGSET. */
674
675 void
676 ppc_collect_fpregset (const struct regset *regset,
677 const struct regcache *regcache,
678 int regnum, void *fpregs, size_t len)
679 {
680 struct gdbarch *gdbarch = get_regcache_arch (regcache);
681 struct gdbarch_tdep *tdep;
682 const struct ppc_reg_offsets *offsets;
683 size_t offset;
684
685 if (!ppc_floating_point_unit_p (gdbarch))
686 return;
687
688 tdep = gdbarch_tdep (gdbarch);
689 offsets = regset->descr;
690 if (regnum == -1)
691 {
692 int i;
693
694 for (i = tdep->ppc_fp0_regnum, offset = offsets->f0_offset;
695 i < tdep->ppc_fp0_regnum + ppc_num_fprs;
696 i++, offset += 8)
697 ppc_collect_reg (regcache, i, fpregs, offset, 8);
698
699 ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum,
700 fpregs, offsets->fpscr_offset, offsets->fpscr_size);
701 return;
702 }
703
704 offset = ppc_fpreg_offset (tdep, offsets, regnum);
705 ppc_collect_reg (regcache, regnum, fpregs, offset,
706 regnum == tdep->ppc_fpscr_regnum ? offsets->fpscr_size : 8);
707 }
708
709 /* Collect register REGNUM in the Altivec register set
710 REGSET from register cache REGCACHE into the buffer specified by
711 VRREGS and LEN. If REGNUM is -1, do this for all registers in
712 REGSET. */
713
714 void
715 ppc_collect_vrregset (const struct regset *regset,
716 const struct regcache *regcache,
717 int regnum, void *vrregs, size_t len)
718 {
719 struct gdbarch *gdbarch = get_regcache_arch (regcache);
720 struct gdbarch_tdep *tdep;
721 const struct ppc_reg_offsets *offsets;
722 size_t offset;
723
724 if (!ppc_altivec_support_p (gdbarch))
725 return;
726
727 tdep = gdbarch_tdep (gdbarch);
728 offsets = regset->descr;
729 if (regnum == -1)
730 {
731 int i;
732
733 for (i = tdep->ppc_vr0_regnum, offset = offsets->vr0_offset;
734 i < tdep->ppc_vr0_regnum + ppc_num_vrs;
735 i++, offset += 16)
736 ppc_collect_reg (regcache, i, vrregs, offset, 16);
737
738 ppc_collect_reg (regcache, (tdep->ppc_vrsave_regnum - 1),
739 vrregs, offsets->vscr_offset, 4);
740
741 ppc_collect_reg (regcache, tdep->ppc_vrsave_regnum,
742 vrregs, offsets->vrsave_offset, 4);
743 return;
744 }
745
746 offset = ppc_vrreg_offset (tdep, offsets, regnum);
747 if (regnum != tdep->ppc_vrsave_regnum
748 && regnum != tdep->ppc_vrsave_regnum - 1)
749 ppc_collect_reg (regcache, regnum, vrregs, offset, 16);
750 else
751 ppc_collect_reg (regcache, regnum,
752 vrregs, offset, 4);
753 }
754 \f
755
756 /* Read a LEN-byte address from debugged memory address MEMADDR. */
757
758 static CORE_ADDR
759 read_memory_addr (CORE_ADDR memaddr, int len)
760 {
761 return read_memory_unsigned_integer (memaddr, len);
762 }
763
764 static CORE_ADDR
765 rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
766 {
767 struct rs6000_framedata frame;
768 CORE_ADDR limit_pc, func_addr;
769
770 /* See if we can determine the end of the prologue via the symbol table.
771 If so, then return either PC, or the PC after the prologue, whichever
772 is greater. */
773 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
774 {
775 CORE_ADDR post_prologue_pc = skip_prologue_using_sal (func_addr);
776 if (post_prologue_pc != 0)
777 return max (pc, post_prologue_pc);
778 }
779
780 /* Can't determine prologue from the symbol table, need to examine
781 instructions. */
782
783 /* Find an upper limit on the function prologue using the debug
784 information. If the debug information could not be used to provide
785 that bound, then use an arbitrary large number as the upper bound. */
786 limit_pc = skip_prologue_using_sal (pc);
787 if (limit_pc == 0)
788 limit_pc = pc + 100; /* Magic. */
789
790 pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
791 return pc;
792 }
793
794 static int
795 insn_changes_sp_or_jumps (unsigned long insn)
796 {
797 int opcode = (insn >> 26) & 0x03f;
798 int sd = (insn >> 21) & 0x01f;
799 int a = (insn >> 16) & 0x01f;
800 int subcode = (insn >> 1) & 0x3ff;
801
802 /* Changes the stack pointer. */
803
804 /* NOTE: There are many ways to change the value of a given register.
805 The ways below are those used when the register is R1, the SP,
806 in a funtion's epilogue. */
807
808 if (opcode == 31 && subcode == 444 && a == 1)
809 return 1; /* mr R1,Rn */
810 if (opcode == 14 && sd == 1)
811 return 1; /* addi R1,Rn,simm */
812 if (opcode == 58 && sd == 1)
813 return 1; /* ld R1,ds(Rn) */
814
815 /* Transfers control. */
816
817 if (opcode == 18)
818 return 1; /* b */
819 if (opcode == 16)
820 return 1; /* bc */
821 if (opcode == 19 && subcode == 16)
822 return 1; /* bclr */
823 if (opcode == 19 && subcode == 528)
824 return 1; /* bcctr */
825
826 return 0;
827 }
828
829 /* Return true if we are in the function's epilogue, i.e. after the
830 instruction that destroyed the function's stack frame.
831
832 1) scan forward from the point of execution:
833 a) If you find an instruction that modifies the stack pointer
834 or transfers control (except a return), execution is not in
835 an epilogue, return.
836 b) Stop scanning if you find a return instruction or reach the
837 end of the function or reach the hard limit for the size of
838 an epilogue.
839 2) scan backward from the point of execution:
840 a) If you find an instruction that modifies the stack pointer,
841 execution *is* in an epilogue, return.
842 b) Stop scanning if you reach an instruction that transfers
843 control or the beginning of the function or reach the hard
844 limit for the size of an epilogue. */
845
846 static int
847 rs6000_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
848 {
849 bfd_byte insn_buf[PPC_INSN_SIZE];
850 CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
851 unsigned long insn;
852 struct frame_info *curfrm;
853
854 /* Find the search limits based on function boundaries and hard limit. */
855
856 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
857 return 0;
858
859 epilogue_start = pc - PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
860 if (epilogue_start < func_start) epilogue_start = func_start;
861
862 epilogue_end = pc + PPC_MAX_EPILOGUE_INSTRUCTIONS * PPC_INSN_SIZE;
863 if (epilogue_end > func_end) epilogue_end = func_end;
864
865 curfrm = get_current_frame ();
866
867 /* Scan forward until next 'blr'. */
868
869 for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += PPC_INSN_SIZE)
870 {
871 if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
872 return 0;
873 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE);
874 if (insn == 0x4e800020)
875 break;
876 if (insn_changes_sp_or_jumps (insn))
877 return 0;
878 }
879
880 /* Scan backward until adjustment to stack pointer (R1). */
881
882 for (scan_pc = pc - PPC_INSN_SIZE;
883 scan_pc >= epilogue_start;
884 scan_pc -= PPC_INSN_SIZE)
885 {
886 if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
887 return 0;
888 insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE);
889 if (insn_changes_sp_or_jumps (insn))
890 return 1;
891 }
892
893 return 0;
894 }
895
896 /* Get the ith function argument for the current function. */
897 static CORE_ADDR
898 rs6000_fetch_pointer_argument (struct frame_info *frame, int argi,
899 struct type *type)
900 {
901 return get_frame_register_unsigned (frame, 3 + argi);
902 }
903
904 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
905
906 static CORE_ADDR
907 branch_dest (struct frame_info *frame, int opcode, int instr,
908 CORE_ADDR pc, CORE_ADDR safety)
909 {
910 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
911 CORE_ADDR dest;
912 int immediate;
913 int absolute;
914 int ext_op;
915
916 absolute = (int) ((instr >> 1) & 1);
917
918 switch (opcode)
919 {
920 case 18:
921 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
922 if (absolute)
923 dest = immediate;
924 else
925 dest = pc + immediate;
926 break;
927
928 case 16:
929 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
930 if (absolute)
931 dest = immediate;
932 else
933 dest = pc + immediate;
934 break;
935
936 case 19:
937 ext_op = (instr >> 1) & 0x3ff;
938
939 if (ext_op == 16) /* br conditional register */
940 {
941 dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3;
942
943 /* If we are about to return from a signal handler, dest is
944 something like 0x3c90. The current frame is a signal handler
945 caller frame, upon completion of the sigreturn system call
946 execution will return to the saved PC in the frame. */
947 if (dest < tdep->text_segment_base)
948 dest = read_memory_addr (get_frame_base (frame) + SIG_FRAME_PC_OFFSET,
949 tdep->wordsize);
950 }
951
952 else if (ext_op == 528) /* br cond to count reg */
953 {
954 dest = get_frame_register_unsigned (frame, tdep->ppc_ctr_regnum) & ~3;
955
956 /* If we are about to execute a system call, dest is something
957 like 0x22fc or 0x3b00. Upon completion the system call
958 will return to the address in the link register. */
959 if (dest < tdep->text_segment_base)
960 dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3;
961 }
962 else
963 return -1;
964 break;
965
966 default:
967 return -1;
968 }
969 return (dest < tdep->text_segment_base) ? safety : dest;
970 }
971
972
973 /* Sequence of bytes for breakpoint instruction. */
974
975 const static unsigned char *
976 rs6000_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
977 int *bp_size)
978 {
979 static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 };
980 static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d };
981 *bp_size = 4;
982 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
983 return big_breakpoint;
984 else
985 return little_breakpoint;
986 }
987
988
989 /* Instruction masks used during single-stepping of atomic sequences. */
990 #define LWARX_MASK 0xfc0007fe
991 #define LWARX_INSTRUCTION 0x7c000028
992 #define LDARX_INSTRUCTION 0x7c0000A8
993 #define STWCX_MASK 0xfc0007ff
994 #define STWCX_INSTRUCTION 0x7c00012d
995 #define STDCX_INSTRUCTION 0x7c0001ad
996 #define BC_MASK 0xfc000000
997 #define BC_INSTRUCTION 0x40000000
998
999 /* Checks for an atomic sequence of instructions beginning with a LWARX/LDARX
1000 instruction and ending with a STWCX/STDCX instruction. If such a sequence
1001 is found, attempt to step through it. A breakpoint is placed at the end of
1002 the sequence. */
1003
1004 static int
1005 deal_with_atomic_sequence (struct frame_info *frame)
1006 {
1007 CORE_ADDR pc = get_frame_pc (frame);
1008 CORE_ADDR breaks[2] = {-1, -1};
1009 CORE_ADDR loc = pc;
1010 CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination. */
1011 CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */
1012 int insn = read_memory_integer (loc, PPC_INSN_SIZE);
1013 int insn_count;
1014 int index;
1015 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
1016 const int atomic_sequence_length = 16; /* Instruction sequence length. */
1017 int opcode; /* Branch instruction's OPcode. */
1018 int bc_insn_count = 0; /* Conditional branch instruction count. */
1019
1020 /* Assume all atomic sequences start with a lwarx/ldarx instruction. */
1021 if ((insn & LWARX_MASK) != LWARX_INSTRUCTION
1022 && (insn & LWARX_MASK) != LDARX_INSTRUCTION)
1023 return 0;
1024
1025 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
1026 instructions. */
1027 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
1028 {
1029 loc += PPC_INSN_SIZE;
1030 insn = read_memory_integer (loc, PPC_INSN_SIZE);
1031
1032 /* Assume that there is at most one conditional branch in the atomic
1033 sequence. If a conditional branch is found, put a breakpoint in
1034 its destination address. */
1035 if ((insn & BC_MASK) == BC_INSTRUCTION)
1036 {
1037 if (bc_insn_count >= 1)
1038 return 0; /* More than one conditional branch found, fallback
1039 to the standard single-step code. */
1040
1041 opcode = insn >> 26;
1042 branch_bp = branch_dest (frame, opcode, insn, pc, breaks[0]);
1043
1044 if (branch_bp != -1)
1045 {
1046 breaks[1] = branch_bp;
1047 bc_insn_count++;
1048 last_breakpoint++;
1049 }
1050 }
1051
1052 if ((insn & STWCX_MASK) == STWCX_INSTRUCTION
1053 || (insn & STWCX_MASK) == STDCX_INSTRUCTION)
1054 break;
1055 }
1056
1057 /* Assume that the atomic sequence ends with a stwcx/stdcx instruction. */
1058 if ((insn & STWCX_MASK) != STWCX_INSTRUCTION
1059 && (insn & STWCX_MASK) != STDCX_INSTRUCTION)
1060 return 0;
1061
1062 closing_insn = loc;
1063 loc += PPC_INSN_SIZE;
1064 insn = read_memory_integer (loc, PPC_INSN_SIZE);
1065
1066 /* Insert a breakpoint right after the end of the atomic sequence. */
1067 breaks[0] = loc;
1068
1069 /* Check for duplicated breakpoints. Check also for a breakpoint
1070 placed (branch instruction's destination) at the stwcx/stdcx
1071 instruction, this resets the reservation and take us back to the
1072 lwarx/ldarx instruction at the beginning of the atomic sequence. */
1073 if (last_breakpoint && ((breaks[1] == breaks[0])
1074 || (breaks[1] == closing_insn)))
1075 last_breakpoint = 0;
1076
1077 /* Effectively inserts the breakpoints. */
1078 for (index = 0; index <= last_breakpoint; index++)
1079 insert_single_step_breakpoint (breaks[index]);
1080
1081 return 1;
1082 }
1083
1084 /* AIX does not support PT_STEP. Simulate it. */
1085
1086 int
1087 rs6000_software_single_step (struct frame_info *frame)
1088 {
1089 CORE_ADDR dummy;
1090 int breakp_sz;
1091 const gdb_byte *breakp
1092 = rs6000_breakpoint_from_pc (get_frame_arch (frame), &dummy, &breakp_sz);
1093 int ii, insn;
1094 CORE_ADDR loc;
1095 CORE_ADDR breaks[2];
1096 int opcode;
1097
1098 loc = get_frame_pc (frame);
1099
1100 insn = read_memory_integer (loc, 4);
1101
1102 if (deal_with_atomic_sequence (frame))
1103 return 1;
1104
1105 breaks[0] = loc + breakp_sz;
1106 opcode = insn >> 26;
1107 breaks[1] = branch_dest (frame, opcode, insn, loc, breaks[0]);
1108
1109 /* Don't put two breakpoints on the same address. */
1110 if (breaks[1] == breaks[0])
1111 breaks[1] = -1;
1112
1113 for (ii = 0; ii < 2; ++ii)
1114 {
1115 /* ignore invalid breakpoint. */
1116 if (breaks[ii] == -1)
1117 continue;
1118 insert_single_step_breakpoint (breaks[ii]);
1119 }
1120
1121 errno = 0; /* FIXME, don't ignore errors! */
1122 /* What errors? {read,write}_memory call error(). */
1123 return 1;
1124 }
1125
1126
1127 #define SIGNED_SHORT(x) \
1128 ((sizeof (short) == 2) \
1129 ? ((int)(short)(x)) \
1130 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
1131
1132 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
1133
1134 /* Limit the number of skipped non-prologue instructions, as the examining
1135 of the prologue is expensive. */
1136 static int max_skip_non_prologue_insns = 10;
1137
1138 /* Return nonzero if the given instruction OP can be part of the prologue
1139 of a function and saves a parameter on the stack. FRAMEP should be
1140 set if one of the previous instructions in the function has set the
1141 Frame Pointer. */
1142
1143 static int
1144 store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg)
1145 {
1146 /* Move parameters from argument registers to temporary register. */
1147 if ((op & 0xfc0007fe) == 0x7c000378) /* mr(.) Rx,Ry */
1148 {
1149 /* Rx must be scratch register r0. */
1150 const int rx_regno = (op >> 16) & 31;
1151 /* Ry: Only r3 - r10 are used for parameter passing. */
1152 const int ry_regno = GET_SRC_REG (op);
1153
1154 if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
1155 {
1156 *r0_contains_arg = 1;
1157 return 1;
1158 }
1159 else
1160 return 0;
1161 }
1162
1163 /* Save a General Purpose Register on stack. */
1164
1165 if ((op & 0xfc1f0003) == 0xf8010000 || /* std Rx,NUM(r1) */
1166 (op & 0xfc1f0000) == 0xd8010000) /* stfd Rx,NUM(r1) */
1167 {
1168 /* Rx: Only r3 - r10 are used for parameter passing. */
1169 const int rx_regno = GET_SRC_REG (op);
1170
1171 return (rx_regno >= 3 && rx_regno <= 10);
1172 }
1173
1174 /* Save a General Purpose Register on stack via the Frame Pointer. */
1175
1176 if (framep &&
1177 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */
1178 (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */
1179 (op & 0xfc1f0000) == 0xd81f0000)) /* stfd Rx,NUM(r31) */
1180 {
1181 /* Rx: Usually, only r3 - r10 are used for parameter passing.
1182 However, the compiler sometimes uses r0 to hold an argument. */
1183 const int rx_regno = GET_SRC_REG (op);
1184
1185 return ((rx_regno >= 3 && rx_regno <= 10)
1186 || (rx_regno == 0 && *r0_contains_arg));
1187 }
1188
1189 if ((op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */
1190 {
1191 /* Only f2 - f8 are used for parameter passing. */
1192 const int src_regno = GET_SRC_REG (op);
1193
1194 return (src_regno >= 2 && src_regno <= 8);
1195 }
1196
1197 if (framep && ((op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */
1198 {
1199 /* Only f2 - f8 are used for parameter passing. */
1200 const int src_regno = GET_SRC_REG (op);
1201
1202 return (src_regno >= 2 && src_regno <= 8);
1203 }
1204
1205 /* Not an insn that saves a parameter on stack. */
1206 return 0;
1207 }
1208
1209 /* Assuming that INSN is a "bl" instruction located at PC, return
1210 nonzero if the destination of the branch is a "blrl" instruction.
1211
1212 This sequence is sometimes found in certain function prologues.
1213 It allows the function to load the LR register with a value that
1214 they can use to access PIC data using PC-relative offsets. */
1215
1216 static int
1217 bl_to_blrl_insn_p (CORE_ADDR pc, int insn)
1218 {
1219 CORE_ADDR dest;
1220 int immediate;
1221 int absolute;
1222 int dest_insn;
1223
1224 absolute = (int) ((insn >> 1) & 1);
1225 immediate = ((insn & ~3) << 6) >> 6;
1226 if (absolute)
1227 dest = immediate;
1228 else
1229 dest = pc + immediate;
1230
1231 dest_insn = read_memory_integer (dest, 4);
1232 if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
1233 return 1;
1234
1235 return 0;
1236 }
1237
1238 /* return pc value after skipping a function prologue and also return
1239 information about a function frame.
1240
1241 in struct rs6000_framedata fdata:
1242 - frameless is TRUE, if function does not have a frame.
1243 - nosavedpc is TRUE, if function does not save %pc value in its frame.
1244 - offset is the initial size of this stack frame --- the amount by
1245 which we decrement the sp to allocate the frame.
1246 - saved_gpr is the number of the first saved gpr.
1247 - saved_fpr is the number of the first saved fpr.
1248 - saved_vr is the number of the first saved vr.
1249 - saved_ev is the number of the first saved ev.
1250 - alloca_reg is the number of the register used for alloca() handling.
1251 Otherwise -1.
1252 - gpr_offset is the offset of the first saved gpr from the previous frame.
1253 - fpr_offset is the offset of the first saved fpr from the previous frame.
1254 - vr_offset is the offset of the first saved vr from the previous frame.
1255 - ev_offset is the offset of the first saved ev from the previous frame.
1256 - lr_offset is the offset of the saved lr
1257 - cr_offset is the offset of the saved cr
1258 - vrsave_offset is the offset of the saved vrsave register
1259 */
1260
1261 static CORE_ADDR
1262 skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
1263 struct rs6000_framedata *fdata)
1264 {
1265 CORE_ADDR orig_pc = pc;
1266 CORE_ADDR last_prologue_pc = pc;
1267 CORE_ADDR li_found_pc = 0;
1268 gdb_byte buf[4];
1269 unsigned long op;
1270 long offset = 0;
1271 long vr_saved_offset = 0;
1272 int lr_reg = -1;
1273 int cr_reg = -1;
1274 int vr_reg = -1;
1275 int ev_reg = -1;
1276 long ev_offset = 0;
1277 int vrsave_reg = -1;
1278 int reg;
1279 int framep = 0;
1280 int minimal_toc_loaded = 0;
1281 int prev_insn_was_prologue_insn = 1;
1282 int num_skip_non_prologue_insns = 0;
1283 int r0_contains_arg = 0;
1284 const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
1285 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1286
1287 memset (fdata, 0, sizeof (struct rs6000_framedata));
1288 fdata->saved_gpr = -1;
1289 fdata->saved_fpr = -1;
1290 fdata->saved_vr = -1;
1291 fdata->saved_ev = -1;
1292 fdata->alloca_reg = -1;
1293 fdata->frameless = 1;
1294 fdata->nosavedpc = 1;
1295
1296 for (;; pc += 4)
1297 {
1298 /* Sometimes it isn't clear if an instruction is a prologue
1299 instruction or not. When we encounter one of these ambiguous
1300 cases, we'll set prev_insn_was_prologue_insn to 0 (false).
1301 Otherwise, we'll assume that it really is a prologue instruction. */
1302 if (prev_insn_was_prologue_insn)
1303 last_prologue_pc = pc;
1304
1305 /* Stop scanning if we've hit the limit. */
1306 if (pc >= lim_pc)
1307 break;
1308
1309 prev_insn_was_prologue_insn = 1;
1310
1311 /* Fetch the instruction and convert it to an integer. */
1312 if (target_read_memory (pc, buf, 4))
1313 break;
1314 op = extract_unsigned_integer (buf, 4);
1315
1316 if ((op & 0xfc1fffff) == 0x7c0802a6)
1317 { /* mflr Rx */
1318 /* Since shared library / PIC code, which needs to get its
1319 address at runtime, can appear to save more than one link
1320 register vis:
1321
1322 *INDENT-OFF*
1323 stwu r1,-304(r1)
1324 mflr r3
1325 bl 0xff570d0 (blrl)
1326 stw r30,296(r1)
1327 mflr r30
1328 stw r31,300(r1)
1329 stw r3,308(r1);
1330 ...
1331 *INDENT-ON*
1332
1333 remember just the first one, but skip over additional
1334 ones. */
1335 if (lr_reg == -1)
1336 lr_reg = (op & 0x03e00000);
1337 if (lr_reg == 0)
1338 r0_contains_arg = 0;
1339 continue;
1340 }
1341 else if ((op & 0xfc1fffff) == 0x7c000026)
1342 { /* mfcr Rx */
1343 cr_reg = (op & 0x03e00000);
1344 if (cr_reg == 0)
1345 r0_contains_arg = 0;
1346 continue;
1347
1348 }
1349 else if ((op & 0xfc1f0000) == 0xd8010000)
1350 { /* stfd Rx,NUM(r1) */
1351 reg = GET_SRC_REG (op);
1352 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
1353 {
1354 fdata->saved_fpr = reg;
1355 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
1356 }
1357 continue;
1358
1359 }
1360 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
1361 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
1362 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
1363 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
1364 {
1365
1366 reg = GET_SRC_REG (op);
1367 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
1368 {
1369 fdata->saved_gpr = reg;
1370 if ((op & 0xfc1f0003) == 0xf8010000)
1371 op &= ~3UL;
1372 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
1373 }
1374 continue;
1375
1376 }
1377 else if ((op & 0xffff0000) == 0x60000000)
1378 {
1379 /* nop */
1380 /* Allow nops in the prologue, but do not consider them to
1381 be part of the prologue unless followed by other prologue
1382 instructions. */
1383 prev_insn_was_prologue_insn = 0;
1384 continue;
1385
1386 }
1387 else if ((op & 0xffff0000) == 0x3c000000)
1388 { /* addis 0,0,NUM, used
1389 for >= 32k frames */
1390 fdata->offset = (op & 0x0000ffff) << 16;
1391 fdata->frameless = 0;
1392 r0_contains_arg = 0;
1393 continue;
1394
1395 }
1396 else if ((op & 0xffff0000) == 0x60000000)
1397 { /* ori 0,0,NUM, 2nd ha
1398 lf of >= 32k frames */
1399 fdata->offset |= (op & 0x0000ffff);
1400 fdata->frameless = 0;
1401 r0_contains_arg = 0;
1402 continue;
1403
1404 }
1405 else if (lr_reg >= 0 &&
1406 /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1407 (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
1408 /* stw Rx, NUM(r1) */
1409 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
1410 /* stwu Rx, NUM(r1) */
1411 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
1412 { /* where Rx == lr */
1413 fdata->lr_offset = offset;
1414 fdata->nosavedpc = 0;
1415 /* Invalidate lr_reg, but don't set it to -1.
1416 That would mean that it had never been set. */
1417 lr_reg = -2;
1418 if ((op & 0xfc000003) == 0xf8000000 || /* std */
1419 (op & 0xfc000000) == 0x90000000) /* stw */
1420 {
1421 /* Does not update r1, so add displacement to lr_offset. */
1422 fdata->lr_offset += SIGNED_SHORT (op);
1423 }
1424 continue;
1425
1426 }
1427 else if (cr_reg >= 0 &&
1428 /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
1429 (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
1430 /* stw Rx, NUM(r1) */
1431 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
1432 /* stwu Rx, NUM(r1) */
1433 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
1434 { /* where Rx == cr */
1435 fdata->cr_offset = offset;
1436 /* Invalidate cr_reg, but don't set it to -1.
1437 That would mean that it had never been set. */
1438 cr_reg = -2;
1439 if ((op & 0xfc000003) == 0xf8000000 ||
1440 (op & 0xfc000000) == 0x90000000)
1441 {
1442 /* Does not update r1, so add displacement to cr_offset. */
1443 fdata->cr_offset += SIGNED_SHORT (op);
1444 }
1445 continue;
1446
1447 }
1448 else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
1449 {
1450 /* bcl 20,xx,.+4 is used to get the current PC, with or without
1451 prediction bits. If the LR has already been saved, we can
1452 skip it. */
1453 continue;
1454 }
1455 else if (op == 0x48000005)
1456 { /* bl .+4 used in
1457 -mrelocatable */
1458 continue;
1459
1460 }
1461 else if (op == 0x48000004)
1462 { /* b .+4 (xlc) */
1463 break;
1464
1465 }
1466 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
1467 in V.4 -mminimal-toc */
1468 (op & 0xffff0000) == 0x3bde0000)
1469 { /* addi 30,30,foo@l */
1470 continue;
1471
1472 }
1473 else if ((op & 0xfc000001) == 0x48000001)
1474 { /* bl foo,
1475 to save fprs??? */
1476
1477 fdata->frameless = 0;
1478
1479 /* If the return address has already been saved, we can skip
1480 calls to blrl (for PIC). */
1481 if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op))
1482 continue;
1483
1484 /* Don't skip over the subroutine call if it is not within
1485 the first three instructions of the prologue and either
1486 we have no line table information or the line info tells
1487 us that the subroutine call is not part of the line
1488 associated with the prologue. */
1489 if ((pc - orig_pc) > 8)
1490 {
1491 struct symtab_and_line prologue_sal = find_pc_line (orig_pc, 0);
1492 struct symtab_and_line this_sal = find_pc_line (pc, 0);
1493
1494 if ((prologue_sal.line == 0) || (prologue_sal.line != this_sal.line))
1495 break;
1496 }
1497
1498 op = read_memory_integer (pc + 4, 4);
1499
1500 /* At this point, make sure this is not a trampoline
1501 function (a function that simply calls another functions,
1502 and nothing else). If the next is not a nop, this branch
1503 was part of the function prologue. */
1504
1505 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
1506 break; /* don't skip over
1507 this branch */
1508 continue;
1509
1510 }
1511 /* update stack pointer */
1512 else if ((op & 0xfc1f0000) == 0x94010000)
1513 { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */
1514 fdata->frameless = 0;
1515 fdata->offset = SIGNED_SHORT (op);
1516 offset = fdata->offset;
1517 continue;
1518 }
1519 else if ((op & 0xfc1f016a) == 0x7c01016e)
1520 { /* stwux rX,r1,rY */
1521 /* no way to figure out what r1 is going to be */
1522 fdata->frameless = 0;
1523 offset = fdata->offset;
1524 continue;
1525 }
1526 else if ((op & 0xfc1f0003) == 0xf8010001)
1527 { /* stdu rX,NUM(r1) */
1528 fdata->frameless = 0;
1529 fdata->offset = SIGNED_SHORT (op & ~3UL);
1530 offset = fdata->offset;
1531 continue;
1532 }
1533 else if ((op & 0xfc1f016a) == 0x7c01016a)
1534 { /* stdux rX,r1,rY */
1535 /* no way to figure out what r1 is going to be */
1536 fdata->frameless = 0;
1537 offset = fdata->offset;
1538 continue;
1539 }
1540 else if ((op & 0xffff0000) == 0x38210000)
1541 { /* addi r1,r1,SIMM */
1542 fdata->frameless = 0;
1543 fdata->offset += SIGNED_SHORT (op);
1544 offset = fdata->offset;
1545 continue;
1546 }
1547 /* Load up minimal toc pointer. Do not treat an epilogue restore
1548 of r31 as a minimal TOC load. */
1549 else if (((op >> 22) == 0x20f || /* l r31,... or l r30,... */
1550 (op >> 22) == 0x3af) /* ld r31,... or ld r30,... */
1551 && !framep
1552 && !minimal_toc_loaded)
1553 {
1554 minimal_toc_loaded = 1;
1555 continue;
1556
1557 /* move parameters from argument registers to local variable
1558 registers */
1559 }
1560 else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */
1561 (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */
1562 (((op >> 21) & 31) <= 10) &&
1563 ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
1564 {
1565 continue;
1566
1567 /* store parameters in stack */
1568 }
1569 /* Move parameters from argument registers to temporary register. */
1570 else if (store_param_on_stack_p (op, framep, &r0_contains_arg))
1571 {
1572 continue;
1573
1574 /* Set up frame pointer */
1575 }
1576 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
1577 || op == 0x7c3f0b78)
1578 { /* mr r31, r1 */
1579 fdata->frameless = 0;
1580 framep = 1;
1581 fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31);
1582 continue;
1583
1584 /* Another way to set up the frame pointer. */
1585 }
1586 else if ((op & 0xfc1fffff) == 0x38010000)
1587 { /* addi rX, r1, 0x0 */
1588 fdata->frameless = 0;
1589 framep = 1;
1590 fdata->alloca_reg = (tdep->ppc_gp0_regnum
1591 + ((op & ~0x38010000) >> 21));
1592 continue;
1593 }
1594 /* AltiVec related instructions. */
1595 /* Store the vrsave register (spr 256) in another register for
1596 later manipulation, or load a register into the vrsave
1597 register. 2 instructions are used: mfvrsave and
1598 mtvrsave. They are shorthand notation for mfspr Rn, SPR256
1599 and mtspr SPR256, Rn. */
1600 /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
1601 mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110 */
1602 else if ((op & 0xfc1fffff) == 0x7c0042a6) /* mfvrsave Rn */
1603 {
1604 vrsave_reg = GET_SRC_REG (op);
1605 continue;
1606 }
1607 else if ((op & 0xfc1fffff) == 0x7c0043a6) /* mtvrsave Rn */
1608 {
1609 continue;
1610 }
1611 /* Store the register where vrsave was saved to onto the stack:
1612 rS is the register where vrsave was stored in a previous
1613 instruction. */
1614 /* 100100 sssss 00001 dddddddd dddddddd */
1615 else if ((op & 0xfc1f0000) == 0x90010000) /* stw rS, d(r1) */
1616 {
1617 if (vrsave_reg == GET_SRC_REG (op))
1618 {
1619 fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
1620 vrsave_reg = -1;
1621 }
1622 continue;
1623 }
1624 /* Compute the new value of vrsave, by modifying the register
1625 where vrsave was saved to. */
1626 else if (((op & 0xfc000000) == 0x64000000) /* oris Ra, Rs, UIMM */
1627 || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
1628 {
1629 continue;
1630 }
1631 /* li r0, SIMM (short for addi r0, 0, SIMM). This is the first
1632 in a pair of insns to save the vector registers on the
1633 stack. */
1634 /* 001110 00000 00000 iiii iiii iiii iiii */
1635 /* 001110 01110 00000 iiii iiii iiii iiii */
1636 else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */
1637 || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */
1638 {
1639 if ((op & 0xffff0000) == 0x38000000)
1640 r0_contains_arg = 0;
1641 li_found_pc = pc;
1642 vr_saved_offset = SIGNED_SHORT (op);
1643
1644 /* This insn by itself is not part of the prologue, unless
1645 if part of the pair of insns mentioned above. So do not
1646 record this insn as part of the prologue yet. */
1647 prev_insn_was_prologue_insn = 0;
1648 }
1649 /* Store vector register S at (r31+r0) aligned to 16 bytes. */
1650 /* 011111 sssss 11111 00000 00111001110 */
1651 else if ((op & 0xfc1fffff) == 0x7c1f01ce) /* stvx Vs, R31, R0 */
1652 {
1653 if (pc == (li_found_pc + 4))
1654 {
1655 vr_reg = GET_SRC_REG (op);
1656 /* If this is the first vector reg to be saved, or if
1657 it has a lower number than others previously seen,
1658 reupdate the frame info. */
1659 if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
1660 {
1661 fdata->saved_vr = vr_reg;
1662 fdata->vr_offset = vr_saved_offset + offset;
1663 }
1664 vr_saved_offset = -1;
1665 vr_reg = -1;
1666 li_found_pc = 0;
1667 }
1668 }
1669 /* End AltiVec related instructions. */
1670
1671 /* Start BookE related instructions. */
1672 /* Store gen register S at (r31+uimm).
1673 Any register less than r13 is volatile, so we don't care. */
1674 /* 000100 sssss 11111 iiiii 01100100001 */
1675 else if (arch_info->mach == bfd_mach_ppc_e500
1676 && (op & 0xfc1f07ff) == 0x101f0321) /* evstdd Rs,uimm(R31) */
1677 {
1678 if ((op & 0x03e00000) >= 0x01a00000) /* Rs >= r13 */
1679 {
1680 unsigned int imm;
1681 ev_reg = GET_SRC_REG (op);
1682 imm = (op >> 11) & 0x1f;
1683 ev_offset = imm * 8;
1684 /* If this is the first vector reg to be saved, or if
1685 it has a lower number than others previously seen,
1686 reupdate the frame info. */
1687 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1688 {
1689 fdata->saved_ev = ev_reg;
1690 fdata->ev_offset = ev_offset + offset;
1691 }
1692 }
1693 continue;
1694 }
1695 /* Store gen register rS at (r1+rB). */
1696 /* 000100 sssss 00001 bbbbb 01100100000 */
1697 else if (arch_info->mach == bfd_mach_ppc_e500
1698 && (op & 0xffe007ff) == 0x13e00320) /* evstddx RS,R1,Rb */
1699 {
1700 if (pc == (li_found_pc + 4))
1701 {
1702 ev_reg = GET_SRC_REG (op);
1703 /* If this is the first vector reg to be saved, or if
1704 it has a lower number than others previously seen,
1705 reupdate the frame info. */
1706 /* We know the contents of rB from the previous instruction. */
1707 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1708 {
1709 fdata->saved_ev = ev_reg;
1710 fdata->ev_offset = vr_saved_offset + offset;
1711 }
1712 vr_saved_offset = -1;
1713 ev_reg = -1;
1714 li_found_pc = 0;
1715 }
1716 continue;
1717 }
1718 /* Store gen register r31 at (rA+uimm). */
1719 /* 000100 11111 aaaaa iiiii 01100100001 */
1720 else if (arch_info->mach == bfd_mach_ppc_e500
1721 && (op & 0xffe007ff) == 0x13e00321) /* evstdd R31,Ra,UIMM */
1722 {
1723 /* Wwe know that the source register is 31 already, but
1724 it can't hurt to compute it. */
1725 ev_reg = GET_SRC_REG (op);
1726 ev_offset = ((op >> 11) & 0x1f) * 8;
1727 /* If this is the first vector reg to be saved, or if
1728 it has a lower number than others previously seen,
1729 reupdate the frame info. */
1730 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1731 {
1732 fdata->saved_ev = ev_reg;
1733 fdata->ev_offset = ev_offset + offset;
1734 }
1735
1736 continue;
1737 }
1738 /* Store gen register S at (r31+r0).
1739 Store param on stack when offset from SP bigger than 4 bytes. */
1740 /* 000100 sssss 11111 00000 01100100000 */
1741 else if (arch_info->mach == bfd_mach_ppc_e500
1742 && (op & 0xfc1fffff) == 0x101f0320) /* evstddx Rs,R31,R0 */
1743 {
1744 if (pc == (li_found_pc + 4))
1745 {
1746 if ((op & 0x03e00000) >= 0x01a00000)
1747 {
1748 ev_reg = GET_SRC_REG (op);
1749 /* If this is the first vector reg to be saved, or if
1750 it has a lower number than others previously seen,
1751 reupdate the frame info. */
1752 /* We know the contents of r0 from the previous
1753 instruction. */
1754 if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg)
1755 {
1756 fdata->saved_ev = ev_reg;
1757 fdata->ev_offset = vr_saved_offset + offset;
1758 }
1759 ev_reg = -1;
1760 }
1761 vr_saved_offset = -1;
1762 li_found_pc = 0;
1763 continue;
1764 }
1765 }
1766 /* End BookE related instructions. */
1767
1768 else
1769 {
1770 /* Not a recognized prologue instruction.
1771 Handle optimizer code motions into the prologue by continuing
1772 the search if we have no valid frame yet or if the return
1773 address is not yet saved in the frame. */
1774 if (fdata->frameless == 0 && fdata->nosavedpc == 0)
1775 break;
1776
1777 if (op == 0x4e800020 /* blr */
1778 || op == 0x4e800420) /* bctr */
1779 /* Do not scan past epilogue in frameless functions or
1780 trampolines. */
1781 break;
1782 if ((op & 0xf4000000) == 0x40000000) /* bxx */
1783 /* Never skip branches. */
1784 break;
1785
1786 if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
1787 /* Do not scan too many insns, scanning insns is expensive with
1788 remote targets. */
1789 break;
1790
1791 /* Continue scanning. */
1792 prev_insn_was_prologue_insn = 0;
1793 continue;
1794 }
1795 }
1796
1797 #if 0
1798 /* I have problems with skipping over __main() that I need to address
1799 * sometime. Previously, I used to use misc_function_vector which
1800 * didn't work as well as I wanted to be. -MGO */
1801
1802 /* If the first thing after skipping a prolog is a branch to a function,
1803 this might be a call to an initializer in main(), introduced by gcc2.
1804 We'd like to skip over it as well. Fortunately, xlc does some extra
1805 work before calling a function right after a prologue, thus we can
1806 single out such gcc2 behaviour. */
1807
1808
1809 if ((op & 0xfc000001) == 0x48000001)
1810 { /* bl foo, an initializer function? */
1811 op = read_memory_integer (pc + 4, 4);
1812
1813 if (op == 0x4def7b82)
1814 { /* cror 0xf, 0xf, 0xf (nop) */
1815
1816 /* Check and see if we are in main. If so, skip over this
1817 initializer function as well. */
1818
1819 tmp = find_pc_misc_function (pc);
1820 if (tmp >= 0
1821 && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
1822 return pc + 8;
1823 }
1824 }
1825 #endif /* 0 */
1826
1827 fdata->offset = -fdata->offset;
1828 return last_prologue_pc;
1829 }
1830
1831
1832 /*************************************************************************
1833 Support for creating pushing a dummy frame into the stack, and popping
1834 frames, etc.
1835 *************************************************************************/
1836
1837
1838 /* All the ABI's require 16 byte alignment. */
1839 static CORE_ADDR
1840 rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1841 {
1842 return (addr & -16);
1843 }
1844
1845 /* Pass the arguments in either registers, or in the stack. In RS/6000,
1846 the first eight words of the argument list (that might be less than
1847 eight parameters if some parameters occupy more than one word) are
1848 passed in r3..r10 registers. float and double parameters are
1849 passed in fpr's, in addition to that. Rest of the parameters if any
1850 are passed in user stack. There might be cases in which half of the
1851 parameter is copied into registers, the other half is pushed into
1852 stack.
1853
1854 Stack must be aligned on 64-bit boundaries when synthesizing
1855 function calls.
1856
1857 If the function is returning a structure, then the return address is passed
1858 in r3, then the first 7 words of the parameters can be passed in registers,
1859 starting from r4. */
1860
1861 static CORE_ADDR
1862 rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1863 struct regcache *regcache, CORE_ADDR bp_addr,
1864 int nargs, struct value **args, CORE_ADDR sp,
1865 int struct_return, CORE_ADDR struct_addr)
1866 {
1867 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1868 int ii;
1869 int len = 0;
1870 int argno; /* current argument number */
1871 int argbytes; /* current argument byte */
1872 gdb_byte tmp_buffer[50];
1873 int f_argno = 0; /* current floating point argno */
1874 int wordsize = gdbarch_tdep (gdbarch)->wordsize;
1875 CORE_ADDR func_addr = find_function_addr (function, NULL);
1876
1877 struct value *arg = 0;
1878 struct type *type;
1879
1880 ULONGEST saved_sp;
1881
1882 /* The calling convention this function implements assumes the
1883 processor has floating-point registers. We shouldn't be using it
1884 on PPC variants that lack them. */
1885 gdb_assert (ppc_floating_point_unit_p (gdbarch));
1886
1887 /* The first eight words of ther arguments are passed in registers.
1888 Copy them appropriately. */
1889 ii = 0;
1890
1891 /* If the function is returning a `struct', then the first word
1892 (which will be passed in r3) is used for struct return address.
1893 In that case we should advance one word and start from r4
1894 register to copy parameters. */
1895 if (struct_return)
1896 {
1897 regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
1898 struct_addr);
1899 ii++;
1900 }
1901
1902 /*
1903 effectively indirect call... gcc does...
1904
1905 return_val example( float, int);
1906
1907 eabi:
1908 float in fp0, int in r3
1909 offset of stack on overflow 8/16
1910 for varargs, must go by type.
1911 power open:
1912 float in r3&r4, int in r5
1913 offset of stack on overflow different
1914 both:
1915 return in r3 or f0. If no float, must study how gcc emulates floats;
1916 pay attention to arg promotion.
1917 User may have to cast\args to handle promotion correctly
1918 since gdb won't know if prototype supplied or not.
1919 */
1920
1921 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
1922 {
1923 int reg_size = register_size (gdbarch, ii + 3);
1924
1925 arg = args[argno];
1926 type = check_typedef (value_type (arg));
1927 len = TYPE_LENGTH (type);
1928
1929 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1930 {
1931
1932 /* Floating point arguments are passed in fpr's, as well as gpr's.
1933 There are 13 fpr's reserved for passing parameters. At this point
1934 there is no way we would run out of them. */
1935
1936 gdb_assert (len <= 8);
1937
1938 regcache_cooked_write (regcache,
1939 tdep->ppc_fp0_regnum + 1 + f_argno,
1940 value_contents (arg));
1941 ++f_argno;
1942 }
1943
1944 if (len > reg_size)
1945 {
1946
1947 /* Argument takes more than one register. */
1948 while (argbytes < len)
1949 {
1950 gdb_byte word[MAX_REGISTER_SIZE];
1951 memset (word, 0, reg_size);
1952 memcpy (word,
1953 ((char *) value_contents (arg)) + argbytes,
1954 (len - argbytes) > reg_size
1955 ? reg_size : len - argbytes);
1956 regcache_cooked_write (regcache,
1957 tdep->ppc_gp0_regnum + 3 + ii,
1958 word);
1959 ++ii, argbytes += reg_size;
1960
1961 if (ii >= 8)
1962 goto ran_out_of_registers_for_arguments;
1963 }
1964 argbytes = 0;
1965 --ii;
1966 }
1967 else
1968 {
1969 /* Argument can fit in one register. No problem. */
1970 int adj = gdbarch_byte_order (gdbarch)
1971 == BFD_ENDIAN_BIG ? reg_size - len : 0;
1972 gdb_byte word[MAX_REGISTER_SIZE];
1973
1974 memset (word, 0, reg_size);
1975 memcpy (word, value_contents (arg), len);
1976 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3 +ii, word);
1977 }
1978 ++argno;
1979 }
1980
1981 ran_out_of_registers_for_arguments:
1982
1983 regcache_cooked_read_unsigned (regcache,
1984 gdbarch_sp_regnum (gdbarch),
1985 &saved_sp);
1986
1987 /* Location for 8 parameters are always reserved. */
1988 sp -= wordsize * 8;
1989
1990 /* Another six words for back chain, TOC register, link register, etc. */
1991 sp -= wordsize * 6;
1992
1993 /* Stack pointer must be quadword aligned. */
1994 sp &= -16;
1995
1996 /* If there are more arguments, allocate space for them in
1997 the stack, then push them starting from the ninth one. */
1998
1999 if ((argno < nargs) || argbytes)
2000 {
2001 int space = 0, jj;
2002
2003 if (argbytes)
2004 {
2005 space += ((len - argbytes + 3) & -4);
2006 jj = argno + 1;
2007 }
2008 else
2009 jj = argno;
2010
2011 for (; jj < nargs; ++jj)
2012 {
2013 struct value *val = args[jj];
2014 space += ((TYPE_LENGTH (value_type (val))) + 3) & -4;
2015 }
2016
2017 /* Add location required for the rest of the parameters. */
2018 space = (space + 15) & -16;
2019 sp -= space;
2020
2021 /* This is another instance we need to be concerned about
2022 securing our stack space. If we write anything underneath %sp
2023 (r1), we might conflict with the kernel who thinks he is free
2024 to use this area. So, update %sp first before doing anything
2025 else. */
2026
2027 regcache_raw_write_signed (regcache,
2028 gdbarch_sp_regnum (gdbarch), sp);
2029
2030 /* If the last argument copied into the registers didn't fit there
2031 completely, push the rest of it into stack. */
2032
2033 if (argbytes)
2034 {
2035 write_memory (sp + 24 + (ii * 4),
2036 value_contents (arg) + argbytes,
2037 len - argbytes);
2038 ++argno;
2039 ii += ((len - argbytes + 3) & -4) / 4;
2040 }
2041
2042 /* Push the rest of the arguments into stack. */
2043 for (; argno < nargs; ++argno)
2044 {
2045
2046 arg = args[argno];
2047 type = check_typedef (value_type (arg));
2048 len = TYPE_LENGTH (type);
2049
2050
2051 /* Float types should be passed in fpr's, as well as in the
2052 stack. */
2053 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
2054 {
2055
2056 gdb_assert (len <= 8);
2057
2058 regcache_cooked_write (regcache,
2059 tdep->ppc_fp0_regnum + 1 + f_argno,
2060 value_contents (arg));
2061 ++f_argno;
2062 }
2063
2064 write_memory (sp + 24 + (ii * 4), value_contents (arg), len);
2065 ii += ((len + 3) & -4) / 4;
2066 }
2067 }
2068
2069 /* Set the stack pointer. According to the ABI, the SP is meant to
2070 be set _before_ the corresponding stack space is used. On AIX,
2071 this even applies when the target has been completely stopped!
2072 Not doing this can lead to conflicts with the kernel which thinks
2073 that it still has control over this not-yet-allocated stack
2074 region. */
2075 regcache_raw_write_signed (regcache, gdbarch_sp_regnum (gdbarch), sp);
2076
2077 /* Set back chain properly. */
2078 store_unsigned_integer (tmp_buffer, wordsize, saved_sp);
2079 write_memory (sp, tmp_buffer, wordsize);
2080
2081 /* Point the inferior function call's return address at the dummy's
2082 breakpoint. */
2083 regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
2084
2085 /* Set the TOC register, get the value from the objfile reader
2086 which, in turn, gets it from the VMAP table. */
2087 if (rs6000_find_toc_address_hook != NULL)
2088 {
2089 CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (func_addr);
2090 regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, tocvalue);
2091 }
2092
2093 target_store_registers (regcache, -1);
2094 return sp;
2095 }
2096
2097 static enum return_value_convention
2098 rs6000_return_value (struct gdbarch *gdbarch, struct type *valtype,
2099 struct regcache *regcache, gdb_byte *readbuf,
2100 const gdb_byte *writebuf)
2101 {
2102 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2103 gdb_byte buf[8];
2104
2105 /* The calling convention this function implements assumes the
2106 processor has floating-point registers. We shouldn't be using it
2107 on PowerPC variants that lack them. */
2108 gdb_assert (ppc_floating_point_unit_p (gdbarch));
2109
2110 /* AltiVec extension: Functions that declare a vector data type as a
2111 return value place that return value in VR2. */
2112 if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)
2113 && TYPE_LENGTH (valtype) == 16)
2114 {
2115 if (readbuf)
2116 regcache_cooked_read (regcache, tdep->ppc_vr0_regnum + 2, readbuf);
2117 if (writebuf)
2118 regcache_cooked_write (regcache, tdep->ppc_vr0_regnum + 2, writebuf);
2119
2120 return RETURN_VALUE_REGISTER_CONVENTION;
2121 }
2122
2123 /* If the called subprogram returns an aggregate, there exists an
2124 implicit first argument, whose value is the address of a caller-
2125 allocated buffer into which the callee is assumed to store its
2126 return value. All explicit parameters are appropriately
2127 relabeled. */
2128 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
2129 || TYPE_CODE (valtype) == TYPE_CODE_UNION
2130 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
2131 return RETURN_VALUE_STRUCT_CONVENTION;
2132
2133 /* Scalar floating-point values are returned in FPR1 for float or
2134 double, and in FPR1:FPR2 for quadword precision. Fortran
2135 complex*8 and complex*16 are returned in FPR1:FPR2, and
2136 complex*32 is returned in FPR1:FPR4. */
2137 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
2138 && (TYPE_LENGTH (valtype) == 4 || TYPE_LENGTH (valtype) == 8))
2139 {
2140 struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum);
2141 gdb_byte regval[8];
2142
2143 /* FIXME: kettenis/2007-01-01: Add support for quadword
2144 precision and complex. */
2145
2146 if (readbuf)
2147 {
2148 regcache_cooked_read (regcache, tdep->ppc_fp0_regnum + 1, regval);
2149 convert_typed_floating (regval, regtype, readbuf, valtype);
2150 }
2151 if (writebuf)
2152 {
2153 convert_typed_floating (writebuf, valtype, regval, regtype);
2154 regcache_cooked_write (regcache, tdep->ppc_fp0_regnum + 1, regval);
2155 }
2156
2157 return RETURN_VALUE_REGISTER_CONVENTION;
2158 }
2159
2160 /* Values of the types int, long, short, pointer, and char (length
2161 is less than or equal to four bytes), as well as bit values of
2162 lengths less than or equal to 32 bits, must be returned right
2163 justified in GPR3 with signed values sign extended and unsigned
2164 values zero extended, as necessary. */
2165 if (TYPE_LENGTH (valtype) <= tdep->wordsize)
2166 {
2167 if (readbuf)
2168 {
2169 ULONGEST regval;
2170
2171 /* For reading we don't have to worry about sign extension. */
2172 regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
2173 &regval);
2174 store_unsigned_integer (readbuf, TYPE_LENGTH (valtype), regval);
2175 }
2176 if (writebuf)
2177 {
2178 /* For writing, use unpack_long since that should handle any
2179 required sign extension. */
2180 regcache_cooked_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
2181 unpack_long (valtype, writebuf));
2182 }
2183
2184 return RETURN_VALUE_REGISTER_CONVENTION;
2185 }
2186
2187 /* Eight-byte non-floating-point scalar values must be returned in
2188 GPR3:GPR4. */
2189
2190 if (TYPE_LENGTH (valtype) == 8)
2191 {
2192 gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_FLT);
2193 gdb_assert (tdep->wordsize == 4);
2194
2195 if (readbuf)
2196 {
2197 gdb_byte regval[8];
2198
2199 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 3, regval);
2200 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 4,
2201 regval + 4);
2202 memcpy (readbuf, regval, 8);
2203 }
2204 if (writebuf)
2205 {
2206 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3, writebuf);
2207 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 4,
2208 writebuf + 4);
2209 }
2210
2211 return RETURN_VALUE_REGISTER_CONVENTION;
2212 }
2213
2214 return RETURN_VALUE_STRUCT_CONVENTION;
2215 }
2216
2217 /* Return whether handle_inferior_event() should proceed through code
2218 starting at PC in function NAME when stepping.
2219
2220 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
2221 handle memory references that are too distant to fit in instructions
2222 generated by the compiler. For example, if 'foo' in the following
2223 instruction:
2224
2225 lwz r9,foo(r2)
2226
2227 is greater than 32767, the linker might replace the lwz with a branch to
2228 somewhere in @FIX1 that does the load in 2 instructions and then branches
2229 back to where execution should continue.
2230
2231 GDB should silently step over @FIX code, just like AIX dbx does.
2232 Unfortunately, the linker uses the "b" instruction for the
2233 branches, meaning that the link register doesn't get set.
2234 Therefore, GDB's usual step_over_function () mechanism won't work.
2235
2236 Instead, use the gdbarch_skip_trampoline_code and
2237 gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
2238 @FIX code. */
2239
2240 int
2241 rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name)
2242 {
2243 return name && !strncmp (name, "@FIX", 4);
2244 }
2245
2246 /* Skip code that the user doesn't want to see when stepping:
2247
2248 1. Indirect function calls use a piece of trampoline code to do context
2249 switching, i.e. to set the new TOC table. Skip such code if we are on
2250 its first instruction (as when we have single-stepped to here).
2251
2252 2. Skip shared library trampoline code (which is different from
2253 indirect function call trampolines).
2254
2255 3. Skip bigtoc fixup code.
2256
2257 Result is desired PC to step until, or NULL if we are not in
2258 code that should be skipped. */
2259
2260 CORE_ADDR
2261 rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
2262 {
2263 unsigned int ii, op;
2264 int rel;
2265 CORE_ADDR solib_target_pc;
2266 struct minimal_symbol *msymbol;
2267
2268 static unsigned trampoline_code[] =
2269 {
2270 0x800b0000, /* l r0,0x0(r11) */
2271 0x90410014, /* st r2,0x14(r1) */
2272 0x7c0903a6, /* mtctr r0 */
2273 0x804b0004, /* l r2,0x4(r11) */
2274 0x816b0008, /* l r11,0x8(r11) */
2275 0x4e800420, /* bctr */
2276 0x4e800020, /* br */
2277 0
2278 };
2279
2280 /* Check for bigtoc fixup code. */
2281 msymbol = lookup_minimal_symbol_by_pc (pc);
2282 if (msymbol
2283 && rs6000_in_solib_return_trampoline (pc,
2284 DEPRECATED_SYMBOL_NAME (msymbol)))
2285 {
2286 /* Double-check that the third instruction from PC is relative "b". */
2287 op = read_memory_integer (pc + 8, 4);
2288 if ((op & 0xfc000003) == 0x48000000)
2289 {
2290 /* Extract bits 6-29 as a signed 24-bit relative word address and
2291 add it to the containing PC. */
2292 rel = ((int)(op << 6) >> 6);
2293 return pc + 8 + rel;
2294 }
2295 }
2296
2297 /* If pc is in a shared library trampoline, return its target. */
2298 solib_target_pc = find_solib_trampoline_target (frame, pc);
2299 if (solib_target_pc)
2300 return solib_target_pc;
2301
2302 for (ii = 0; trampoline_code[ii]; ++ii)
2303 {
2304 op = read_memory_integer (pc + (ii * 4), 4);
2305 if (op != trampoline_code[ii])
2306 return 0;
2307 }
2308 ii = get_frame_register_unsigned (frame, 11); /* r11 holds destination addr */
2309 pc = read_memory_addr (ii,
2310 gdbarch_tdep (get_frame_arch (frame))->wordsize); /* (r11) value */
2311 return pc;
2312 }
2313
2314 /* ISA-specific vector types. */
2315
2316 static struct type *
2317 rs6000_builtin_type_vec64 (struct gdbarch *gdbarch)
2318 {
2319 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2320
2321 if (!tdep->ppc_builtin_type_vec64)
2322 {
2323 /* The type we're building is this: */
2324 #if 0
2325 union __gdb_builtin_type_vec64
2326 {
2327 int64_t uint64;
2328 float v2_float[2];
2329 int32_t v2_int32[2];
2330 int16_t v4_int16[4];
2331 int8_t v8_int8[8];
2332 };
2333 #endif
2334
2335 struct type *t;
2336
2337 t = init_composite_type ("__ppc_builtin_type_vec64", TYPE_CODE_UNION);
2338 append_composite_type_field (t, "uint64", builtin_type_int64);
2339 append_composite_type_field (t, "v2_float",
2340 init_vector_type (builtin_type_float, 2));
2341 append_composite_type_field (t, "v2_int32",
2342 init_vector_type (builtin_type_int32, 2));
2343 append_composite_type_field (t, "v4_int16",
2344 init_vector_type (builtin_type_int16, 4));
2345 append_composite_type_field (t, "v8_int8",
2346 init_vector_type (builtin_type_int8, 8));
2347
2348 TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
2349 TYPE_NAME (t) = "ppc_builtin_type_vec64";
2350 tdep->ppc_builtin_type_vec64 = t;
2351 }
2352
2353 return tdep->ppc_builtin_type_vec64;
2354 }
2355
2356 /* Return the size of register REG when words are WORDSIZE bytes long. If REG
2357 isn't available with that word size, return 0. */
2358
2359 static int
2360 regsize (const struct reg *reg, int wordsize)
2361 {
2362 return wordsize == 8 ? reg->sz64 : reg->sz32;
2363 }
2364
2365 /* Return the name of register number REGNO, or the empty string if it
2366 is an anonymous register. */
2367
2368 static const char *
2369 rs6000_register_name (struct gdbarch *gdbarch, int regno)
2370 {
2371 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2372
2373 /* The upper half "registers" have names in the XML description,
2374 but we present only the low GPRs and the full 64-bit registers
2375 to the user. */
2376 if (tdep->ppc_ev0_upper_regnum >= 0
2377 && tdep->ppc_ev0_upper_regnum <= regno
2378 && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
2379 return "";
2380
2381 /* Check if the SPE pseudo registers are available. */
2382 if (IS_SPE_PSEUDOREG (tdep, regno))
2383 {
2384 static const char *const spe_regnames[] = {
2385 "ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
2386 "ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
2387 "ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
2388 "ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
2389 };
2390 return spe_regnames[regno - tdep->ppc_ev0_regnum];
2391 }
2392
2393 /* Check if the decimal128 pseudo-registers are available. */
2394 if (IS_DFP_PSEUDOREG (tdep, regno))
2395 {
2396 static const char *const dfp128_regnames[] = {
2397 "dl0", "dl1", "dl2", "dl3",
2398 "dl4", "dl5", "dl6", "dl7",
2399 "dl8", "dl9", "dl10", "dl11",
2400 "dl12", "dl13", "dl14", "dl15"
2401 };
2402 return dfp128_regnames[regno - tdep->ppc_dl0_regnum];
2403 }
2404
2405 return tdesc_register_name (gdbarch, regno);
2406 }
2407
2408 /* Return the GDB type object for the "standard" data type of data in
2409 register N. */
2410
2411 static struct type *
2412 rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2413 {
2414 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2415
2416 /* These are the only pseudo-registers we support. */
2417 gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2418 || IS_DFP_PSEUDOREG (tdep, regnum));
2419
2420 /* These are the e500 pseudo-registers. */
2421 if (IS_SPE_PSEUDOREG (tdep, regnum))
2422 return rs6000_builtin_type_vec64 (gdbarch);
2423 else
2424 /* Could only be the ppc decimal128 pseudo-registers. */
2425 return builtin_type (gdbarch)->builtin_declong;
2426 }
2427
2428 /* Is REGNUM a member of REGGROUP? */
2429 static int
2430 rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2431 struct reggroup *group)
2432 {
2433 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2434
2435 /* These are the only pseudo-registers we support. */
2436 gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
2437 || IS_DFP_PSEUDOREG (tdep, regnum));
2438
2439 /* These are the e500 pseudo-registers. */
2440 if (IS_SPE_PSEUDOREG (tdep, regnum))
2441 return group == all_reggroup || group == vector_reggroup;
2442 else
2443 /* Could only be the ppc decimal128 pseudo-registers. */
2444 return group == all_reggroup || group == float_reggroup;
2445 }
2446
2447 /* The register format for RS/6000 floating point registers is always
2448 double, we need a conversion if the memory format is float. */
2449
2450 static int
2451 rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum,
2452 struct type *type)
2453 {
2454 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2455
2456 return (tdep->ppc_fp0_regnum >= 0
2457 && regnum >= tdep->ppc_fp0_regnum
2458 && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs
2459 && TYPE_CODE (type) == TYPE_CODE_FLT
2460 && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type_double));
2461 }
2462
2463 static void
2464 rs6000_register_to_value (struct frame_info *frame,
2465 int regnum,
2466 struct type *type,
2467 gdb_byte *to)
2468 {
2469 gdb_byte from[MAX_REGISTER_SIZE];
2470
2471 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2472
2473 get_frame_register (frame, regnum, from);
2474 convert_typed_floating (from, builtin_type_double, to, type);
2475 }
2476
2477 static void
2478 rs6000_value_to_register (struct frame_info *frame,
2479 int regnum,
2480 struct type *type,
2481 const gdb_byte *from)
2482 {
2483 gdb_byte to[MAX_REGISTER_SIZE];
2484
2485 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
2486
2487 convert_typed_floating (from, type, to, builtin_type_double);
2488 put_frame_register (frame, regnum, to);
2489 }
2490
2491 /* Move SPE vector register values between a 64-bit buffer and the two
2492 32-bit raw register halves in a regcache. This function handles
2493 both splitting a 64-bit value into two 32-bit halves, and joining
2494 two halves into a whole 64-bit value, depending on the function
2495 passed as the MOVE argument.
2496
2497 EV_REG must be the number of an SPE evN vector register --- a
2498 pseudoregister. REGCACHE must be a regcache, and BUFFER must be a
2499 64-bit buffer.
2500
2501 Call MOVE once for each 32-bit half of that register, passing
2502 REGCACHE, the number of the raw register corresponding to that
2503 half, and the address of the appropriate half of BUFFER.
2504
2505 For example, passing 'regcache_raw_read' as the MOVE function will
2506 fill BUFFER with the full 64-bit contents of EV_REG. Or, passing
2507 'regcache_raw_supply' will supply the contents of BUFFER to the
2508 appropriate pair of raw registers in REGCACHE.
2509
2510 You may need to cast away some 'const' qualifiers when passing
2511 MOVE, since this function can't tell at compile-time which of
2512 REGCACHE or BUFFER is acting as the source of the data. If C had
2513 co-variant type qualifiers, ... */
2514 static void
2515 e500_move_ev_register (void (*move) (struct regcache *regcache,
2516 int regnum, gdb_byte *buf),
2517 struct regcache *regcache, int ev_reg,
2518 gdb_byte *buffer)
2519 {
2520 struct gdbarch *arch = get_regcache_arch (regcache);
2521 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
2522 int reg_index;
2523 gdb_byte *byte_buffer = buffer;
2524
2525 gdb_assert (IS_SPE_PSEUDOREG (tdep, ev_reg));
2526
2527 reg_index = ev_reg - tdep->ppc_ev0_regnum;
2528
2529 if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
2530 {
2531 move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer);
2532 move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer + 4);
2533 }
2534 else
2535 {
2536 move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer);
2537 move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer + 4);
2538 }
2539 }
2540
2541 static void
2542 e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2543 int reg_nr, gdb_byte *buffer)
2544 {
2545 e500_move_ev_register (regcache_raw_read, regcache, reg_nr, buffer);
2546 }
2547
2548 static void
2549 e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2550 int reg_nr, const gdb_byte *buffer)
2551 {
2552 e500_move_ev_register ((void (*) (struct regcache *, int, gdb_byte *))
2553 regcache_raw_write,
2554 regcache, reg_nr, (gdb_byte *) buffer);
2555 }
2556
2557 /* Read method for PPC pseudo-registers. Currently this is handling the
2558 16 decimal128 registers that map into 16 pairs of FP registers. */
2559 static void
2560 ppc_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2561 int reg_nr, gdb_byte *buffer)
2562 {
2563 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2564 int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2565
2566 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2567 {
2568 /* Read two FP registers to form a whole dl register. */
2569 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2570 2 * reg_index, buffer);
2571 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2572 2 * reg_index + 1, buffer + 8);
2573 }
2574 else
2575 {
2576 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2577 2 * reg_index + 1, buffer + 8);
2578 regcache_raw_read (regcache, tdep->ppc_fp0_regnum +
2579 2 * reg_index, buffer);
2580 }
2581 }
2582
2583 /* Write method for PPC pseudo-registers. Currently this is handling the
2584 16 decimal128 registers that map into 16 pairs of FP registers. */
2585 static void
2586 ppc_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2587 int reg_nr, const gdb_byte *buffer)
2588 {
2589 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2590 int reg_index = reg_nr - tdep->ppc_dl0_regnum;
2591
2592 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2593 {
2594 /* Write each half of the dl register into a separate
2595 FP register. */
2596 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2597 2 * reg_index, buffer);
2598 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2599 2 * reg_index + 1, buffer + 8);
2600 }
2601 else
2602 {
2603 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2604 2 * reg_index + 1, buffer + 8);
2605 regcache_raw_write (regcache, tdep->ppc_fp0_regnum +
2606 2 * reg_index, buffer);
2607 }
2608 }
2609
2610 static void
2611 rs6000_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2612 int reg_nr, gdb_byte *buffer)
2613 {
2614 struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2615 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2616
2617 gdb_assert (regcache_arch == gdbarch);
2618
2619 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2620 e500_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2621 else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2622 ppc_pseudo_register_read (gdbarch, regcache, reg_nr, buffer);
2623 else
2624 internal_error (__FILE__, __LINE__,
2625 _("rs6000_pseudo_register_read: "
2626 "called on unexpected register '%s' (%d)"),
2627 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2628 }
2629
2630 static void
2631 rs6000_pseudo_register_write (struct gdbarch *gdbarch,
2632 struct regcache *regcache,
2633 int reg_nr, const gdb_byte *buffer)
2634 {
2635 struct gdbarch *regcache_arch = get_regcache_arch (regcache);
2636 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2637
2638 gdb_assert (regcache_arch == gdbarch);
2639
2640 if (IS_SPE_PSEUDOREG (tdep, reg_nr))
2641 e500_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2642 else if (IS_DFP_PSEUDOREG (tdep, reg_nr))
2643 ppc_pseudo_register_write (gdbarch, regcache, reg_nr, buffer);
2644 else
2645 internal_error (__FILE__, __LINE__,
2646 _("rs6000_pseudo_register_write: "
2647 "called on unexpected register '%s' (%d)"),
2648 gdbarch_register_name (gdbarch, reg_nr), reg_nr);
2649 }
2650
2651 /* Convert a DBX STABS register number to a GDB register number. */
2652 static int
2653 rs6000_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
2654 {
2655 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2656
2657 if (0 <= num && num <= 31)
2658 return tdep->ppc_gp0_regnum + num;
2659 else if (32 <= num && num <= 63)
2660 /* FIXME: jimb/2004-05-05: What should we do when the debug info
2661 specifies registers the architecture doesn't have? Our
2662 callers don't check the value we return. */
2663 return tdep->ppc_fp0_regnum + (num - 32);
2664 else if (77 <= num && num <= 108)
2665 return tdep->ppc_vr0_regnum + (num - 77);
2666 else if (1200 <= num && num < 1200 + 32)
2667 return tdep->ppc_ev0_regnum + (num - 1200);
2668 else
2669 switch (num)
2670 {
2671 case 64:
2672 return tdep->ppc_mq_regnum;
2673 case 65:
2674 return tdep->ppc_lr_regnum;
2675 case 66:
2676 return tdep->ppc_ctr_regnum;
2677 case 76:
2678 return tdep->ppc_xer_regnum;
2679 case 109:
2680 return tdep->ppc_vrsave_regnum;
2681 case 110:
2682 return tdep->ppc_vrsave_regnum - 1; /* vscr */
2683 case 111:
2684 return tdep->ppc_acc_regnum;
2685 case 112:
2686 return tdep->ppc_spefscr_regnum;
2687 default:
2688 return num;
2689 }
2690 }
2691
2692
2693 /* Convert a Dwarf 2 register number to a GDB register number. */
2694 static int
2695 rs6000_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
2696 {
2697 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2698
2699 if (0 <= num && num <= 31)
2700 return tdep->ppc_gp0_regnum + num;
2701 else if (32 <= num && num <= 63)
2702 /* FIXME: jimb/2004-05-05: What should we do when the debug info
2703 specifies registers the architecture doesn't have? Our
2704 callers don't check the value we return. */
2705 return tdep->ppc_fp0_regnum + (num - 32);
2706 else if (1124 <= num && num < 1124 + 32)
2707 return tdep->ppc_vr0_regnum + (num - 1124);
2708 else if (1200 <= num && num < 1200 + 32)
2709 return tdep->ppc_ev0_regnum + (num - 1200);
2710 else
2711 switch (num)
2712 {
2713 case 64:
2714 return tdep->ppc_cr_regnum;
2715 case 67:
2716 return tdep->ppc_vrsave_regnum - 1; /* vscr */
2717 case 99:
2718 return tdep->ppc_acc_regnum;
2719 case 100:
2720 return tdep->ppc_mq_regnum;
2721 case 101:
2722 return tdep->ppc_xer_regnum;
2723 case 108:
2724 return tdep->ppc_lr_regnum;
2725 case 109:
2726 return tdep->ppc_ctr_regnum;
2727 case 356:
2728 return tdep->ppc_vrsave_regnum;
2729 case 612:
2730 return tdep->ppc_spefscr_regnum;
2731 default:
2732 return num;
2733 }
2734 }
2735
2736 /* Translate a .eh_frame register to DWARF register, or adjust a
2737 .debug_frame register. */
2738
2739 static int
2740 rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
2741 {
2742 /* GCC releases before 3.4 use GCC internal register numbering in
2743 .debug_frame (and .debug_info, et cetera). The numbering is
2744 different from the standard SysV numbering for everything except
2745 for GPRs and FPRs. We can not detect this problem in most cases
2746 - to get accurate debug info for variables living in lr, ctr, v0,
2747 et cetera, use a newer version of GCC. But we must detect
2748 one important case - lr is in column 65 in .debug_frame output,
2749 instead of 108.
2750
2751 GCC 3.4, and the "hammer" branch, have a related problem. They
2752 record lr register saves in .debug_frame as 108, but still record
2753 the return column as 65. We fix that up too.
2754
2755 We can do this because 65 is assigned to fpsr, and GCC never
2756 generates debug info referring to it. To add support for
2757 handwritten debug info that restores fpsr, we would need to add a
2758 producer version check to this. */
2759 if (!eh_frame_p)
2760 {
2761 if (num == 65)
2762 return 108;
2763 else
2764 return num;
2765 }
2766
2767 /* .eh_frame is GCC specific. For binary compatibility, it uses GCC
2768 internal register numbering; translate that to the standard DWARF2
2769 register numbering. */
2770 if (0 <= num && num <= 63) /* r0-r31,fp0-fp31 */
2771 return num;
2772 else if (68 <= num && num <= 75) /* cr0-cr8 */
2773 return num - 68 + 86;
2774 else if (77 <= num && num <= 108) /* vr0-vr31 */
2775 return num - 77 + 1124;
2776 else
2777 switch (num)
2778 {
2779 case 64: /* mq */
2780 return 100;
2781 case 65: /* lr */
2782 return 108;
2783 case 66: /* ctr */
2784 return 109;
2785 case 76: /* xer */
2786 return 101;
2787 case 109: /* vrsave */
2788 return 356;
2789 case 110: /* vscr */
2790 return 67;
2791 case 111: /* spe_acc */
2792 return 99;
2793 case 112: /* spefscr */
2794 return 612;
2795 default:
2796 return num;
2797 }
2798 }
2799 \f
2800 /* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
2801
2802 Usually a function pointer's representation is simply the address
2803 of the function. On the RS/6000 however, a function pointer is
2804 represented by a pointer to an OPD entry. This OPD entry contains
2805 three words, the first word is the address of the function, the
2806 second word is the TOC pointer (r2), and the third word is the
2807 static chain value. Throughout GDB it is currently assumed that a
2808 function pointer contains the address of the function, which is not
2809 easy to fix. In addition, the conversion of a function address to
2810 a function pointer would require allocation of an OPD entry in the
2811 inferior's memory space, with all its drawbacks. To be able to
2812 call C++ virtual methods in the inferior (which are called via
2813 function pointers), find_function_addr uses this function to get the
2814 function address from a function pointer. */
2815
2816 /* Return real function address if ADDR (a function pointer) is in the data
2817 space and is therefore a special function pointer. */
2818
2819 static CORE_ADDR
2820 rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
2821 CORE_ADDR addr,
2822 struct target_ops *targ)
2823 {
2824 struct obj_section *s;
2825
2826 s = find_pc_section (addr);
2827 if (s && s->the_bfd_section->flags & SEC_CODE)
2828 return addr;
2829
2830 /* ADDR is in the data space, so it's a special function pointer. */
2831 return read_memory_addr (addr, gdbarch_tdep (gdbarch)->wordsize);
2832 }
2833 \f
2834
2835 /* Handling the various POWER/PowerPC variants. */
2836
2837 /* Information about a particular processor variant. */
2838
2839 struct variant
2840 {
2841 /* Name of this variant. */
2842 char *name;
2843
2844 /* English description of the variant. */
2845 char *description;
2846
2847 /* bfd_arch_info.arch corresponding to variant. */
2848 enum bfd_architecture arch;
2849
2850 /* bfd_arch_info.mach corresponding to variant. */
2851 unsigned long mach;
2852
2853 /* Target description for this variant. */
2854 struct target_desc **tdesc;
2855 };
2856
2857 static struct variant variants[] =
2858 {
2859 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
2860 bfd_mach_ppc, &tdesc_powerpc_32},
2861 {"power", "POWER user-level", bfd_arch_rs6000,
2862 bfd_mach_rs6k, &tdesc_rs6000},
2863 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
2864 bfd_mach_ppc_403, &tdesc_powerpc_403},
2865 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
2866 bfd_mach_ppc_601, &tdesc_powerpc_601},
2867 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
2868 bfd_mach_ppc_602, &tdesc_powerpc_602},
2869 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
2870 bfd_mach_ppc_603, &tdesc_powerpc_603},
2871 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
2872 604, &tdesc_powerpc_604},
2873 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
2874 bfd_mach_ppc_403gc, &tdesc_powerpc_403gc},
2875 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
2876 bfd_mach_ppc_505, &tdesc_powerpc_505},
2877 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
2878 bfd_mach_ppc_860, &tdesc_powerpc_860},
2879 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
2880 bfd_mach_ppc_750, &tdesc_powerpc_750},
2881 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2882 bfd_mach_ppc_7400, &tdesc_powerpc_7400},
2883 {"e500", "Motorola PowerPC e500", bfd_arch_powerpc,
2884 bfd_mach_ppc_e500, &tdesc_powerpc_e500},
2885
2886 /* 64-bit */
2887 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2888 bfd_mach_ppc64, &tdesc_powerpc_64},
2889 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2890 bfd_mach_ppc_620, &tdesc_powerpc_64},
2891 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2892 bfd_mach_ppc_630, &tdesc_powerpc_64},
2893 {"a35", "PowerPC A35", bfd_arch_powerpc,
2894 bfd_mach_ppc_a35, &tdesc_powerpc_64},
2895 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
2896 bfd_mach_ppc_rs64ii, &tdesc_powerpc_64},
2897 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
2898 bfd_mach_ppc_rs64iii, &tdesc_powerpc_64},
2899
2900 /* FIXME: I haven't checked the register sets of the following. */
2901 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
2902 bfd_mach_rs6k_rs1, &tdesc_rs6000},
2903 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
2904 bfd_mach_rs6k_rsc, &tdesc_rs6000},
2905 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
2906 bfd_mach_rs6k_rs2, &tdesc_rs6000},
2907
2908 {0, 0, 0, 0, 0}
2909 };
2910
2911 /* Return the variant corresponding to architecture ARCH and machine number
2912 MACH. If no such variant exists, return null. */
2913
2914 static const struct variant *
2915 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
2916 {
2917 const struct variant *v;
2918
2919 for (v = variants; v->name; v++)
2920 if (arch == v->arch && mach == v->mach)
2921 return v;
2922
2923 return NULL;
2924 }
2925
2926 static int
2927 gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
2928 {
2929 if (!info->disassembler_options)
2930 info->disassembler_options = "any";
2931
2932 if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
2933 return print_insn_big_powerpc (memaddr, info);
2934 else
2935 return print_insn_little_powerpc (memaddr, info);
2936 }
2937 \f
2938 static CORE_ADDR
2939 rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2940 {
2941 return frame_unwind_register_unsigned (next_frame,
2942 gdbarch_pc_regnum (gdbarch));
2943 }
2944
2945 static struct frame_id
2946 rs6000_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
2947 {
2948 return frame_id_build (frame_unwind_register_unsigned
2949 (next_frame, gdbarch_sp_regnum (gdbarch)),
2950 frame_pc_unwind (next_frame));
2951 }
2952
2953 struct rs6000_frame_cache
2954 {
2955 CORE_ADDR base;
2956 CORE_ADDR initial_sp;
2957 struct trad_frame_saved_reg *saved_regs;
2958 };
2959
2960 static struct rs6000_frame_cache *
2961 rs6000_frame_cache (struct frame_info *next_frame, void **this_cache)
2962 {
2963 struct rs6000_frame_cache *cache;
2964 struct gdbarch *gdbarch = get_frame_arch (next_frame);
2965 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2966 struct rs6000_framedata fdata;
2967 int wordsize = tdep->wordsize;
2968 CORE_ADDR func, pc;
2969
2970 if ((*this_cache) != NULL)
2971 return (*this_cache);
2972 cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache);
2973 (*this_cache) = cache;
2974 cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
2975
2976 func = frame_func_unwind (next_frame, NORMAL_FRAME);
2977 pc = frame_pc_unwind (next_frame);
2978 skip_prologue (gdbarch, func, pc, &fdata);
2979
2980 /* Figure out the parent's stack pointer. */
2981
2982 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
2983 address of the current frame. Things might be easier if the
2984 ->frame pointed to the outer-most address of the frame. In
2985 the mean time, the address of the prev frame is used as the
2986 base address of this frame. */
2987 cache->base = frame_unwind_register_unsigned
2988 (next_frame, gdbarch_sp_regnum (gdbarch));
2989
2990 /* If the function appears to be frameless, check a couple of likely
2991 indicators that we have simply failed to find the frame setup.
2992 Two common cases of this are missing symbols (i.e.
2993 frame_func_unwind returns the wrong address or 0), and assembly
2994 stubs which have a fast exit path but set up a frame on the slow
2995 path.
2996
2997 If the LR appears to return to this function, then presume that
2998 we have an ABI compliant frame that we failed to find. */
2999 if (fdata.frameless && fdata.lr_offset == 0)
3000 {
3001 CORE_ADDR saved_lr;
3002 int make_frame = 0;
3003
3004 saved_lr = frame_unwind_register_unsigned (next_frame,
3005 tdep->ppc_lr_regnum);
3006 if (func == 0 && saved_lr == pc)
3007 make_frame = 1;
3008 else if (func != 0)
3009 {
3010 CORE_ADDR saved_func = get_pc_function_start (saved_lr);
3011 if (func == saved_func)
3012 make_frame = 1;
3013 }
3014
3015 if (make_frame)
3016 {
3017 fdata.frameless = 0;
3018 fdata.lr_offset = tdep->lr_frame_offset;
3019 }
3020 }
3021
3022 if (!fdata.frameless)
3023 /* Frameless really means stackless. */
3024 cache->base = read_memory_addr (cache->base, wordsize);
3025
3026 trad_frame_set_value (cache->saved_regs,
3027 gdbarch_sp_regnum (gdbarch), cache->base);
3028
3029 /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr.
3030 All fpr's from saved_fpr to fp31 are saved. */
3031
3032 if (fdata.saved_fpr >= 0)
3033 {
3034 int i;
3035 CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset;
3036
3037 /* If skip_prologue says floating-point registers were saved,
3038 but the current architecture has no floating-point registers,
3039 then that's strange. But we have no indices to even record
3040 the addresses under, so we just ignore it. */
3041 if (ppc_floating_point_unit_p (gdbarch))
3042 for (i = fdata.saved_fpr; i < ppc_num_fprs; i++)
3043 {
3044 cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr;
3045 fpr_addr += 8;
3046 }
3047 }
3048
3049 /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr.
3050 All gpr's from saved_gpr to gpr31 are saved. */
3051
3052 if (fdata.saved_gpr >= 0)
3053 {
3054 int i;
3055 CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset;
3056 for (i = fdata.saved_gpr; i < ppc_num_gprs; i++)
3057 {
3058 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr;
3059 gpr_addr += wordsize;
3060 }
3061 }
3062
3063 /* if != -1, fdata.saved_vr is the smallest number of saved_vr.
3064 All vr's from saved_vr to vr31 are saved. */
3065 if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
3066 {
3067 if (fdata.saved_vr >= 0)
3068 {
3069 int i;
3070 CORE_ADDR vr_addr = cache->base + fdata.vr_offset;
3071 for (i = fdata.saved_vr; i < 32; i++)
3072 {
3073 cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr;
3074 vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum);
3075 }
3076 }
3077 }
3078
3079 /* if != -1, fdata.saved_ev is the smallest number of saved_ev.
3080 All vr's from saved_ev to ev31 are saved. ????? */
3081 if (tdep->ppc_ev0_regnum != -1)
3082 {
3083 if (fdata.saved_ev >= 0)
3084 {
3085 int i;
3086 CORE_ADDR ev_addr = cache->base + fdata.ev_offset;
3087 for (i = fdata.saved_ev; i < ppc_num_gprs; i++)
3088 {
3089 cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr;
3090 cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4;
3091 ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum);
3092 }
3093 }
3094 }
3095
3096 /* If != 0, fdata.cr_offset is the offset from the frame that
3097 holds the CR. */
3098 if (fdata.cr_offset != 0)
3099 cache->saved_regs[tdep->ppc_cr_regnum].addr = cache->base + fdata.cr_offset;
3100
3101 /* If != 0, fdata.lr_offset is the offset from the frame that
3102 holds the LR. */
3103 if (fdata.lr_offset != 0)
3104 cache->saved_regs[tdep->ppc_lr_regnum].addr = cache->base + fdata.lr_offset;
3105 /* The PC is found in the link register. */
3106 cache->saved_regs[gdbarch_pc_regnum (gdbarch)] =
3107 cache->saved_regs[tdep->ppc_lr_regnum];
3108
3109 /* If != 0, fdata.vrsave_offset is the offset from the frame that
3110 holds the VRSAVE. */
3111 if (fdata.vrsave_offset != 0)
3112 cache->saved_regs[tdep->ppc_vrsave_regnum].addr = cache->base + fdata.vrsave_offset;
3113
3114 if (fdata.alloca_reg < 0)
3115 /* If no alloca register used, then fi->frame is the value of the
3116 %sp for this frame, and it is good enough. */
3117 cache->initial_sp = frame_unwind_register_unsigned
3118 (next_frame, gdbarch_sp_regnum (gdbarch));
3119 else
3120 cache->initial_sp = frame_unwind_register_unsigned (next_frame,
3121 fdata.alloca_reg);
3122
3123 return cache;
3124 }
3125
3126 static void
3127 rs6000_frame_this_id (struct frame_info *next_frame, void **this_cache,
3128 struct frame_id *this_id)
3129 {
3130 struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
3131 this_cache);
3132 (*this_id) = frame_id_build (info->base,
3133 frame_func_unwind (next_frame, NORMAL_FRAME));
3134 }
3135
3136 static void
3137 rs6000_frame_prev_register (struct frame_info *next_frame,
3138 void **this_cache,
3139 int regnum, int *optimizedp,
3140 enum lval_type *lvalp, CORE_ADDR *addrp,
3141 int *realnump, gdb_byte *valuep)
3142 {
3143 struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
3144 this_cache);
3145 trad_frame_get_prev_register (next_frame, info->saved_regs, regnum,
3146 optimizedp, lvalp, addrp, realnump, valuep);
3147 }
3148
3149 static const struct frame_unwind rs6000_frame_unwind =
3150 {
3151 NORMAL_FRAME,
3152 rs6000_frame_this_id,
3153 rs6000_frame_prev_register
3154 };
3155
3156 static const struct frame_unwind *
3157 rs6000_frame_sniffer (struct frame_info *next_frame)
3158 {
3159 return &rs6000_frame_unwind;
3160 }
3161
3162 \f
3163
3164 static CORE_ADDR
3165 rs6000_frame_base_address (struct frame_info *next_frame,
3166 void **this_cache)
3167 {
3168 struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame,
3169 this_cache);
3170 return info->initial_sp;
3171 }
3172
3173 static const struct frame_base rs6000_frame_base = {
3174 &rs6000_frame_unwind,
3175 rs6000_frame_base_address,
3176 rs6000_frame_base_address,
3177 rs6000_frame_base_address
3178 };
3179
3180 static const struct frame_base *
3181 rs6000_frame_base_sniffer (struct frame_info *next_frame)
3182 {
3183 return &rs6000_frame_base;
3184 }
3185
3186 /* DWARF-2 frame support. Used to handle the detection of
3187 clobbered registers during function calls. */
3188
3189 static void
3190 ppc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3191 struct dwarf2_frame_state_reg *reg,
3192 struct frame_info *next_frame)
3193 {
3194 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3195
3196 /* PPC32 and PPC64 ABI's are the same regarding volatile and
3197 non-volatile registers. We will use the same code for both. */
3198
3199 /* Call-saved GP registers. */
3200 if ((regnum >= tdep->ppc_gp0_regnum + 14
3201 && regnum <= tdep->ppc_gp0_regnum + 31)
3202 || (regnum == tdep->ppc_gp0_regnum + 1))
3203 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3204
3205 /* Call-clobbered GP registers. */
3206 if ((regnum >= tdep->ppc_gp0_regnum + 3
3207 && regnum <= tdep->ppc_gp0_regnum + 12)
3208 || (regnum == tdep->ppc_gp0_regnum))
3209 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3210
3211 /* Deal with FP registers, if supported. */
3212 if (tdep->ppc_fp0_regnum >= 0)
3213 {
3214 /* Call-saved FP registers. */
3215 if ((regnum >= tdep->ppc_fp0_regnum + 14
3216 && regnum <= tdep->ppc_fp0_regnum + 31))
3217 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3218
3219 /* Call-clobbered FP registers. */
3220 if ((regnum >= tdep->ppc_fp0_regnum
3221 && regnum <= tdep->ppc_fp0_regnum + 13))
3222 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3223 }
3224
3225 /* Deal with ALTIVEC registers, if supported. */
3226 if (tdep->ppc_vr0_regnum > 0 && tdep->ppc_vrsave_regnum > 0)
3227 {
3228 /* Call-saved Altivec registers. */
3229 if ((regnum >= tdep->ppc_vr0_regnum + 20
3230 && regnum <= tdep->ppc_vr0_regnum + 31)
3231 || regnum == tdep->ppc_vrsave_regnum)
3232 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
3233
3234 /* Call-clobbered Altivec registers. */
3235 if ((regnum >= tdep->ppc_vr0_regnum
3236 && regnum <= tdep->ppc_vr0_regnum + 19))
3237 reg->how = DWARF2_FRAME_REG_UNDEFINED;
3238 }
3239
3240 /* Handle PC register and Stack Pointer correctly. */
3241 if (regnum == gdbarch_pc_regnum (gdbarch))
3242 reg->how = DWARF2_FRAME_REG_RA;
3243 else if (regnum == gdbarch_sp_regnum (gdbarch))
3244 reg->how = DWARF2_FRAME_REG_CFA;
3245 }
3246
3247
3248 /* Initialize the current architecture based on INFO. If possible, re-use an
3249 architecture from ARCHES, which is a list of architectures already created
3250 during this debugging session.
3251
3252 Called e.g. at program startup, when reading a core file, and when reading
3253 a binary file. */
3254
3255 static struct gdbarch *
3256 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3257 {
3258 struct gdbarch *gdbarch;
3259 struct gdbarch_tdep *tdep;
3260 int wordsize, from_xcoff_exec, from_elf_exec;
3261 enum bfd_architecture arch;
3262 unsigned long mach;
3263 bfd abfd;
3264 int sysv_abi;
3265 asection *sect;
3266 enum auto_boolean soft_float_flag = powerpc_soft_float_global;
3267 int soft_float;
3268 enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
3269 int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0;
3270 int tdesc_wordsize = -1;
3271 const struct target_desc *tdesc = info.target_desc;
3272 struct tdesc_arch_data *tdesc_data = NULL;
3273 int num_pseudoregs = 0;
3274
3275 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
3276 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
3277
3278 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
3279 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
3280
3281 sysv_abi = info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
3282
3283 /* Check word size. If INFO is from a binary file, infer it from
3284 that, else choose a likely default. */
3285 if (from_xcoff_exec)
3286 {
3287 if (bfd_xcoff_is_xcoff64 (info.abfd))
3288 wordsize = 8;
3289 else
3290 wordsize = 4;
3291 }
3292 else if (from_elf_exec)
3293 {
3294 if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
3295 wordsize = 8;
3296 else
3297 wordsize = 4;
3298 }
3299 else if (tdesc_has_registers (tdesc))
3300 wordsize = -1;
3301 else
3302 {
3303 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
3304 wordsize = info.bfd_arch_info->bits_per_word /
3305 info.bfd_arch_info->bits_per_byte;
3306 else
3307 wordsize = 4;
3308 }
3309
3310 if (!from_xcoff_exec)
3311 {
3312 arch = info.bfd_arch_info->arch;
3313 mach = info.bfd_arch_info->mach;
3314 }
3315 else
3316 {
3317 arch = bfd_arch_powerpc;
3318 bfd_default_set_arch_mach (&abfd, arch, 0);
3319 info.bfd_arch_info = bfd_get_arch_info (&abfd);
3320 mach = info.bfd_arch_info->mach;
3321 }
3322
3323 /* For e500 executables, the apuinfo section is of help here. Such
3324 section contains the identifier and revision number of each
3325 Application-specific Processing Unit that is present on the
3326 chip. The content of the section is determined by the assembler
3327 which looks at each instruction and determines which unit (and
3328 which version of it) can execute it. In our case we just look for
3329 the existance of the section. */
3330
3331 if (info.abfd)
3332 {
3333 sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo");
3334 if (sect)
3335 {
3336 arch = info.bfd_arch_info->arch;
3337 mach = bfd_mach_ppc_e500;
3338 bfd_default_set_arch_mach (&abfd, arch, mach);
3339 info.bfd_arch_info = bfd_get_arch_info (&abfd);
3340 }
3341 }
3342
3343 /* Find a default target description which describes our register
3344 layout, if we do not already have one. */
3345 if (! tdesc_has_registers (tdesc))
3346 {
3347 const struct variant *v;
3348
3349 /* Choose variant. */
3350 v = find_variant_by_arch (arch, mach);
3351 if (!v)
3352 return NULL;
3353
3354 tdesc = *v->tdesc;
3355 }
3356
3357 gdb_assert (tdesc_has_registers (tdesc));
3358
3359 /* Check any target description for validity. */
3360 if (tdesc_has_registers (tdesc))
3361 {
3362 static const char *const gprs[] = {
3363 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
3364 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
3365 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
3366 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
3367 };
3368 static const char *const segment_regs[] = {
3369 "sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
3370 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15"
3371 };
3372 const struct tdesc_feature *feature;
3373 int i, valid_p;
3374 static const char *const msr_names[] = { "msr", "ps" };
3375 static const char *const cr_names[] = { "cr", "cnd" };
3376 static const char *const ctr_names[] = { "ctr", "cnt" };
3377
3378 feature = tdesc_find_feature (tdesc,
3379 "org.gnu.gdb.power.core");
3380 if (feature == NULL)
3381 return NULL;
3382
3383 tdesc_data = tdesc_data_alloc ();
3384
3385 valid_p = 1;
3386 for (i = 0; i < ppc_num_gprs; i++)
3387 valid_p &= tdesc_numbered_register (feature, tdesc_data, i, gprs[i]);
3388 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_PC_REGNUM,
3389 "pc");
3390 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_LR_REGNUM,
3391 "lr");
3392 valid_p &= tdesc_numbered_register (feature, tdesc_data, PPC_XER_REGNUM,
3393 "xer");
3394
3395 /* Allow alternate names for these registers, to accomodate GDB's
3396 historic naming. */
3397 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3398 PPC_MSR_REGNUM, msr_names);
3399 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3400 PPC_CR_REGNUM, cr_names);
3401 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
3402 PPC_CTR_REGNUM, ctr_names);
3403
3404 if (!valid_p)
3405 {
3406 tdesc_data_cleanup (tdesc_data);
3407 return NULL;
3408 }
3409
3410 have_mq = tdesc_numbered_register (feature, tdesc_data, PPC_MQ_REGNUM,
3411 "mq");
3412
3413 tdesc_wordsize = tdesc_register_size (feature, "pc") / 8;
3414 if (wordsize == -1)
3415 wordsize = tdesc_wordsize;
3416
3417 feature = tdesc_find_feature (tdesc,
3418 "org.gnu.gdb.power.fpu");
3419 if (feature != NULL)
3420 {
3421 static const char *const fprs[] = {
3422 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
3423 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
3424 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
3425 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
3426 };
3427 valid_p = 1;
3428 for (i = 0; i < ppc_num_fprs; i++)
3429 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3430 PPC_F0_REGNUM + i, fprs[i]);
3431 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3432 PPC_FPSCR_REGNUM, "fpscr");
3433
3434 if (!valid_p)
3435 {
3436 tdesc_data_cleanup (tdesc_data);
3437 return NULL;
3438 }
3439 have_fpu = 1;
3440 }
3441 else
3442 have_fpu = 0;
3443
3444 /* The DFP pseudo-registers will be available when there are floating
3445 point registers. */
3446 have_dfp = have_fpu;
3447
3448 feature = tdesc_find_feature (tdesc,
3449 "org.gnu.gdb.power.altivec");
3450 if (feature != NULL)
3451 {
3452 static const char *const vector_regs[] = {
3453 "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
3454 "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
3455 "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
3456 "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31"
3457 };
3458
3459 valid_p = 1;
3460 for (i = 0; i < ppc_num_gprs; i++)
3461 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3462 PPC_VR0_REGNUM + i,
3463 vector_regs[i]);
3464 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3465 PPC_VSCR_REGNUM, "vscr");
3466 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3467 PPC_VRSAVE_REGNUM, "vrsave");
3468
3469 if (have_spe || !valid_p)
3470 {
3471 tdesc_data_cleanup (tdesc_data);
3472 return NULL;
3473 }
3474 have_altivec = 1;
3475 }
3476 else
3477 have_altivec = 0;
3478
3479 /* On machines supporting the SPE APU, the general-purpose registers
3480 are 64 bits long. There are SIMD vector instructions to treat them
3481 as pairs of floats, but the rest of the instruction set treats them
3482 as 32-bit registers, and only operates on their lower halves.
3483
3484 In the GDB regcache, we treat their high and low halves as separate
3485 registers. The low halves we present as the general-purpose
3486 registers, and then we have pseudo-registers that stitch together
3487 the upper and lower halves and present them as pseudo-registers.
3488
3489 Thus, the target description is expected to supply the upper
3490 halves separately. */
3491
3492 feature = tdesc_find_feature (tdesc,
3493 "org.gnu.gdb.power.spe");
3494 if (feature != NULL)
3495 {
3496 static const char *const upper_spe[] = {
3497 "ev0h", "ev1h", "ev2h", "ev3h",
3498 "ev4h", "ev5h", "ev6h", "ev7h",
3499 "ev8h", "ev9h", "ev10h", "ev11h",
3500 "ev12h", "ev13h", "ev14h", "ev15h",
3501 "ev16h", "ev17h", "ev18h", "ev19h",
3502 "ev20h", "ev21h", "ev22h", "ev23h",
3503 "ev24h", "ev25h", "ev26h", "ev27h",
3504 "ev28h", "ev29h", "ev30h", "ev31h"
3505 };
3506
3507 valid_p = 1;
3508 for (i = 0; i < ppc_num_gprs; i++)
3509 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3510 PPC_SPE_UPPER_GP0_REGNUM + i,
3511 upper_spe[i]);
3512 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3513 PPC_SPE_ACC_REGNUM, "acc");
3514 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3515 PPC_SPE_FSCR_REGNUM, "spefscr");
3516
3517 if (have_mq || have_fpu || !valid_p)
3518 {
3519 tdesc_data_cleanup (tdesc_data);
3520 return NULL;
3521 }
3522 have_spe = 1;
3523 }
3524 else
3525 have_spe = 0;
3526 }
3527
3528 /* If we have a 64-bit binary on a 32-bit target, complain. Also
3529 complain for a 32-bit binary on a 64-bit target; we do not yet
3530 support that. For instance, the 32-bit ABI routines expect
3531 32-bit GPRs.
3532
3533 As long as there isn't an explicit target description, we'll
3534 choose one based on the BFD architecture and get a word size
3535 matching the binary (probably powerpc:common or
3536 powerpc:common64). So there is only trouble if a 64-bit target
3537 supplies a 64-bit description while debugging a 32-bit
3538 binary. */
3539 if (tdesc_wordsize != -1 && tdesc_wordsize != wordsize)
3540 {
3541 tdesc_data_cleanup (tdesc_data);
3542 return NULL;
3543 }
3544
3545 #ifdef HAVE_ELF
3546 if (soft_float_flag == AUTO_BOOLEAN_AUTO && from_elf_exec)
3547 {
3548 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
3549 Tag_GNU_Power_ABI_FP))
3550 {
3551 case 1:
3552 soft_float_flag = AUTO_BOOLEAN_FALSE;
3553 break;
3554 case 2:
3555 soft_float_flag = AUTO_BOOLEAN_TRUE;
3556 break;
3557 default:
3558 break;
3559 }
3560 }
3561
3562 if (vector_abi == POWERPC_VEC_AUTO && from_elf_exec)
3563 {
3564 switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
3565 Tag_GNU_Power_ABI_Vector))
3566 {
3567 case 1:
3568 vector_abi = POWERPC_VEC_GENERIC;
3569 break;
3570 case 2:
3571 vector_abi = POWERPC_VEC_ALTIVEC;
3572 break;
3573 case 3:
3574 vector_abi = POWERPC_VEC_SPE;
3575 break;
3576 default:
3577 break;
3578 }
3579 }
3580 #endif
3581
3582 if (soft_float_flag == AUTO_BOOLEAN_TRUE)
3583 soft_float = 1;
3584 else if (soft_float_flag == AUTO_BOOLEAN_FALSE)
3585 soft_float = 0;
3586 else
3587 soft_float = !have_fpu;
3588
3589 /* If we have a hard float binary or setting but no floating point
3590 registers, downgrade to soft float anyway. We're still somewhat
3591 useful in this scenario. */
3592 if (!soft_float && !have_fpu)
3593 soft_float = 1;
3594
3595 /* Similarly for vector registers. */
3596 if (vector_abi == POWERPC_VEC_ALTIVEC && !have_altivec)
3597 vector_abi = POWERPC_VEC_GENERIC;
3598
3599 if (vector_abi == POWERPC_VEC_SPE && !have_spe)
3600 vector_abi = POWERPC_VEC_GENERIC;
3601
3602 if (vector_abi == POWERPC_VEC_AUTO)
3603 {
3604 if (have_altivec)
3605 vector_abi = POWERPC_VEC_ALTIVEC;
3606 else if (have_spe)
3607 vector_abi = POWERPC_VEC_SPE;
3608 else
3609 vector_abi = POWERPC_VEC_GENERIC;
3610 }
3611
3612 /* Do not limit the vector ABI based on available hardware, since we
3613 do not yet know what hardware we'll decide we have. Yuck! FIXME! */
3614
3615 /* Find a candidate among extant architectures. */
3616 for (arches = gdbarch_list_lookup_by_info (arches, &info);
3617 arches != NULL;
3618 arches = gdbarch_list_lookup_by_info (arches->next, &info))
3619 {
3620 /* Word size in the various PowerPC bfd_arch_info structs isn't
3621 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
3622 separate word size check. */
3623 tdep = gdbarch_tdep (arches->gdbarch);
3624 if (tdep && tdep->soft_float != soft_float)
3625 continue;
3626 if (tdep && tdep->vector_abi != vector_abi)
3627 continue;
3628 if (tdep && tdep->wordsize == wordsize)
3629 {
3630 if (tdesc_data != NULL)
3631 tdesc_data_cleanup (tdesc_data);
3632 return arches->gdbarch;
3633 }
3634 }
3635
3636 /* None found, create a new architecture from INFO, whose bfd_arch_info
3637 validity depends on the source:
3638 - executable useless
3639 - rs6000_host_arch() good
3640 - core file good
3641 - "set arch" trust blindly
3642 - GDB startup useless but harmless */
3643
3644 tdep = XCALLOC (1, struct gdbarch_tdep);
3645 tdep->wordsize = wordsize;
3646 tdep->soft_float = soft_float;
3647 tdep->vector_abi = vector_abi;
3648
3649 gdbarch = gdbarch_alloc (&info, tdep);
3650
3651 tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
3652 tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
3653 tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
3654 tdep->ppc_cr_regnum = PPC_CR_REGNUM;
3655 tdep->ppc_lr_regnum = PPC_LR_REGNUM;
3656 tdep->ppc_ctr_regnum = PPC_CTR_REGNUM;
3657 tdep->ppc_xer_regnum = PPC_XER_REGNUM;
3658 tdep->ppc_mq_regnum = have_mq ? PPC_MQ_REGNUM : -1;
3659
3660 tdep->ppc_fp0_regnum = have_fpu ? PPC_F0_REGNUM : -1;
3661 tdep->ppc_fpscr_regnum = have_fpu ? PPC_FPSCR_REGNUM : -1;
3662 tdep->ppc_vr0_regnum = have_altivec ? PPC_VR0_REGNUM : -1;
3663 tdep->ppc_vrsave_regnum = have_altivec ? PPC_VRSAVE_REGNUM : -1;
3664 tdep->ppc_ev0_upper_regnum = have_spe ? PPC_SPE_UPPER_GP0_REGNUM : -1;
3665 tdep->ppc_acc_regnum = have_spe ? PPC_SPE_ACC_REGNUM : -1;
3666 tdep->ppc_spefscr_regnum = have_spe ? PPC_SPE_FSCR_REGNUM : -1;
3667
3668 set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
3669 set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
3670 set_gdbarch_deprecated_fp_regnum (gdbarch, PPC_R0_REGNUM + 1);
3671 set_gdbarch_fp0_regnum (gdbarch, tdep->ppc_fp0_regnum);
3672 set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno);
3673
3674 /* The XML specification for PowerPC sensibly calls the MSR "msr".
3675 GDB traditionally called it "ps", though, so let GDB add an
3676 alias. */
3677 set_gdbarch_ps_regnum (gdbarch, tdep->ppc_ps_regnum);
3678
3679 if (sysv_abi && wordsize == 8)
3680 set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value);
3681 else if (sysv_abi && wordsize == 4)
3682 set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value);
3683 else
3684 set_gdbarch_return_value (gdbarch, rs6000_return_value);
3685
3686 /* Set lr_frame_offset. */
3687 if (wordsize == 8)
3688 tdep->lr_frame_offset = 16;
3689 else if (sysv_abi)
3690 tdep->lr_frame_offset = 4;
3691 else
3692 tdep->lr_frame_offset = 8;
3693
3694 if (have_spe || have_dfp)
3695 {
3696 set_gdbarch_pseudo_register_read (gdbarch, rs6000_pseudo_register_read);
3697 set_gdbarch_pseudo_register_write (gdbarch, rs6000_pseudo_register_write);
3698 }
3699
3700 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3701
3702 /* Select instruction printer. */
3703 if (arch == bfd_arch_rs6000)
3704 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
3705 else
3706 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
3707
3708 set_gdbarch_num_regs (gdbarch, PPC_NUM_REGS);
3709
3710 if (have_spe)
3711 num_pseudoregs += 32;
3712 if (have_dfp)
3713 num_pseudoregs += 16;
3714
3715 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudoregs);
3716
3717 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3718 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
3719 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3720 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
3721 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3722 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3723 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3724 if (sysv_abi)
3725 set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
3726 else
3727 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3728 set_gdbarch_char_signed (gdbarch, 0);
3729
3730 set_gdbarch_frame_align (gdbarch, rs6000_frame_align);
3731 if (sysv_abi && wordsize == 8)
3732 /* PPC64 SYSV. */
3733 set_gdbarch_frame_red_zone_size (gdbarch, 288);
3734 else if (!sysv_abi && wordsize == 4)
3735 /* PowerOpen / AIX 32 bit. The saved area or red zone consists of
3736 19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
3737 Problem is, 220 isn't frame (16 byte) aligned. Round it up to
3738 224. */
3739 set_gdbarch_frame_red_zone_size (gdbarch, 224);
3740
3741 set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p);
3742 set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value);
3743 set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register);
3744
3745 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
3746 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
3747
3748 if (sysv_abi && wordsize == 4)
3749 set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call);
3750 else if (sysv_abi && wordsize == 8)
3751 set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call);
3752 else
3753 set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
3754
3755 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
3756 set_gdbarch_in_function_epilogue_p (gdbarch, rs6000_in_function_epilogue_p);
3757
3758 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3759 set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
3760
3761 /* The value of symbols of type N_SO and N_FUN maybe null when
3762 it shouldn't be. */
3763 set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
3764
3765 /* Handles single stepping of atomic sequences. */
3766 set_gdbarch_software_single_step (gdbarch, deal_with_atomic_sequence);
3767
3768 /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN"
3769 for the descriptor and ".FN" for the entry-point -- a user
3770 specifying "break FN" will unexpectedly end up with a breakpoint
3771 on the descriptor and not the function. This architecture method
3772 transforms any breakpoints on descriptors into breakpoints on the
3773 corresponding entry point. */
3774 if (sysv_abi && wordsize == 8)
3775 set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address);
3776
3777 /* Not sure on this. FIXMEmgo */
3778 set_gdbarch_frame_args_skip (gdbarch, 8);
3779
3780 if (!sysv_abi)
3781 {
3782 /* Handle RS/6000 function pointers (which are really function
3783 descriptors). */
3784 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
3785 rs6000_convert_from_func_ptr_addr);
3786 }
3787
3788 /* Helpers for function argument information. */
3789 set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument);
3790
3791 /* Trampoline. */
3792 set_gdbarch_in_solib_return_trampoline
3793 (gdbarch, rs6000_in_solib_return_trampoline);
3794 set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
3795
3796 /* Hook in the DWARF CFI frame unwinder. */
3797 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
3798 dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
3799
3800 /* Frame handling. */
3801 dwarf2_frame_set_init_reg (gdbarch, ppc_dwarf2_frame_init_reg);
3802
3803 /* Hook in ABI-specific overrides, if they have been registered. */
3804 gdbarch_init_osabi (info, gdbarch);
3805
3806 switch (info.osabi)
3807 {
3808 case GDB_OSABI_LINUX:
3809 case GDB_OSABI_NETBSD_AOUT:
3810 case GDB_OSABI_NETBSD_ELF:
3811 case GDB_OSABI_UNKNOWN:
3812 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3813 frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3814 set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3815 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3816 break;
3817 default:
3818 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3819
3820 set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
3821 frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer);
3822 set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id);
3823 frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
3824 }
3825
3826 set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
3827 set_tdesc_pseudo_register_reggroup_p (gdbarch,
3828 rs6000_pseudo_register_reggroup_p);
3829 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3830
3831 /* Override the normal target description method to make the SPE upper
3832 halves anonymous. */
3833 set_gdbarch_register_name (gdbarch, rs6000_register_name);
3834
3835 /* Recording the numbering of pseudo registers. */
3836 tdep->ppc_ev0_regnum = have_spe ? gdbarch_num_regs (gdbarch) : -1;
3837
3838 /* Set the register number for _Decimal128 pseudo-registers. */
3839 tdep->ppc_dl0_regnum = have_dfp? gdbarch_num_regs (gdbarch) : -1;
3840
3841 if (have_dfp && have_spe)
3842 /* Put the _Decimal128 pseudo-registers after the SPE registers. */
3843 tdep->ppc_dl0_regnum += 32;
3844
3845 return gdbarch;
3846 }
3847
3848 static void
3849 rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3850 {
3851 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3852
3853 if (tdep == NULL)
3854 return;
3855
3856 /* FIXME: Dump gdbarch_tdep. */
3857 }
3858
3859 /* PowerPC-specific commands. */
3860
3861 static void
3862 set_powerpc_command (char *args, int from_tty)
3863 {
3864 printf_unfiltered (_("\
3865 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
3866 help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout);
3867 }
3868
3869 static void
3870 show_powerpc_command (char *args, int from_tty)
3871 {
3872 cmd_show_list (showpowerpccmdlist, from_tty, "");
3873 }
3874
3875 static void
3876 powerpc_set_soft_float (char *args, int from_tty,
3877 struct cmd_list_element *c)
3878 {
3879 struct gdbarch_info info;
3880
3881 /* Update the architecture. */
3882 gdbarch_info_init (&info);
3883 if (!gdbarch_update_p (info))
3884 internal_error (__FILE__, __LINE__, "could not update architecture");
3885 }
3886
3887 static void
3888 powerpc_set_vector_abi (char *args, int from_tty,
3889 struct cmd_list_element *c)
3890 {
3891 struct gdbarch_info info;
3892 enum powerpc_vector_abi vector_abi;
3893
3894 for (vector_abi = POWERPC_VEC_AUTO;
3895 vector_abi != POWERPC_VEC_LAST;
3896 vector_abi++)
3897 if (strcmp (powerpc_vector_abi_string,
3898 powerpc_vector_strings[vector_abi]) == 0)
3899 {
3900 powerpc_vector_abi_global = vector_abi;
3901 break;
3902 }
3903
3904 if (vector_abi == POWERPC_VEC_LAST)
3905 internal_error (__FILE__, __LINE__, _("Invalid vector ABI accepted: %s."),
3906 powerpc_vector_abi_string);
3907
3908 /* Update the architecture. */
3909 gdbarch_info_init (&info);
3910 if (!gdbarch_update_p (info))
3911 internal_error (__FILE__, __LINE__, "could not update architecture");
3912 }
3913
3914 /* Initialization code. */
3915
3916 extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */
3917
3918 void
3919 _initialize_rs6000_tdep (void)
3920 {
3921 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
3922 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
3923
3924 /* Initialize the standard target descriptions. */
3925 initialize_tdesc_powerpc_32 ();
3926 initialize_tdesc_powerpc_403 ();
3927 initialize_tdesc_powerpc_403gc ();
3928 initialize_tdesc_powerpc_505 ();
3929 initialize_tdesc_powerpc_601 ();
3930 initialize_tdesc_powerpc_602 ();
3931 initialize_tdesc_powerpc_603 ();
3932 initialize_tdesc_powerpc_604 ();
3933 initialize_tdesc_powerpc_64 ();
3934 initialize_tdesc_powerpc_7400 ();
3935 initialize_tdesc_powerpc_750 ();
3936 initialize_tdesc_powerpc_860 ();
3937 initialize_tdesc_powerpc_e500 ();
3938 initialize_tdesc_rs6000 ();
3939
3940 /* Add root prefix command for all "set powerpc"/"show powerpc"
3941 commands. */
3942 add_prefix_cmd ("powerpc", no_class, set_powerpc_command,
3943 _("Various PowerPC-specific commands."),
3944 &setpowerpccmdlist, "set powerpc ", 0, &setlist);
3945
3946 add_prefix_cmd ("powerpc", no_class, show_powerpc_command,
3947 _("Various PowerPC-specific commands."),
3948 &showpowerpccmdlist, "show powerpc ", 0, &showlist);
3949
3950 /* Add a command to allow the user to force the ABI. */
3951 add_setshow_auto_boolean_cmd ("soft-float", class_support,
3952 &powerpc_soft_float_global,
3953 _("Set whether to use a soft-float ABI."),
3954 _("Show whether to use a soft-float ABI."),
3955 NULL,
3956 powerpc_set_soft_float, NULL,
3957 &setpowerpccmdlist, &showpowerpccmdlist);
3958
3959 add_setshow_enum_cmd ("vector-abi", class_support, powerpc_vector_strings,
3960 &powerpc_vector_abi_string,
3961 _("Set the vector ABI."),
3962 _("Show the vector ABI."),
3963 NULL, powerpc_set_vector_abi, NULL,
3964 &setpowerpccmdlist, &showpowerpccmdlist);
3965 }