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