]> Git Repo - binutils.git/blame - gdb/rs6000-tdep.c
2002-08-19 David Carlton <[email protected]>
[binutils.git] / gdb / rs6000-tdep.c
CommitLineData
c906108c 1/* Target-dependent code for GDB, the GNU debugger.
b6ba6518 2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
2a873819 3 1998, 1999, 2000, 2001, 2002
c906108c
SS
4 Free Software Foundation, Inc.
5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23#include "defs.h"
24#include "frame.h"
25#include "inferior.h"
26#include "symtab.h"
27#include "target.h"
28#include "gdbcore.h"
29#include "gdbcmd.h"
30#include "symfile.h"
31#include "objfiles.h"
7a78ae4e 32#include "arch-utils.h"
4e052eda 33#include "regcache.h"
d16aafd8 34#include "doublest.h"
fd0407d6 35#include "value.h"
1fcc0bb8 36#include "parser-defs.h"
7a78ae4e 37
2fccf04a 38#include "libbfd.h" /* for bfd_default_set_arch_mach */
7a78ae4e 39#include "coff/internal.h" /* for libcoff.h */
2fccf04a 40#include "libcoff.h" /* for xcoff_data */
11ed25ac
KB
41#include "coff/xcoff.h"
42#include "libxcoff.h"
7a78ae4e 43
9aa1e687 44#include "elf-bfd.h"
7a78ae4e 45
6ded7999 46#include "solib-svr4.h"
9aa1e687 47#include "ppc-tdep.h"
7a78ae4e
ND
48
49/* If the kernel has to deliver a signal, it pushes a sigcontext
50 structure on the stack and then calls the signal handler, passing
51 the address of the sigcontext in an argument register. Usually
52 the signal handler doesn't save this register, so we have to
53 access the sigcontext structure via an offset from the signal handler
54 frame.
55 The following constants were determined by experimentation on AIX 3.2. */
56#define SIG_FRAME_PC_OFFSET 96
57#define SIG_FRAME_LR_OFFSET 108
58#define SIG_FRAME_FP_OFFSET 284
59
7a78ae4e
ND
60/* To be used by skip_prologue. */
61
62struct rs6000_framedata
63 {
64 int offset; /* total size of frame --- the distance
65 by which we decrement sp to allocate
66 the frame */
67 int saved_gpr; /* smallest # of saved gpr */
68 int saved_fpr; /* smallest # of saved fpr */
6be8bc0c 69 int saved_vr; /* smallest # of saved vr */
7a78ae4e
ND
70 int alloca_reg; /* alloca register number (frame ptr) */
71 char frameless; /* true if frameless functions. */
72 char nosavedpc; /* true if pc not saved. */
73 int gpr_offset; /* offset of saved gprs from prev sp */
74 int fpr_offset; /* offset of saved fprs from prev sp */
6be8bc0c 75 int vr_offset; /* offset of saved vrs from prev sp */
7a78ae4e
ND
76 int lr_offset; /* offset of saved lr */
77 int cr_offset; /* offset of saved cr */
6be8bc0c 78 int vrsave_offset; /* offset of saved vrsave register */
7a78ae4e
ND
79 };
80
81/* Description of a single register. */
82
83struct reg
84 {
85 char *name; /* name of register */
86 unsigned char sz32; /* size on 32-bit arch, 0 if nonextant */
87 unsigned char sz64; /* size on 64-bit arch, 0 if nonextant */
88 unsigned char fpr; /* whether register is floating-point */
89 };
90
c906108c
SS
91/* Breakpoint shadows for the single step instructions will be kept here. */
92
c5aa993b
JM
93static struct sstep_breaks
94 {
95 /* Address, or 0 if this is not in use. */
96 CORE_ADDR address;
97 /* Shadow contents. */
98 char data[4];
99 }
100stepBreaks[2];
c906108c
SS
101
102/* Hook for determining the TOC address when calling functions in the
103 inferior under AIX. The initialization code in rs6000-nat.c sets
104 this hook to point to find_toc_address. */
105
7a78ae4e
ND
106CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
107
108/* Hook to set the current architecture when starting a child process.
109 rs6000-nat.c sets this. */
110
111void (*rs6000_set_host_arch_hook) (int) = NULL;
c906108c
SS
112
113/* Static function prototypes */
114
a14ed312
KB
115static CORE_ADDR branch_dest (int opcode, int instr, CORE_ADDR pc,
116 CORE_ADDR safety);
077276e8
KB
117static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR,
118 struct rs6000_framedata *);
7a78ae4e
ND
119static void frame_get_saved_regs (struct frame_info * fi,
120 struct rs6000_framedata * fdatap);
121static CORE_ADDR frame_initial_stack_address (struct frame_info *);
c906108c 122
7a78ae4e 123/* Read a LEN-byte address from debugged memory address MEMADDR. */
c906108c 124
7a78ae4e
ND
125static CORE_ADDR
126read_memory_addr (CORE_ADDR memaddr, int len)
127{
128 return read_memory_unsigned_integer (memaddr, len);
129}
c906108c 130
7a78ae4e
ND
131static CORE_ADDR
132rs6000_skip_prologue (CORE_ADDR pc)
b83266a0
SS
133{
134 struct rs6000_framedata frame;
077276e8 135 pc = skip_prologue (pc, 0, &frame);
b83266a0
SS
136 return pc;
137}
138
139
c906108c
SS
140/* Fill in fi->saved_regs */
141
142struct frame_extra_info
143{
144 /* Functions calling alloca() change the value of the stack
145 pointer. We need to use initial stack pointer (which is saved in
146 r31 by gcc) in such cases. If a compiler emits traceback table,
147 then we should use the alloca register specified in traceback
148 table. FIXME. */
c5aa993b 149 CORE_ADDR initial_sp; /* initial stack pointer. */
c906108c
SS
150};
151
9aa1e687 152void
7a78ae4e 153rs6000_init_extra_frame_info (int fromleaf, struct frame_info *fi)
c906108c 154{
c5aa993b 155 fi->extra_info = (struct frame_extra_info *)
c906108c
SS
156 frame_obstack_alloc (sizeof (struct frame_extra_info));
157 fi->extra_info->initial_sp = 0;
158 if (fi->next != (CORE_ADDR) 0
159 && fi->pc < TEXT_SEGMENT_BASE)
7a292a7a 160 /* We're in get_prev_frame */
c906108c
SS
161 /* and this is a special signal frame. */
162 /* (fi->pc will be some low address in the kernel, */
163 /* to which the signal handler returns). */
164 fi->signal_handler_caller = 1;
165}
166
7a78ae4e
ND
167/* Put here the code to store, into a struct frame_saved_regs,
168 the addresses of the saved registers of frame described by FRAME_INFO.
169 This includes special registers such as pc and fp saved in special
170 ways in the stack frame. sp is even more special:
171 the address we return for it IS the sp for the next frame. */
c906108c 172
7a78ae4e
ND
173/* In this implementation for RS/6000, we do *not* save sp. I am
174 not sure if it will be needed. The following function takes care of gpr's
175 and fpr's only. */
176
9aa1e687 177void
7a78ae4e 178rs6000_frame_init_saved_regs (struct frame_info *fi)
c906108c
SS
179{
180 frame_get_saved_regs (fi, NULL);
181}
182
7a78ae4e
ND
183static CORE_ADDR
184rs6000_frame_args_address (struct frame_info *fi)
c906108c
SS
185{
186 if (fi->extra_info->initial_sp != 0)
187 return fi->extra_info->initial_sp;
188 else
189 return frame_initial_stack_address (fi);
190}
191
7a78ae4e
ND
192/* Immediately after a function call, return the saved pc.
193 Can't go through the frames for this because on some machines
194 the new frame is not set up until the new function executes
195 some instructions. */
196
197static CORE_ADDR
198rs6000_saved_pc_after_call (struct frame_info *fi)
199{
2188cbdd 200 return read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
7a78ae4e 201}
c906108c
SS
202
203/* Calculate the destination of a branch/jump. Return -1 if not a branch. */
204
205static CORE_ADDR
7a78ae4e 206branch_dest (int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety)
c906108c
SS
207{
208 CORE_ADDR dest;
209 int immediate;
210 int absolute;
211 int ext_op;
212
213 absolute = (int) ((instr >> 1) & 1);
214
c5aa993b
JM
215 switch (opcode)
216 {
217 case 18:
218 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
219 if (absolute)
220 dest = immediate;
221 else
222 dest = pc + immediate;
223 break;
224
225 case 16:
226 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
227 if (absolute)
228 dest = immediate;
229 else
230 dest = pc + immediate;
231 break;
232
233 case 19:
234 ext_op = (instr >> 1) & 0x3ff;
235
236 if (ext_op == 16) /* br conditional register */
237 {
2188cbdd 238 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
c5aa993b
JM
239
240 /* If we are about to return from a signal handler, dest is
241 something like 0x3c90. The current frame is a signal handler
242 caller frame, upon completion of the sigreturn system call
243 execution will return to the saved PC in the frame. */
244 if (dest < TEXT_SEGMENT_BASE)
245 {
246 struct frame_info *fi;
247
248 fi = get_current_frame ();
249 if (fi != NULL)
7a78ae4e 250 dest = read_memory_addr (fi->frame + SIG_FRAME_PC_OFFSET,
21283beb 251 gdbarch_tdep (current_gdbarch)->wordsize);
c5aa993b
JM
252 }
253 }
254
255 else if (ext_op == 528) /* br cond to count reg */
256 {
2188cbdd 257 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum) & ~3;
c5aa993b
JM
258
259 /* If we are about to execute a system call, dest is something
260 like 0x22fc or 0x3b00. Upon completion the system call
261 will return to the address in the link register. */
262 if (dest < TEXT_SEGMENT_BASE)
2188cbdd 263 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
c5aa993b
JM
264 }
265 else
266 return -1;
267 break;
c906108c 268
c5aa993b
JM
269 default:
270 return -1;
271 }
c906108c
SS
272 return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
273}
274
275
276/* Sequence of bytes for breakpoint instruction. */
277
278#define BIG_BREAKPOINT { 0x7d, 0x82, 0x10, 0x08 }
279#define LITTLE_BREAKPOINT { 0x08, 0x10, 0x82, 0x7d }
280
f4f9705a 281const static unsigned char *
7a78ae4e 282rs6000_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
c906108c
SS
283{
284 static unsigned char big_breakpoint[] = BIG_BREAKPOINT;
285 static unsigned char little_breakpoint[] = LITTLE_BREAKPOINT;
286 *bp_size = 4;
d7449b42 287 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
c906108c
SS
288 return big_breakpoint;
289 else
290 return little_breakpoint;
291}
292
293
294/* AIX does not support PT_STEP. Simulate it. */
295
296void
379d08a1
AC
297rs6000_software_single_step (enum target_signal signal,
298 int insert_breakpoints_p)
c906108c 299{
7c40d541
KB
300 CORE_ADDR dummy;
301 int breakp_sz;
f4f9705a 302 const char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz);
c906108c
SS
303 int ii, insn;
304 CORE_ADDR loc;
305 CORE_ADDR breaks[2];
306 int opcode;
307
c5aa993b
JM
308 if (insert_breakpoints_p)
309 {
c906108c 310
c5aa993b 311 loc = read_pc ();
c906108c 312
c5aa993b 313 insn = read_memory_integer (loc, 4);
c906108c 314
7c40d541 315 breaks[0] = loc + breakp_sz;
c5aa993b
JM
316 opcode = insn >> 26;
317 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
c906108c 318
c5aa993b
JM
319 /* Don't put two breakpoints on the same address. */
320 if (breaks[1] == breaks[0])
321 breaks[1] = -1;
c906108c 322
c5aa993b 323 stepBreaks[1].address = 0;
c906108c 324
c5aa993b
JM
325 for (ii = 0; ii < 2; ++ii)
326 {
c906108c 327
c5aa993b
JM
328 /* ignore invalid breakpoint. */
329 if (breaks[ii] == -1)
330 continue;
7c40d541 331 target_insert_breakpoint (breaks[ii], stepBreaks[ii].data);
c5aa993b
JM
332 stepBreaks[ii].address = breaks[ii];
333 }
c906108c 334
c5aa993b
JM
335 }
336 else
337 {
c906108c 338
c5aa993b
JM
339 /* remove step breakpoints. */
340 for (ii = 0; ii < 2; ++ii)
341 if (stepBreaks[ii].address != 0)
7c40d541
KB
342 target_remove_breakpoint (stepBreaks[ii].address,
343 stepBreaks[ii].data);
c5aa993b 344 }
c906108c 345 errno = 0; /* FIXME, don't ignore errors! */
c5aa993b 346 /* What errors? {read,write}_memory call error(). */
c906108c
SS
347}
348
349
350/* return pc value after skipping a function prologue and also return
351 information about a function frame.
352
353 in struct rs6000_framedata fdata:
c5aa993b
JM
354 - frameless is TRUE, if function does not have a frame.
355 - nosavedpc is TRUE, if function does not save %pc value in its frame.
356 - offset is the initial size of this stack frame --- the amount by
357 which we decrement the sp to allocate the frame.
358 - saved_gpr is the number of the first saved gpr.
359 - saved_fpr is the number of the first saved fpr.
6be8bc0c 360 - saved_vr is the number of the first saved vr.
c5aa993b
JM
361 - alloca_reg is the number of the register used for alloca() handling.
362 Otherwise -1.
363 - gpr_offset is the offset of the first saved gpr from the previous frame.
364 - fpr_offset is the offset of the first saved fpr from the previous frame.
6be8bc0c 365 - vr_offset is the offset of the first saved vr from the previous frame.
c5aa993b
JM
366 - lr_offset is the offset of the saved lr
367 - cr_offset is the offset of the saved cr
6be8bc0c 368 - vrsave_offset is the offset of the saved vrsave register
c5aa993b 369 */
c906108c
SS
370
371#define SIGNED_SHORT(x) \
372 ((sizeof (short) == 2) \
373 ? ((int)(short)(x)) \
374 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
375
376#define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
377
55d05f3b
KB
378/* Limit the number of skipped non-prologue instructions, as the examining
379 of the prologue is expensive. */
380static int max_skip_non_prologue_insns = 10;
381
382/* Given PC representing the starting address of a function, and
383 LIM_PC which is the (sloppy) limit to which to scan when looking
384 for a prologue, attempt to further refine this limit by using
385 the line data in the symbol table. If successful, a better guess
386 on where the prologue ends is returned, otherwise the previous
387 value of lim_pc is returned. */
388static CORE_ADDR
389refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc)
390{
391 struct symtab_and_line prologue_sal;
392
393 prologue_sal = find_pc_line (pc, 0);
394 if (prologue_sal.line != 0)
395 {
396 int i;
397 CORE_ADDR addr = prologue_sal.end;
398
399 /* Handle the case in which compiler's optimizer/scheduler
400 has moved instructions into the prologue. We scan ahead
401 in the function looking for address ranges whose corresponding
402 line number is less than or equal to the first one that we
403 found for the function. (It can be less than when the
404 scheduler puts a body instruction before the first prologue
405 instruction.) */
406 for (i = 2 * max_skip_non_prologue_insns;
407 i > 0 && (lim_pc == 0 || addr < lim_pc);
408 i--)
409 {
410 struct symtab_and_line sal;
411
412 sal = find_pc_line (addr, 0);
413 if (sal.line == 0)
414 break;
415 if (sal.line <= prologue_sal.line
416 && sal.symtab == prologue_sal.symtab)
417 {
418 prologue_sal = sal;
419 }
420 addr = sal.end;
421 }
422
423 if (lim_pc == 0 || prologue_sal.end < lim_pc)
424 lim_pc = prologue_sal.end;
425 }
426 return lim_pc;
427}
428
429
7a78ae4e 430static CORE_ADDR
077276e8 431skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
c906108c
SS
432{
433 CORE_ADDR orig_pc = pc;
55d05f3b 434 CORE_ADDR last_prologue_pc = pc;
6be8bc0c 435 CORE_ADDR li_found_pc = 0;
c906108c
SS
436 char buf[4];
437 unsigned long op;
438 long offset = 0;
6be8bc0c 439 long vr_saved_offset = 0;
482ca3f5
KB
440 int lr_reg = -1;
441 int cr_reg = -1;
6be8bc0c
EZ
442 int vr_reg = -1;
443 int vrsave_reg = -1;
c906108c
SS
444 int reg;
445 int framep = 0;
446 int minimal_toc_loaded = 0;
ddb20c56 447 int prev_insn_was_prologue_insn = 1;
55d05f3b
KB
448 int num_skip_non_prologue_insns = 0;
449
450 /* Attempt to find the end of the prologue when no limit is specified.
451 Note that refine_prologue_limit() has been written so that it may
452 be used to "refine" the limits of non-zero PC values too, but this
453 is only safe if we 1) trust the line information provided by the
454 compiler and 2) iterate enough to actually find the end of the
455 prologue.
456
457 It may become a good idea at some point (for both performance and
458 accuracy) to unconditionally call refine_prologue_limit(). But,
459 until we can make a clear determination that this is beneficial,
460 we'll play it safe and only use it to obtain a limit when none
461 has been specified. */
462 if (lim_pc == 0)
463 lim_pc = refine_prologue_limit (pc, lim_pc);
c906108c 464
ddb20c56 465 memset (fdata, 0, sizeof (struct rs6000_framedata));
c906108c
SS
466 fdata->saved_gpr = -1;
467 fdata->saved_fpr = -1;
6be8bc0c 468 fdata->saved_vr = -1;
c906108c
SS
469 fdata->alloca_reg = -1;
470 fdata->frameless = 1;
471 fdata->nosavedpc = 1;
472
55d05f3b 473 for (;; pc += 4)
c906108c 474 {
ddb20c56
KB
475 /* Sometimes it isn't clear if an instruction is a prologue
476 instruction or not. When we encounter one of these ambiguous
477 cases, we'll set prev_insn_was_prologue_insn to 0 (false).
478 Otherwise, we'll assume that it really is a prologue instruction. */
479 if (prev_insn_was_prologue_insn)
480 last_prologue_pc = pc;
55d05f3b
KB
481
482 /* Stop scanning if we've hit the limit. */
483 if (lim_pc != 0 && pc >= lim_pc)
484 break;
485
ddb20c56
KB
486 prev_insn_was_prologue_insn = 1;
487
55d05f3b 488 /* Fetch the instruction and convert it to an integer. */
ddb20c56
KB
489 if (target_read_memory (pc, buf, 4))
490 break;
491 op = extract_signed_integer (buf, 4);
c906108c 492
c5aa993b
JM
493 if ((op & 0xfc1fffff) == 0x7c0802a6)
494 { /* mflr Rx */
495 lr_reg = (op & 0x03e00000) | 0x90010000;
496 continue;
c906108c 497
c5aa993b
JM
498 }
499 else if ((op & 0xfc1fffff) == 0x7c000026)
500 { /* mfcr Rx */
501 cr_reg = (op & 0x03e00000) | 0x90010000;
502 continue;
c906108c 503
c906108c 504 }
c5aa993b
JM
505 else if ((op & 0xfc1f0000) == 0xd8010000)
506 { /* stfd Rx,NUM(r1) */
507 reg = GET_SRC_REG (op);
508 if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg)
509 {
510 fdata->saved_fpr = reg;
511 fdata->fpr_offset = SIGNED_SHORT (op) + offset;
512 }
513 continue;
c906108c 514
c5aa993b
JM
515 }
516 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
7a78ae4e
ND
517 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
518 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
519 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
c5aa993b
JM
520 {
521
522 reg = GET_SRC_REG (op);
523 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
524 {
525 fdata->saved_gpr = reg;
7a78ae4e
ND
526 if ((op & 0xfc1f0003) == 0xf8010000)
527 op = (op >> 1) << 1;
c5aa993b
JM
528 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
529 }
530 continue;
c906108c 531
ddb20c56
KB
532 }
533 else if ((op & 0xffff0000) == 0x60000000)
534 {
535 /* nop */
536 /* Allow nops in the prologue, but do not consider them to
537 be part of the prologue unless followed by other prologue
538 instructions. */
539 prev_insn_was_prologue_insn = 0;
540 continue;
541
c906108c 542 }
c5aa993b
JM
543 else if ((op & 0xffff0000) == 0x3c000000)
544 { /* addis 0,0,NUM, used
545 for >= 32k frames */
546 fdata->offset = (op & 0x0000ffff) << 16;
547 fdata->frameless = 0;
548 continue;
549
550 }
551 else if ((op & 0xffff0000) == 0x60000000)
552 { /* ori 0,0,NUM, 2nd ha
553 lf of >= 32k frames */
554 fdata->offset |= (op & 0x0000ffff);
555 fdata->frameless = 0;
556 continue;
557
558 }
482ca3f5 559 else if (lr_reg != -1 && (op & 0xffff0000) == lr_reg)
c5aa993b
JM
560 { /* st Rx,NUM(r1)
561 where Rx == lr */
562 fdata->lr_offset = SIGNED_SHORT (op) + offset;
563 fdata->nosavedpc = 0;
564 lr_reg = 0;
565 continue;
566
567 }
482ca3f5 568 else if (cr_reg != -1 && (op & 0xffff0000) == cr_reg)
c5aa993b
JM
569 { /* st Rx,NUM(r1)
570 where Rx == cr */
571 fdata->cr_offset = SIGNED_SHORT (op) + offset;
572 cr_reg = 0;
573 continue;
574
575 }
576 else if (op == 0x48000005)
577 { /* bl .+4 used in
578 -mrelocatable */
579 continue;
580
581 }
582 else if (op == 0x48000004)
583 { /* b .+4 (xlc) */
584 break;
585
c5aa993b 586 }
6be8bc0c
EZ
587 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
588 in V.4 -mminimal-toc */
c5aa993b
JM
589 (op & 0xffff0000) == 0x3bde0000)
590 { /* addi 30,30,foo@l */
591 continue;
c906108c 592
c5aa993b
JM
593 }
594 else if ((op & 0xfc000001) == 0x48000001)
595 { /* bl foo,
596 to save fprs??? */
c906108c 597
c5aa993b 598 fdata->frameless = 0;
6be8bc0c
EZ
599 /* Don't skip over the subroutine call if it is not within
600 the first three instructions of the prologue. */
c5aa993b
JM
601 if ((pc - orig_pc) > 8)
602 break;
603
604 op = read_memory_integer (pc + 4, 4);
605
6be8bc0c
EZ
606 /* At this point, make sure this is not a trampoline
607 function (a function that simply calls another functions,
608 and nothing else). If the next is not a nop, this branch
609 was part of the function prologue. */
c5aa993b
JM
610
611 if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */
612 break; /* don't skip over
613 this branch */
614 continue;
615
616 /* update stack pointer */
617 }
7a78ae4e
ND
618 else if ((op & 0xffff0000) == 0x94210000 || /* stu r1,NUM(r1) */
619 (op & 0xffff0003) == 0xf8210001) /* stdu r1,NUM(r1) */
620 {
c5aa993b 621 fdata->frameless = 0;
7a78ae4e
ND
622 if ((op & 0xffff0003) == 0xf8210001)
623 op = (op >> 1) << 1;
c5aa993b
JM
624 fdata->offset = SIGNED_SHORT (op);
625 offset = fdata->offset;
626 continue;
627
628 }
629 else if (op == 0x7c21016e)
630 { /* stwux 1,1,0 */
631 fdata->frameless = 0;
632 offset = fdata->offset;
633 continue;
634
635 /* Load up minimal toc pointer */
636 }
637 else if ((op >> 22) == 0x20f
638 && !minimal_toc_loaded)
639 { /* l r31,... or l r30,... */
640 minimal_toc_loaded = 1;
641 continue;
642
f6077098
KB
643 /* move parameters from argument registers to local variable
644 registers */
645 }
646 else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */
647 (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */
648 (((op >> 21) & 31) <= 10) &&
649 (((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */
650 {
651 continue;
652
c5aa993b
JM
653 /* store parameters in stack */
654 }
6be8bc0c 655 else if ((op & 0xfc1f0003) == 0xf8010000 || /* std rx,NUM(r1) */
c5aa993b 656 (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */
7a78ae4e
ND
657 (op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */
658 {
c5aa993b 659 continue;
c906108c 660
c5aa993b
JM
661 /* store parameters in stack via frame pointer */
662 }
663 else if (framep &&
664 ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */
665 (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */
666 (op & 0xfc1f0000) == 0xfc1f0000))
667 { /* frsp, fp?,NUM(r1) */
668 continue;
669
670 /* Set up frame pointer */
671 }
672 else if (op == 0x603f0000 /* oril r31, r1, 0x0 */
673 || op == 0x7c3f0b78)
674 { /* mr r31, r1 */
675 fdata->frameless = 0;
676 framep = 1;
677 fdata->alloca_reg = 31;
678 continue;
679
680 /* Another way to set up the frame pointer. */
681 }
682 else if ((op & 0xfc1fffff) == 0x38010000)
683 { /* addi rX, r1, 0x0 */
684 fdata->frameless = 0;
685 framep = 1;
686 fdata->alloca_reg = (op & ~0x38010000) >> 21;
687 continue;
c5aa993b 688 }
6be8bc0c
EZ
689 /* AltiVec related instructions. */
690 /* Store the vrsave register (spr 256) in another register for
691 later manipulation, or load a register into the vrsave
692 register. 2 instructions are used: mfvrsave and
693 mtvrsave. They are shorthand notation for mfspr Rn, SPR256
694 and mtspr SPR256, Rn. */
695 /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110
696 mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110 */
697 else if ((op & 0xfc1fffff) == 0x7c0042a6) /* mfvrsave Rn */
698 {
699 vrsave_reg = GET_SRC_REG (op);
700 continue;
701 }
702 else if ((op & 0xfc1fffff) == 0x7c0043a6) /* mtvrsave Rn */
703 {
704 continue;
705 }
706 /* Store the register where vrsave was saved to onto the stack:
707 rS is the register where vrsave was stored in a previous
708 instruction. */
709 /* 100100 sssss 00001 dddddddd dddddddd */
710 else if ((op & 0xfc1f0000) == 0x90010000) /* stw rS, d(r1) */
711 {
712 if (vrsave_reg == GET_SRC_REG (op))
713 {
714 fdata->vrsave_offset = SIGNED_SHORT (op) + offset;
715 vrsave_reg = -1;
716 }
717 continue;
718 }
719 /* Compute the new value of vrsave, by modifying the register
720 where vrsave was saved to. */
721 else if (((op & 0xfc000000) == 0x64000000) /* oris Ra, Rs, UIMM */
722 || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */
723 {
724 continue;
725 }
726 /* li r0, SIMM (short for addi r0, 0, SIMM). This is the first
727 in a pair of insns to save the vector registers on the
728 stack. */
729 /* 001110 00000 00000 iiii iiii iiii iiii */
730 else if ((op & 0xffff0000) == 0x38000000) /* li r0, SIMM */
731 {
732 li_found_pc = pc;
733 vr_saved_offset = SIGNED_SHORT (op);
734 }
735 /* Store vector register S at (r31+r0) aligned to 16 bytes. */
736 /* 011111 sssss 11111 00000 00111001110 */
737 else if ((op & 0xfc1fffff) == 0x7c1f01ce) /* stvx Vs, R31, R0 */
738 {
739 if (pc == (li_found_pc + 4))
740 {
741 vr_reg = GET_SRC_REG (op);
742 /* If this is the first vector reg to be saved, or if
743 it has a lower number than others previously seen,
744 reupdate the frame info. */
745 if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg)
746 {
747 fdata->saved_vr = vr_reg;
748 fdata->vr_offset = vr_saved_offset + offset;
749 }
750 vr_saved_offset = -1;
751 vr_reg = -1;
752 li_found_pc = 0;
753 }
754 }
755 /* End AltiVec related instructions. */
c5aa993b
JM
756 else
757 {
55d05f3b
KB
758 /* Not a recognized prologue instruction.
759 Handle optimizer code motions into the prologue by continuing
760 the search if we have no valid frame yet or if the return
761 address is not yet saved in the frame. */
762 if (fdata->frameless == 0
763 && (lr_reg == -1 || fdata->nosavedpc == 0))
764 break;
765
766 if (op == 0x4e800020 /* blr */
767 || op == 0x4e800420) /* bctr */
768 /* Do not scan past epilogue in frameless functions or
769 trampolines. */
770 break;
771 if ((op & 0xf4000000) == 0x40000000) /* bxx */
772 /* Never skip branches. */
773 break;
774
775 if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns)
776 /* Do not scan too many insns, scanning insns is expensive with
777 remote targets. */
778 break;
779
780 /* Continue scanning. */
781 prev_insn_was_prologue_insn = 0;
782 continue;
c5aa993b 783 }
c906108c
SS
784 }
785
786#if 0
787/* I have problems with skipping over __main() that I need to address
788 * sometime. Previously, I used to use misc_function_vector which
789 * didn't work as well as I wanted to be. -MGO */
790
791 /* If the first thing after skipping a prolog is a branch to a function,
792 this might be a call to an initializer in main(), introduced by gcc2.
793 We'd like to skip over it as well. Fortunately, xlc does some extra
794 work before calling a function right after a prologue, thus we can
795 single out such gcc2 behaviour. */
c906108c 796
c906108c 797
c5aa993b
JM
798 if ((op & 0xfc000001) == 0x48000001)
799 { /* bl foo, an initializer function? */
800 op = read_memory_integer (pc + 4, 4);
801
802 if (op == 0x4def7b82)
803 { /* cror 0xf, 0xf, 0xf (nop) */
c906108c 804
c5aa993b
JM
805 /* check and see if we are in main. If so, skip over this initializer
806 function as well. */
c906108c 807
c5aa993b 808 tmp = find_pc_misc_function (pc);
51cc5b07 809 if (tmp >= 0 && STREQ (misc_function_vector[tmp].name, main_name ()))
c5aa993b
JM
810 return pc + 8;
811 }
c906108c 812 }
c906108c 813#endif /* 0 */
c5aa993b
JM
814
815 fdata->offset = -fdata->offset;
ddb20c56 816 return last_prologue_pc;
c906108c
SS
817}
818
819
820/*************************************************************************
f6077098 821 Support for creating pushing a dummy frame into the stack, and popping
c906108c
SS
822 frames, etc.
823*************************************************************************/
824
c906108c 825
7a78ae4e 826/* Pop the innermost frame, go back to the caller. */
c5aa993b 827
c906108c 828static void
7a78ae4e 829rs6000_pop_frame (void)
c906108c 830{
470d5666 831 CORE_ADDR pc, lr, sp, prev_sp, addr; /* %pc, %lr, %sp */
c906108c
SS
832 struct rs6000_framedata fdata;
833 struct frame_info *frame = get_current_frame ();
470d5666 834 int ii, wordsize;
c906108c
SS
835
836 pc = read_pc ();
837 sp = FRAME_FP (frame);
838
58223630 839 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
c906108c 840 {
7a78ae4e
ND
841 generic_pop_dummy_frame ();
842 flush_cached_frames ();
843 return;
c906108c
SS
844 }
845
846 /* Make sure that all registers are valid. */
847 read_register_bytes (0, NULL, REGISTER_BYTES);
848
849 /* figure out previous %pc value. If the function is frameless, it is
850 still in the link register, otherwise walk the frames and retrieve the
851 saved %pc value in the previous frame. */
852
853 addr = get_pc_function_start (frame->pc);
077276e8 854 (void) skip_prologue (addr, frame->pc, &fdata);
c906108c 855
21283beb 856 wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
c906108c
SS
857 if (fdata.frameless)
858 prev_sp = sp;
859 else
7a78ae4e 860 prev_sp = read_memory_addr (sp, wordsize);
c906108c 861 if (fdata.lr_offset == 0)
2188cbdd 862 lr = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
c906108c 863 else
7a78ae4e 864 lr = read_memory_addr (prev_sp + fdata.lr_offset, wordsize);
c906108c
SS
865
866 /* reset %pc value. */
867 write_register (PC_REGNUM, lr);
868
869 /* reset register values if any was saved earlier. */
870
871 if (fdata.saved_gpr != -1)
872 {
873 addr = prev_sp + fdata.gpr_offset;
c5aa993b
JM
874 for (ii = fdata.saved_gpr; ii <= 31; ++ii)
875 {
7a78ae4e
ND
876 read_memory (addr, &registers[REGISTER_BYTE (ii)], wordsize);
877 addr += wordsize;
c5aa993b 878 }
c906108c
SS
879 }
880
881 if (fdata.saved_fpr != -1)
882 {
883 addr = prev_sp + fdata.fpr_offset;
c5aa993b
JM
884 for (ii = fdata.saved_fpr; ii <= 31; ++ii)
885 {
886 read_memory (addr, &registers[REGISTER_BYTE (ii + FP0_REGNUM)], 8);
887 addr += 8;
888 }
c906108c
SS
889 }
890
891 write_register (SP_REGNUM, prev_sp);
892 target_store_registers (-1);
893 flush_cached_frames ();
894}
895
7a78ae4e
ND
896/* Fixup the call sequence of a dummy function, with the real function
897 address. Its arguments will be passed by gdb. */
c906108c 898
7a78ae4e
ND
899static void
900rs6000_fix_call_dummy (char *dummyname, CORE_ADDR pc, CORE_ADDR fun,
ea7c478f 901 int nargs, struct value **args, struct type *type,
7a78ae4e 902 int gcc_p)
c906108c 903{
c906108c
SS
904 int ii;
905 CORE_ADDR target_addr;
906
7a78ae4e 907 if (rs6000_find_toc_address_hook != NULL)
f6077098 908 {
7a78ae4e 909 CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (fun);
2188cbdd
EZ
910 write_register (gdbarch_tdep (current_gdbarch)->ppc_toc_regnum,
911 tocvalue);
f6077098 912 }
c906108c
SS
913}
914
7a78ae4e 915/* Pass the arguments in either registers, or in the stack. In RS/6000,
c906108c
SS
916 the first eight words of the argument list (that might be less than
917 eight parameters if some parameters occupy more than one word) are
7a78ae4e 918 passed in r3..r10 registers. float and double parameters are
c906108c
SS
919 passed in fpr's, in addition to that. Rest of the parameters if any
920 are passed in user stack. There might be cases in which half of the
921 parameter is copied into registers, the other half is pushed into
922 stack.
923
7a78ae4e
ND
924 Stack must be aligned on 64-bit boundaries when synthesizing
925 function calls.
926
c906108c
SS
927 If the function is returning a structure, then the return address is passed
928 in r3, then the first 7 words of the parameters can be passed in registers,
929 starting from r4. */
930
7a78ae4e 931static CORE_ADDR
ea7c478f 932rs6000_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
7a78ae4e 933 int struct_return, CORE_ADDR struct_addr)
c906108c
SS
934{
935 int ii;
936 int len = 0;
c5aa993b
JM
937 int argno; /* current argument number */
938 int argbytes; /* current argument byte */
939 char tmp_buffer[50];
940 int f_argno = 0; /* current floating point argno */
21283beb 941 int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
c906108c 942
ea7c478f 943 struct value *arg = 0;
c906108c
SS
944 struct type *type;
945
946 CORE_ADDR saved_sp;
947
c906108c
SS
948 /* The first eight words of ther arguments are passed in registers. Copy
949 them appropriately.
950
951 If the function is returning a `struct', then the first word (which
952 will be passed in r3) is used for struct return address. In that
953 case we should advance one word and start from r4 register to copy
954 parameters. */
955
c5aa993b 956 ii = struct_return ? 1 : 0;
c906108c
SS
957
958/*
c5aa993b
JM
959 effectively indirect call... gcc does...
960
961 return_val example( float, int);
962
963 eabi:
964 float in fp0, int in r3
965 offset of stack on overflow 8/16
966 for varargs, must go by type.
967 power open:
968 float in r3&r4, int in r5
969 offset of stack on overflow different
970 both:
971 return in r3 or f0. If no float, must study how gcc emulates floats;
972 pay attention to arg promotion.
973 User may have to cast\args to handle promotion correctly
974 since gdb won't know if prototype supplied or not.
975 */
c906108c 976
c5aa993b
JM
977 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
978 {
f6077098 979 int reg_size = REGISTER_RAW_SIZE (ii + 3);
c5aa993b
JM
980
981 arg = args[argno];
982 type = check_typedef (VALUE_TYPE (arg));
983 len = TYPE_LENGTH (type);
984
985 if (TYPE_CODE (type) == TYPE_CODE_FLT)
986 {
987
988 /* floating point arguments are passed in fpr's, as well as gpr's.
989 There are 13 fpr's reserved for passing parameters. At this point
990 there is no way we would run out of them. */
991
992 if (len > 8)
993 printf_unfiltered (
994 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
995
996 memcpy (&registers[REGISTER_BYTE (FP0_REGNUM + 1 + f_argno)],
997 VALUE_CONTENTS (arg),
998 len);
999 ++f_argno;
1000 }
1001
f6077098 1002 if (len > reg_size)
c5aa993b
JM
1003 {
1004
1005 /* Argument takes more than one register. */
1006 while (argbytes < len)
1007 {
f6077098 1008 memset (&registers[REGISTER_BYTE (ii + 3)], 0, reg_size);
c5aa993b
JM
1009 memcpy (&registers[REGISTER_BYTE (ii + 3)],
1010 ((char *) VALUE_CONTENTS (arg)) + argbytes,
f6077098
KB
1011 (len - argbytes) > reg_size
1012 ? reg_size : len - argbytes);
1013 ++ii, argbytes += reg_size;
c5aa993b
JM
1014
1015 if (ii >= 8)
1016 goto ran_out_of_registers_for_arguments;
1017 }
1018 argbytes = 0;
1019 --ii;
1020 }
1021 else
1022 { /* Argument can fit in one register. No problem. */
d7449b42 1023 int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
f6077098
KB
1024 memset (&registers[REGISTER_BYTE (ii + 3)], 0, reg_size);
1025 memcpy ((char *)&registers[REGISTER_BYTE (ii + 3)] + adj,
1026 VALUE_CONTENTS (arg), len);
c5aa993b
JM
1027 }
1028 ++argno;
c906108c 1029 }
c906108c
SS
1030
1031ran_out_of_registers_for_arguments:
1032
7a78ae4e 1033 saved_sp = read_sp ();
cc9836a8 1034
7a78ae4e
ND
1035 /* location for 8 parameters are always reserved. */
1036 sp -= wordsize * 8;
f6077098 1037
7a78ae4e
ND
1038 /* another six words for back chain, TOC register, link register, etc. */
1039 sp -= wordsize * 6;
f6077098 1040
7a78ae4e
ND
1041 /* stack pointer must be quadword aligned */
1042 sp &= -16;
c906108c 1043
c906108c
SS
1044 /* if there are more arguments, allocate space for them in
1045 the stack, then push them starting from the ninth one. */
1046
c5aa993b
JM
1047 if ((argno < nargs) || argbytes)
1048 {
1049 int space = 0, jj;
c906108c 1050
c5aa993b
JM
1051 if (argbytes)
1052 {
1053 space += ((len - argbytes + 3) & -4);
1054 jj = argno + 1;
1055 }
1056 else
1057 jj = argno;
c906108c 1058
c5aa993b
JM
1059 for (; jj < nargs; ++jj)
1060 {
ea7c478f 1061 struct value *val = args[jj];
c5aa993b
JM
1062 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
1063 }
c906108c 1064
c5aa993b 1065 /* add location required for the rest of the parameters */
f6077098 1066 space = (space + 15) & -16;
c5aa993b 1067 sp -= space;
c906108c 1068
c5aa993b
JM
1069 /* This is another instance we need to be concerned about securing our
1070 stack space. If we write anything underneath %sp (r1), we might conflict
1071 with the kernel who thinks he is free to use this area. So, update %sp
1072 first before doing anything else. */
c906108c 1073
c5aa993b 1074 write_register (SP_REGNUM, sp);
c906108c 1075
c5aa993b
JM
1076 /* if the last argument copied into the registers didn't fit there
1077 completely, push the rest of it into stack. */
c906108c 1078
c5aa993b
JM
1079 if (argbytes)
1080 {
1081 write_memory (sp + 24 + (ii * 4),
1082 ((char *) VALUE_CONTENTS (arg)) + argbytes,
1083 len - argbytes);
1084 ++argno;
1085 ii += ((len - argbytes + 3) & -4) / 4;
1086 }
c906108c 1087
c5aa993b
JM
1088 /* push the rest of the arguments into stack. */
1089 for (; argno < nargs; ++argno)
1090 {
c906108c 1091
c5aa993b
JM
1092 arg = args[argno];
1093 type = check_typedef (VALUE_TYPE (arg));
1094 len = TYPE_LENGTH (type);
c906108c
SS
1095
1096
c5aa993b
JM
1097 /* float types should be passed in fpr's, as well as in the stack. */
1098 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
1099 {
c906108c 1100
c5aa993b
JM
1101 if (len > 8)
1102 printf_unfiltered (
1103 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
c906108c 1104
c5aa993b
JM
1105 memcpy (&registers[REGISTER_BYTE (FP0_REGNUM + 1 + f_argno)],
1106 VALUE_CONTENTS (arg),
1107 len);
1108 ++f_argno;
1109 }
c906108c 1110
c5aa993b
JM
1111 write_memory (sp + 24 + (ii * 4), (char *) VALUE_CONTENTS (arg), len);
1112 ii += ((len + 3) & -4) / 4;
1113 }
c906108c 1114 }
c906108c
SS
1115 else
1116 /* Secure stack areas first, before doing anything else. */
1117 write_register (SP_REGNUM, sp);
1118
c906108c
SS
1119 /* set back chain properly */
1120 store_address (tmp_buffer, 4, saved_sp);
1121 write_memory (sp, tmp_buffer, 4);
1122
1123 target_store_registers (-1);
1124 return sp;
1125}
c906108c
SS
1126
1127/* Function: ppc_push_return_address (pc, sp)
1128 Set up the return address for the inferior function call. */
1129
7a78ae4e
ND
1130static CORE_ADDR
1131ppc_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
c906108c 1132{
2188cbdd
EZ
1133 write_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum,
1134 CALL_DUMMY_ADDRESS ());
c906108c
SS
1135 return sp;
1136}
1137
7a78ae4e
ND
1138/* Extract a function return value of type TYPE from raw register array
1139 REGBUF, and copy that return value into VALBUF in virtual format. */
c906108c 1140
7a78ae4e
ND
1141static void
1142rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
c906108c
SS
1143{
1144 int offset = 0;
ace1378a 1145 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
c906108c 1146
c5aa993b
JM
1147 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1148 {
c906108c 1149
c5aa993b
JM
1150 double dd;
1151 float ff;
1152 /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
1153 We need to truncate the return value into float size (4 byte) if
1154 necessary. */
c906108c 1155
c5aa993b
JM
1156 if (TYPE_LENGTH (valtype) > 4) /* this is a double */
1157 memcpy (valbuf,
1158 &regbuf[REGISTER_BYTE (FP0_REGNUM + 1)],
1159 TYPE_LENGTH (valtype));
1160 else
1161 { /* float */
1162 memcpy (&dd, &regbuf[REGISTER_BYTE (FP0_REGNUM + 1)], 8);
1163 ff = (float) dd;
1164 memcpy (valbuf, &ff, sizeof (float));
1165 }
1166 }
ace1378a
EZ
1167 else if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY
1168 && TYPE_LENGTH (valtype) == 16
1169 && TYPE_VECTOR (valtype))
1170 {
1171 memcpy (valbuf, regbuf + REGISTER_BYTE (tdep->ppc_vr0_regnum + 2),
1172 TYPE_LENGTH (valtype));
1173 }
c5aa993b
JM
1174 else
1175 {
1176 /* return value is copied starting from r3. */
d7449b42 1177 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
c5aa993b
JM
1178 && TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (3))
1179 offset = REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
1180
1181 memcpy (valbuf,
1182 regbuf + REGISTER_BYTE (3) + offset,
c906108c 1183 TYPE_LENGTH (valtype));
c906108c 1184 }
c906108c
SS
1185}
1186
7a78ae4e 1187/* Keep structure return address in this variable.
c906108c
SS
1188 FIXME: This is a horrid kludge which should not be allowed to continue
1189 living. This only allows a single nested call to a structure-returning
1190 function. Come on, guys! -- [email protected], Aug 92 */
1191
7a78ae4e 1192static CORE_ADDR rs6000_struct_return_address;
c906108c 1193
977adac5
ND
1194/* Return whether handle_inferior_event() should proceed through code
1195 starting at PC in function NAME when stepping.
1196
1197 The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to
1198 handle memory references that are too distant to fit in instructions
1199 generated by the compiler. For example, if 'foo' in the following
1200 instruction:
1201
1202 lwz r9,foo(r2)
1203
1204 is greater than 32767, the linker might replace the lwz with a branch to
1205 somewhere in @FIX1 that does the load in 2 instructions and then branches
1206 back to where execution should continue.
1207
1208 GDB should silently step over @FIX code, just like AIX dbx does.
1209 Unfortunately, the linker uses the "b" instruction for the branches,
1210 meaning that the link register doesn't get set. Therefore, GDB's usual
1211 step_over_function() mechanism won't work.
1212
1213 Instead, use the IN_SOLIB_RETURN_TRAMPOLINE and SKIP_TRAMPOLINE_CODE hooks
1214 in handle_inferior_event() to skip past @FIX code. */
1215
1216int
1217rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name)
1218{
1219 return name && !strncmp (name, "@FIX", 4);
1220}
1221
1222/* Skip code that the user doesn't want to see when stepping:
1223
1224 1. Indirect function calls use a piece of trampoline code to do context
1225 switching, i.e. to set the new TOC table. Skip such code if we are on
1226 its first instruction (as when we have single-stepped to here).
1227
1228 2. Skip shared library trampoline code (which is different from
c906108c 1229 indirect function call trampolines).
977adac5
ND
1230
1231 3. Skip bigtoc fixup code.
1232
c906108c 1233 Result is desired PC to step until, or NULL if we are not in
977adac5 1234 code that should be skipped. */
c906108c
SS
1235
1236CORE_ADDR
7a78ae4e 1237rs6000_skip_trampoline_code (CORE_ADDR pc)
c906108c
SS
1238{
1239 register unsigned int ii, op;
977adac5 1240 int rel;
c906108c 1241 CORE_ADDR solib_target_pc;
977adac5 1242 struct minimal_symbol *msymbol;
c906108c 1243
c5aa993b
JM
1244 static unsigned trampoline_code[] =
1245 {
1246 0x800b0000, /* l r0,0x0(r11) */
1247 0x90410014, /* st r2,0x14(r1) */
1248 0x7c0903a6, /* mtctr r0 */
1249 0x804b0004, /* l r2,0x4(r11) */
1250 0x816b0008, /* l r11,0x8(r11) */
1251 0x4e800420, /* bctr */
1252 0x4e800020, /* br */
1253 0
c906108c
SS
1254 };
1255
977adac5
ND
1256 /* Check for bigtoc fixup code. */
1257 msymbol = lookup_minimal_symbol_by_pc (pc);
1258 if (msymbol && rs6000_in_solib_return_trampoline (pc, SYMBOL_NAME (msymbol)))
1259 {
1260 /* Double-check that the third instruction from PC is relative "b". */
1261 op = read_memory_integer (pc + 8, 4);
1262 if ((op & 0xfc000003) == 0x48000000)
1263 {
1264 /* Extract bits 6-29 as a signed 24-bit relative word address and
1265 add it to the containing PC. */
1266 rel = ((int)(op << 6) >> 6);
1267 return pc + 8 + rel;
1268 }
1269 }
1270
c906108c
SS
1271 /* If pc is in a shared library trampoline, return its target. */
1272 solib_target_pc = find_solib_trampoline_target (pc);
1273 if (solib_target_pc)
1274 return solib_target_pc;
1275
c5aa993b
JM
1276 for (ii = 0; trampoline_code[ii]; ++ii)
1277 {
1278 op = read_memory_integer (pc + (ii * 4), 4);
1279 if (op != trampoline_code[ii])
1280 return 0;
1281 }
1282 ii = read_register (11); /* r11 holds destination addr */
21283beb 1283 pc = read_memory_addr (ii, gdbarch_tdep (current_gdbarch)->wordsize); /* (r11) value */
c906108c
SS
1284 return pc;
1285}
1286
1287/* Determines whether the function FI has a frame on the stack or not. */
1288
9aa1e687 1289int
c877c8e6 1290rs6000_frameless_function_invocation (struct frame_info *fi)
c906108c
SS
1291{
1292 CORE_ADDR func_start;
1293 struct rs6000_framedata fdata;
1294
1295 /* Don't even think about framelessness except on the innermost frame
1296 or if the function was interrupted by a signal. */
1297 if (fi->next != NULL && !fi->next->signal_handler_caller)
1298 return 0;
c5aa993b 1299
c906108c
SS
1300 func_start = get_pc_function_start (fi->pc);
1301
1302 /* If we failed to find the start of the function, it is a mistake
1303 to inspect the instructions. */
1304
1305 if (!func_start)
1306 {
1307 /* A frame with a zero PC is usually created by dereferencing a NULL
c5aa993b
JM
1308 function pointer, normally causing an immediate core dump of the
1309 inferior. Mark function as frameless, as the inferior has no chance
1310 of setting up a stack frame. */
c906108c
SS
1311 if (fi->pc == 0)
1312 return 1;
1313 else
1314 return 0;
1315 }
1316
077276e8 1317 (void) skip_prologue (func_start, fi->pc, &fdata);
c906108c
SS
1318 return fdata.frameless;
1319}
1320
1321/* Return the PC saved in a frame */
1322
9aa1e687 1323CORE_ADDR
c877c8e6 1324rs6000_frame_saved_pc (struct frame_info *fi)
c906108c
SS
1325{
1326 CORE_ADDR func_start;
1327 struct rs6000_framedata fdata;
21283beb 1328 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
a88376a3 1329 int wordsize = tdep->wordsize;
c906108c
SS
1330
1331 if (fi->signal_handler_caller)
7a78ae4e 1332 return read_memory_addr (fi->frame + SIG_FRAME_PC_OFFSET, wordsize);
c906108c 1333
7a78ae4e
ND
1334 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
1335 return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
c906108c
SS
1336
1337 func_start = get_pc_function_start (fi->pc);
1338
1339 /* If we failed to find the start of the function, it is a mistake
1340 to inspect the instructions. */
1341 if (!func_start)
1342 return 0;
1343
077276e8 1344 (void) skip_prologue (func_start, fi->pc, &fdata);
c906108c
SS
1345
1346 if (fdata.lr_offset == 0 && fi->next != NULL)
1347 {
1348 if (fi->next->signal_handler_caller)
7a78ae4e
ND
1349 return read_memory_addr (fi->next->frame + SIG_FRAME_LR_OFFSET,
1350 wordsize);
c906108c 1351 else
a88376a3 1352 return read_memory_addr (FRAME_CHAIN (fi) + tdep->lr_frame_offset,
7a78ae4e 1353 wordsize);
c906108c
SS
1354 }
1355
1356 if (fdata.lr_offset == 0)
2188cbdd 1357 return read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
c906108c 1358
7a78ae4e 1359 return read_memory_addr (FRAME_CHAIN (fi) + fdata.lr_offset, wordsize);
c906108c
SS
1360}
1361
1362/* If saved registers of frame FI are not known yet, read and cache them.
1363 &FDATAP contains rs6000_framedata; TDATAP can be NULL,
1364 in which case the framedata are read. */
1365
1366static void
7a78ae4e 1367frame_get_saved_regs (struct frame_info *fi, struct rs6000_framedata *fdatap)
c906108c 1368{
c5aa993b 1369 CORE_ADDR frame_addr;
c906108c 1370 struct rs6000_framedata work_fdata;
6be8bc0c
EZ
1371 struct gdbarch_tdep * tdep = gdbarch_tdep (current_gdbarch);
1372 int wordsize = tdep->wordsize;
c906108c
SS
1373
1374 if (fi->saved_regs)
1375 return;
c5aa993b 1376
c906108c
SS
1377 if (fdatap == NULL)
1378 {
1379 fdatap = &work_fdata;
077276e8 1380 (void) skip_prologue (get_pc_function_start (fi->pc), fi->pc, fdatap);
c906108c
SS
1381 }
1382
1383 frame_saved_regs_zalloc (fi);
1384
1385 /* If there were any saved registers, figure out parent's stack
1386 pointer. */
1387 /* The following is true only if the frame doesn't have a call to
1388 alloca(), FIXME. */
1389
6be8bc0c
EZ
1390 if (fdatap->saved_fpr == 0
1391 && fdatap->saved_gpr == 0
1392 && fdatap->saved_vr == 0
1393 && fdatap->lr_offset == 0
1394 && fdatap->cr_offset == 0
1395 && fdatap->vr_offset == 0)
c906108c 1396 frame_addr = 0;
c906108c 1397 else
bf75c8c1
AC
1398 /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most
1399 address of the current frame. Things might be easier if the
1400 ->frame pointed to the outer-most address of the frame. In the
1401 mean time, the address of the prev frame is used as the base
1402 address of this frame. */
1403 frame_addr = FRAME_CHAIN (fi);
c5aa993b 1404
c906108c
SS
1405 /* if != -1, fdatap->saved_fpr is the smallest number of saved_fpr.
1406 All fpr's from saved_fpr to fp31 are saved. */
1407
1408 if (fdatap->saved_fpr >= 0)
1409 {
1410 int i;
7a78ae4e 1411 CORE_ADDR fpr_addr = frame_addr + fdatap->fpr_offset;
c906108c
SS
1412 for (i = fdatap->saved_fpr; i < 32; i++)
1413 {
7a78ae4e
ND
1414 fi->saved_regs[FP0_REGNUM + i] = fpr_addr;
1415 fpr_addr += 8;
c906108c
SS
1416 }
1417 }
1418
1419 /* if != -1, fdatap->saved_gpr is the smallest number of saved_gpr.
1420 All gpr's from saved_gpr to gpr31 are saved. */
1421
1422 if (fdatap->saved_gpr >= 0)
1423 {
1424 int i;
7a78ae4e 1425 CORE_ADDR gpr_addr = frame_addr + fdatap->gpr_offset;
c906108c
SS
1426 for (i = fdatap->saved_gpr; i < 32; i++)
1427 {
7a78ae4e
ND
1428 fi->saved_regs[i] = gpr_addr;
1429 gpr_addr += wordsize;
c906108c
SS
1430 }
1431 }
1432
6be8bc0c
EZ
1433 /* if != -1, fdatap->saved_vr is the smallest number of saved_vr.
1434 All vr's from saved_vr to vr31 are saved. */
1435 if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
1436 {
1437 if (fdatap->saved_vr >= 0)
1438 {
1439 int i;
1440 CORE_ADDR vr_addr = frame_addr + fdatap->vr_offset;
1441 for (i = fdatap->saved_vr; i < 32; i++)
1442 {
1443 fi->saved_regs[tdep->ppc_vr0_regnum + i] = vr_addr;
1444 vr_addr += REGISTER_RAW_SIZE (tdep->ppc_vr0_regnum);
1445 }
1446 }
1447 }
1448
c906108c
SS
1449 /* If != 0, fdatap->cr_offset is the offset from the frame that holds
1450 the CR. */
1451 if (fdatap->cr_offset != 0)
6be8bc0c 1452 fi->saved_regs[tdep->ppc_cr_regnum] = frame_addr + fdatap->cr_offset;
c906108c
SS
1453
1454 /* If != 0, fdatap->lr_offset is the offset from the frame that holds
1455 the LR. */
1456 if (fdatap->lr_offset != 0)
6be8bc0c
EZ
1457 fi->saved_regs[tdep->ppc_lr_regnum] = frame_addr + fdatap->lr_offset;
1458
1459 /* If != 0, fdatap->vrsave_offset is the offset from the frame that holds
1460 the VRSAVE. */
1461 if (fdatap->vrsave_offset != 0)
1462 fi->saved_regs[tdep->ppc_vrsave_regnum] = frame_addr + fdatap->vrsave_offset;
c906108c
SS
1463}
1464
1465/* Return the address of a frame. This is the inital %sp value when the frame
1466 was first allocated. For functions calling alloca(), it might be saved in
1467 an alloca register. */
1468
1469static CORE_ADDR
7a78ae4e 1470frame_initial_stack_address (struct frame_info *fi)
c906108c
SS
1471{
1472 CORE_ADDR tmpaddr;
1473 struct rs6000_framedata fdata;
1474 struct frame_info *callee_fi;
1475
1476 /* if the initial stack pointer (frame address) of this frame is known,
1477 just return it. */
1478
1479 if (fi->extra_info->initial_sp)
1480 return fi->extra_info->initial_sp;
1481
1482 /* find out if this function is using an alloca register.. */
1483
077276e8 1484 (void) skip_prologue (get_pc_function_start (fi->pc), fi->pc, &fdata);
c906108c
SS
1485
1486 /* if saved registers of this frame are not known yet, read and cache them. */
1487
1488 if (!fi->saved_regs)
1489 frame_get_saved_regs (fi, &fdata);
1490
1491 /* If no alloca register used, then fi->frame is the value of the %sp for
1492 this frame, and it is good enough. */
1493
1494 if (fdata.alloca_reg < 0)
1495 {
1496 fi->extra_info->initial_sp = fi->frame;
1497 return fi->extra_info->initial_sp;
1498 }
1499
953836b2
AC
1500 /* There is an alloca register, use its value, in the current frame,
1501 as the initial stack pointer. */
1502 {
1503 char *tmpbuf = alloca (MAX_REGISTER_RAW_SIZE);
1504 if (frame_register_read (fi, fdata.alloca_reg, tmpbuf))
1505 {
1506 fi->extra_info->initial_sp
1507 = extract_unsigned_integer (tmpbuf,
1508 REGISTER_RAW_SIZE (fdata.alloca_reg));
1509 }
1510 else
1511 /* NOTE: cagney/2002-04-17: At present the only time
1512 frame_register_read will fail is when the register isn't
1513 available. If that does happen, use the frame. */
1514 fi->extra_info->initial_sp = fi->frame;
1515 }
c906108c
SS
1516 return fi->extra_info->initial_sp;
1517}
1518
7a78ae4e
ND
1519/* Describe the pointer in each stack frame to the previous stack frame
1520 (its caller). */
1521
1522/* FRAME_CHAIN takes a frame's nominal address
1523 and produces the frame's chain-pointer. */
1524
1525/* In the case of the RS/6000, the frame's nominal address
1526 is the address of a 4-byte word containing the calling frame's address. */
1527
9aa1e687 1528CORE_ADDR
7a78ae4e 1529rs6000_frame_chain (struct frame_info *thisframe)
c906108c 1530{
7a78ae4e 1531 CORE_ADDR fp, fpp, lr;
21283beb 1532 int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
c906108c 1533
7a78ae4e
ND
1534 if (PC_IN_CALL_DUMMY (thisframe->pc, thisframe->frame, thisframe->frame))
1535 return thisframe->frame; /* dummy frame same as caller's frame */
c906108c 1536
c5aa993b 1537 if (inside_entry_file (thisframe->pc) ||
c906108c
SS
1538 thisframe->pc == entry_point_address ())
1539 return 0;
1540
1541 if (thisframe->signal_handler_caller)
7a78ae4e
ND
1542 fp = read_memory_addr (thisframe->frame + SIG_FRAME_FP_OFFSET,
1543 wordsize);
c906108c
SS
1544 else if (thisframe->next != NULL
1545 && thisframe->next->signal_handler_caller
c877c8e6 1546 && FRAMELESS_FUNCTION_INVOCATION (thisframe))
c906108c
SS
1547 /* A frameless function interrupted by a signal did not change the
1548 frame pointer. */
1549 fp = FRAME_FP (thisframe);
1550 else
7a78ae4e 1551 fp = read_memory_addr ((thisframe)->frame, wordsize);
c906108c 1552
2188cbdd 1553 lr = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
7a78ae4e
ND
1554 if (lr == entry_point_address ())
1555 if (fp != 0 && (fpp = read_memory_addr (fp, wordsize)) != 0)
1556 if (PC_IN_CALL_DUMMY (lr, fpp, fpp))
1557 return fpp;
1558
1559 return fp;
1560}
1561
1562/* Return the size of register REG when words are WORDSIZE bytes long. If REG
1563 isn't available with that word size, return 0. */
1564
1565static int
1566regsize (const struct reg *reg, int wordsize)
1567{
1568 return wordsize == 8 ? reg->sz64 : reg->sz32;
1569}
1570
1571/* Return the name of register number N, or null if no such register exists
1572 in the current architecture. */
1573
fa88f677 1574static const char *
7a78ae4e
ND
1575rs6000_register_name (int n)
1576{
21283beb 1577 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
7a78ae4e
ND
1578 const struct reg *reg = tdep->regs + n;
1579
1580 if (!regsize (reg, tdep->wordsize))
1581 return NULL;
1582 return reg->name;
1583}
1584
1585/* Index within `registers' of the first byte of the space for
1586 register N. */
1587
1588static int
1589rs6000_register_byte (int n)
1590{
21283beb 1591 return gdbarch_tdep (current_gdbarch)->regoff[n];
7a78ae4e
ND
1592}
1593
1594/* Return the number of bytes of storage in the actual machine representation
1595 for register N if that register is available, else return 0. */
1596
1597static int
1598rs6000_register_raw_size (int n)
1599{
21283beb 1600 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
7a78ae4e
ND
1601 const struct reg *reg = tdep->regs + n;
1602 return regsize (reg, tdep->wordsize);
1603}
1604
7a78ae4e
ND
1605/* Return the GDB type object for the "standard" data type
1606 of data in register N. */
1607
1608static struct type *
fba45db2 1609rs6000_register_virtual_type (int n)
7a78ae4e 1610{
21283beb 1611 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
7a78ae4e
ND
1612 const struct reg *reg = tdep->regs + n;
1613
1fcc0bb8
EZ
1614 if (reg->fpr)
1615 return builtin_type_double;
1616 else
1617 {
1618 int size = regsize (reg, tdep->wordsize);
1619 switch (size)
1620 {
1621 case 8:
1622 return builtin_type_int64;
1623 break;
1624 case 16:
08cf96df 1625 return builtin_type_vec128;
1fcc0bb8
EZ
1626 break;
1627 default:
1628 return builtin_type_int32;
1629 break;
1630 }
1631 }
7a78ae4e
ND
1632}
1633
1634/* For the PowerPC, it appears that the debug info marks float parameters as
1635 floats regardless of whether the function is prototyped, but the actual
1636 values are always passed in as doubles. Tell gdb to always assume that
1637 floats are passed as doubles and then converted in the callee. */
1638
1639static int
1640rs6000_coerce_float_to_double (struct type *formal, struct type *actual)
1641{
1642 return 1;
1643}
1644
1645/* Return whether register N requires conversion when moving from raw format
1646 to virtual format.
1647
1648 The register format for RS/6000 floating point registers is always
1649 double, we need a conversion if the memory format is float. */
1650
1651static int
1652rs6000_register_convertible (int n)
1653{
21283beb 1654 const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + n;
7a78ae4e
ND
1655 return reg->fpr;
1656}
1657
1658/* Convert data from raw format for register N in buffer FROM
1659 to virtual format with type TYPE in buffer TO. */
1660
1661static void
1662rs6000_register_convert_to_virtual (int n, struct type *type,
1663 char *from, char *to)
1664{
1665 if (TYPE_LENGTH (type) != REGISTER_RAW_SIZE (n))
7a292a7a 1666 {
7a78ae4e
ND
1667 double val = extract_floating (from, REGISTER_RAW_SIZE (n));
1668 store_floating (to, TYPE_LENGTH (type), val);
1669 }
1670 else
1671 memcpy (to, from, REGISTER_RAW_SIZE (n));
1672}
1673
1674/* Convert data from virtual format with type TYPE in buffer FROM
1675 to raw format for register N in buffer TO. */
7a292a7a 1676
7a78ae4e
ND
1677static void
1678rs6000_register_convert_to_raw (struct type *type, int n,
1679 char *from, char *to)
1680{
1681 if (TYPE_LENGTH (type) != REGISTER_RAW_SIZE (n))
1682 {
1683 double val = extract_floating (from, TYPE_LENGTH (type));
1684 store_floating (to, REGISTER_RAW_SIZE (n), val);
7a292a7a 1685 }
7a78ae4e
ND
1686 else
1687 memcpy (to, from, REGISTER_RAW_SIZE (n));
1688}
c906108c 1689
1fcc0bb8
EZ
1690int
1691altivec_register_p (int regno)
1692{
1693 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1694 if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
1695 return 0;
1696 else
1697 return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum);
1698}
1699
1700static void
1701rs6000_do_altivec_registers (int regnum)
1702{
1703 int i;
1704 char *raw_buffer = (char*) alloca (MAX_REGISTER_RAW_SIZE);
1705 char *virtual_buffer = (char*) alloca (MAX_REGISTER_VIRTUAL_SIZE);
1706 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1707
1708 for (i = tdep->ppc_vr0_regnum; i <= tdep->ppc_vrsave_regnum; i++)
1709 {
1710 /* If we want just one reg, check that this is the one we want. */
1711 if (regnum != -1 && i != regnum)
1712 continue;
1713
1714 /* If the register name is empty, it is undefined for this
1715 processor, so don't display anything. */
1716 if (REGISTER_NAME (i) == NULL || *(REGISTER_NAME (i)) == '\0')
1717 continue;
1718
1719 fputs_filtered (REGISTER_NAME (i), gdb_stdout);
1720 print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), gdb_stdout);
1721
1722 /* Get the data in raw format. */
cda5a58a 1723 if (!frame_register_read (selected_frame, i, raw_buffer))
1fcc0bb8
EZ
1724 {
1725 printf_filtered ("*value not available*\n");
1726 continue;
1727 }
1728
1729 /* Convert raw data to virtual format if necessary. */
1730 if (REGISTER_CONVERTIBLE (i))
1731 REGISTER_CONVERT_TO_VIRTUAL (i, REGISTER_VIRTUAL_TYPE (i),
1732 raw_buffer, virtual_buffer);
1733 else
1734 memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (i));
1735
1736 /* Print as integer in hex only. */
1737 val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1738 gdb_stdout, 'x', 1, 0, Val_pretty_default);
1739 printf_filtered ("\n");
1740 }
1741}
1742
1743static void
1744rs6000_altivec_registers_info (char *addr_exp, int from_tty)
1745{
1746 int regnum, numregs;
1747 register char *end;
1748
1749 if (!target_has_registers)
1750 error ("The program has no registers now.");
1751 if (selected_frame == NULL)
1752 error ("No selected frame.");
1753
1754 if (!addr_exp)
1755 {
1756 rs6000_do_altivec_registers (-1);
1757 return;
1758 }
1759
1760 numregs = NUM_REGS + NUM_PSEUDO_REGS;
1761 do
1762 {
1763 if (addr_exp[0] == '$')
1764 addr_exp++;
1765 end = addr_exp;
1766 while (*end != '\0' && *end != ' ' && *end != '\t')
1767 ++end;
1768
1769 regnum = target_map_name_to_register (addr_exp, end - addr_exp);
1770 if (regnum < 0)
1771 {
1772 regnum = numregs;
1773 if (*addr_exp >= '0' && *addr_exp <= '9')
1774 regnum = atoi (addr_exp); /* Take a number */
1775 if (regnum >= numregs) /* Bad name, or bad number */
1776 error ("%.*s: invalid register", end - addr_exp, addr_exp);
1777 }
1778
1779 rs6000_do_altivec_registers (regnum);
1780
1781 addr_exp = end;
1782 while (*addr_exp == ' ' || *addr_exp == '\t')
1783 ++addr_exp;
1784 }
1785 while (*addr_exp != '\0');
1786}
1787
1788static void
1789rs6000_do_registers_info (int regnum, int fpregs)
1790{
1791 register int i;
1792 int numregs = NUM_REGS + NUM_PSEUDO_REGS;
1793 char *raw_buffer = (char*) alloca (MAX_REGISTER_RAW_SIZE);
1794 char *virtual_buffer = (char*) alloca (MAX_REGISTER_VIRTUAL_SIZE);
1795
1796 for (i = 0; i < numregs; i++)
1797 {
1798 /* Decide between printing all regs, nonfloat regs, or specific reg. */
1799 if (regnum == -1)
1800 {
1801 if ((TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
1802 || (altivec_register_p (i) && !fpregs))
1803 continue;
1804 }
1805 else
1806 {
1807 if (i != regnum)
1808 continue;
1809 }
1810
1811 /* If the register name is empty, it is undefined for this
1812 processor, so don't display anything. */
1813 if (REGISTER_NAME (i) == NULL || *(REGISTER_NAME (i)) == '\0')
1814 continue;
1815
1816 fputs_filtered (REGISTER_NAME (i), gdb_stdout);
1817 print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), gdb_stdout);
1818
1819 /* Get the data in raw format. */
cda5a58a 1820 if (!frame_register_read (selected_frame, i, raw_buffer))
1fcc0bb8
EZ
1821 {
1822 printf_filtered ("*value not available*\n");
1823 continue;
1824 }
1825
1826 /* Convert raw data to virtual format if necessary. */
1827 if (REGISTER_CONVERTIBLE (i))
1828 REGISTER_CONVERT_TO_VIRTUAL (i, REGISTER_VIRTUAL_TYPE (i),
1829 raw_buffer, virtual_buffer);
1830 else
1831 memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (i));
1832
1833 /* If virtual format is floating, print it that way, and in raw hex. */
1834 if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
1835 {
1836 register int j;
1837
75bc7ddf
AC
1838 val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1839 gdb_stdout, 0, 1, 0, Val_pretty_default);
1fcc0bb8
EZ
1840
1841 printf_filtered ("\t(raw 0x");
1842 for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
1843 {
a9011d31 1844 register int idx = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? j
1fcc0bb8
EZ
1845 : REGISTER_RAW_SIZE (i) - 1 - j;
1846 printf_filtered ("%02x", (unsigned char) raw_buffer[idx]);
1847 }
1848 printf_filtered (")");
1849 }
1850 else
1851 {
70c6b0d1
EZ
1852 /* Print the register in hex. */
1853 val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1854 gdb_stdout, 'x', 1, 0, Val_pretty_default);
1855 /* If not a vector register, print it also in decimal. */
1fcc0bb8
EZ
1856 if (!altivec_register_p (i))
1857 {
1fcc0bb8
EZ
1858 printf_filtered ("\t");
1859 val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1860 gdb_stdout, 0, 1, 0, Val_pretty_default);
1861 }
1fcc0bb8
EZ
1862 }
1863 printf_filtered ("\n");
1864 }
1865}
1866
2188cbdd
EZ
1867/* Convert a dbx stab register number (from `r' declaration) to a gdb
1868 REGNUM. */
1869static int
1870rs6000_stab_reg_to_regnum (int num)
1871{
1872 int regnum;
1873 switch (num)
1874 {
1875 case 64:
1876 regnum = gdbarch_tdep (current_gdbarch)->ppc_mq_regnum;
1877 break;
1878 case 65:
1879 regnum = gdbarch_tdep (current_gdbarch)->ppc_lr_regnum;
1880 break;
1881 case 66:
1882 regnum = gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum;
1883 break;
1884 case 76:
1885 regnum = gdbarch_tdep (current_gdbarch)->ppc_xer_regnum;
1886 break;
1887 default:
1888 regnum = num;
1889 break;
1890 }
1891 return regnum;
1892}
1893
7a78ae4e
ND
1894/* Store the address of the place in which to copy the structure the
1895 subroutine will return. This is called from call_function.
1896
1897 In RS/6000, struct return addresses are passed as an extra parameter in r3.
1898 In function return, callee is not responsible of returning this address
1899 back. Since gdb needs to find it, we will store in a designated variable
1900 `rs6000_struct_return_address'. */
1901
1902static void
1903rs6000_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1904{
1905 write_register (3, addr);
1906 rs6000_struct_return_address = addr;
1907}
1908
1909/* Write into appropriate registers a function return value
1910 of type TYPE, given in virtual format. */
1911
1912static void
1913rs6000_store_return_value (struct type *type, char *valbuf)
1914{
ace1378a
EZ
1915 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1916
7a78ae4e
ND
1917 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1918
1919 /* Floating point values are returned starting from FPR1 and up.
1920 Say a double_double_double type could be returned in
1921 FPR1/FPR2/FPR3 triple. */
1922
1923 write_register_bytes (REGISTER_BYTE (FP0_REGNUM + 1), valbuf,
1924 TYPE_LENGTH (type));
ace1378a
EZ
1925 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1926 {
1927 if (TYPE_LENGTH (type) == 16
1928 && TYPE_VECTOR (type))
1929 write_register_bytes (REGISTER_BYTE (tdep->ppc_vr0_regnum + 2),
1930 valbuf, TYPE_LENGTH (type));
1931 }
7a78ae4e
ND
1932 else
1933 /* Everything else is returned in GPR3 and up. */
2188cbdd
EZ
1934 write_register_bytes (REGISTER_BYTE (gdbarch_tdep (current_gdbarch)->ppc_gp0_regnum + 3),
1935 valbuf, TYPE_LENGTH (type));
7a78ae4e
ND
1936}
1937
1938/* Extract from an array REGBUF containing the (raw) register state
1939 the address in which a function should return its structure value,
1940 as a CORE_ADDR (or an expression that can be used as one). */
1941
1942static CORE_ADDR
1943rs6000_extract_struct_value_address (char *regbuf)
1944{
1945 return rs6000_struct_return_address;
1946}
1947
1948/* Return whether PC is in a dummy function call.
1949
1950 FIXME: This just checks for the end of the stack, which is broken
1951 for things like stepping through gcc nested function stubs. */
1952
1953static int
1954rs6000_pc_in_call_dummy (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR fp)
1955{
1956 return sp < pc && pc < fp;
1957}
1958
1959/* Hook called when a new child process is started. */
1960
1961void
1962rs6000_create_inferior (int pid)
1963{
1964 if (rs6000_set_host_arch_hook)
1965 rs6000_set_host_arch_hook (pid);
c906108c
SS
1966}
1967\f
7a78ae4e
ND
1968/* Support for CONVERT_FROM_FUNC_PTR_ADDR(ADDR).
1969
1970 Usually a function pointer's representation is simply the address
1971 of the function. On the RS/6000 however, a function pointer is
1972 represented by a pointer to a TOC entry. This TOC entry contains
1973 three words, the first word is the address of the function, the
1974 second word is the TOC pointer (r2), and the third word is the
1975 static chain value. Throughout GDB it is currently assumed that a
1976 function pointer contains the address of the function, which is not
1977 easy to fix. In addition, the conversion of a function address to
1978 a function pointer would require allocation of a TOC entry in the
1979 inferior's memory space, with all its drawbacks. To be able to
1980 call C++ virtual methods in the inferior (which are called via
f517ea4e 1981 function pointers), find_function_addr uses this function to get the
7a78ae4e
ND
1982 function address from a function pointer. */
1983
f517ea4e
PS
1984/* Return real function address if ADDR (a function pointer) is in the data
1985 space and is therefore a special function pointer. */
c906108c 1986
7a78ae4e
ND
1987CORE_ADDR
1988rs6000_convert_from_func_ptr_addr (CORE_ADDR addr)
c906108c
SS
1989{
1990 struct obj_section *s;
1991
1992 s = find_pc_section (addr);
1993 if (s && s->the_bfd_section->flags & SEC_CODE)
7a78ae4e 1994 return addr;
c906108c 1995
7a78ae4e 1996 /* ADDR is in the data space, so it's a special function pointer. */
21283beb 1997 return read_memory_addr (addr, gdbarch_tdep (current_gdbarch)->wordsize);
c906108c 1998}
c906108c 1999\f
c5aa993b 2000
7a78ae4e 2001/* Handling the various POWER/PowerPC variants. */
c906108c
SS
2002
2003
7a78ae4e
ND
2004/* The arrays here called registers_MUMBLE hold information about available
2005 registers.
c906108c
SS
2006
2007 For each family of PPC variants, I've tried to isolate out the
2008 common registers and put them up front, so that as long as you get
2009 the general family right, GDB will correctly identify the registers
2010 common to that family. The common register sets are:
2011
2012 For the 60x family: hid0 hid1 iabr dabr pir
2013
2014 For the 505 and 860 family: eie eid nri
2015
2016 For the 403 and 403GC: icdbdr esr dear evpr cdbcr tsr tcr pit tbhi
c5aa993b
JM
2017 tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1
2018 pbu1 pbl2 pbu2
c906108c
SS
2019
2020 Most of these register groups aren't anything formal. I arrived at
2021 them by looking at the registers that occurred in more than one
6f5987a6
KB
2022 processor.
2023
2024 Note: kevinb/2002-04-30: Support for the fpscr register was added
2025 during April, 2002. Slot 70 is being used for PowerPC and slot 71
2026 for Power. For PowerPC, slot 70 was unused and was already in the
2027 PPC_UISA_SPRS which is ideally where fpscr should go. For Power,
2028 slot 70 was being used for "mq", so the next available slot (71)
2029 was chosen. It would have been nice to be able to make the
2030 register numbers the same across processor cores, but this wasn't
2031 possible without either 1) renumbering some registers for some
2032 processors or 2) assigning fpscr to a really high slot that's
2033 larger than any current register number. Doing (1) is bad because
2034 existing stubs would break. Doing (2) is undesirable because it
2035 would introduce a really large gap between fpscr and the rest of
2036 the registers for most processors. */
7a78ae4e
ND
2037
2038/* Convenience macros for populating register arrays. */
2039
2040/* Within another macro, convert S to a string. */
2041
2042#define STR(s) #s
2043
2044/* Return a struct reg defining register NAME that's 32 bits on 32-bit systems
2045 and 64 bits on 64-bit systems. */
2046#define R(name) { STR(name), 4, 8, 0 }
2047
2048/* Return a struct reg defining register NAME that's 32 bits on all
2049 systems. */
2050#define R4(name) { STR(name), 4, 4, 0 }
2051
2052/* Return a struct reg defining register NAME that's 64 bits on all
2053 systems. */
2054#define R8(name) { STR(name), 8, 8, 0 }
2055
1fcc0bb8
EZ
2056/* Return a struct reg defining register NAME that's 128 bits on all
2057 systems. */
2058#define R16(name) { STR(name), 16, 16, 0 }
2059
7a78ae4e
ND
2060/* Return a struct reg defining floating-point register NAME. */
2061#define F(name) { STR(name), 8, 8, 1 }
2062
2063/* Return a struct reg defining register NAME that's 32 bits on 32-bit
2064 systems and that doesn't exist on 64-bit systems. */
2065#define R32(name) { STR(name), 4, 0, 0 }
2066
2067/* Return a struct reg defining register NAME that's 64 bits on 64-bit
2068 systems and that doesn't exist on 32-bit systems. */
2069#define R64(name) { STR(name), 0, 8, 0 }
2070
2071/* Return a struct reg placeholder for a register that doesn't exist. */
2072#define R0 { 0, 0, 0, 0 }
2073
2074/* UISA registers common across all architectures, including POWER. */
2075
2076#define COMMON_UISA_REGS \
2077 /* 0 */ R(r0), R(r1), R(r2), R(r3), R(r4), R(r5), R(r6), R(r7), \
2078 /* 8 */ R(r8), R(r9), R(r10),R(r11),R(r12),R(r13),R(r14),R(r15), \
2079 /* 16 */ R(r16),R(r17),R(r18),R(r19),R(r20),R(r21),R(r22),R(r23), \
2080 /* 24 */ R(r24),R(r25),R(r26),R(r27),R(r28),R(r29),R(r30),R(r31), \
2081 /* 32 */ F(f0), F(f1), F(f2), F(f3), F(f4), F(f5), F(f6), F(f7), \
2082 /* 40 */ F(f8), F(f9), F(f10),F(f11),F(f12),F(f13),F(f14),F(f15), \
2083 /* 48 */ F(f16),F(f17),F(f18),F(f19),F(f20),F(f21),F(f22),F(f23), \
2084 /* 56 */ F(f24),F(f25),F(f26),F(f27),F(f28),F(f29),F(f30),F(f31), \
2085 /* 64 */ R(pc), R(ps)
2086
ebeac11a
EZ
2087#define COMMON_UISA_NOFP_REGS \
2088 /* 0 */ R(r0), R(r1), R(r2), R(r3), R(r4), R(r5), R(r6), R(r7), \
2089 /* 8 */ R(r8), R(r9), R(r10),R(r11),R(r12),R(r13),R(r14),R(r15), \
2090 /* 16 */ R(r16),R(r17),R(r18),R(r19),R(r20),R(r21),R(r22),R(r23), \
2091 /* 24 */ R(r24),R(r25),R(r26),R(r27),R(r28),R(r29),R(r30),R(r31), \
2092 /* 32 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2093 /* 40 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2094 /* 48 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2095 /* 56 */ R0, R0, R0, R0, R0, R0, R0, R0, \
2096 /* 64 */ R(pc), R(ps)
2097
7a78ae4e
ND
2098/* UISA-level SPRs for PowerPC. */
2099#define PPC_UISA_SPRS \
e3f36dbd 2100 /* 66 */ R4(cr), R(lr), R(ctr), R4(xer), R4(fpscr)
7a78ae4e
ND
2101
2102/* Segment registers, for PowerPC. */
2103#define PPC_SEGMENT_REGS \
2104 /* 71 */ R32(sr0), R32(sr1), R32(sr2), R32(sr3), \
2105 /* 75 */ R32(sr4), R32(sr5), R32(sr6), R32(sr7), \
2106 /* 79 */ R32(sr8), R32(sr9), R32(sr10), R32(sr11), \
2107 /* 83 */ R32(sr12), R32(sr13), R32(sr14), R32(sr15)
2108
2109/* OEA SPRs for PowerPC. */
2110#define PPC_OEA_SPRS \
2111 /* 87 */ R4(pvr), \
2112 /* 88 */ R(ibat0u), R(ibat0l), R(ibat1u), R(ibat1l), \
2113 /* 92 */ R(ibat2u), R(ibat2l), R(ibat3u), R(ibat3l), \
2114 /* 96 */ R(dbat0u), R(dbat0l), R(dbat1u), R(dbat1l), \
2115 /* 100 */ R(dbat2u), R(dbat2l), R(dbat3u), R(dbat3l), \
2116 /* 104 */ R(sdr1), R64(asr), R(dar), R4(dsisr), \
2117 /* 108 */ R(sprg0), R(sprg1), R(sprg2), R(sprg3), \
2118 /* 112 */ R(srr0), R(srr1), R(tbl), R(tbu), \
2119 /* 116 */ R4(dec), R(dabr), R4(ear)
2120
1fcc0bb8
EZ
2121/* AltiVec registers */
2122#define PPC_ALTIVEC_REGS \
2123 /*119*/R16(vr0), R16(vr1), R16(vr2), R16(vr3), R16(vr4), R16(vr5), R16(vr6), R16(vr7), \
2124 /*127*/R16(vr8), R16(vr9), R16(vr10),R16(vr11),R16(vr12),R16(vr13),R16(vr14),R16(vr15), \
2125 /*135*/R16(vr16),R16(vr17),R16(vr18),R16(vr19),R16(vr20),R16(vr21),R16(vr22),R16(vr23), \
2126 /*143*/R16(vr24),R16(vr25),R16(vr26),R16(vr27),R16(vr28),R16(vr29),R16(vr30),R16(vr31), \
2127 /*151*/R4(vscr), R4(vrsave)
2128
7a78ae4e
ND
2129/* IBM POWER (pre-PowerPC) architecture, user-level view. We only cover
2130 user-level SPR's. */
2131static const struct reg registers_power[] =
c906108c 2132{
7a78ae4e 2133 COMMON_UISA_REGS,
e3f36dbd
KB
2134 /* 66 */ R4(cnd), R(lr), R(cnt), R4(xer), R4(mq),
2135 /* 71 */ R4(fpscr)
c906108c
SS
2136};
2137
7a78ae4e
ND
2138/* PowerPC UISA - a PPC processor as viewed by user-level code. A UISA-only
2139 view of the PowerPC. */
2140static const struct reg registers_powerpc[] =
c906108c 2141{
7a78ae4e 2142 COMMON_UISA_REGS,
1fcc0bb8
EZ
2143 PPC_UISA_SPRS,
2144 PPC_ALTIVEC_REGS
c906108c
SS
2145};
2146
ebeac11a
EZ
2147/* PowerPC UISA - a PPC processor as viewed by user-level
2148 code, but without floating point registers. */
2149static const struct reg registers_powerpc_nofp[] =
2150{
2151 COMMON_UISA_NOFP_REGS,
2152 PPC_UISA_SPRS
2153};
2154
7a78ae4e
ND
2155/* IBM PowerPC 403. */
2156static const struct reg registers_403[] =
c5aa993b 2157{
7a78ae4e
ND
2158 COMMON_UISA_REGS,
2159 PPC_UISA_SPRS,
2160 PPC_SEGMENT_REGS,
2161 PPC_OEA_SPRS,
2162 /* 119 */ R(icdbdr), R(esr), R(dear), R(evpr),
2163 /* 123 */ R(cdbcr), R(tsr), R(tcr), R(pit),
2164 /* 127 */ R(tbhi), R(tblo), R(srr2), R(srr3),
2165 /* 131 */ R(dbsr), R(dbcr), R(iac1), R(iac2),
2166 /* 135 */ R(dac1), R(dac2), R(dccr), R(iccr),
2167 /* 139 */ R(pbl1), R(pbu1), R(pbl2), R(pbu2)
c906108c
SS
2168};
2169
7a78ae4e
ND
2170/* IBM PowerPC 403GC. */
2171static const struct reg registers_403GC[] =
c5aa993b 2172{
7a78ae4e
ND
2173 COMMON_UISA_REGS,
2174 PPC_UISA_SPRS,
2175 PPC_SEGMENT_REGS,
2176 PPC_OEA_SPRS,
2177 /* 119 */ R(icdbdr), R(esr), R(dear), R(evpr),
2178 /* 123 */ R(cdbcr), R(tsr), R(tcr), R(pit),
2179 /* 127 */ R(tbhi), R(tblo), R(srr2), R(srr3),
2180 /* 131 */ R(dbsr), R(dbcr), R(iac1), R(iac2),
2181 /* 135 */ R(dac1), R(dac2), R(dccr), R(iccr),
2182 /* 139 */ R(pbl1), R(pbu1), R(pbl2), R(pbu2),
2183 /* 143 */ R(zpr), R(pid), R(sgr), R(dcwr),
2184 /* 147 */ R(tbhu), R(tblu)
c906108c
SS
2185};
2186
7a78ae4e
ND
2187/* Motorola PowerPC 505. */
2188static const struct reg registers_505[] =
c5aa993b 2189{
7a78ae4e
ND
2190 COMMON_UISA_REGS,
2191 PPC_UISA_SPRS,
2192 PPC_SEGMENT_REGS,
2193 PPC_OEA_SPRS,
2194 /* 119 */ R(eie), R(eid), R(nri)
c906108c
SS
2195};
2196
7a78ae4e
ND
2197/* Motorola PowerPC 860 or 850. */
2198static const struct reg registers_860[] =
c5aa993b 2199{
7a78ae4e
ND
2200 COMMON_UISA_REGS,
2201 PPC_UISA_SPRS,
2202 PPC_SEGMENT_REGS,
2203 PPC_OEA_SPRS,
2204 /* 119 */ R(eie), R(eid), R(nri), R(cmpa),
2205 /* 123 */ R(cmpb), R(cmpc), R(cmpd), R(icr),
2206 /* 127 */ R(der), R(counta), R(countb), R(cmpe),
2207 /* 131 */ R(cmpf), R(cmpg), R(cmph), R(lctrl1),
2208 /* 135 */ R(lctrl2), R(ictrl), R(bar), R(ic_cst),
2209 /* 139 */ R(ic_adr), R(ic_dat), R(dc_cst), R(dc_adr),
2210 /* 143 */ R(dc_dat), R(dpdr), R(dpir), R(immr),
2211 /* 147 */ R(mi_ctr), R(mi_ap), R(mi_epn), R(mi_twc),
2212 /* 151 */ R(mi_rpn), R(md_ctr), R(m_casid), R(md_ap),
2213 /* 155 */ R(md_epn), R(md_twb), R(md_twc), R(md_rpn),
2214 /* 159 */ R(m_tw), R(mi_dbcam), R(mi_dbram0), R(mi_dbram1),
2215 /* 163 */ R(md_dbcam), R(md_dbram0), R(md_dbram1)
c906108c
SS
2216};
2217
7a78ae4e
ND
2218/* Motorola PowerPC 601. Note that the 601 has different register numbers
2219 for reading and writing RTCU and RTCL. However, how one reads and writes a
c906108c 2220 register is the stub's problem. */
7a78ae4e 2221static const struct reg registers_601[] =
c5aa993b 2222{
7a78ae4e
ND
2223 COMMON_UISA_REGS,
2224 PPC_UISA_SPRS,
2225 PPC_SEGMENT_REGS,
2226 PPC_OEA_SPRS,
2227 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2228 /* 123 */ R(pir), R(mq), R(rtcu), R(rtcl)
c906108c
SS
2229};
2230
7a78ae4e
ND
2231/* Motorola PowerPC 602. */
2232static const struct reg registers_602[] =
c5aa993b 2233{
7a78ae4e
ND
2234 COMMON_UISA_REGS,
2235 PPC_UISA_SPRS,
2236 PPC_SEGMENT_REGS,
2237 PPC_OEA_SPRS,
2238 /* 119 */ R(hid0), R(hid1), R(iabr), R0,
2239 /* 123 */ R0, R(tcr), R(ibr), R(esassr),
2240 /* 127 */ R(sebr), R(ser), R(sp), R(lt)
c906108c
SS
2241};
2242
7a78ae4e
ND
2243/* Motorola/IBM PowerPC 603 or 603e. */
2244static const struct reg registers_603[] =
c5aa993b 2245{
7a78ae4e
ND
2246 COMMON_UISA_REGS,
2247 PPC_UISA_SPRS,
2248 PPC_SEGMENT_REGS,
2249 PPC_OEA_SPRS,
2250 /* 119 */ R(hid0), R(hid1), R(iabr), R0,
2251 /* 123 */ R0, R(dmiss), R(dcmp), R(hash1),
2252 /* 127 */ R(hash2), R(imiss), R(icmp), R(rpa)
c906108c
SS
2253};
2254
7a78ae4e
ND
2255/* Motorola PowerPC 604 or 604e. */
2256static const struct reg registers_604[] =
c5aa993b 2257{
7a78ae4e
ND
2258 COMMON_UISA_REGS,
2259 PPC_UISA_SPRS,
2260 PPC_SEGMENT_REGS,
2261 PPC_OEA_SPRS,
2262 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2263 /* 123 */ R(pir), R(mmcr0), R(pmc1), R(pmc2),
2264 /* 127 */ R(sia), R(sda)
c906108c
SS
2265};
2266
7a78ae4e
ND
2267/* Motorola/IBM PowerPC 750 or 740. */
2268static const struct reg registers_750[] =
c5aa993b 2269{
7a78ae4e
ND
2270 COMMON_UISA_REGS,
2271 PPC_UISA_SPRS,
2272 PPC_SEGMENT_REGS,
2273 PPC_OEA_SPRS,
2274 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2275 /* 123 */ R0, R(ummcr0), R(upmc1), R(upmc2),
2276 /* 127 */ R(usia), R(ummcr1), R(upmc3), R(upmc4),
2277 /* 131 */ R(mmcr0), R(pmc1), R(pmc2), R(sia),
2278 /* 135 */ R(mmcr1), R(pmc3), R(pmc4), R(l2cr),
2279 /* 139 */ R(ictc), R(thrm1), R(thrm2), R(thrm3)
c906108c
SS
2280};
2281
2282
1fcc0bb8
EZ
2283/* Motorola PowerPC 7400. */
2284static const struct reg registers_7400[] =
2285{
2286 /* gpr0-gpr31, fpr0-fpr31 */
2287 COMMON_UISA_REGS,
2288 /* ctr, xre, lr, cr */
2289 PPC_UISA_SPRS,
2290 /* sr0-sr15 */
2291 PPC_SEGMENT_REGS,
2292 PPC_OEA_SPRS,
2293 /* vr0-vr31, vrsave, vscr */
2294 PPC_ALTIVEC_REGS
2295 /* FIXME? Add more registers? */
2296};
2297
c906108c 2298/* Information about a particular processor variant. */
7a78ae4e 2299
c906108c 2300struct variant
c5aa993b
JM
2301 {
2302 /* Name of this variant. */
2303 char *name;
c906108c 2304
c5aa993b
JM
2305 /* English description of the variant. */
2306 char *description;
c906108c 2307
7a78ae4e
ND
2308 /* bfd_arch_info.arch corresponding to variant. */
2309 enum bfd_architecture arch;
2310
2311 /* bfd_arch_info.mach corresponding to variant. */
2312 unsigned long mach;
2313
c5aa993b
JM
2314 /* Table of register names; registers[R] is the name of the register
2315 number R. */
7a78ae4e
ND
2316 int nregs;
2317 const struct reg *regs;
c5aa993b 2318 };
c906108c
SS
2319
2320#define num_registers(list) (sizeof (list) / sizeof((list)[0]))
2321
2322
2323/* Information in this table comes from the following web sites:
2324 IBM: http://www.chips.ibm.com:80/products/embedded/
2325 Motorola: http://www.mot.com/SPS/PowerPC/
2326
2327 I'm sure I've got some of the variant descriptions not quite right.
2328 Please report any inaccuracies you find to GDB's maintainer.
2329
2330 If you add entries to this table, please be sure to allow the new
2331 value as an argument to the --with-cpu flag, in configure.in. */
2332
7a78ae4e 2333static const struct variant variants[] =
c906108c 2334{
7a78ae4e
ND
2335 {"powerpc", "PowerPC user-level", bfd_arch_powerpc,
2336 bfd_mach_ppc, num_registers (registers_powerpc), registers_powerpc},
2337 {"power", "POWER user-level", bfd_arch_rs6000,
2338 bfd_mach_rs6k, num_registers (registers_power), registers_power},
2339 {"403", "IBM PowerPC 403", bfd_arch_powerpc,
2340 bfd_mach_ppc_403, num_registers (registers_403), registers_403},
2341 {"601", "Motorola PowerPC 601", bfd_arch_powerpc,
2342 bfd_mach_ppc_601, num_registers (registers_601), registers_601},
2343 {"602", "Motorola PowerPC 602", bfd_arch_powerpc,
2344 bfd_mach_ppc_602, num_registers (registers_602), registers_602},
2345 {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
2346 bfd_mach_ppc_603, num_registers (registers_603), registers_603},
2347 {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
2348 604, num_registers (registers_604), registers_604},
2349 {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc,
2350 bfd_mach_ppc_403gc, num_registers (registers_403GC), registers_403GC},
2351 {"505", "Motorola PowerPC 505", bfd_arch_powerpc,
2352 bfd_mach_ppc_505, num_registers (registers_505), registers_505},
2353 {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc,
2354 bfd_mach_ppc_860, num_registers (registers_860), registers_860},
2355 {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
2356 bfd_mach_ppc_750, num_registers (registers_750), registers_750},
1fcc0bb8
EZ
2357 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2358 bfd_mach_ppc_7400, num_registers (registers_7400), registers_7400},
7a78ae4e 2359
5d57ee30
KB
2360 /* 64-bit */
2361 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2362 bfd_mach_ppc64, num_registers (registers_powerpc), registers_powerpc},
7a78ae4e
ND
2363 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2364 bfd_mach_ppc_620, num_registers (registers_powerpc), registers_powerpc},
5d57ee30
KB
2365 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2366 bfd_mach_ppc_630, num_registers (registers_powerpc), registers_powerpc},
7a78ae4e
ND
2367 {"a35", "PowerPC A35", bfd_arch_powerpc,
2368 bfd_mach_ppc_a35, num_registers (registers_powerpc), registers_powerpc},
5d57ee30
KB
2369 {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc,
2370 bfd_mach_ppc_rs64ii, num_registers (registers_powerpc), registers_powerpc},
2371 {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc,
2372 bfd_mach_ppc_rs64iii, num_registers (registers_powerpc), registers_powerpc},
2373
2374 /* FIXME: I haven't checked the register sets of the following. */
7a78ae4e
ND
2375 {"rs1", "IBM POWER RS1", bfd_arch_rs6000,
2376 bfd_mach_rs6k_rs1, num_registers (registers_power), registers_power},
2377 {"rsc", "IBM POWER RSC", bfd_arch_rs6000,
2378 bfd_mach_rs6k_rsc, num_registers (registers_power), registers_power},
2379 {"rs2", "IBM POWER RS2", bfd_arch_rs6000,
2380 bfd_mach_rs6k_rs2, num_registers (registers_power), registers_power},
2381
c5aa993b 2382 {0, 0, 0, 0}
c906108c
SS
2383};
2384
7a78ae4e 2385#undef num_registers
c906108c 2386
7a78ae4e
ND
2387/* Return the variant corresponding to architecture ARCH and machine number
2388 MACH. If no such variant exists, return null. */
c906108c 2389
7a78ae4e
ND
2390static const struct variant *
2391find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
c906108c 2392{
7a78ae4e 2393 const struct variant *v;
c5aa993b 2394
7a78ae4e
ND
2395 for (v = variants; v->name; v++)
2396 if (arch == v->arch && mach == v->mach)
2397 return v;
c906108c 2398
7a78ae4e 2399 return NULL;
c906108c 2400}
9364a0ef
EZ
2401
2402static int
2403gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info)
2404{
2405 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2406 return print_insn_big_powerpc (memaddr, info);
2407 else
2408 return print_insn_little_powerpc (memaddr, info);
2409}
7a78ae4e 2410\f
7a78ae4e
ND
2411/* Initialize the current architecture based on INFO. If possible, re-use an
2412 architecture from ARCHES, which is a list of architectures already created
2413 during this debugging session.
c906108c 2414
7a78ae4e
ND
2415 Called e.g. at program startup, when reading a core file, and when reading
2416 a binary file. */
c906108c 2417
7a78ae4e
ND
2418static struct gdbarch *
2419rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2420{
2421 struct gdbarch *gdbarch;
2422 struct gdbarch_tdep *tdep;
9aa1e687 2423 int wordsize, from_xcoff_exec, from_elf_exec, power, i, off;
7a78ae4e
ND
2424 struct reg *regs;
2425 const struct variant *v;
2426 enum bfd_architecture arch;
2427 unsigned long mach;
2428 bfd abfd;
7b112f9c
JT
2429 int sysv_abi;
2430 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
7a78ae4e 2431
9aa1e687 2432 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
7a78ae4e
ND
2433 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
2434
9aa1e687
KB
2435 from_elf_exec = info.abfd && info.abfd->format == bfd_object &&
2436 bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
2437
2438 sysv_abi = info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour;
2439
7b112f9c
JT
2440 if (info.abfd)
2441 osabi = gdbarch_lookup_osabi (info.abfd);
9aa1e687 2442
e712c1cf
AC
2443 /* Check word size. If INFO is from a binary file, infer it from
2444 that, else choose a likely default. */
9aa1e687 2445 if (from_xcoff_exec)
c906108c 2446 {
11ed25ac 2447 if (bfd_xcoff_is_xcoff64 (info.abfd))
7a78ae4e
ND
2448 wordsize = 8;
2449 else
2450 wordsize = 4;
c906108c 2451 }
9aa1e687
KB
2452 else if (from_elf_exec)
2453 {
2454 if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
2455 wordsize = 8;
2456 else
2457 wordsize = 4;
2458 }
c906108c 2459 else
7a78ae4e 2460 {
27b15785
KB
2461 if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0)
2462 wordsize = info.bfd_arch_info->bits_per_word /
2463 info.bfd_arch_info->bits_per_byte;
2464 else
2465 wordsize = 4;
7a78ae4e 2466 }
c906108c 2467
7a78ae4e
ND
2468 /* Find a candidate among extant architectures. */
2469 for (arches = gdbarch_list_lookup_by_info (arches, &info);
2470 arches != NULL;
2471 arches = gdbarch_list_lookup_by_info (arches->next, &info))
2472 {
2473 /* Word size in the various PowerPC bfd_arch_info structs isn't
2474 meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform
2475 separate word size check. */
2476 tdep = gdbarch_tdep (arches->gdbarch);
9aa1e687 2477 if (tdep && tdep->wordsize == wordsize && tdep->osabi == osabi)
7a78ae4e
ND
2478 return arches->gdbarch;
2479 }
c906108c 2480
7a78ae4e
ND
2481 /* None found, create a new architecture from INFO, whose bfd_arch_info
2482 validity depends on the source:
2483 - executable useless
2484 - rs6000_host_arch() good
2485 - core file good
2486 - "set arch" trust blindly
2487 - GDB startup useless but harmless */
c906108c 2488
9aa1e687 2489 if (!from_xcoff_exec)
c906108c 2490 {
b732d07d 2491 arch = info.bfd_arch_info->arch;
7a78ae4e 2492 mach = info.bfd_arch_info->mach;
c906108c 2493 }
7a78ae4e 2494 else
c906108c 2495 {
7a78ae4e
ND
2496 arch = bfd_arch_powerpc;
2497 mach = 0;
2498 bfd_default_set_arch_mach (&abfd, arch, mach);
2499 info.bfd_arch_info = bfd_get_arch_info (&abfd);
2500 }
2501 tdep = xmalloc (sizeof (struct gdbarch_tdep));
2502 tdep->wordsize = wordsize;
9aa1e687 2503 tdep->osabi = osabi;
7a78ae4e
ND
2504 gdbarch = gdbarch_alloc (&info, tdep);
2505 power = arch == bfd_arch_rs6000;
2506
7a78ae4e
ND
2507 /* Choose variant. */
2508 v = find_variant_by_arch (arch, mach);
2509 if (!v)
dd47e6fd
EZ
2510 return NULL;
2511
7a78ae4e
ND
2512 tdep->regs = v->regs;
2513
2188cbdd
EZ
2514 tdep->ppc_gp0_regnum = 0;
2515 tdep->ppc_gplast_regnum = 31;
2516 tdep->ppc_toc_regnum = 2;
2517 tdep->ppc_ps_regnum = 65;
2518 tdep->ppc_cr_regnum = 66;
2519 tdep->ppc_lr_regnum = 67;
2520 tdep->ppc_ctr_regnum = 68;
2521 tdep->ppc_xer_regnum = 69;
2522 if (v->mach == bfd_mach_ppc_601)
2523 tdep->ppc_mq_regnum = 124;
e3f36dbd 2524 else if (power)
2188cbdd 2525 tdep->ppc_mq_regnum = 70;
e3f36dbd
KB
2526 else
2527 tdep->ppc_mq_regnum = -1;
2528 tdep->ppc_fpscr_regnum = power ? 71 : 70;
2188cbdd 2529
1fcc0bb8
EZ
2530 if (v->arch == bfd_arch_powerpc)
2531 switch (v->mach)
2532 {
2533 case bfd_mach_ppc:
2534 tdep->ppc_vr0_regnum = 71;
2535 tdep->ppc_vrsave_regnum = 104;
2536 break;
2537 case bfd_mach_ppc_7400:
2538 tdep->ppc_vr0_regnum = 119;
2539 tdep->ppc_vrsave_regnum = 153;
2540 break;
2541 default:
2542 tdep->ppc_vr0_regnum = -1;
2543 tdep->ppc_vrsave_regnum = -1;
2544 break;
2545 }
2546
a88376a3
KB
2547 /* Set lr_frame_offset. */
2548 if (wordsize == 8)
2549 tdep->lr_frame_offset = 16;
2550 else if (sysv_abi)
2551 tdep->lr_frame_offset = 4;
2552 else
2553 tdep->lr_frame_offset = 8;
2554
2555 /* Calculate byte offsets in raw register array. */
7a78ae4e
ND
2556 tdep->regoff = xmalloc (v->nregs * sizeof (int));
2557 for (i = off = 0; i < v->nregs; i++)
2558 {
2559 tdep->regoff[i] = off;
2560 off += regsize (v->regs + i, wordsize);
c906108c
SS
2561 }
2562
56a6dfb9
KB
2563 /* Select instruction printer. */
2564 if (arch == power)
9364a0ef 2565 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
56a6dfb9 2566 else
9364a0ef 2567 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
7495d1dc 2568
7a78ae4e
ND
2569 set_gdbarch_read_pc (gdbarch, generic_target_read_pc);
2570 set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
2571 set_gdbarch_read_fp (gdbarch, generic_target_read_fp);
7a78ae4e
ND
2572 set_gdbarch_read_sp (gdbarch, generic_target_read_sp);
2573 set_gdbarch_write_sp (gdbarch, generic_target_write_sp);
2574
2575 set_gdbarch_num_regs (gdbarch, v->nregs);
2576 set_gdbarch_sp_regnum (gdbarch, 1);
2577 set_gdbarch_fp_regnum (gdbarch, 1);
2578 set_gdbarch_pc_regnum (gdbarch, 64);
2579 set_gdbarch_register_name (gdbarch, rs6000_register_name);
2580 set_gdbarch_register_size (gdbarch, wordsize);
2581 set_gdbarch_register_bytes (gdbarch, off);
2582 set_gdbarch_register_byte (gdbarch, rs6000_register_byte);
2583 set_gdbarch_register_raw_size (gdbarch, rs6000_register_raw_size);
2a873819 2584 set_gdbarch_max_register_raw_size (gdbarch, 16);
b2e75d78 2585 set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
2a873819 2586 set_gdbarch_max_register_virtual_size (gdbarch, 16);
7a78ae4e 2587 set_gdbarch_register_virtual_type (gdbarch, rs6000_register_virtual_type);
1fcc0bb8 2588 set_gdbarch_do_registers_info (gdbarch, rs6000_do_registers_info);
7a78ae4e
ND
2589
2590 set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
2591 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
2592 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2593 set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT);
2594 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
2595 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2596 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
2597 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4e409299 2598 set_gdbarch_char_signed (gdbarch, 0);
7a78ae4e
ND
2599
2600 set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
2601 set_gdbarch_call_dummy_length (gdbarch, 0);
2602 set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
2603 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
2604 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
2605 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
2606 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
fe794dc6 2607 set_gdbarch_pc_in_call_dummy (gdbarch, generic_pc_in_call_dummy);
7a78ae4e
ND
2608 set_gdbarch_call_dummy_p (gdbarch, 1);
2609 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
dd486634 2610 set_gdbarch_get_saved_register (gdbarch, generic_unwind_get_saved_register);
7a78ae4e
ND
2611 set_gdbarch_fix_call_dummy (gdbarch, rs6000_fix_call_dummy);
2612 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
58223630 2613 set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
7a78ae4e
ND
2614 set_gdbarch_push_return_address (gdbarch, ppc_push_return_address);
2615 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2616 set_gdbarch_coerce_float_to_double (gdbarch, rs6000_coerce_float_to_double);
2617
2618 set_gdbarch_register_convertible (gdbarch, rs6000_register_convertible);
2619 set_gdbarch_register_convert_to_virtual (gdbarch, rs6000_register_convert_to_virtual);
2620 set_gdbarch_register_convert_to_raw (gdbarch, rs6000_register_convert_to_raw);
2188cbdd 2621 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
7a78ae4e 2622
26e9b323 2623 set_gdbarch_deprecated_extract_return_value (gdbarch, rs6000_extract_return_value);
9aa1e687 2624
2ea5f656
KB
2625 /* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments()
2626 is correct for the SysV ABI when the wordsize is 8, but I'm also
2627 fairly certain that ppc_sysv_abi_push_arguments() will give even
2628 worse results since it only works for 32-bit code. So, for the moment,
2629 we're better off calling rs6000_push_arguments() since it works for
2630 64-bit code. At some point in the future, this matter needs to be
2631 revisited. */
2632 if (sysv_abi && wordsize == 4)
9aa1e687
KB
2633 set_gdbarch_push_arguments (gdbarch, ppc_sysv_abi_push_arguments);
2634 else
2635 set_gdbarch_push_arguments (gdbarch, rs6000_push_arguments);
7a78ae4e
ND
2636
2637 set_gdbarch_store_struct_return (gdbarch, rs6000_store_struct_return);
2638 set_gdbarch_store_return_value (gdbarch, rs6000_store_return_value);
26e9b323 2639 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address);
7a78ae4e
ND
2640 set_gdbarch_pop_frame (gdbarch, rs6000_pop_frame);
2641
2642 set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue);
2643 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2644 set_gdbarch_decr_pc_after_break (gdbarch, 0);
2645 set_gdbarch_function_start_offset (gdbarch, 0);
2646 set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
2647
2648 /* Not sure on this. FIXMEmgo */
2649 set_gdbarch_frame_args_skip (gdbarch, 8);
2650
8e0662df 2651 if (sysv_abi)
7b112f9c
JT
2652 set_gdbarch_use_struct_convention (gdbarch,
2653 ppc_sysv_abi_use_struct_convention);
8e0662df 2654 else
7b112f9c
JT
2655 set_gdbarch_use_struct_convention (gdbarch,
2656 generic_use_struct_convention);
8e0662df 2657
7a78ae4e 2658 set_gdbarch_frame_chain_valid (gdbarch, file_frame_chain_valid);
9aa1e687 2659
7b112f9c
JT
2660 set_gdbarch_frameless_function_invocation (gdbarch,
2661 rs6000_frameless_function_invocation);
2662 set_gdbarch_frame_chain (gdbarch, rs6000_frame_chain);
2663 set_gdbarch_frame_saved_pc (gdbarch, rs6000_frame_saved_pc);
2664
2665 set_gdbarch_frame_init_saved_regs (gdbarch, rs6000_frame_init_saved_regs);
2666 set_gdbarch_init_extra_frame_info (gdbarch, rs6000_init_extra_frame_info);
2667
15813d3f
AC
2668 if (!sysv_abi)
2669 {
2670 /* Handle RS/6000 function pointers (which are really function
2671 descriptors). */
f517ea4e
PS
2672 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
2673 rs6000_convert_from_func_ptr_addr);
9aa1e687 2674 }
7a78ae4e
ND
2675 set_gdbarch_frame_args_address (gdbarch, rs6000_frame_args_address);
2676 set_gdbarch_frame_locals_address (gdbarch, rs6000_frame_args_address);
2677 set_gdbarch_saved_pc_after_call (gdbarch, rs6000_saved_pc_after_call);
2678
2679 /* We can't tell how many args there are
2680 now that the C compiler delays popping them. */
2681 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
2682
7b112f9c
JT
2683 /* Hook in ABI-specific overrides, if they have been registered. */
2684 gdbarch_init_osabi (info, gdbarch, osabi);
2685
7a78ae4e 2686 return gdbarch;
c906108c
SS
2687}
2688
7b112f9c
JT
2689static void
2690rs6000_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
2691{
2692 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2693
2694 if (tdep == NULL)
2695 return;
2696
2697 fprintf_unfiltered (file, "rs6000_dump_tdep: OS ABI = %s\n",
2698 gdbarch_osabi_name (tdep->osabi));
2699}
2700
1fcc0bb8
EZ
2701static struct cmd_list_element *info_powerpc_cmdlist = NULL;
2702
2703static void
2704rs6000_info_powerpc_command (char *args, int from_tty)
2705{
2706 help_list (info_powerpc_cmdlist, "info powerpc ", class_info, gdb_stdout);
2707}
2708
c906108c
SS
2709/* Initialization code. */
2710
2711void
fba45db2 2712_initialize_rs6000_tdep (void)
c906108c 2713{
7b112f9c
JT
2714 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
2715 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
1fcc0bb8
EZ
2716
2717 /* Add root prefix command for "info powerpc" commands */
2718 add_prefix_cmd ("powerpc", class_info, rs6000_info_powerpc_command,
2719 "Various POWERPC info specific commands.",
2720 &info_powerpc_cmdlist, "info powerpc ", 0, &infolist);
2721
2722 add_cmd ("altivec", class_info, rs6000_altivec_registers_info,
2723 "Display the contents of the AltiVec registers.",
2724 &info_powerpc_cmdlist);
c906108c 2725}
This page took 0.90648 seconds and 4 git commands to generate.