* rs6000-tdep.c (skip_prologue): Add missing parens around
[external/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
3    Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include "defs.h"
22 #include "frame.h"
23 #include "inferior.h"
24 #include "symtab.h"
25 #include "target.h"
26 #include "gdbcore.h"
27 #include "symfile.h"
28 #include "objfiles.h"
29 #include "xcoffsolib.h"
30
31 extern struct obstack frame_cache_obstack;
32
33 extern int errno;
34
35 /* Nonzero if we just simulated a single step break. */
36 int one_stepped;
37
38 /* Breakpoint shadows for the single step instructions will be kept here. */
39
40 static struct sstep_breaks {
41   /* Address, or 0 if this is not in use.  */
42   CORE_ADDR address;
43   /* Shadow contents.  */
44   char data[4];
45 } stepBreaks[2];
46
47 /* Static function prototypes */
48
49 static CORE_ADDR find_toc_address PARAMS ((CORE_ADDR pc));
50
51 static CORE_ADDR branch_dest PARAMS ((int opcode, int instr, CORE_ADDR pc,
52                                       CORE_ADDR safety));
53
54 static void frame_get_cache_fsr PARAMS ((struct frame_info *fi,
55                                          struct rs6000_framedata *fdatap));
56
57 /* Calculate the destination of a branch/jump.  Return -1 if not a branch.  */
58
59 static CORE_ADDR
60 branch_dest (opcode, instr, pc, safety)
61      int opcode;
62      int instr;
63      CORE_ADDR pc;
64      CORE_ADDR safety;
65 {
66   register long offset;
67   CORE_ADDR dest;
68   int immediate;
69   int absolute;
70   int ext_op;
71
72   absolute = (int) ((instr >> 1) & 1);
73
74   switch (opcode) {
75      case 18    :
76         immediate = ((instr & ~3) << 6) >> 6;   /* br unconditional */
77         if (absolute)
78           dest = immediate;     
79         else
80           dest = pc + immediate;
81         break;
82
83      case 16    :  
84         immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
85         if (absolute)
86           dest = immediate;     
87         else
88           dest = pc + immediate;
89         break;
90
91       case 19   :
92         ext_op = (instr>>1) & 0x3ff;
93
94         if (ext_op == 16)                       /* br conditional register */
95           dest = read_register (LR_REGNUM) & ~3;
96
97         else if (ext_op == 528)                 /* br cond to count reg */
98           {
99             dest = read_register (CTR_REGNUM) & ~3;
100
101             /* If we are about to execute a system call, dest is something
102                like 0x22fc or 0x3b00.  Upon completion the system call
103                will return to the address in the link register.  */
104             if (dest < TEXT_SEGMENT_BASE)
105               dest = read_register (LR_REGNUM) & ~3;
106           }
107         else return -1; 
108         break;
109         
110        default: return -1;
111   }
112   return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
113 }
114
115
116
117 /* AIX does not support PT_STEP. Simulate it. */
118
119 void
120 single_step (signal)
121      enum target_signal signal;
122 {
123 #define INSNLEN(OPCODE)  4
124
125   static char le_breakp[] = LITTLE_BREAKPOINT;
126   static char be_breakp[] = BIG_BREAKPOINT;
127   char *breakp = TARGET_BYTE_ORDER == BIG_ENDIAN ? be_breakp : le_breakp;
128   int ii, insn;
129   CORE_ADDR loc;
130   CORE_ADDR breaks[2];
131   int opcode;
132
133   if (!one_stepped) {
134     loc = read_pc ();
135
136     insn = read_memory_integer (loc, 4);
137
138     breaks[0] = loc + INSNLEN(insn);
139     opcode = insn >> 26;
140     breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
141
142     /* Don't put two breakpoints on the same address. */
143     if (breaks[1] == breaks[0])
144       breaks[1] = -1;
145
146     stepBreaks[1].address = 0;
147
148     for (ii=0; ii < 2; ++ii) {
149
150       /* ignore invalid breakpoint. */
151       if ( breaks[ii] == -1)
152         continue;
153
154       read_memory (breaks[ii], stepBreaks[ii].data, 4);
155
156       write_memory (breaks[ii], breakp, 4);
157       stepBreaks[ii].address = breaks[ii];
158     }  
159
160     one_stepped = 1;
161   } else {
162
163     /* remove step breakpoints. */
164     for (ii=0; ii < 2; ++ii)
165       if (stepBreaks[ii].address != 0)
166         write_memory 
167            (stepBreaks[ii].address, stepBreaks[ii].data, 4);
168
169     one_stepped = 0;
170   }
171   errno = 0;                    /* FIXME, don't ignore errors! */
172                         /* What errors?  {read,write}_memory call error().  */
173 }
174
175
176 /* return pc value after skipping a function prologue and also return
177    information about a function frame.
178
179    in struct rs6000_frameinfo fdata:
180     - frameless is TRUE, if function does not have a frame.
181     - nosavedpc is TRUE, if function does not save %pc value in its frame.
182     - offset is the number of bytes used in the frame to save registers.
183     - saved_gpr is the number of the first saved gpr.
184     - saved_fpr is the number of the first saved fpr.
185     - alloca_reg is the number of the register used for alloca() handling.
186       Otherwise -1.
187     - gpr_offset is the offset of the saved gprs
188     - fpr_offset is the offset of the saved fprs
189     - lr_offset is the offset of the saved lr
190     - cr_offset is the offset of the saved cr
191  */
192
193 #define SIGNED_SHORT(x)                                                 \
194   ((sizeof (short) == 2)                                                \
195    ? ((int)(short)(x))                                                  \
196    : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000)))
197
198 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f)
199
200 CORE_ADDR
201 skip_prologue (pc, fdata)
202      CORE_ADDR pc;
203      struct rs6000_framedata *fdata; 
204 {
205   CORE_ADDR orig_pc = pc;
206   char buf[4];
207   unsigned long op;
208   long offset = 0;
209   int lr_reg = 0;
210   int cr_reg = 0;
211   int reg;
212   int framep = 0;
213   int minimal_toc_loaded = 0;
214   static struct rs6000_framedata zero_frame;
215
216   *fdata = zero_frame;
217   fdata->saved_gpr = -1;
218   fdata->saved_fpr = -1;
219   fdata->alloca_reg = -1;
220   fdata->frameless = 1;
221   fdata->nosavedpc = 1;
222
223   if (target_read_memory (pc, buf, 4))
224     return pc;                  /* Can't access it -- assume no prologue. */
225
226   /* Assume that subsequent fetches can fail with low probability.  */
227   pc -= 4;
228   for (;;)
229     {
230       pc += 4;
231       op = read_memory_integer (pc, 4);
232
233       if ((op & 0xfc1fffff) == 0x7c0802a6) {            /* mflr Rx */
234         lr_reg = (op & 0x03e00000) | 0x90010000;
235         continue;
236
237       } else if ((op & 0xfc1fffff) == 0x7c000026) {     /* mfcr Rx */
238         cr_reg = (op & 0x03e00000) | 0x90010000;
239         continue;
240
241       } else if ((op & 0xfc1f0000) == 0xd8010000) {     /* stfd Rx,NUM(r1) */
242         reg = GET_SRC_REG (op);
243         if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg) {
244           fdata->saved_fpr = reg;
245           fdata->fpr_offset = SIGNED_SHORT (op) + offset;
246         }
247         continue;
248
249       } else if (((op & 0xfc1f0000) == 0xbc010000) ||   /* stm Rx, NUM(r1) */
250                  ((op & 0xfc1f0000) == 0x90010000 &&    /* st rx,NUM(r1), rx >= r13 */
251                   (op & 0x03e00000) >= 0x01a00000)) {
252
253         reg = GET_SRC_REG (op);
254         if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg) {
255           fdata->saved_gpr = reg;
256           fdata->gpr_offset = SIGNED_SHORT (op) + offset;
257         }
258         continue;
259
260       } else if ((op & 0xffff0000) == 0x3c000000) {     /* addis 0,0,NUM, used for >= 32k frames */
261         fdata->offset = (op & 0x0000ffff) << 16;
262         fdata->frameless = 0;
263         continue;
264
265       } else if ((op & 0xffff0000) == 0x60000000) {     /* ori 0,0,NUM, 2nd half of >= 32k frames */
266         fdata->offset |= (op & 0x0000ffff);
267         fdata->frameless = 0;
268         continue;
269
270       } else if ((op & 0xffff0000) == lr_reg) {         /* st Rx,NUM(r1) where Rx == lr */
271         fdata->lr_offset = SIGNED_SHORT (op) + offset;
272         fdata->nosavedpc = 0;
273         lr_reg = 0;
274         continue;
275
276       } else if ((op & 0xffff0000) == cr_reg) {         /* st Rx,NUM(r1) where Rx == cr */
277         fdata->cr_offset = SIGNED_SHORT (op) + offset;
278         cr_reg = 0;
279         continue;
280
281       } else if (op == 0x48000005) {                    /* bl .+4 used in -mrelocatable */
282         continue;
283
284       } else if (op == 0x48000004) {                    /* b .+4 (xlc) */
285         break;
286
287       } else if (((op & 0xffff0000) == 0x801e0000 ||    /* lwz 0,NUM(r30), used in V.4 -mrelocatable */
288                   op == 0x7fc0f214) &&                  /* add r30,r0,r30, used in V.4 -mrelocatable */
289                  lr_reg == 0x901e0000) {
290         continue;
291
292       } else if ((op & 0xffff0000) == 0x3fc00000 ||     /* addis 30,0,foo@ha, used in V.4 -mminimal-toc */
293                  (op & 0xffff0000) == 0x3bde0000) {     /* addi 30,30,foo@l */
294         continue;
295
296       } else if ((op & 0xfc000000) == 0x48000000) {     /* bl foo, to save fprs??? */
297
298         fdata->frameless = 0;
299         /* Don't skip over the subroutine call if it is not within the first
300            three instructions of the prologue.  */
301         if ((pc - orig_pc) > 8)
302           break;
303
304         op = read_memory_integer (pc+4, 4);
305
306         /* At this point, make sure this is not a trampoline function
307            (a function that simply calls another functions, and nothing else).
308            If the next is not a nop, this branch was part of the function
309            prologue. */
310
311         if (op == 0x4def7b82 || op == 0)                /* crorc 15, 15, 15 */
312           break;                                        /* don't skip over this branch */
313
314         continue;
315
316       /* update stack pointer */
317       } else if ((op & 0xffff0000) == 0x94210000) {     /* stu r1,NUM(r1) */
318         fdata->frameless = 0;
319         fdata->offset = SIGNED_SHORT (op);
320         offset = fdata->offset;
321         continue;
322
323       } else if (op == 0x7c21016e) {                    /* stwux 1,1,0 */
324         fdata->frameless = 0;
325         offset = fdata->offset;
326         continue;
327
328       /* Load up minimal toc pointer */
329       } else if ((op >> 22) == 0x20f
330                  && ! minimal_toc_loaded) {     /* l r31,... or l r30,... */
331         minimal_toc_loaded = 1;
332         continue;
333
334       /* store parameters in stack */
335       } else if ((op & 0xfc1f0000) == 0x90010000 ||     /* st rx,NUM(r1) */
336                  (op & 0xfc1f0000) == 0xd8010000 ||     /* stfd Rx,NUM(r1) */
337                  (op & 0xfc1f0000) == 0xfc010000) {     /* frsp, fp?,NUM(r1) */
338         continue;
339
340       /* store parameters in stack via frame pointer */
341       } else if (framep &&
342                  ((op & 0xfc1f0000) == 0x901f0000 ||    /* st rx,NUM(r1) */
343                  (op & 0xfc1f0000) == 0xd81f0000 ||     /* stfd Rx,NUM(r1) */
344                  (op & 0xfc1f0000) == 0xfc1f0000)) {    /* frsp, fp?,NUM(r1) */
345         continue;
346
347       /* Set up frame pointer */
348       } else if (op == 0x603f0000                       /* oril r31, r1, 0x0 */
349                  || op == 0x7c3f0b78) {                 /* mr r31, r1 */
350         fdata->frameless = 0;
351         framep = 1;
352         fdata->alloca_reg = 31;
353         continue;
354
355       /* Another way to set up the frame pointer.  */
356       } else if ((op & 0xfc1fffff) == 0x38010000) {     /* addi rX, r1, 0x0 */
357         fdata->frameless = 0;
358         framep = 1;
359         fdata->alloca_reg = (op & ~0x38010000) >> 21;
360         continue;
361
362       } else {
363         break;
364       }
365     }
366
367 #if 0
368 /* I have problems with skipping over __main() that I need to address
369  * sometime. Previously, I used to use misc_function_vector which
370  * didn't work as well as I wanted to be.  -MGO */
371
372   /* If the first thing after skipping a prolog is a branch to a function,
373      this might be a call to an initializer in main(), introduced by gcc2.
374      We'd like to skip over it as well. Fortunately, xlc does some extra
375      work before calling a function right after a prologue, thus we can
376      single out such gcc2 behaviour. */
377      
378
379   if ((op & 0xfc000001) == 0x48000001) { /* bl foo, an initializer function? */
380     op = read_memory_integer (pc+4, 4);
381
382     if (op == 0x4def7b82) {             /* cror 0xf, 0xf, 0xf (nop) */
383
384       /* check and see if we are in main. If so, skip over this initializer
385          function as well. */
386
387       tmp = find_pc_misc_function (pc);
388       if (tmp >= 0 && STREQ (misc_function_vector [tmp].name, "main"))
389         return pc + 8;
390     }
391   }
392 #endif /* 0 */
393  
394   fdata->offset = - fdata->offset;
395   return pc;
396 }
397
398
399 /*************************************************************************
400   Support for creating pushind a dummy frame into the stack, and popping
401   frames, etc. 
402 *************************************************************************/
403
404 /* The total size of dummy frame is 436, which is;
405
406         32 gpr's        - 128 bytes
407         32 fpr's        - 256   "
408         7  the rest     - 28    "
409         and 24 extra bytes for the callee's link area. The last 24 bytes
410         for the link area might not be necessary, since it will be taken
411         care of by push_arguments(). */
412
413 #define DUMMY_FRAME_SIZE 436
414
415 #define DUMMY_FRAME_ADDR_SIZE 10
416
417 /* Make sure you initialize these in somewhere, in case gdb gives up what it
418    was debugging and starts debugging something else. FIXMEibm */
419
420 static int dummy_frame_count = 0;
421 static int dummy_frame_size = 0;
422 static CORE_ADDR *dummy_frame_addr = 0;
423
424 extern int stop_stack_dummy;
425
426 /* push a dummy frame into stack, save all register. Currently we are saving
427    only gpr's and fpr's, which is not good enough! FIXMEmgo */
428    
429 void
430 push_dummy_frame ()
431 {
432   /* stack pointer.  */
433   CORE_ADDR sp;
434   /* Same thing, target byte order.  */
435   char sp_targ[4];
436
437   /* link register.  */
438   CORE_ADDR pc;
439   /* Same thing, target byte order.  */
440   char pc_targ[4];
441   
442   /* Needed to figure out where to save the dummy link area.
443      FIXME: There should be an easier way to do this, no?  tiemann 9/9/95.  */
444   struct rs6000_framedata fdata;
445
446   int ii;
447
448   target_fetch_registers (-1);
449
450   if (dummy_frame_count >= dummy_frame_size) {
451     dummy_frame_size += DUMMY_FRAME_ADDR_SIZE;
452     if (dummy_frame_addr)
453       dummy_frame_addr = (CORE_ADDR*) xrealloc 
454         (dummy_frame_addr, sizeof(CORE_ADDR) * (dummy_frame_size));
455     else
456       dummy_frame_addr = (CORE_ADDR*) 
457         xmalloc (sizeof(CORE_ADDR) * (dummy_frame_size));
458   }
459   
460   sp = read_register(SP_REGNUM);
461   pc = read_register(PC_REGNUM);
462   store_address (pc_targ, 4, pc);
463
464   (void) skip_prologue (get_pc_function_start (pc) + FUNCTION_START_OFFSET, &fdata);
465
466   dummy_frame_addr [dummy_frame_count++] = sp;
467
468   /* Be careful! If the stack pointer is not decremented first, then kernel 
469      thinks he is free to use the space underneath it. And kernel actually 
470      uses that area for IPC purposes when executing ptrace(2) calls. So 
471      before writing register values into the new frame, decrement and update
472      %sp first in order to secure your frame. */
473
474   /* FIXME: We don't check if the stack really has this much space.
475      This is a problem on the ppc simulator (which only grants one page
476      (4096 bytes) by default.  */
477
478   write_register (SP_REGNUM, sp-DUMMY_FRAME_SIZE);
479
480   /* gdb relies on the state of current_frame. We'd better update it,
481      otherwise things like do_registers_info() wouldn't work properly! */
482
483   flush_cached_frames ();
484
485   /* save program counter in link register's space. */
486   write_memory (sp + (fdata.lr_offset ? fdata.lr_offset : DEFAULT_LR_SAVE),
487                 pc_targ, 4);
488
489   /* save all floating point and general purpose registers here. */
490
491   /* fpr's, f0..f31 */
492   for (ii = 0; ii < 32; ++ii)
493     write_memory (sp-8-(ii*8), &registers[REGISTER_BYTE (31-ii+FP0_REGNUM)], 8);
494
495   /* gpr's r0..r31 */
496   for (ii=1; ii <=32; ++ii)
497     write_memory (sp-256-(ii*4), &registers[REGISTER_BYTE (32-ii)], 4);
498
499   /* so far, 32*2 + 32 words = 384 bytes have been written. 
500      7 extra registers in our register set: pc, ps, cnd, lr, cnt, xer, mq */
501
502   for (ii=1; ii <= (LAST_SP_REGNUM-FIRST_SP_REGNUM+1); ++ii) {
503     write_memory (sp-384-(ii*4), 
504                &registers[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4);
505   }
506
507   /* Save sp or so called back chain right here. */
508   store_address (sp_targ, 4, sp);
509   write_memory (sp-DUMMY_FRAME_SIZE, sp_targ, 4);
510   sp -= DUMMY_FRAME_SIZE;
511
512   /* And finally, this is the back chain. */
513   write_memory (sp+8, pc_targ, 4);
514 }
515
516
517 /* Pop a dummy frame.
518
519    In rs6000 when we push a dummy frame, we save all of the registers. This
520    is usually done before user calls a function explicitly.
521
522    After a dummy frame is pushed, some instructions are copied into stack,
523    and stack pointer is decremented even more.  Since we don't have a frame
524    pointer to get back to the parent frame of the dummy, we start having
525    trouble poping it.  Therefore, we keep a dummy frame stack, keeping
526    addresses of dummy frames as such.  When poping happens and when we
527    detect that was a dummy frame, we pop it back to its parent by using
528    dummy frame stack (`dummy_frame_addr' array). 
529
530 FIXME:  This whole concept is broken.  You should be able to detect
531 a dummy stack frame *on the user's stack itself*.  When you do,
532 then you know the format of that stack frame -- including its
533 saved SP register!  There should *not* be a separate stack in the
534 GDB process that keeps track of these dummy frames!  -- gnu@cygnus.com Aug92
535  */
536    
537 pop_dummy_frame ()
538 {
539   CORE_ADDR sp, pc;
540   int ii;
541   sp = dummy_frame_addr [--dummy_frame_count];
542
543   /* restore all fpr's. */
544   for (ii = 1; ii <= 32; ++ii)
545     read_memory (sp-(ii*8), &registers[REGISTER_BYTE (32-ii+FP0_REGNUM)], 8);
546
547   /* restore all gpr's */
548   for (ii=1; ii <= 32; ++ii) {
549     read_memory (sp-256-(ii*4), &registers[REGISTER_BYTE (32-ii)], 4);
550   }
551
552   /* restore the rest of the registers. */
553   for (ii=1; ii <=(LAST_SP_REGNUM-FIRST_SP_REGNUM+1); ++ii)
554     read_memory (sp-384-(ii*4),
555                 &registers[REGISTER_BYTE (FPLAST_REGNUM + ii)], 4);
556
557   read_memory (sp-(DUMMY_FRAME_SIZE-8), 
558                &registers [REGISTER_BYTE(PC_REGNUM)], 4);
559
560   /* when a dummy frame was being pushed, we had to decrement %sp first, in 
561      order to secure astack space. Thus, saved %sp (or %r1) value, is not the
562      one we should restore. Change it with the one we need. */
563
564   *(int*)&registers [REGISTER_BYTE(FP_REGNUM)] = sp;
565
566   /* Now we can restore all registers. */
567
568   target_store_registers (-1);
569   pc = read_pc ();
570   flush_cached_frames ();
571 }
572
573
574 /* pop the innermost frame, go back to the caller. */
575
576 void
577 pop_frame ()
578 {
579   CORE_ADDR pc, lr, sp, prev_sp;                /* %pc, %lr, %sp */
580   struct rs6000_framedata fdata;
581   struct frame_info *frame = get_current_frame ();
582   int addr, ii;
583
584   pc = read_pc ();
585   sp = FRAME_FP (frame);
586
587   if (stop_stack_dummy && dummy_frame_count) {
588     pop_dummy_frame ();
589     return;
590   }
591
592   /* Make sure that all registers are valid.  */
593   read_register_bytes (0, NULL, REGISTER_BYTES);
594
595   /* figure out previous %pc value. If the function is frameless, it is 
596      still in the link register, otherwise walk the frames and retrieve the
597      saved %pc value in the previous frame. */
598
599   addr = get_pc_function_start (frame->pc) + FUNCTION_START_OFFSET;
600   (void) skip_prologue (addr, &fdata);
601
602   if (fdata.frameless)
603     prev_sp = sp;
604   else
605     prev_sp = read_memory_integer (sp, 4);
606   if (fdata.lr_offset == 0)
607     lr = read_register (LR_REGNUM);
608   else
609     lr = read_memory_integer (prev_sp + fdata.lr_offset, 4);
610
611   /* reset %pc value. */
612   write_register (PC_REGNUM, lr);
613
614   /* reset register values if any was saved earlier. */
615   addr = prev_sp - fdata.offset;
616
617   if (fdata.saved_gpr != -1)
618     for (ii = fdata.saved_gpr; ii <= 31; ++ii) {
619       read_memory (addr, &registers [REGISTER_BYTE (ii)], 4);
620       addr += 4;
621     }
622
623   if (fdata.saved_fpr != -1)
624     for (ii = fdata.saved_fpr; ii <= 31; ++ii) {
625       read_memory (addr, &registers [REGISTER_BYTE (ii+FP0_REGNUM)], 8);
626       addr += 8;
627   }
628
629   write_register (SP_REGNUM, prev_sp);
630   target_store_registers (-1);
631   flush_cached_frames ();
632 }
633
634 /* fixup the call sequence of a dummy function, with the real function address.
635    its argumets will be passed by gdb. */
636
637 void
638 fix_call_dummy (dummyname, pc, fun, nargs, type)
639      char *dummyname;
640      CORE_ADDR pc;
641      CORE_ADDR fun;
642      int nargs;                                 /* not used */
643      int type;                                  /* not used */
644 {
645 #define TOC_ADDR_OFFSET         20
646 #define TARGET_ADDR_OFFSET      28
647
648   int ii;
649   CORE_ADDR target_addr;
650   CORE_ADDR tocvalue;
651
652   target_addr = fun;
653   tocvalue = find_toc_address (target_addr);
654
655   ii  = *(int*)((char*)dummyname + TOC_ADDR_OFFSET);
656   ii = (ii & 0xffff0000) | (tocvalue >> 16);
657   *(int*)((char*)dummyname + TOC_ADDR_OFFSET) = ii;
658
659   ii  = *(int*)((char*)dummyname + TOC_ADDR_OFFSET+4);
660   ii = (ii & 0xffff0000) | (tocvalue & 0x0000ffff);
661   *(int*)((char*)dummyname + TOC_ADDR_OFFSET+4) = ii;
662
663   ii  = *(int*)((char*)dummyname + TARGET_ADDR_OFFSET);
664   ii = (ii & 0xffff0000) | (target_addr >> 16);
665   *(int*)((char*)dummyname + TARGET_ADDR_OFFSET) = ii;
666
667   ii  = *(int*)((char*)dummyname + TARGET_ADDR_OFFSET+4);
668   ii = (ii & 0xffff0000) | (target_addr & 0x0000ffff);
669   *(int*)((char*)dummyname + TARGET_ADDR_OFFSET+4) = ii;
670 }
671
672 /* Pass the arguments in either registers, or in the stack. In RS6000,
673    the first eight words of the argument list (that might be less than
674    eight parameters if some parameters occupy more than one word) are
675    passed in r3..r11 registers.  float and double parameters are
676    passed in fpr's, in addition to that. Rest of the parameters if any
677    are passed in user stack. There might be cases in which half of the
678    parameter is copied into registers, the other half is pushed into
679    stack.
680
681    If the function is returning a structure, then the return address is passed
682    in r3, then the first 7 words of the parametes can be passed in registers,
683    starting from r4. */
684
685 CORE_ADDR
686 push_arguments (nargs, args, sp, struct_return, struct_addr)
687      int nargs;
688      value_ptr *args;
689      CORE_ADDR sp;
690      int struct_return;
691      CORE_ADDR struct_addr;
692 {
693   int ii, len;
694   int argno;                                    /* current argument number */
695   int argbytes;                                 /* current argument byte */
696   char tmp_buffer [50];
697   int f_argno = 0;                              /* current floating point argno */
698   value_ptr arg;
699   struct type *type;
700
701   CORE_ADDR saved_sp, pc;
702
703   if ( dummy_frame_count <= 0)
704     printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n");
705
706   /* The first eight words of ther arguments are passed in registers. Copy
707      them appropriately.
708
709      If the function is returning a `struct', then the first word (which 
710      will be passed in r3) is used for struct return address. In that
711      case we should advance one word and start from r4 register to copy 
712      parameters. */
713
714   ii =  struct_return ? 1 : 0;
715
716   for (argno=0, argbytes=0; argno < nargs && ii<8; ++ii) {
717
718     arg = args[argno];
719     type = check_typedef (VALUE_TYPE (arg));
720     len = TYPE_LENGTH (type);
721
722     if (TYPE_CODE (type) == TYPE_CODE_FLT) {
723
724       /* floating point arguments are passed in fpr's, as well as gpr's.
725          There are 13 fpr's reserved for passing parameters. At this point
726          there is no way we would run out of them. */
727
728       if (len > 8)
729         printf_unfiltered (
730 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
731
732       memcpy (&registers[REGISTER_BYTE(FP0_REGNUM + 1 + f_argno)], VALUE_CONTENTS (arg), 
733          len);
734       ++f_argno;
735     }
736
737     if (len > 4) {
738
739       /* Argument takes more than one register. */
740       while (argbytes < len) {
741
742         *(int*)&registers[REGISTER_BYTE(ii+3)] = 0;
743         memcpy (&registers[REGISTER_BYTE(ii+3)], 
744                          ((char*)VALUE_CONTENTS (arg))+argbytes, 
745                         (len - argbytes) > 4 ? 4 : len - argbytes);
746         ++ii, argbytes += 4;
747
748         if (ii >= 8)
749           goto ran_out_of_registers_for_arguments;
750       }
751       argbytes = 0;
752       --ii;
753     }
754     else {        /* Argument can fit in one register. No problem. */
755       *(int*)&registers[REGISTER_BYTE(ii+3)] = 0;
756       memcpy (&registers[REGISTER_BYTE(ii+3)], VALUE_CONTENTS (arg), len);
757     }
758     ++argno;
759   }
760
761 ran_out_of_registers_for_arguments:
762
763   /* location for 8 parameters are always reserved. */
764   sp -= 4 * 8;
765
766   /* another six words for back chain, TOC register, link register, etc. */
767   sp -= 24;
768
769   /* if there are more arguments, allocate space for them in 
770      the stack, then push them starting from the ninth one. */
771
772   if ((argno < nargs) || argbytes) {
773     int space = 0, jj;
774
775     if (argbytes) {
776       space += ((len - argbytes + 3) & -4);
777       jj = argno + 1;
778     }
779     else
780       jj = argno;
781
782     for (; jj < nargs; ++jj) {
783       value_ptr val = args[jj];
784       space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4;
785     }
786
787     /* add location required for the rest of the parameters */
788     space = (space + 7) & -8;
789     sp -= space;
790
791     /* This is another instance we need to be concerned about securing our
792         stack space. If we write anything underneath %sp (r1), we might conflict
793         with the kernel who thinks he is free to use this area. So, update %sp
794         first before doing anything else. */
795
796     write_register (SP_REGNUM, sp);
797
798     /* if the last argument copied into the registers didn't fit there 
799        completely, push the rest of it into stack. */
800
801     if (argbytes) {
802       write_memory (
803         sp+24+(ii*4), ((char*)VALUE_CONTENTS (arg))+argbytes, len - argbytes);
804       ++argno;
805       ii += ((len - argbytes + 3) & -4) / 4;
806     }
807
808     /* push the rest of the arguments into stack. */
809     for (; argno < nargs; ++argno) {
810
811       arg = args[argno];
812       type = check_typedef (VALUE_TYPE (arg));
813       len = TYPE_LENGTH (type);
814
815
816       /* float types should be passed in fpr's, as well as in the stack. */
817       if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13) {
818
819         if (len > 8)
820           printf_unfiltered (
821 "Fatal Error: a floating point parameter #%d with a size > 8 is found!\n", argno);
822
823         memcpy (&registers[REGISTER_BYTE(FP0_REGNUM + 1 + f_argno)], VALUE_CONTENTS (arg), 
824            len);
825         ++f_argno;
826       }
827
828       write_memory (sp+24+(ii*4), (char *) VALUE_CONTENTS (arg), len);
829       ii += ((len + 3) & -4) / 4;
830     }
831   }
832   else
833     /* Secure stack areas first, before doing anything else. */
834     write_register (SP_REGNUM, sp);
835
836   saved_sp = dummy_frame_addr [dummy_frame_count - 1];
837   read_memory (saved_sp, tmp_buffer, 24);
838   write_memory (sp, tmp_buffer, 24);
839
840   /* set back chain properly */
841   store_address (tmp_buffer, 4, saved_sp);
842   write_memory (sp, tmp_buffer, 4);
843
844   target_store_registers (-1);
845   return sp;
846 }
847
848 /* a given return value in `regbuf' with a type `valtype', extract and copy its
849    value into `valbuf' */
850
851 void
852 extract_return_value (valtype, regbuf, valbuf)
853      struct type *valtype;
854      char regbuf[REGISTER_BYTES];
855      char *valbuf;
856 {
857   int offset = 0;
858
859   if (TYPE_CODE (valtype) == TYPE_CODE_FLT) {
860
861     double dd; float ff;
862     /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
863        We need to truncate the return value into float size (4 byte) if
864        necessary. */
865
866     if (TYPE_LENGTH (valtype) > 4)              /* this is a double */
867       memcpy (valbuf, &regbuf[REGISTER_BYTE (FP0_REGNUM + 1)],
868                                                 TYPE_LENGTH (valtype));
869     else {              /* float */
870       memcpy (&dd, &regbuf[REGISTER_BYTE (FP0_REGNUM + 1)], 8);
871       ff = (float)dd;
872       memcpy (valbuf, &ff, sizeof(float));
873     }
874   }
875   else {
876     /* return value is copied starting from r3. */
877     if (TARGET_BYTE_ORDER == BIG_ENDIAN
878         && TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (3))
879       offset = REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
880
881     memcpy (valbuf, regbuf + REGISTER_BYTE (3) + offset,
882             TYPE_LENGTH (valtype));
883   }
884 }
885
886
887 /* keep structure return address in this variable.
888    FIXME:  This is a horrid kludge which should not be allowed to continue
889    living.  This only allows a single nested call to a structure-returning
890    function.  Come on, guys!  -- gnu@cygnus.com, Aug 92  */
891
892 CORE_ADDR rs6000_struct_return_address;
893
894
895 /* Indirect function calls use a piece of trampoline code to do context
896    switching, i.e. to set the new TOC table. Skip such code if we are on
897    its first instruction (as when we have single-stepped to here). 
898    Also skip shared library trampoline code (which is different from
899    indirect function call trampolines).
900    Result is desired PC to step until, or NULL if we are not in
901    trampoline code.  */
902
903 CORE_ADDR
904 skip_trampoline_code (pc)
905      CORE_ADDR pc;
906 {
907   register unsigned int ii, op;
908   CORE_ADDR solib_target_pc;
909
910   static unsigned trampoline_code[] = {
911         0x800b0000,                     /*     l   r0,0x0(r11)  */
912         0x90410014,                     /*    st   r2,0x14(r1)  */
913         0x7c0903a6,                     /* mtctr   r0           */
914         0x804b0004,                     /*     l   r2,0x4(r11)  */
915         0x816b0008,                     /*     l  r11,0x8(r11)  */
916         0x4e800420,                     /*  bctr                */
917         0x4e800020,                     /*    br                */
918         0
919   };
920
921   /* If pc is in a shared library trampoline, return its target.  */
922   solib_target_pc = find_solib_trampoline_target (pc);
923   if (solib_target_pc)
924     return solib_target_pc;
925
926   for (ii=0; trampoline_code[ii]; ++ii) {
927     op  = read_memory_integer (pc + (ii*4), 4);
928     if (op != trampoline_code [ii])
929       return 0;
930   }
931   ii = read_register (11);              /* r11 holds destination addr   */
932   pc = read_memory_integer (ii, 4);     /* (r11) value                  */
933   return pc;
934 }
935
936 /* Determines whether the function FI has a frame on the stack or not.  */
937
938 int
939 frameless_function_invocation (fi)
940      struct frame_info *fi;
941 {
942   CORE_ADDR func_start;
943   struct rs6000_framedata fdata;
944
945   if (fi->next != NULL)
946     /* Don't even think about framelessness except on the innermost frame.  */
947     /* FIXME: Can also be frameless if fi->next->signal_handler_caller (if
948        a signal happens while executing in a frameless function).  */
949     return 0;
950   
951   func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET;
952
953   /* If we failed to find the start of the function, it is a mistake
954      to inspect the instructions. */
955
956   if (!func_start)
957     return 0;
958
959   (void) skip_prologue (func_start, &fdata);
960   return fdata.frameless;
961 }
962
963 /* Return the PC saved in a frame */
964
965 unsigned long
966 frame_saved_pc (fi)
967      struct frame_info *fi;
968 {
969   CORE_ADDR func_start;
970   struct rs6000_framedata fdata;
971   int frameless;
972
973   if (fi->signal_handler_caller)
974     return read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, 4);
975
976   func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET;
977
978   /* If we failed to find the start of the function, it is a mistake
979      to inspect the instructions. */
980   if (!func_start)
981     return 0;
982
983   (void) skip_prologue (func_start, &fdata);
984
985   if (fdata.lr_offset == 0 && fi->next != NULL)
986     return read_memory_integer (rs6000_frame_chain (fi) + DEFAULT_LR_SAVE, 4);
987
988   if (fdata.lr_offset == 0)
989     return read_register (LR_REGNUM);
990
991   return read_memory_integer (rs6000_frame_chain (fi) + fdata.lr_offset, 4);
992 }
993
994 /* If saved registers of frame FI are not known yet, read and cache them.
995    &FDATAP contains rs6000_framedata; TDATAP can be NULL,
996    in which case the framedata are read.  */
997
998 static void
999 frame_get_cache_fsr (fi, fdatap)
1000      struct frame_info *fi;
1001      struct rs6000_framedata *fdatap;
1002 {
1003   int ii;
1004   CORE_ADDR frame_addr; 
1005   struct rs6000_framedata work_fdata;
1006
1007   if (fi->cache_fsr)
1008     return;
1009   
1010   if (fdatap == NULL) {
1011     fdatap = &work_fdata;
1012     (void) skip_prologue (get_pc_function_start (fi->pc), fdatap);
1013   }
1014
1015   fi->cache_fsr = (struct frame_saved_regs *)
1016       obstack_alloc (&frame_cache_obstack, sizeof (struct frame_saved_regs));
1017   memset (fi->cache_fsr, '\0', sizeof (struct frame_saved_regs));
1018
1019   if (fi->prev && fi->prev->frame)
1020     frame_addr = fi->prev->frame;
1021   else
1022     frame_addr = read_memory_integer (fi->frame, 4);
1023   
1024   /* if != -1, fdatap->saved_fpr is the smallest number of saved_fpr.
1025      All fpr's from saved_fpr to fp31 are saved.  */
1026
1027   if (fdatap->saved_fpr >= 0) {
1028     int fpr_offset = frame_addr + fdatap->fpr_offset;
1029     for (ii = fdatap->saved_fpr; ii < 32; ii++) {
1030       fi->cache_fsr->regs [FP0_REGNUM + ii] = fpr_offset;
1031       fpr_offset += 8;
1032     }
1033   }
1034
1035   /* if != -1, fdatap->saved_gpr is the smallest number of saved_gpr.
1036      All gpr's from saved_gpr to gpr31 are saved.  */
1037   
1038   if (fdatap->saved_gpr >= 0) {
1039     int gpr_offset = frame_addr + fdatap->gpr_offset;
1040     for (ii = fdatap->saved_gpr; ii < 32; ii++) {
1041       fi->cache_fsr->regs [ii] = gpr_offset;
1042       gpr_offset += 4;
1043     }
1044   }
1045
1046   /* If != 0, fdatap->cr_offset is the offset from the frame that holds
1047      the CR.  */
1048   if (fdatap->cr_offset != 0)
1049     fi->cache_fsr->regs [CR_REGNUM] = frame_addr + fdatap->cr_offset;
1050
1051   /* If != 0, fdatap->lr_offset is the offset from the frame that holds
1052      the LR.  */
1053   if (fdatap->lr_offset != 0)
1054     fi->cache_fsr->regs [LR_REGNUM] = frame_addr + fdatap->lr_offset;
1055 }
1056
1057 /* Return the address of a frame. This is the inital %sp value when the frame
1058    was first allocated. For functions calling alloca(), it might be saved in
1059    an alloca register. */
1060
1061 CORE_ADDR
1062 frame_initial_stack_address (fi)
1063      struct frame_info *fi;
1064 {
1065   CORE_ADDR tmpaddr;
1066   struct rs6000_framedata fdata;
1067   struct frame_info *callee_fi;
1068
1069   /* if the initial stack pointer (frame address) of this frame is known,
1070      just return it. */
1071
1072   if (fi->initial_sp)
1073     return fi->initial_sp;
1074
1075   /* find out if this function is using an alloca register.. */
1076
1077   (void) skip_prologue (get_pc_function_start (fi->pc), &fdata);
1078
1079   /* if saved registers of this frame are not known yet, read and cache them. */
1080
1081   if (!fi->cache_fsr)
1082     frame_get_cache_fsr (fi, &fdata);
1083
1084   /* If no alloca register used, then fi->frame is the value of the %sp for
1085      this frame, and it is good enough. */
1086
1087   if (fdata.alloca_reg < 0) {
1088     fi->initial_sp = fi->frame;
1089     return fi->initial_sp;
1090   }
1091
1092   /* This function has an alloca register. If this is the top-most frame
1093      (with the lowest address), the value in alloca register is good. */
1094
1095   if (!fi->next)
1096     return fi->initial_sp = read_register (fdata.alloca_reg);     
1097
1098   /* Otherwise, this is a caller frame. Callee has usually already saved
1099      registers, but there are exceptions (such as when the callee
1100      has no parameters). Find the address in which caller's alloca
1101      register is saved. */
1102
1103   for (callee_fi = fi->next; callee_fi; callee_fi = callee_fi->next) {
1104
1105     if (!callee_fi->cache_fsr)
1106       frame_get_cache_fsr (callee_fi, NULL);
1107
1108     /* this is the address in which alloca register is saved. */
1109
1110     tmpaddr = callee_fi->cache_fsr->regs [fdata.alloca_reg];
1111     if (tmpaddr) {
1112       fi->initial_sp = read_memory_integer (tmpaddr, 4); 
1113       return fi->initial_sp;
1114     }
1115
1116     /* Go look into deeper levels of the frame chain to see if any one of
1117        the callees has saved alloca register. */
1118   }
1119
1120   /* If alloca register was not saved, by the callee (or any of its callees)
1121      then the value in the register is still good. */
1122
1123   return fi->initial_sp = read_register (fdata.alloca_reg);     
1124 }
1125
1126 CORE_ADDR
1127 rs6000_frame_chain (thisframe)
1128      struct frame_info *thisframe;
1129 {
1130   CORE_ADDR fp;
1131   if (inside_entry_file ((thisframe)->pc))
1132     return 0;
1133   if (thisframe->signal_handler_caller)
1134     fp = read_memory_integer (thisframe->frame + SIG_FRAME_FP_OFFSET, 4);
1135   else
1136     fp = read_memory_integer ((thisframe)->frame, 4);
1137
1138   return fp;
1139 }
1140 \f
1141 /* Keep an array of load segment information and their TOC table addresses.
1142    This info will be useful when calling a shared library function by hand. */
1143    
1144 struct loadinfo {
1145   CORE_ADDR textorg, dataorg;
1146   unsigned long toc_offset;
1147 };
1148
1149 #define LOADINFOLEN     10
1150
1151 static  struct loadinfo *loadinfo = NULL;
1152 static  int     loadinfolen = 0;
1153 static  int     loadinfotocindex = 0;
1154 static  int     loadinfotextindex = 0;
1155
1156
1157 void
1158 xcoff_init_loadinfo ()
1159 {
1160   loadinfotocindex = 0;
1161   loadinfotextindex = 0;
1162
1163   if (loadinfolen == 0) {
1164     loadinfo = (struct loadinfo *)
1165                xmalloc (sizeof (struct loadinfo) * LOADINFOLEN);
1166     loadinfolen = LOADINFOLEN;
1167   }
1168 }
1169
1170
1171 /* FIXME -- this is never called!  */
1172 void
1173 free_loadinfo ()
1174 {
1175   if (loadinfo)
1176     free (loadinfo);
1177   loadinfo = NULL;
1178   loadinfolen = 0;
1179   loadinfotocindex = 0;
1180   loadinfotextindex = 0;
1181 }
1182
1183 /* this is called from xcoffread.c */
1184
1185 void
1186 xcoff_add_toc_to_loadinfo (tocoff)
1187      unsigned long tocoff;
1188 {
1189   while (loadinfotocindex >= loadinfolen) {
1190     loadinfolen += LOADINFOLEN;
1191     loadinfo = (struct loadinfo *)
1192                xrealloc (loadinfo, sizeof(struct loadinfo) * loadinfolen);
1193   }
1194   loadinfo [loadinfotocindex++].toc_offset = tocoff;
1195 }
1196
1197 void
1198 add_text_to_loadinfo (textaddr, dataaddr)
1199      CORE_ADDR textaddr;
1200      CORE_ADDR dataaddr;
1201 {
1202   while (loadinfotextindex >= loadinfolen) {
1203     loadinfolen += LOADINFOLEN;
1204     loadinfo = (struct loadinfo *)
1205                xrealloc (loadinfo, sizeof(struct loadinfo) * loadinfolen);
1206   }
1207   loadinfo [loadinfotextindex].textorg = textaddr;
1208   loadinfo [loadinfotextindex].dataorg = dataaddr;
1209   ++loadinfotextindex;
1210 }
1211
1212
1213 /* Note that this assumes that the "textorg" and "dataorg" elements of
1214    a member of this array are correlated with the "toc_offset" element
1215    of the same member.  This is taken care of because the loops which
1216    assign the former (in xcoff_relocate_symtab or xcoff_relocate_core)
1217    and the latter (in scan_xcoff_symtab, via vmap_symtab, in
1218    vmap_ldinfo or xcoff_relocate_core) traverse the same objfiles in
1219    the same order.  */
1220
1221 static CORE_ADDR
1222 find_toc_address (pc)
1223      CORE_ADDR pc;
1224 {
1225   int ii, toc_entry, tocbase = 0;
1226
1227   toc_entry = -1;
1228   for (ii=0; ii < loadinfotextindex; ++ii)
1229     if (pc > loadinfo[ii].textorg && loadinfo[ii].textorg > tocbase) {
1230       toc_entry = ii;
1231       tocbase = loadinfo[ii].textorg;
1232     }
1233
1234   if (toc_entry == -1)
1235     error ("Unable to find TOC entry for pc 0x%x\n", pc);
1236   return loadinfo[toc_entry].dataorg + loadinfo[toc_entry].toc_offset;
1237 }
1238
1239 /* Return nonzero if ADDR (a function pointer) is in the data space and
1240    is therefore a special function pointer.  */
1241
1242 int
1243 is_magic_function_pointer (addr)
1244      CORE_ADDR addr;
1245 {
1246   struct obj_section *s;
1247
1248   s = find_pc_section (addr);
1249   if (s && s->the_bfd_section->flags & SEC_CODE)
1250     return 0;
1251   else
1252     return 1;
1253 }
1254
1255 #ifdef GDB_TARGET_POWERPC
1256 int
1257 gdb_print_insn_powerpc (memaddr, info)
1258      bfd_vma memaddr;
1259      disassemble_info *info;
1260 {
1261   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1262     return print_insn_big_powerpc (memaddr, info);
1263   else
1264     return print_insn_little_powerpc (memaddr, info);
1265 }
1266 #endif
1267
1268 void
1269 _initialize_rs6000_tdep ()
1270 {
1271 #ifndef ELF_OBJECT_FORMAT
1272   {
1273     extern void (*xcoff_add_toc_to_loadinfo_hook) PARAMS ((unsigned long));
1274     extern void (*xcoff_init_loadinfo_hook) PARAMS ((void));
1275
1276     /* Initialize hook in xcoffread for recording the toc offset value
1277        of a symbol table into the ldinfo structure, for native rs6000
1278        config. */
1279     xcoff_add_toc_to_loadinfo_hook = &xcoff_add_toc_to_loadinfo;
1280
1281     /* Initialize hook in xcoffread for calling xcoff_init_loadinfo in
1282        a native rs6000 config. */
1283     xcoff_init_loadinfo_hook = &xcoff_init_loadinfo;
1284   }
1285 #endif /* ELF_OBJECT_FORMAT */
1286
1287   /* FIXME, this should not be decided via ifdef. */
1288 #ifdef GDB_TARGET_POWERPC
1289   tm_print_insn = gdb_print_insn_powerpc;
1290 #else
1291   tm_print_insn = print_insn_rs6000;
1292 #endif
1293 }