* rs6000-tdep.c (push_arguments): Remove unused variable "pc".
[deliverable/binutils-gdb.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! -- gnu@cygnus.com 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! -- gnu@cygnus.com, 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.079576 seconds and 5 git commands to generate.