Add self to MAINTAINERS.
[deliverable/binutils-gdb.git] / gdb / rs6000-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002
4 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
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.
12
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.
17
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. */
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"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "doublest.h"
35 #include "value.h"
36 #include "parser-defs.h"
37
38 #include "libbfd.h" /* for bfd_default_set_arch_mach */
39 #include "coff/internal.h" /* for libcoff.h */
40 #include "libcoff.h" /* for xcoff_data */
41 #include "coff/xcoff.h"
42 #include "libxcoff.h"
43
44 #include "elf-bfd.h"
45
46 #include "solib-svr4.h"
47 #include "ppc-tdep.h"
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
60 /* To be used by skip_prologue. */
61
62 struct 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 */
69 int saved_vr; /* smallest # of saved vr */
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 */
75 int vr_offset; /* offset of saved vrs from prev sp */
76 int lr_offset; /* offset of saved lr */
77 int cr_offset; /* offset of saved cr */
78 int vrsave_offset; /* offset of saved vrsave register */
79 };
80
81 /* Description of a single register. */
82
83 struct 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
91 /* Breakpoint shadows for the single step instructions will be kept here. */
92
93 static 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 }
100 stepBreaks[2];
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
106 CORE_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
111 void (*rs6000_set_host_arch_hook) (int) = NULL;
112
113 /* Static function prototypes */
114
115 static CORE_ADDR branch_dest (int opcode, int instr, CORE_ADDR pc,
116 CORE_ADDR safety);
117 static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR,
118 struct rs6000_framedata *);
119 static void frame_get_saved_regs (struct frame_info * fi,
120 struct rs6000_framedata * fdatap);
121 static CORE_ADDR frame_initial_stack_address (struct frame_info *);
122
123 /* Read a LEN-byte address from debugged memory address MEMADDR. */
124
125 static CORE_ADDR
126 read_memory_addr (CORE_ADDR memaddr, int len)
127 {
128 return read_memory_unsigned_integer (memaddr, len);
129 }
130
131 static CORE_ADDR
132 rs6000_skip_prologue (CORE_ADDR pc)
133 {
134 struct rs6000_framedata frame;
135 pc = skip_prologue (pc, 0, &frame);
136 return pc;
137 }
138
139
140 /* Fill in fi->saved_regs */
141
142 struct 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. */
149 CORE_ADDR initial_sp; /* initial stack pointer. */
150 };
151
152 void
153 rs6000_init_extra_frame_info (int fromleaf, struct frame_info *fi)
154 {
155 fi->extra_info = (struct frame_extra_info *)
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)
160 /* We're in get_prev_frame */
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
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. */
172
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
177 void
178 rs6000_frame_init_saved_regs (struct frame_info *fi)
179 {
180 frame_get_saved_regs (fi, NULL);
181 }
182
183 static CORE_ADDR
184 rs6000_frame_args_address (struct frame_info *fi)
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
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
197 static CORE_ADDR
198 rs6000_saved_pc_after_call (struct frame_info *fi)
199 {
200 return read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
201 }
202
203 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
204
205 static CORE_ADDR
206 branch_dest (int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety)
207 {
208 CORE_ADDR dest;
209 int immediate;
210 int absolute;
211 int ext_op;
212
213 absolute = (int) ((instr >> 1) & 1);
214
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 {
238 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
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)
250 dest = read_memory_addr (fi->frame + SIG_FRAME_PC_OFFSET,
251 gdbarch_tdep (current_gdbarch)->wordsize);
252 }
253 }
254
255 else if (ext_op == 528) /* br cond to count reg */
256 {
257 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum) & ~3;
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)
263 dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3;
264 }
265 else
266 return -1;
267 break;
268
269 default:
270 return -1;
271 }
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
281 const static unsigned char *
282 rs6000_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
283 {
284 static unsigned char big_breakpoint[] = BIG_BREAKPOINT;
285 static unsigned char little_breakpoint[] = LITTLE_BREAKPOINT;
286 *bp_size = 4;
287 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
288 return big_breakpoint;
289 else
290 return little_breakpoint;
291 }
292
293
294 /* AIX does not support PT_STEP. Simulate it. */
295
296 void
297 rs6000_software_single_step (enum target_signal signal,
298 int insert_breakpoints_p)
299 {
300 CORE_ADDR dummy;
301 int breakp_sz;
302 const char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz);
303 int ii, insn;
304 CORE_ADDR loc;
305 CORE_ADDR breaks[2];
306 int opcode;
307
308 if (insert_breakpoints_p)
309 {
310
311 loc = read_pc ();
312
313 insn = read_memory_integer (loc, 4);
314
315 breaks[0] = loc + breakp_sz;
316 opcode = insn >> 26;
317 breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
318
319 /* Don't put two breakpoints on the same address. */
320 if (breaks[1] == breaks[0])
321 breaks[1] = -1;
322
323 stepBreaks[1].address = 0;
324
325 for (ii = 0; ii < 2; ++ii)
326 {
327
328 /* ignore invalid breakpoint. */
329 if (breaks[ii] == -1)
330 continue;
331 target_insert_breakpoint (breaks[ii], stepBreaks[ii].data);
332 stepBreaks[ii].address = breaks[ii];
333 }
334
335 }
336 else
337 {
338
339 /* remove step breakpoints. */
340 for (ii = 0; ii < 2; ++ii)
341 if (stepBreaks[ii].address != 0)
342 target_remove_breakpoint (stepBreaks[ii].address,
343 stepBreaks[ii].data);
344 }
345 errno = 0; /* FIXME, don't ignore errors! */
346 /* What errors? {read,write}_memory call error(). */
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:
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.
360 - saved_vr is the number of the first saved vr.
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.
365 - vr_offset is the offset of the first saved vr from the previous frame.
366 - lr_offset is the offset of the saved lr
367 - cr_offset is the offset of the saved cr
368 - vrsave_offset is the offset of the saved vrsave register
369 */
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
378 /* Limit the number of skipped non-prologue instructions, as the examining
379 of the prologue is expensive. */
380 static 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. */
388 static CORE_ADDR
389 refine_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
430 static CORE_ADDR
431 skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
432 {
433 CORE_ADDR orig_pc = pc;
434 CORE_ADDR last_prologue_pc = pc;
435 CORE_ADDR li_found_pc = 0;
436 char buf[4];
437 unsigned long op;
438 long offset = 0;
439 long vr_saved_offset = 0;
440 int lr_reg = -1;
441 int cr_reg = -1;
442 int vr_reg = -1;
443 int vrsave_reg = -1;
444 int reg;
445 int framep = 0;
446 int minimal_toc_loaded = 0;
447 int prev_insn_was_prologue_insn = 1;
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);
464
465 memset (fdata, 0, sizeof (struct rs6000_framedata));
466 fdata->saved_gpr = -1;
467 fdata->saved_fpr = -1;
468 fdata->saved_vr = -1;
469 fdata->alloca_reg = -1;
470 fdata->frameless = 1;
471 fdata->nosavedpc = 1;
472
473 for (;; pc += 4)
474 {
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;
481
482 /* Stop scanning if we've hit the limit. */
483 if (lim_pc != 0 && pc >= lim_pc)
484 break;
485
486 prev_insn_was_prologue_insn = 1;
487
488 /* Fetch the instruction and convert it to an integer. */
489 if (target_read_memory (pc, buf, 4))
490 break;
491 op = extract_signed_integer (buf, 4);
492
493 if ((op & 0xfc1fffff) == 0x7c0802a6)
494 { /* mflr Rx */
495 lr_reg = (op & 0x03e00000) | 0x90010000;
496 continue;
497
498 }
499 else if ((op & 0xfc1fffff) == 0x7c000026)
500 { /* mfcr Rx */
501 cr_reg = (op & 0x03e00000) | 0x90010000;
502 continue;
503
504 }
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;
514
515 }
516 else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */
517 (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */
518 (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */
519 (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */
520 {
521
522 reg = GET_SRC_REG (op);
523 if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg)
524 {
525 fdata->saved_gpr = reg;
526 if ((op & 0xfc1f0003) == 0xf8010000)
527 op = (op >> 1) << 1;
528 fdata->gpr_offset = SIGNED_SHORT (op) + offset;
529 }
530 continue;
531
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
542 }
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 }
559 else if (lr_reg != -1 && (op & 0xffff0000) == lr_reg)
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 }
568 else if (cr_reg != -1 && (op & 0xffff0000) == cr_reg)
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
586 }
587 else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used
588 in V.4 -mminimal-toc */
589 (op & 0xffff0000) == 0x3bde0000)
590 { /* addi 30,30,foo@l */
591 continue;
592
593 }
594 else if ((op & 0xfc000001) == 0x48000001)
595 { /* bl foo,
596 to save fprs??? */
597
598 fdata->frameless = 0;
599 /* Don't skip over the subroutine call if it is not within
600 the first three instructions of the prologue. */
601 if ((pc - orig_pc) > 8)
602 break;
603
604 op = read_memory_integer (pc + 4, 4);
605
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. */
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 }
618 else if ((op & 0xffff0000) == 0x94210000 || /* stu r1,NUM(r1) */
619 (op & 0xffff0003) == 0xf8210001) /* stdu r1,NUM(r1) */
620 {
621 fdata->frameless = 0;
622 if ((op & 0xffff0003) == 0xf8210001)
623 op = (op >> 1) << 1;
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
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
653 /* store parameters in stack */
654 }
655 else if ((op & 0xfc1f0003) == 0xf8010000 || /* std rx,NUM(r1) */
656 (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */
657 (op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */
658 {
659 continue;
660
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;
688 }
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. */
756 else
757 {
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;
783 }
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. */
796
797
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) */
804
805 /* check and see if we are in main. If so, skip over this initializer
806 function as well. */
807
808 tmp = find_pc_misc_function (pc);
809 if (tmp >= 0 && STREQ (misc_function_vector[tmp].name, main_name ()))
810 return pc + 8;
811 }
812 }
813 #endif /* 0 */
814
815 fdata->offset = -fdata->offset;
816 return last_prologue_pc;
817 }
818
819
820 /*************************************************************************
821 Support for creating pushing a dummy frame into the stack, and popping
822 frames, etc.
823 *************************************************************************/
824
825
826 /* Pop the innermost frame, go back to the caller. */
827
828 static void
829 rs6000_pop_frame (void)
830 {
831 CORE_ADDR pc, lr, sp, prev_sp, addr; /* %pc, %lr, %sp */
832 struct rs6000_framedata fdata;
833 struct frame_info *frame = get_current_frame ();
834 int ii, wordsize;
835
836 pc = read_pc ();
837 sp = FRAME_FP (frame);
838
839 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
840 {
841 generic_pop_dummy_frame ();
842 flush_cached_frames ();
843 return;
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);
854 (void) skip_prologue (addr, frame->pc, &fdata);
855
856 wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
857 if (fdata.frameless)
858 prev_sp = sp;
859 else
860 prev_sp = read_memory_addr (sp, wordsize);
861 if (fdata.lr_offset == 0)
862 lr = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
863 else
864 lr = read_memory_addr (prev_sp + fdata.lr_offset, wordsize);
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;
874 for (ii = fdata.saved_gpr; ii <= 31; ++ii)
875 {
876 read_memory (addr, &registers[REGISTER_BYTE (ii)], wordsize);
877 addr += wordsize;
878 }
879 }
880
881 if (fdata.saved_fpr != -1)
882 {
883 addr = prev_sp + fdata.fpr_offset;
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 }
889 }
890
891 write_register (SP_REGNUM, prev_sp);
892 target_store_registers (-1);
893 flush_cached_frames ();
894 }
895
896 /* Fixup the call sequence of a dummy function, with the real function
897 address. Its arguments will be passed by gdb. */
898
899 static void
900 rs6000_fix_call_dummy (char *dummyname, CORE_ADDR pc, CORE_ADDR fun,
901 int nargs, struct value **args, struct type *type,
902 int gcc_p)
903 {
904 int ii;
905 CORE_ADDR target_addr;
906
907 if (rs6000_find_toc_address_hook != NULL)
908 {
909 CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (fun);
910 write_register (gdbarch_tdep (current_gdbarch)->ppc_toc_regnum,
911 tocvalue);
912 }
913 }
914
915 /* Pass the arguments in either registers, or in the stack. In RS/6000,
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
918 passed in r3..r10 registers. float and double parameters are
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
924 Stack must be aligned on 64-bit boundaries when synthesizing
925 function calls.
926
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
931 static CORE_ADDR
932 rs6000_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
933 int struct_return, CORE_ADDR struct_addr)
934 {
935 int ii;
936 int len = 0;
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 */
941 int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
942
943 struct value *arg = 0;
944 struct type *type;
945
946 CORE_ADDR saved_sp;
947
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
956 ii = struct_return ? 1 : 0;
957
958 /*
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 */
976
977 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
978 {
979 int reg_size = REGISTER_RAW_SIZE (ii + 3);
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
1002 if (len > reg_size)
1003 {
1004
1005 /* Argument takes more than one register. */
1006 while (argbytes < len)
1007 {
1008 memset (&registers[REGISTER_BYTE (ii + 3)], 0, reg_size);
1009 memcpy (&registers[REGISTER_BYTE (ii + 3)],
1010 ((char *) VALUE_CONTENTS (arg)) + argbytes,
1011 (len - argbytes) > reg_size
1012 ? reg_size : len - argbytes);
1013 ++ii, argbytes += reg_size;
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. */
1023 int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0;
1024 memset (&registers[REGISTER_BYTE (ii + 3)], 0, reg_size);
1025 memcpy ((char *)&registers[REGISTER_BYTE (ii + 3)] + adj,
1026 VALUE_CONTENTS (arg), len);
1027 }
1028 ++argno;
1029 }
1030
1031 ran_out_of_registers_for_arguments:
1032
1033 saved_sp = read_sp ();
1034
1035 /* location for 8 parameters are always reserved. */
1036 sp -= wordsize * 8;
1037
1038 /* another six words for back chain, TOC register, link register, etc. */
1039 sp -= wordsize * 6;
1040
1041 /* stack pointer must be quadword aligned */
1042 sp &= -16;
1043
1044 /* if there are more arguments, allocate space for them in
1045 the stack, then push them starting from the ninth one. */
1046
1047 if ((argno < nargs) || argbytes)
1048 {
1049 int space = 0, jj;
1050
1051 if (argbytes)
1052 {
1053 space += ((len - argbytes + 3) & -4);
1054 jj = argno + 1;
1055 }
1056 else
1057 jj = argno;
1058
1059 for (; jj < nargs; ++jj)
1060 {
1061 struct value *val = args[jj];
1062 space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
1063 }
1064
1065 /* add location required for the rest of the parameters */
1066 space = (space + 15) & -16;
1067 sp -= space;
1068
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. */
1073
1074 write_register (SP_REGNUM, sp);
1075
1076 /* if the last argument copied into the registers didn't fit there
1077 completely, push the rest of it into stack. */
1078
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 }
1087
1088 /* push the rest of the arguments into stack. */
1089 for (; argno < nargs; ++argno)
1090 {
1091
1092 arg = args[argno];
1093 type = check_typedef (VALUE_TYPE (arg));
1094 len = TYPE_LENGTH (type);
1095
1096
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 {
1100
1101 if (len > 8)
1102 printf_unfiltered (
1103 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
1104
1105 memcpy (&registers[REGISTER_BYTE (FP0_REGNUM + 1 + f_argno)],
1106 VALUE_CONTENTS (arg),
1107 len);
1108 ++f_argno;
1109 }
1110
1111 write_memory (sp + 24 + (ii * 4), (char *) VALUE_CONTENTS (arg), len);
1112 ii += ((len + 3) & -4) / 4;
1113 }
1114 }
1115 else
1116 /* Secure stack areas first, before doing anything else. */
1117 write_register (SP_REGNUM, sp);
1118
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 }
1126
1127 /* Function: ppc_push_return_address (pc, sp)
1128 Set up the return address for the inferior function call. */
1129
1130 static CORE_ADDR
1131 ppc_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
1132 {
1133 write_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum,
1134 CALL_DUMMY_ADDRESS ());
1135 return sp;
1136 }
1137
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. */
1140
1141 static void
1142 rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
1143 {
1144 int offset = 0;
1145 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1146
1147 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1148 {
1149
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. */
1155
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 }
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 }
1174 else
1175 {
1176 /* return value is copied starting from r3. */
1177 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
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,
1183 TYPE_LENGTH (valtype));
1184 }
1185 }
1186
1187 /* Keep structure return address in this variable.
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! -- gnu@cygnus.com, Aug 92 */
1191
1192 static CORE_ADDR rs6000_struct_return_address;
1193
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
1216 int
1217 rs6000_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
1229 indirect function call trampolines).
1230
1231 3. Skip bigtoc fixup code.
1232
1233 Result is desired PC to step until, or NULL if we are not in
1234 code that should be skipped. */
1235
1236 CORE_ADDR
1237 rs6000_skip_trampoline_code (CORE_ADDR pc)
1238 {
1239 register unsigned int ii, op;
1240 int rel;
1241 CORE_ADDR solib_target_pc;
1242 struct minimal_symbol *msymbol;
1243
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
1254 };
1255
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
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
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 */
1283 pc = read_memory_addr (ii, gdbarch_tdep (current_gdbarch)->wordsize); /* (r11) value */
1284 return pc;
1285 }
1286
1287 /* Determines whether the function FI has a frame on the stack or not. */
1288
1289 int
1290 rs6000_frameless_function_invocation (struct frame_info *fi)
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;
1299
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
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. */
1311 if (fi->pc == 0)
1312 return 1;
1313 else
1314 return 0;
1315 }
1316
1317 (void) skip_prologue (func_start, fi->pc, &fdata);
1318 return fdata.frameless;
1319 }
1320
1321 /* Return the PC saved in a frame */
1322
1323 CORE_ADDR
1324 rs6000_frame_saved_pc (struct frame_info *fi)
1325 {
1326 CORE_ADDR func_start;
1327 struct rs6000_framedata fdata;
1328 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1329 int wordsize = tdep->wordsize;
1330
1331 if (fi->signal_handler_caller)
1332 return read_memory_addr (fi->frame + SIG_FRAME_PC_OFFSET, wordsize);
1333
1334 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
1335 return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
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
1344 (void) skip_prologue (func_start, fi->pc, &fdata);
1345
1346 if (fdata.lr_offset == 0 && fi->next != NULL)
1347 {
1348 if (fi->next->signal_handler_caller)
1349 return read_memory_addr (fi->next->frame + SIG_FRAME_LR_OFFSET,
1350 wordsize);
1351 else
1352 return read_memory_addr (FRAME_CHAIN (fi) + tdep->lr_frame_offset,
1353 wordsize);
1354 }
1355
1356 if (fdata.lr_offset == 0)
1357 return read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
1358
1359 return read_memory_addr (FRAME_CHAIN (fi) + fdata.lr_offset, wordsize);
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
1366 static void
1367 frame_get_saved_regs (struct frame_info *fi, struct rs6000_framedata *fdatap)
1368 {
1369 CORE_ADDR frame_addr;
1370 struct rs6000_framedata work_fdata;
1371 struct gdbarch_tdep * tdep = gdbarch_tdep (current_gdbarch);
1372 int wordsize = tdep->wordsize;
1373
1374 if (fi->saved_regs)
1375 return;
1376
1377 if (fdatap == NULL)
1378 {
1379 fdatap = &work_fdata;
1380 (void) skip_prologue (get_pc_function_start (fi->pc), fi->pc, fdatap);
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
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)
1396 frame_addr = 0;
1397 else
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);
1404
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;
1411 CORE_ADDR fpr_addr = frame_addr + fdatap->fpr_offset;
1412 for (i = fdatap->saved_fpr; i < 32; i++)
1413 {
1414 fi->saved_regs[FP0_REGNUM + i] = fpr_addr;
1415 fpr_addr += 8;
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;
1425 CORE_ADDR gpr_addr = frame_addr + fdatap->gpr_offset;
1426 for (i = fdatap->saved_gpr; i < 32; i++)
1427 {
1428 fi->saved_regs[i] = gpr_addr;
1429 gpr_addr += wordsize;
1430 }
1431 }
1432
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
1449 /* If != 0, fdatap->cr_offset is the offset from the frame that holds
1450 the CR. */
1451 if (fdatap->cr_offset != 0)
1452 fi->saved_regs[tdep->ppc_cr_regnum] = frame_addr + fdatap->cr_offset;
1453
1454 /* If != 0, fdatap->lr_offset is the offset from the frame that holds
1455 the LR. */
1456 if (fdatap->lr_offset != 0)
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;
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
1469 static CORE_ADDR
1470 frame_initial_stack_address (struct frame_info *fi)
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
1484 (void) skip_prologue (get_pc_function_start (fi->pc), fi->pc, &fdata);
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
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 }
1516 return fi->extra_info->initial_sp;
1517 }
1518
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
1528 CORE_ADDR
1529 rs6000_frame_chain (struct frame_info *thisframe)
1530 {
1531 CORE_ADDR fp, fpp, lr;
1532 int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
1533
1534 if (PC_IN_CALL_DUMMY (thisframe->pc, thisframe->frame, thisframe->frame))
1535 return thisframe->frame; /* dummy frame same as caller's frame */
1536
1537 if (inside_entry_file (thisframe->pc) ||
1538 thisframe->pc == entry_point_address ())
1539 return 0;
1540
1541 if (thisframe->signal_handler_caller)
1542 fp = read_memory_addr (thisframe->frame + SIG_FRAME_FP_OFFSET,
1543 wordsize);
1544 else if (thisframe->next != NULL
1545 && thisframe->next->signal_handler_caller
1546 && FRAMELESS_FUNCTION_INVOCATION (thisframe))
1547 /* A frameless function interrupted by a signal did not change the
1548 frame pointer. */
1549 fp = FRAME_FP (thisframe);
1550 else
1551 fp = read_memory_addr ((thisframe)->frame, wordsize);
1552
1553 lr = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
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
1565 static int
1566 regsize (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
1574 static const char *
1575 rs6000_register_name (int n)
1576 {
1577 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
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
1588 static int
1589 rs6000_register_byte (int n)
1590 {
1591 return gdbarch_tdep (current_gdbarch)->regoff[n];
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
1597 static int
1598 rs6000_register_raw_size (int n)
1599 {
1600 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1601 const struct reg *reg = tdep->regs + n;
1602 return regsize (reg, tdep->wordsize);
1603 }
1604
1605 /* Return the GDB type object for the "standard" data type
1606 of data in register N. */
1607
1608 static struct type *
1609 rs6000_register_virtual_type (int n)
1610 {
1611 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1612 const struct reg *reg = tdep->regs + n;
1613
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:
1625 return builtin_type_vec128;
1626 break;
1627 default:
1628 return builtin_type_int32;
1629 break;
1630 }
1631 }
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
1639 static int
1640 rs6000_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
1651 static int
1652 rs6000_register_convertible (int n)
1653 {
1654 const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + n;
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
1661 static void
1662 rs6000_register_convert_to_virtual (int n, struct type *type,
1663 char *from, char *to)
1664 {
1665 if (TYPE_LENGTH (type) != REGISTER_RAW_SIZE (n))
1666 {
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. */
1676
1677 static void
1678 rs6000_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);
1685 }
1686 else
1687 memcpy (to, from, REGISTER_RAW_SIZE (n));
1688 }
1689
1690 int
1691 altivec_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
1700 static void
1701 rs6000_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. */
1723 if (!frame_register_read (selected_frame, i, raw_buffer))
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
1743 static void
1744 rs6000_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
1788 static void
1789 rs6000_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. */
1820 if (!frame_register_read (selected_frame, i, raw_buffer))
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
1838 val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1839 gdb_stdout, 0, 1, 0, Val_pretty_default);
1840
1841 printf_filtered ("\t(raw 0x");
1842 for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
1843 {
1844 register int idx = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? j
1845 : REGISTER_RAW_SIZE (i) - 1 - j;
1846 printf_filtered ("%02x", (unsigned char) raw_buffer[idx]);
1847 }
1848 printf_filtered (")");
1849 }
1850 else
1851 {
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. */
1856 if (!altivec_register_p (i))
1857 {
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 }
1862 }
1863 printf_filtered ("\n");
1864 }
1865 }
1866
1867 /* Convert a dbx stab register number (from `r' declaration) to a gdb
1868 REGNUM. */
1869 static int
1870 rs6000_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
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
1902 static void
1903 rs6000_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
1912 static void
1913 rs6000_store_return_value (struct type *type, char *valbuf)
1914 {
1915 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1916
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));
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 }
1932 else
1933 /* Everything else is returned in GPR3 and up. */
1934 write_register_bytes (REGISTER_BYTE (gdbarch_tdep (current_gdbarch)->ppc_gp0_regnum + 3),
1935 valbuf, TYPE_LENGTH (type));
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
1942 static CORE_ADDR
1943 rs6000_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
1953 static int
1954 rs6000_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
1961 void
1962 rs6000_create_inferior (int pid)
1963 {
1964 if (rs6000_set_host_arch_hook)
1965 rs6000_set_host_arch_hook (pid);
1966 }
1967 \f
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
1981 function pointers), find_function_addr uses this function to get the
1982 function address from a function pointer. */
1983
1984 /* Return real function address if ADDR (a function pointer) is in the data
1985 space and is therefore a special function pointer. */
1986
1987 CORE_ADDR
1988 rs6000_convert_from_func_ptr_addr (CORE_ADDR addr)
1989 {
1990 struct obj_section *s;
1991
1992 s = find_pc_section (addr);
1993 if (s && s->the_bfd_section->flags & SEC_CODE)
1994 return addr;
1995
1996 /* ADDR is in the data space, so it's a special function pointer. */
1997 return read_memory_addr (addr, gdbarch_tdep (current_gdbarch)->wordsize);
1998 }
1999 \f
2000
2001 /* Handling the various POWER/PowerPC variants. */
2002
2003
2004 /* The arrays here called registers_MUMBLE hold information about available
2005 registers.
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
2017 tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1
2018 pbu1 pbl2 pbu2
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
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. */
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
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
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
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
2098 /* UISA-level SPRs for PowerPC. */
2099 #define PPC_UISA_SPRS \
2100 /* 66 */ R4(cr), R(lr), R(ctr), R4(xer), R4(fpscr)
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
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
2129 /* IBM POWER (pre-PowerPC) architecture, user-level view. We only cover
2130 user-level SPR's. */
2131 static const struct reg registers_power[] =
2132 {
2133 COMMON_UISA_REGS,
2134 /* 66 */ R4(cnd), R(lr), R(cnt), R4(xer), R4(mq),
2135 /* 71 */ R4(fpscr)
2136 };
2137
2138 /* PowerPC UISA - a PPC processor as viewed by user-level code. A UISA-only
2139 view of the PowerPC. */
2140 static const struct reg registers_powerpc[] =
2141 {
2142 COMMON_UISA_REGS,
2143 PPC_UISA_SPRS,
2144 PPC_ALTIVEC_REGS
2145 };
2146
2147 /* PowerPC UISA - a PPC processor as viewed by user-level
2148 code, but without floating point registers. */
2149 static const struct reg registers_powerpc_nofp[] =
2150 {
2151 COMMON_UISA_NOFP_REGS,
2152 PPC_UISA_SPRS
2153 };
2154
2155 /* IBM PowerPC 403. */
2156 static const struct reg registers_403[] =
2157 {
2158 COMMON_UISA_REGS,
2159 PPC_UISA_SPRS,
2160 PPC_SEGMENT_REGS,
2161 PPC_OEA_SPRS,
2162 /* 119 */ R(icdbdr), R(esr), R(dear), R(evpr),
2163 /* 123 */ R(cdbcr), R(tsr), R(tcr), R(pit),
2164 /* 127 */ R(tbhi), R(tblo), R(srr2), R(srr3),
2165 /* 131 */ R(dbsr), R(dbcr), R(iac1), R(iac2),
2166 /* 135 */ R(dac1), R(dac2), R(dccr), R(iccr),
2167 /* 139 */ R(pbl1), R(pbu1), R(pbl2), R(pbu2)
2168 };
2169
2170 /* IBM PowerPC 403GC. */
2171 static const struct reg registers_403GC[] =
2172 {
2173 COMMON_UISA_REGS,
2174 PPC_UISA_SPRS,
2175 PPC_SEGMENT_REGS,
2176 PPC_OEA_SPRS,
2177 /* 119 */ R(icdbdr), R(esr), R(dear), R(evpr),
2178 /* 123 */ R(cdbcr), R(tsr), R(tcr), R(pit),
2179 /* 127 */ R(tbhi), R(tblo), R(srr2), R(srr3),
2180 /* 131 */ R(dbsr), R(dbcr), R(iac1), R(iac2),
2181 /* 135 */ R(dac1), R(dac2), R(dccr), R(iccr),
2182 /* 139 */ R(pbl1), R(pbu1), R(pbl2), R(pbu2),
2183 /* 143 */ R(zpr), R(pid), R(sgr), R(dcwr),
2184 /* 147 */ R(tbhu), R(tblu)
2185 };
2186
2187 /* Motorola PowerPC 505. */
2188 static const struct reg registers_505[] =
2189 {
2190 COMMON_UISA_REGS,
2191 PPC_UISA_SPRS,
2192 PPC_SEGMENT_REGS,
2193 PPC_OEA_SPRS,
2194 /* 119 */ R(eie), R(eid), R(nri)
2195 };
2196
2197 /* Motorola PowerPC 860 or 850. */
2198 static const struct reg registers_860[] =
2199 {
2200 COMMON_UISA_REGS,
2201 PPC_UISA_SPRS,
2202 PPC_SEGMENT_REGS,
2203 PPC_OEA_SPRS,
2204 /* 119 */ R(eie), R(eid), R(nri), R(cmpa),
2205 /* 123 */ R(cmpb), R(cmpc), R(cmpd), R(icr),
2206 /* 127 */ R(der), R(counta), R(countb), R(cmpe),
2207 /* 131 */ R(cmpf), R(cmpg), R(cmph), R(lctrl1),
2208 /* 135 */ R(lctrl2), R(ictrl), R(bar), R(ic_cst),
2209 /* 139 */ R(ic_adr), R(ic_dat), R(dc_cst), R(dc_adr),
2210 /* 143 */ R(dc_dat), R(dpdr), R(dpir), R(immr),
2211 /* 147 */ R(mi_ctr), R(mi_ap), R(mi_epn), R(mi_twc),
2212 /* 151 */ R(mi_rpn), R(md_ctr), R(m_casid), R(md_ap),
2213 /* 155 */ R(md_epn), R(md_twb), R(md_twc), R(md_rpn),
2214 /* 159 */ R(m_tw), R(mi_dbcam), R(mi_dbram0), R(mi_dbram1),
2215 /* 163 */ R(md_dbcam), R(md_dbram0), R(md_dbram1)
2216 };
2217
2218 /* Motorola PowerPC 601. Note that the 601 has different register numbers
2219 for reading and writing RTCU and RTCL. However, how one reads and writes a
2220 register is the stub's problem. */
2221 static const struct reg registers_601[] =
2222 {
2223 COMMON_UISA_REGS,
2224 PPC_UISA_SPRS,
2225 PPC_SEGMENT_REGS,
2226 PPC_OEA_SPRS,
2227 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2228 /* 123 */ R(pir), R(mq), R(rtcu), R(rtcl)
2229 };
2230
2231 /* Motorola PowerPC 602. */
2232 static const struct reg registers_602[] =
2233 {
2234 COMMON_UISA_REGS,
2235 PPC_UISA_SPRS,
2236 PPC_SEGMENT_REGS,
2237 PPC_OEA_SPRS,
2238 /* 119 */ R(hid0), R(hid1), R(iabr), R0,
2239 /* 123 */ R0, R(tcr), R(ibr), R(esassr),
2240 /* 127 */ R(sebr), R(ser), R(sp), R(lt)
2241 };
2242
2243 /* Motorola/IBM PowerPC 603 or 603e. */
2244 static const struct reg registers_603[] =
2245 {
2246 COMMON_UISA_REGS,
2247 PPC_UISA_SPRS,
2248 PPC_SEGMENT_REGS,
2249 PPC_OEA_SPRS,
2250 /* 119 */ R(hid0), R(hid1), R(iabr), R0,
2251 /* 123 */ R0, R(dmiss), R(dcmp), R(hash1),
2252 /* 127 */ R(hash2), R(imiss), R(icmp), R(rpa)
2253 };
2254
2255 /* Motorola PowerPC 604 or 604e. */
2256 static const struct reg registers_604[] =
2257 {
2258 COMMON_UISA_REGS,
2259 PPC_UISA_SPRS,
2260 PPC_SEGMENT_REGS,
2261 PPC_OEA_SPRS,
2262 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2263 /* 123 */ R(pir), R(mmcr0), R(pmc1), R(pmc2),
2264 /* 127 */ R(sia), R(sda)
2265 };
2266
2267 /* Motorola/IBM PowerPC 750 or 740. */
2268 static const struct reg registers_750[] =
2269 {
2270 COMMON_UISA_REGS,
2271 PPC_UISA_SPRS,
2272 PPC_SEGMENT_REGS,
2273 PPC_OEA_SPRS,
2274 /* 119 */ R(hid0), R(hid1), R(iabr), R(dabr),
2275 /* 123 */ R0, R(ummcr0), R(upmc1), R(upmc2),
2276 /* 127 */ R(usia), R(ummcr1), R(upmc3), R(upmc4),
2277 /* 131 */ R(mmcr0), R(pmc1), R(pmc2), R(sia),
2278 /* 135 */ R(mmcr1), R(pmc3), R(pmc4), R(l2cr),
2279 /* 139 */ R(ictc), R(thrm1), R(thrm2), R(thrm3)
2280 };
2281
2282
2283 /* Motorola PowerPC 7400. */
2284 static const struct reg registers_7400[] =
2285 {
2286 /* gpr0-gpr31, fpr0-fpr31 */
2287 COMMON_UISA_REGS,
2288 /* 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
2298 /* Information about a particular processor variant. */
2299
2300 struct variant
2301 {
2302 /* Name of this variant. */
2303 char *name;
2304
2305 /* English description of the variant. */
2306 char *description;
2307
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
2314 /* Table of register names; registers[R] is the name of the register
2315 number R. */
2316 int nregs;
2317 const struct reg *regs;
2318 };
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
2333 static const struct variant variants[] =
2334 {
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},
2357 {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
2358 bfd_mach_ppc_7400, num_registers (registers_7400), registers_7400},
2359
2360 /* 64-bit */
2361 {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc,
2362 bfd_mach_ppc64, num_registers (registers_powerpc), registers_powerpc},
2363 {"620", "Motorola PowerPC 620", bfd_arch_powerpc,
2364 bfd_mach_ppc_620, num_registers (registers_powerpc), registers_powerpc},
2365 {"630", "Motorola PowerPC 630", bfd_arch_powerpc,
2366 bfd_mach_ppc_630, num_registers (registers_powerpc), registers_powerpc},
2367 {"a35", "PowerPC A35", bfd_arch_powerpc,
2368 bfd_mach_ppc_a35, num_registers (registers_powerpc), registers_powerpc},
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. */
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
2382 {0, 0, 0, 0}
2383 };
2384
2385 #undef num_registers
2386
2387 /* Return the variant corresponding to architecture ARCH and machine number
2388 MACH. If no such variant exists, return null. */
2389
2390 static const struct variant *
2391 find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
2392 {
2393 const struct variant *v;
2394
2395 for (v = variants; v->name; v++)
2396 if (arch == v->arch && mach == v->mach)
2397 return v;
2398
2399 return NULL;
2400 }
2401
2402 static int
2403 gdb_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 }
2410 \f
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.
2414
2415 Called e.g. at program startup, when reading a core file, and when reading
2416 a binary file. */
2417
2418 static struct gdbarch *
2419 rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2420 {
2421 struct gdbarch *gdbarch;
2422 struct gdbarch_tdep *tdep;
2423 int wordsize, from_xcoff_exec, from_elf_exec, power, i, off;
2424 struct reg *regs;
2425 const struct variant *v;
2426 enum bfd_architecture arch;
2427 unsigned long mach;
2428 bfd abfd;
2429 int sysv_abi;
2430 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
2431
2432 from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
2433 bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
2434
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
2440 if (info.abfd)
2441 osabi = gdbarch_lookup_osabi (info.abfd);
2442
2443 /* Check word size. If INFO is from a binary file, infer it from
2444 that, else choose a likely default. */
2445 if (from_xcoff_exec)
2446 {
2447 if (bfd_xcoff_is_xcoff64 (info.abfd))
2448 wordsize = 8;
2449 else
2450 wordsize = 4;
2451 }
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 }
2459 else
2460 {
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;
2466 }
2467
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);
2477 if (tdep && tdep->wordsize == wordsize && tdep->osabi == osabi)
2478 return arches->gdbarch;
2479 }
2480
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 */
2488
2489 if (!from_xcoff_exec)
2490 {
2491 arch = info.bfd_arch_info->arch;
2492 mach = info.bfd_arch_info->mach;
2493 }
2494 else
2495 {
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;
2503 tdep->osabi = osabi;
2504 gdbarch = gdbarch_alloc (&info, tdep);
2505 power = arch == bfd_arch_rs6000;
2506
2507 /* Choose variant. */
2508 v = find_variant_by_arch (arch, mach);
2509 if (!v)
2510 return NULL;
2511
2512 tdep->regs = v->regs;
2513
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;
2524 else if (power)
2525 tdep->ppc_mq_regnum = 70;
2526 else
2527 tdep->ppc_mq_regnum = -1;
2528 tdep->ppc_fpscr_regnum = power ? 71 : 70;
2529
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
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. */
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);
2561 }
2562
2563 /* Select instruction printer. */
2564 if (arch == power)
2565 set_gdbarch_print_insn (gdbarch, print_insn_rs6000);
2566 else
2567 set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc);
2568
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);
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);
2584 set_gdbarch_max_register_raw_size (gdbarch, 16);
2585 set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
2586 set_gdbarch_max_register_virtual_size (gdbarch, 16);
2587 set_gdbarch_register_virtual_type (gdbarch, rs6000_register_virtual_type);
2588 set_gdbarch_do_registers_info (gdbarch, rs6000_do_registers_info);
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);
2598 set_gdbarch_char_signed (gdbarch, 0);
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);
2607 set_gdbarch_pc_in_call_dummy (gdbarch, generic_pc_in_call_dummy);
2608 set_gdbarch_call_dummy_p (gdbarch, 1);
2609 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
2610 set_gdbarch_get_saved_register (gdbarch, generic_unwind_get_saved_register);
2611 set_gdbarch_fix_call_dummy (gdbarch, rs6000_fix_call_dummy);
2612 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
2613 set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
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);
2621 set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
2622
2623 set_gdbarch_deprecated_extract_return_value (gdbarch, rs6000_extract_return_value);
2624
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)
2633 set_gdbarch_push_arguments (gdbarch, ppc_sysv_abi_push_arguments);
2634 else
2635 set_gdbarch_push_arguments (gdbarch, rs6000_push_arguments);
2636
2637 set_gdbarch_store_struct_return (gdbarch, rs6000_store_struct_return);
2638 set_gdbarch_store_return_value (gdbarch, rs6000_store_return_value);
2639 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address);
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
2651 if (sysv_abi)
2652 set_gdbarch_use_struct_convention (gdbarch,
2653 ppc_sysv_abi_use_struct_convention);
2654 else
2655 set_gdbarch_use_struct_convention (gdbarch,
2656 generic_use_struct_convention);
2657
2658 set_gdbarch_frame_chain_valid (gdbarch, file_frame_chain_valid);
2659
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
2668 if (!sysv_abi)
2669 {
2670 /* Handle RS/6000 function pointers (which are really function
2671 descriptors). */
2672 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
2673 rs6000_convert_from_func_ptr_addr);
2674 }
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
2683 /* Hook in ABI-specific overrides, if they have been registered. */
2684 gdbarch_init_osabi (info, gdbarch, osabi);
2685
2686 return gdbarch;
2687 }
2688
2689 static void
2690 rs6000_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
2701 static struct cmd_list_element *info_powerpc_cmdlist = NULL;
2702
2703 static void
2704 rs6000_info_powerpc_command (char *args, int from_tty)
2705 {
2706 help_list (info_powerpc_cmdlist, "info powerpc ", class_info, gdb_stdout);
2707 }
2708
2709 /* Initialization code. */
2710
2711 void
2712 _initialize_rs6000_tdep (void)
2713 {
2714 gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep);
2715 gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep);
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);
2725 }
This page took 0.084844 seconds and 4 git commands to generate.