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