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