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