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