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