* config/alpha/tm-fbsd.h (FRAME_CHAIN_VALID): Remove.
[deliverable/binutils-gdb.git] / gdb / fr30-tdep.c
CommitLineData
c906108c 1/* Target-dependent code for the Fujitsu FR30.
b6ba6518 2 Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
c906108c 3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
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.
c906108c 10
c5aa993b
JM
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.
c906108c 15
c5aa993b
JM
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., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
c906108c
SS
20
21#include "defs.h"
22#include "frame.h"
23#include "inferior.h"
24#include "obstack.h"
25#include "target.h"
26#include "value.h"
27#include "bfd.h"
28#include "gdb_string.h"
29#include "gdbcore.h"
30#include "symfile.h"
4e052eda 31#include "regcache.h"
c906108c 32
392a587b
JM
33/* An expression that tells us whether the function invocation represented
34 by FI does not have a frame on the stack associated with it. */
35int
fba45db2 36fr30_frameless_function_invocation (struct frame_info *fi)
392a587b
JM
37{
38 int frameless;
39 CORE_ADDR func_start, after_prologue;
40 func_start = (get_pc_function_start ((fi)->pc) +
41 FUNCTION_START_OFFSET);
42 after_prologue = func_start;
43 after_prologue = SKIP_PROLOGUE (after_prologue);
44 frameless = (after_prologue == func_start);
45 return frameless;
46}
47
c906108c
SS
48/* Function: pop_frame
49 This routine gets called when either the user uses the `return'
50 command, or the call dummy breakpoint gets hit. */
51
52void
fba45db2 53fr30_pop_frame (void)
c906108c 54{
c5aa993b 55 struct frame_info *frame = get_current_frame ();
c906108c 56 int regnum;
c5aa993b 57 CORE_ADDR sp = read_register (SP_REGNUM);
c906108c 58
c5aa993b 59 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
c906108c
SS
60 generic_pop_dummy_frame ();
61 else
62 {
63 write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
64
65 for (regnum = 0; regnum < NUM_REGS; regnum++)
c5aa993b
JM
66 if (frame->fsr.regs[regnum] != 0)
67 {
68 write_register (regnum,
69 read_memory_unsigned_integer (frame->fsr.regs[regnum],
70 REGISTER_RAW_SIZE (regnum)));
71 }
c906108c
SS
72 write_register (SP_REGNUM, sp + frame->framesize);
73 }
74 flush_cached_frames ();
75}
76
7a292a7a
SS
77
78/* Function: fr30_store_return_value
79 Put a value where a caller expects to see it. Used by the 'return'
80 command. */
81void
82fr30_store_return_value (struct type *type,
83 char *valbuf)
84{
85 /* Here's how the FR30 returns values (gleaned from gcc/config/
86 fr30/fr30.h):
87
88 If the return value is 32 bits long or less, it goes in r4.
89
90 If the return value is 64 bits long or less, it goes in r4 (most
91 significant word) and r5 (least significant word.
92
93 If the function returns a structure, of any size, the caller
94 passes the function an invisible first argument where the callee
95 should store the value. But GDB doesn't let you do that anyway.
96
97 If you're returning a value smaller than a word, it's not really
98 necessary to zero the upper bytes of the register; the caller is
99 supposed to ignore them. However, the FR30 typically keeps its
100 values extended to the full register width, so we should emulate
101 that. */
102
103 /* The FR30 is big-endian, so if we return a small value (like a
104 short or a char), we need to position it correctly within the
105 register. We round the size up to a register boundary, and then
106 adjust the offset so as to place the value at the right end. */
107 int value_size = TYPE_LENGTH (type);
108 int returned_size = (value_size + FR30_REGSIZE - 1) & ~(FR30_REGSIZE - 1);
109 int offset = (REGISTER_BYTE (RETVAL_REG)
110 + (returned_size - value_size));
111 char *zeros = alloca (returned_size);
112 memset (zeros, 0, returned_size);
113
114 write_register_bytes (REGISTER_BYTE (RETVAL_REG), zeros, returned_size);
115 write_register_bytes (offset, valbuf, value_size);
116}
117
118
c906108c
SS
119/* Function: skip_prologue
120 Return the address of the first code past the prologue of the function. */
121
122CORE_ADDR
c5aa993b 123fr30_skip_prologue (CORE_ADDR pc)
c906108c
SS
124{
125 CORE_ADDR func_addr, func_end;
126
127 /* See what the symbol table says */
128
129 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
130 {
131 struct symtab_and_line sal;
132
133 sal = find_pc_line (func_addr, 0);
134
c5aa993b
JM
135 if (sal.line != 0 && sal.end < func_end)
136 {
137 return sal.end;
c906108c
SS
138 }
139 }
140
141/* Either we didn't find the start of this function (nothing we can do),
142 or there's no line info, or the line after the prologue is after
143 the end of the function (there probably isn't a prologue). */
144
145 return pc;
146}
147
148
149/* Function: push_arguments
150 Setup arguments and RP for a call to the target. First four args
151 go in FIRST_ARGREG -> LAST_ARGREG, subsequent args go on stack...
152 Structs are passed by reference. XXX not right now Z.R.
153 64 bit quantities (doubles and long longs) may be split between
154 the regs and the stack.
155 When calling a function that returns a struct, a pointer to the struct
156 is passed in as a secret first argument (always in FIRST_ARGREG).
157
158 Stack space for the args has NOT been allocated: that job is up to us.
c5aa993b 159 */
c906108c
SS
160
161CORE_ADDR
ea7c478f 162fr30_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
fba45db2 163 int struct_return, CORE_ADDR struct_addr)
c906108c
SS
164{
165 int argreg;
166 int argnum;
167 int stack_offset;
c5aa993b
JM
168 struct stack_arg
169 {
c906108c
SS
170 char *val;
171 int len;
172 int offset;
173 };
174 struct stack_arg *stack_args =
c5aa993b 175 (struct stack_arg *) alloca (nargs * sizeof (struct stack_arg));
c906108c
SS
176 int nstack_args = 0;
177
178 argreg = FIRST_ARGREG;
179
180 /* the struct_return pointer occupies the first parameter-passing reg */
181 if (struct_return)
c5aa993b 182 write_register (argreg++, struct_addr);
c906108c
SS
183
184 stack_offset = 0;
185
186 /* Process args from left to right. Store as many as allowed in
c5aa993b
JM
187 registers, save the rest to be pushed on the stack */
188 for (argnum = 0; argnum < nargs; argnum++)
c906108c 189 {
c5aa993b 190 char *val;
ea7c478f 191 struct value *arg = args[argnum];
c5aa993b
JM
192 struct type *arg_type = check_typedef (VALUE_TYPE (arg));
193 struct type *target_type = TYPE_TARGET_TYPE (arg_type);
194 int len = TYPE_LENGTH (arg_type);
c906108c 195 enum type_code typecode = TYPE_CODE (arg_type);
c5aa993b 196 CORE_ADDR regval;
c906108c
SS
197 int newarg;
198
199 val = (char *) VALUE_CONTENTS (arg);
200
c906108c 201 {
c5aa993b
JM
202 /* Copy the argument to general registers or the stack in
203 register-sized pieces. Large arguments are split between
204 registers and stack. */
205 while (len > 0)
206 {
207 if (argreg <= LAST_ARGREG)
208 {
209 int partial_len = len < REGISTER_SIZE ? len : REGISTER_SIZE;
210 regval = extract_address (val, partial_len);
211
212 /* It's a simple argument being passed in a general
213 register. */
214 write_register (argreg, regval);
215 argreg++;
216 len -= partial_len;
217 val += partial_len;
218 }
219 else
220 {
221 /* keep for later pushing */
222 stack_args[nstack_args].val = val;
223 stack_args[nstack_args++].len = len;
224 break;
225 }
226 }
c906108c 227 }
c5aa993b
JM
228 }
229 /* now do the real stack pushing, process args right to left */
230 while (nstack_args--)
231 {
232 sp -= stack_args[nstack_args].len;
233 write_memory (sp, stack_args[nstack_args].val,
234 stack_args[nstack_args].len);
235 }
c906108c
SS
236
237 /* Return adjusted stack pointer. */
238 return sp;
239}
240
a14ed312 241void _initialize_fr30_tdep (void);
c906108c 242
7a292a7a 243void
fba45db2 244_initialize_fr30_tdep (void)
7a292a7a 245{
c5aa993b 246 extern int print_insn_fr30 (bfd_vma, disassemble_info *);
7a292a7a 247 tm_print_insn = print_insn_fr30;
c906108c
SS
248}
249
250/* Function: check_prologue_cache
251 Check if prologue for this frame's PC has already been scanned.
252 If it has, copy the relevant information about that prologue and
253 return non-zero. Otherwise do not copy anything and return zero.
254
255 The information saved in the cache includes:
c5aa993b
JM
256 * the frame register number;
257 * the size of the stack frame;
258 * the offsets of saved regs (relative to the old SP); and
259 * the offset from the stack pointer to the frame pointer
c906108c
SS
260
261 The cache contains only one entry, since this is adequate
262 for the typical sequence of prologue scan requests we get.
263 When performing a backtrace, GDB will usually ask to scan
264 the same function twice in a row (once to get the frame chain,
265 and once to fill in the extra frame information).
c5aa993b 266 */
c906108c
SS
267
268static struct frame_info prologue_cache;
269
270static int
fba45db2 271check_prologue_cache (struct frame_info *fi)
c906108c
SS
272{
273 int i;
274
275 if (fi->pc == prologue_cache.pc)
276 {
277 fi->framereg = prologue_cache.framereg;
278 fi->framesize = prologue_cache.framesize;
279 fi->frameoffset = prologue_cache.frameoffset;
280 for (i = 0; i <= NUM_REGS; i++)
281 fi->fsr.regs[i] = prologue_cache.fsr.regs[i];
282 return 1;
283 }
284 else
285 return 0;
286}
287
288
289/* Function: save_prologue_cache
290 Copy the prologue information from fi to the prologue cache.
c5aa993b 291 */
c906108c
SS
292
293static void
fba45db2 294save_prologue_cache (struct frame_info *fi)
c906108c
SS
295{
296 int i;
297
c5aa993b
JM
298 prologue_cache.pc = fi->pc;
299 prologue_cache.framereg = fi->framereg;
300 prologue_cache.framesize = fi->framesize;
c906108c 301 prologue_cache.frameoffset = fi->frameoffset;
c5aa993b
JM
302
303 for (i = 0; i <= NUM_REGS; i++)
304 {
305 prologue_cache.fsr.regs[i] = fi->fsr.regs[i];
306 }
c906108c
SS
307}
308
309
310/* Function: scan_prologue
311 Scan the prologue of the function that contains PC, and record what
312 we find in PI. PI->fsr must be zeroed by the called. Returns the
313 pc after the prologue. Note that the addresses saved in pi->fsr
314 are actually just frame relative (negative offsets from the frame
315 pointer). This is because we don't know the actual value of the
316 frame pointer yet. In some circumstances, the frame pointer can't
317 be determined till after we have scanned the prologue. */
318
319static void
fba45db2 320fr30_scan_prologue (struct frame_info *fi)
c906108c
SS
321{
322 int sp_offset, fp_offset;
323 CORE_ADDR prologue_start, prologue_end, current_pc;
324
325 /* Check if this function is already in the cache of frame information. */
326 if (check_prologue_cache (fi))
327 return;
328
329 /* Assume there is no frame until proven otherwise. */
c5aa993b
JM
330 fi->framereg = SP_REGNUM;
331 fi->framesize = 0;
c906108c
SS
332 fi->frameoffset = 0;
333
334 /* Find the function prologue. If we can't find the function in
335 the symbol table, peek in the stack frame to find the PC. */
336 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
337 {
338 /* Assume the prologue is everything between the first instruction
339 in the function and the first source line. */
340 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
341
c5aa993b 342 if (sal.line == 0) /* no line info, use current PC */
c906108c
SS
343 prologue_end = fi->pc;
344 else if (sal.end < prologue_end) /* next line begins after fn end */
c5aa993b 345 prologue_end = sal.end; /* (probably means no prologue) */
c906108c
SS
346 }
347 else
348 {
349 /* XXX Z.R. What now??? The following is entirely bogus */
350 prologue_start = (read_memory_integer (fi->frame, 4) & 0x03fffffc) - 12;
351 prologue_end = prologue_start + 40;
352 }
353
354 /* Now search the prologue looking for instructions that set up the
355 frame pointer, adjust the stack pointer, and save registers. */
356
357 sp_offset = fp_offset = 0;
358 for (current_pc = prologue_start; current_pc < prologue_end; current_pc += 2)
359 {
360 unsigned int insn;
361
362 insn = read_memory_unsigned_integer (current_pc, 2);
363
c5aa993b 364 if ((insn & 0xfe00) == 0x8e00) /* stm0 or stm1 */
c906108c
SS
365 {
366 int reg, mask = insn & 0xff;
367
368 /* scan in one sweep - create virtual 16-bit mask from either insn's mask */
c5aa993b 369 if ((insn & 0x0100) == 0)
c906108c 370 {
c5aa993b 371 mask <<= 8; /* stm0 - move to upper byte in virtual mask */
c906108c
SS
372 }
373
374 /* Calculate offsets of saved registers (to be turned later into addresses). */
375 for (reg = R4_REGNUM; reg <= R11_REGNUM; reg++)
376 if (mask & (1 << (15 - reg)))
377 {
378 sp_offset -= 4;
379 fi->fsr.regs[reg] = sp_offset;
380 }
381 }
c5aa993b
JM
382 else if ((insn & 0xfff0) == 0x1700) /* st rx,@-r15 */
383 {
c906108c
SS
384 int reg = insn & 0xf;
385
386 sp_offset -= 4;
387 fi->fsr.regs[reg] = sp_offset;
388 }
c5aa993b
JM
389 else if ((insn & 0xff00) == 0x0f00) /* enter */
390 {
c906108c
SS
391 fp_offset = fi->fsr.regs[FP_REGNUM] = sp_offset - 4;
392 sp_offset -= 4 * (insn & 0xff);
393 fi->framereg = FP_REGNUM;
394 }
c5aa993b 395 else if (insn == 0x1781) /* st rp,@-sp */
c906108c 396 {
c5aa993b
JM
397 sp_offset -= 4;
398 fi->fsr.regs[RP_REGNUM] = sp_offset;
c906108c 399 }
c5aa993b 400 else if (insn == 0x170e) /* st fp,@-sp */
c906108c 401 {
c5aa993b
JM
402 sp_offset -= 4;
403 fi->fsr.regs[FP_REGNUM] = sp_offset;
c906108c 404 }
c5aa993b 405 else if (insn == 0x8bfe) /* mov sp,fp */
c906108c
SS
406 {
407 fi->framereg = FP_REGNUM;
408 }
c5aa993b 409 else if ((insn & 0xff00) == 0xa300) /* addsp xx */
c906108c 410 {
c5aa993b 411 sp_offset += 4 * (signed char) (insn & 0xff);
c906108c 412 }
c5aa993b
JM
413 else if ((insn & 0xff0f) == 0x9b00 && /* ldi:20 xx,r0 */
414 read_memory_unsigned_integer (current_pc + 4, 2)
415 == 0xac0f) /* sub r0,sp */
c906108c
SS
416 {
417 /* large stack adjustment */
c5aa993b 418 sp_offset -= (((insn & 0xf0) << 12) | read_memory_unsigned_integer (current_pc + 2, 2));
c906108c
SS
419 current_pc += 4;
420 }
c5aa993b
JM
421 else if (insn == 0x9f80 && /* ldi:32 xx,r0 */
422 read_memory_unsigned_integer (current_pc + 6, 2)
423 == 0xac0f) /* sub r0,sp */
c906108c
SS
424 {
425 /* large stack adjustment */
426 sp_offset -=
c5aa993b
JM
427 (read_memory_unsigned_integer (current_pc + 2, 2) << 16 |
428 read_memory_unsigned_integer (current_pc + 4, 2));
c906108c
SS
429 current_pc += 6;
430 }
431 }
432
433 /* The frame size is just the negative of the offset (from the original SP)
434 of the last thing thing we pushed on the stack. The frame offset is
435 [new FP] - [new SP]. */
436 fi->framesize = -sp_offset;
437 fi->frameoffset = fp_offset - sp_offset;
c5aa993b 438
c906108c
SS
439 save_prologue_cache (fi);
440}
441
442/* Function: init_extra_frame_info
443 Setup the frame's frame pointer, pc, and frame addresses for saved
444 registers. Most of the work is done in scan_prologue().
445
446 Note that when we are called for the last frame (currently active frame),
447 that fi->pc and fi->frame will already be setup. However, fi->frame will
448 be valid only if this routine uses FP. For previous frames, fi-frame will
449 always be correct (since that is derived from fr30_frame_chain ()).
450
451 We can be called with the PC in the call dummy under two circumstances.
452 First, during normal backtracing, second, while figuring out the frame
453 pointer just prior to calling the target function (see run_stack_dummy). */
454
455void
fba45db2 456fr30_init_extra_frame_info (struct frame_info *fi)
c906108c
SS
457{
458 int reg;
459
460 if (fi->next)
461 fi->pc = FRAME_SAVED_PC (fi->next);
462
463 memset (fi->fsr.regs, '\000', sizeof fi->fsr.regs);
464
465 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
466 {
467 /* We need to setup fi->frame here because run_stack_dummy gets it wrong
c5aa993b
JM
468 by assuming it's always FP. */
469 fi->frame = generic_read_register_dummy (fi->pc, fi->frame, SP_REGNUM);
470 fi->framesize = 0;
c906108c
SS
471 fi->frameoffset = 0;
472 return;
473 }
c5aa993b
JM
474 fr30_scan_prologue (fi);
475
476 if (!fi->next) /* this is the innermost frame? */
477 fi->frame = read_register (fi->framereg);
478 else
479 /* not the innermost frame */
0fb34c3a
MS
480 /* If we have an FP, the callee saved it. */
481 if (fi->framereg == FP_REGNUM)
482 if (fi->next->fsr.regs[fi->framereg] != 0)
483 fi->frame = read_memory_integer (fi->next->fsr.regs[fi->framereg], 4);
484
c5aa993b
JM
485 /* Calculate actual addresses of saved registers using offsets determined
486 by fr30_scan_prologue. */
487 for (reg = 0; reg < NUM_REGS; reg++)
488 if (fi->fsr.regs[reg] != 0)
489 {
490 fi->fsr.regs[reg] += fi->frame + fi->framesize - fi->frameoffset;
491 }
c906108c
SS
492}
493
494/* Function: find_callers_reg
495 Find REGNUM on the stack. Otherwise, it's in an active register.
496 One thing we might want to do here is to check REGNUM against the
497 clobber mask, and somehow flag it as invalid if it isn't saved on
498 the stack somewhere. This would provide a graceful failure mode
499 when trying to get the value of caller-saves registers for an inner
500 frame. */
501
502CORE_ADDR
fba45db2 503fr30_find_callers_reg (struct frame_info *fi, int regnum)
c906108c
SS
504{
505 for (; fi; fi = fi->next)
506 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
507 return generic_read_register_dummy (fi->pc, fi->frame, regnum);
508 else if (fi->fsr.regs[regnum] != 0)
c5aa993b
JM
509 return read_memory_unsigned_integer (fi->fsr.regs[regnum],
510 REGISTER_RAW_SIZE (regnum));
c906108c
SS
511
512 return read_register (regnum);
513}
514
515
516/* Function: frame_chain
517 Figure out the frame prior to FI. Unfortunately, this involves
518 scanning the prologue of the caller, which will also be done
519 shortly by fr30_init_extra_frame_info. For the dummy frame, we
520 just return the stack pointer that was in use at the time the
521 function call was made. */
522
523
524CORE_ADDR
fba45db2 525fr30_frame_chain (struct frame_info *fi)
c906108c
SS
526{
527 CORE_ADDR fn_start, callers_pc, fp;
528 struct frame_info caller_fi;
529 int framereg;
530
531 /* is this a dummy frame? */
532 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
c5aa993b 533 return fi->frame; /* dummy frame same as caller's frame */
c906108c
SS
534
535 /* is caller-of-this a dummy frame? */
c5aa993b 536 callers_pc = FRAME_SAVED_PC (fi); /* find out who called us: */
c906108c 537 fp = fr30_find_callers_reg (fi, FP_REGNUM);
c5aa993b
JM
538 if (PC_IN_CALL_DUMMY (callers_pc, fp, fp))
539 return fp; /* dummy frame's frame may bear no relation to ours */
c906108c
SS
540
541 if (find_pc_partial_function (fi->pc, 0, &fn_start, 0))
542 if (fn_start == entry_point_address ())
c5aa993b 543 return 0; /* in _start fn, don't chain further */
c906108c
SS
544
545 framereg = fi->framereg;
546
547 /* If the caller is the startup code, we're at the end of the chain. */
548 if (find_pc_partial_function (callers_pc, 0, &fn_start, 0))
549 if (fn_start == entry_point_address ())
550 return 0;
551
c5aa993b 552 memset (&caller_fi, 0, sizeof (caller_fi));
c906108c 553 caller_fi.pc = callers_pc;
c5aa993b 554 fr30_scan_prologue (&caller_fi);
c906108c
SS
555 framereg = caller_fi.framereg;
556
557 /* If the caller used a frame register, return its value.
558 Otherwise, return the caller's stack pointer. */
559 if (framereg == FP_REGNUM)
560 return fr30_find_callers_reg (fi, framereg);
561 else
562 return fi->frame + fi->framesize;
563}
564
565/* Function: frame_saved_pc
566 Find the caller of this frame. We do this by seeing if RP_REGNUM
567 is saved in the stack anywhere, otherwise we get it from the
568 registers. If the inner frame is a dummy frame, return its PC
569 instead of RP, because that's where "caller" of the dummy-frame
570 will be found. */
571
572CORE_ADDR
fba45db2 573fr30_frame_saved_pc (struct frame_info *fi)
c906108c 574{
c5aa993b
JM
575 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
576 return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
c906108c
SS
577 else
578 return fr30_find_callers_reg (fi, RP_REGNUM);
579}
580
581/* Function: fix_call_dummy
582 Pokes the callee function's address into the CALL_DUMMY assembly stub.
583 Assumes that the CALL_DUMMY looks like this:
c5aa993b
JM
584 jarl <offset24>, r31
585 trap
586 */
c906108c
SS
587
588int
fba45db2 589fr30_fix_call_dummy (char *dummy, CORE_ADDR sp, CORE_ADDR fun, int nargs,
ea7c478f 590 struct value **args, struct type *type, int gcc_p)
c906108c
SS
591{
592 long offset24;
593
594 offset24 = (long) fun - (long) entry_point_address ();
595 offset24 &= 0x3fffff;
596 offset24 |= 0xff800000; /* jarl <offset24>, r31 */
597
c5aa993b
JM
598 store_unsigned_integer ((unsigned int *) &dummy[2], 2, offset24 & 0xffff);
599 store_unsigned_integer ((unsigned int *) &dummy[0], 2, offset24 >> 16);
c906108c
SS
600 return 0;
601}
This page took 0.21354 seconds and 4 git commands to generate.