* Makefile.in: Make check depend on all.
[deliverable/binutils-gdb.git] / gdb / rs6000-tdep.c
CommitLineData
41abdfbd 1/* Target-dependent code for GDB, the GNU debugger.
ecf4059f 2 Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
41abdfbd
JG
3
4This file is part of GDB.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
41abdfbd 20#include "defs.h"
41abdfbd
JG
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
41abdfbd
JG
33#include <a.out.h>
34#include <sys/file.h>
35#include <sys/stat.h>
36#include <sys/core.h>
ecf4059f 37#include <sys/ldr.h>
41abdfbd 38
d6434f39
JG
39
40extern struct obstack frame_cache_obstack;
41
41abdfbd 42extern int errno;
41abdfbd
JG
43
44/* Nonzero if we just simulated a single step break. */
45int one_stepped;
46
41abdfbd
JG
47/* Breakpoint shadows for the single step instructions will be kept here. */
48
49static struct sstep_breaks {
50 int address;
51 int data;
52} stepBreaks[2];
53
ecf4059f
JG
54/* Static function prototypes */
55
56static void
57add_text_to_loadinfo PARAMS ((CORE_ADDR textaddr, CORE_ADDR dataaddr));
58
59static CORE_ADDR
60find_toc_address PARAMS ((CORE_ADDR pc));
61
62static CORE_ADDR
63branch_dest PARAMS ((int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety));
64
65static void
66frame_get_cache_fsr PARAMS ((struct frame_info *fi,
67 struct aix_framedata *fdatap));
41abdfbd
JG
68
69/*
70 * Calculate the destination of a branch/jump. Return -1 if not a branch.
71 */
ecf4059f 72static CORE_ADDR
41abdfbd 73branch_dest (opcode, instr, pc, safety)
ecf4059f
JG
74 int opcode;
75 int instr;
76 CORE_ADDR pc;
77 CORE_ADDR safety;
41abdfbd
JG
78{
79 register long offset;
ecf4059f 80 CORE_ADDR dest;
41abdfbd
JG
81 int immediate;
82 int absolute;
83 int ext_op;
84
85 absolute = (int) ((instr >> 1) & 1);
86
87 switch (opcode) {
88 case 18 :
ecf4059f 89 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
41abdfbd
JG
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 }
818de002 114 return (dest < TEXT_SEGMENT_BASE) ? safety : dest;
41abdfbd
JG
115}
116
117
118
119/* AIX does not support PT_STEP. Simulate it. */
120
997cc2c0 121void
41abdfbd 122single_step (signal)
997cc2c0 123 int signal;
41abdfbd
JG
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) {
41abdfbd
JG
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
818de002
PB
142 /* Don't put two breakpoints on the same address. */
143 if (breaks[1] == breaks[0])
144 breaks[1] = -1;
145
41abdfbd
JG
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;
997cc2c0 161 } else {
41abdfbd
JG
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 }
997cc2c0 171 errno = 0; /* FIXME, don't ignore errors! */
41abdfbd 172}
41abdfbd
JG
173
174
175/* return pc value after skipping a function prologue. */
176
177skip_prologue (pc)
ecf4059f 178CORE_ADDR pc;
41abdfbd
JG
179{
180 unsigned int tmp;
ecf4059f 181 unsigned int op; /* FIXME, assumes instruction size matches host int!!! */
41abdfbd
JG
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 }
41abdfbd
JG
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);
1eeba686
PB
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 */
41abdfbd
JG
211 }
212
cdb1cc92
ILT
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
41abdfbd
JG
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) */
cdb1cc92 225 (tmp == 0x93e1)) /* st r31,NUM(r1) */
41abdfbd
JG
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
507e4004 236 /* store parameters into stack */
818de002
PB
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 }
41abdfbd
JG
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
818de002
PB
251 tmp = 0;
252 while ((op >> 16) == (0x907f + tmp)) { /* st r3, NUM(r31) */
253 pc += 4; /* st r4, NUM(r31), ... */
41abdfbd 254 op = read_memory_integer (pc, 4);
818de002 255 tmp += 0x20;
41abdfbd
JG
256 }
257 }
507e4004
PB
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
41abdfbd
JG
285 return pc;
286}
287
818de002 288
41abdfbd
JG
289/*************************************************************************
290 Support for creating pushind a dummy frame into the stack, and popping
291 frames, etc.
292*************************************************************************/
293
818de002
PB
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
41abdfbd
JG
305#define DUMMY_FRAME_ADDR_SIZE 10
306
307/* Make sure you initialize these in somewhere, in case gdb gives up what it
818de002 308 was debugging and starts debugging something else. FIXMEibm */
41abdfbd
JG
309
310static int dummy_frame_count = 0;
311static int dummy_frame_size = 0;
312static CORE_ADDR *dummy_frame_addr = 0;
313
314extern 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
ecf4059f 319void
41abdfbd
JG
320push_dummy_frame ()
321{
322 int sp, pc; /* stack pointer and link register */
323 int ii;
324
5f1c39ef 325 target_fetch_registers (-1);
6c6afbb9 326
41abdfbd
JG
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
6c6afbb9 343 thinks he is free to use the space underneath it. And kernel actually
41abdfbd
JG
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
818de002 348 write_register (SP_REGNUM, sp-DUMMY_FRAME_SIZE);
41abdfbd 349
41abdfbd
JG
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 ();
818de002 354 set_current_frame (create_new_frame (sp-DUMMY_FRAME_SIZE, pc));
41abdfbd
JG
355
356 /* save program counter in link register's space. */
357 write_memory (sp+8, &pc, 4);
358
6c6afbb9 359 /* save all floating point and general purpose registers here. */
41abdfbd
JG
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
818de002
PB
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;
41abdfbd
JG
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
818de002
PB
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).
ecf4059f
JG
398
399FIXME: This whole concept is broken. You should be able to detect
400a dummy stack frame *on the user's stack itself*. When you do,
401then you know the format of that stack frame -- including its
402saved SP register! There should *not* be a separate stack in the
d6434f39 403GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92
41abdfbd
JG
404 */
405
406pop_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
818de002
PB
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);
41abdfbd
JG
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
5f1c39ef 437 target_store_registers (-1);
41abdfbd
JG
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
ecf4059f 446void
41abdfbd
JG
447pop_frame ()
448{
449 int pc, lr, sp, prev_sp; /* %pc, %lr, %sp */
6c6afbb9 450 struct aix_framedata fdata;
41abdfbd 451 FRAME fr = get_current_frame ();
41abdfbd 452 int addr, ii;
41abdfbd
JG
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;
6c6afbb9 467 function_frame_info (addr, &fdata);
41abdfbd
JG
468
469 read_memory (sp, &prev_sp, 4);
6c6afbb9 470 if (fdata.frameless)
41abdfbd
JG
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. */
6c6afbb9 479 addr = prev_sp - fdata.offset;
41abdfbd 480
6c6afbb9
PB
481 if (fdata.saved_gpr != -1)
482 for (ii=fdata.saved_gpr; ii <= 31; ++ii) {
41abdfbd 483 read_memory (addr, &registers [REGISTER_BYTE (ii)], 4);
cdb1cc92 484 addr += 4;
41abdfbd
JG
485 }
486
6c6afbb9
PB
487 if (fdata.saved_fpr != -1)
488 for (ii=fdata.saved_fpr; ii <= 31; ++ii) {
41abdfbd
JG
489 read_memory (addr, &registers [REGISTER_BYTE (ii+FP0_REGNUM)], 8);
490 addr += 8;
491 }
492
493 write_register (SP_REGNUM, prev_sp);
5f1c39ef 494 target_store_registers (-1);
41abdfbd
JG
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
ecf4059f 503void
41abdfbd
JG
504fix_call_dummy(dummyname, pc, fun, nargs, type)
505 char *dummyname;
ecf4059f
JG
506 CORE_ADDR pc;
507 CORE_ADDR fun;
41abdfbd
JG
508 int nargs; /* not used */
509 int type; /* not used */
41abdfbd
JG
510{
511#define TOC_ADDR_OFFSET 20
512#define TARGET_ADDR_OFFSET 28
513
514 int ii;
ecf4059f
JG
515 CORE_ADDR target_addr;
516 CORE_ADDR tocvalue;
41abdfbd
JG
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
41abdfbd 539/* return information about a function frame.
6c6afbb9 540 in struct aix_frameinfo fdata:
cdb1cc92
ILT
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.
41abdfbd
JG
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.
6c6afbb9
PB
546 - alloca_reg is the number of the register used for alloca() handling.
547 Otherwise -1.
41abdfbd 548 */
ecf4059f 549void
6c6afbb9 550function_frame_info (pc, fdata)
d6434f39 551 CORE_ADDR pc;
6c6afbb9 552 struct aix_framedata *fdata;
41abdfbd
JG
553{
554 unsigned int tmp;
555 register unsigned int op;
556
6c6afbb9
PB
557 fdata->offset = 0;
558 fdata->saved_gpr = fdata->saved_fpr = fdata->alloca_reg = -1;
cdb1cc92 559 fdata->frameless = 1;
41abdfbd 560
41abdfbd
JG
561 op = read_memory_integer (pc, 4);
562 if (op == 0x7c0802a6) { /* mflr r0 */
563 pc += 4;
564 op = read_memory_integer (pc, 4);
cdb1cc92 565 fdata->nosavedpc = 0;
6c6afbb9 566 fdata->frameless = 0;
41abdfbd 567 }
cdb1cc92
ILT
568 else /* else, pc is not saved */
569 fdata->nosavedpc = 1;
41abdfbd
JG
570
571 if ((op & 0xfc00003e) == 0x7c000026) { /* mfcr Rx */
572 pc += 4;
573 op = read_memory_integer (pc, 4);
cdb1cc92 574 fdata->frameless = 0;
41abdfbd
JG
575 }
576
577 if ((op & 0xfc000000) == 0x48000000) { /* bl foo, to save fprs??? */
578 pc += 4;
579 op = read_memory_integer (pc, 4);
1eeba686
PB
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 */
cdb1cc92 588 fdata->frameless = 0;
41abdfbd
JG
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);
cdb1cc92 594 fdata->frameless = 0;
41abdfbd
JG
595 }
596
597 if ((op & 0xfc1f0000) == 0xbc010000) { /* stm Rx, NUM(r1) */
598 int tmp2;
6c6afbb9 599 fdata->saved_gpr = (op >> 21) & 0x1f;
41abdfbd
JG
600 tmp2 = op & 0xffff;
601 if (tmp2 > 0x7fff)
cdb1cc92 602 tmp2 = (~0 &~ 0xffff) | tmp2;
41abdfbd
JG
603
604 if (tmp2 < 0) {
605 tmp2 = tmp2 * -1;
6c6afbb9
PB
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;
41abdfbd 609 else
6c6afbb9 610 fdata->saved_fpr = -1;
41abdfbd 611 }
6c6afbb9
PB
612 fdata->offset = tmp2;
613 pc += 4;
614 op = read_memory_integer (pc, 4);
cdb1cc92 615 fdata->frameless = 0;
41abdfbd 616 }
6c6afbb9
PB
617
618 while (((tmp = op >> 16) == 0x9001) || /* st r0, NUM(r1) */
619 (tmp == 0x9421) || /* stu r1, NUM(r1) */
cdb1cc92 620 (tmp == 0x93e1)) /* st r31, NUM(r1) */
6c6afbb9 621 {
cdb1cc92
ILT
622 int tmp2;
623
6c6afbb9
PB
624 /* gcc takes a short cut and uses this instruction to save r31 only. */
625
cdb1cc92 626 if (tmp == 0x93e1) {
6c6afbb9
PB
627 if (fdata->offset)
628/* fatal ("Unrecognized prolog."); */
629 printf ("Unrecognized prolog!\n");
630
631 fdata->saved_gpr = 31;
cdb1cc92
ILT
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;
6c6afbb9
PB
642 }
643 pc += 4;
644 op = read_memory_integer (pc, 4);
cdb1cc92 645 fdata->frameless = 0;
6c6afbb9
PB
646 }
647
648 while ((tmp = (op >> 22)) == 0x20f) { /* l r31, ... or */
649 pc += 4; /* l r30, ... */
650 op = read_memory_integer (pc, 4);
cdb1cc92 651 fdata->frameless = 0;
6c6afbb9
PB
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);
cdb1cc92 663 fdata->frameless = 0;
6c6afbb9
PB
664 }
665
cdb1cc92 666 if (op == 0x603f0000) { /* oril r31, r1, 0x0 */
6c6afbb9 667 fdata->alloca_reg = 31;
cdb1cc92
ILT
668 fdata->frameless = 0;
669 }
41abdfbd
JG
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
685CORE_ADDR
686push_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
759ran_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
41abdfbd
JG
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 }
6c6afbb9 830 else
41abdfbd
JG
831 /* Secure stack areas first, before doing anything else. */
832 write_register (SP_REGNUM, sp);
833
41abdfbd
JG
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
5f1c39ef 840 target_store_registers (-1);
41abdfbd
JG
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
ecf4059f 847void
41abdfbd
JG
848extract_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
ecf4059f
JG
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 */
41abdfbd
JG
880
881CORE_ADDR rs6000_struct_return_address;
882
883
884/* Throw away this debugging code. FIXMEmgo. */
ecf4059f 885void
41abdfbd
JG
886print_frame(fram)
887int 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
c2e4669f
JG
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. */
41abdfbd 906
ecf4059f 907CORE_ADDR
41abdfbd 908skip_trampoline_code (pc)
ecf4059f 909CORE_ADDR pc;
41abdfbd
JG
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
ecf4059f
JG
934
935/* Determines whether the function FI has a frame on the stack or not.
cdb1cc92
ILT
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. */
ecf4059f
JG
939
940int
cdb1cc92 941frameless_function_invocation (fi, pcsaved)
ecf4059f 942struct frame_info *fi;
cdb1cc92 943int pcsaved;
ecf4059f
JG
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);
cdb1cc92 957 return pcsaved ? fdata.nosavedpc : fdata.frameless;
ecf4059f
JG
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
965static void
966frame_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
1014CORE_ADDR
1015frame_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)
cdb1cc92 1059 frame_get_cache_fsr (callee_fi, NULL);
ecf4059f
JG
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
1082xcoff_relocate_symtab (pid)
1083unsigned 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
1126struct 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
1136static struct loadinfo *loadinfo = NULL;
1137static int loadinfolen = 0;
1138static int loadinfotocindex = 0;
1139int loadinfotextindex = 0;
1140
1141
1142void
1143xcoff_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! */
1157void
1158free_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
1170void
1171xcoff_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
1182static void
1183add_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
1203static CORE_ADDR
1204find_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.112211 seconds and 4 git commands to generate.