* config/tc-dvp.c (VU_LABEL_PREFIX): New macro.
[deliverable/binutils-gdb.git] / gdb / m32r-tdep.c
CommitLineData
70ab088d
MS
1/* Target-dependent code for the Mitsubishi m32r for GDB, the GNU debugger.
2 Copyright 1996, Free Software Foundation, Inc.
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20#include "defs.h"
21#include "frame.h"
22#include "inferior.h"
23#include "obstack.h"
24#include "target.h"
25#include "value.h"
26#include "bfd.h"
27#include "gdb_string.h"
28#include "gdbcore.h"
29#include "symfile.h"
30
dc1b349d
MS
31/* Function: frame_find_saved_regs
32 Return the frame_saved_regs structure for the frame.
33 Doesn't really work for dummy frames, but it does pass back
34 an empty frame_saved_regs, so I guess that's better than total failure */
70ab088d
MS
35
36void
37m32r_frame_find_saved_regs PARAMS ((struct frame_info *fi,
38 struct frame_saved_regs *regaddr))
39{
dc1b349d 40 memcpy(regaddr, &fi->fsr, sizeof(struct frame_saved_regs));
70ab088d
MS
41}
42
dc1b349d
MS
43/* Function: skip_prologue
44 Find end of function prologue */
70ab088d
MS
45
46CORE_ADDR
47m32r_skip_prologue (pc)
48 CORE_ADDR pc;
49{
50 CORE_ADDR func_addr, func_end;
51 struct symtab_and_line sal;
52
53 /* See what the symbol table says */
54
55 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
56 {
57 sal = find_pc_line (func_addr, 0);
58
59 if (sal.line != 0 && sal.end < func_end)
60 return sal.end;
61 else
62 /* Either there's no line info, or the line after the prologue is after
63 the end of the function. In this case, there probably isn't a
64 prologue. */
65 return pc;
66 }
67
68 /* We can't find the start of this function, so there's nothing we can do. */
69 return pc;
70}
71
dc1b349d
MS
72/* Function: scan_prologue
73 This function decodes the target function prologue to determine
70ab088d
MS
74 1) the size of the stack frame, and 2) which registers are saved on it.
75 It saves the offsets of saved regs in the frame_saved_regs argument,
dc1b349d 76 and returns the frame size. */
70ab088d
MS
77
78static unsigned long
79m32r_scan_prologue (fi, fsr)
80 struct frame_info *fi;
81 struct frame_saved_regs *fsr;
82{
83 struct symtab_and_line sal;
84 CORE_ADDR prologue_start, prologue_end, current_pc;
85 unsigned long framesize;
86
87 /* this code essentially duplicates skip_prologue,
88 but we need the start address below. */
89
90 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
91 {
92 sal = find_pc_line (prologue_start, 0);
93
94 if (sal.line == 0) /* no line info, use current PC */
8665f3dc
MS
95 if (prologue_start != entry_point_address ())
96 prologue_end = fi->pc;
97 else
98 return 0; /* _start has no frame or prologue */
70ab088d
MS
99 else if (sal.end < prologue_end) /* next line begins after fn end */
100 prologue_end = sal.end; /* (probably means no prologue) */
101 }
102 else
e1703d1f 103 prologue_end = prologue_start + 40; /* We're in the boondocks: allow for */
8665f3dc 104 /* 16 pushes, an add, and "mv fp,sp" */
70ab088d
MS
105
106 prologue_end = min (prologue_end, fi->pc);
107
108 /* Now, search the prologue looking for instructions that setup fp, save
109 rp (and other regs), adjust sp and such. */
110
111 framesize = 0;
70ab088d
MS
112 for (current_pc = prologue_start; current_pc < prologue_end; current_pc += 2)
113 {
114 int insn;
115 int regno;
116
117 insn = read_memory_unsigned_integer (current_pc, 2);
8665f3dc 118 if (insn & 0x8000) /* Four byte instruction? */
70ab088d
MS
119 current_pc += 2;
120
121 if ((insn & 0xf0ff) == 0x207f) { /* st reg, @-sp */
122 framesize += 4;
123 regno = ((insn >> 8) & 0xf);
8665f3dc
MS
124 if (fsr) /* save_regs offset */
125 fsr->regs[regno] = framesize;
70ab088d 126 }
8665f3dc
MS
127 else if ((insn >> 8) == 0x4f) /* addi sp, xx */
128 /* add 8 bit sign-extended offset */
129 framesize += -((char) (insn & 0xff));
130 else if (insn == 0x8faf) /* add3 sp, sp, xxxx */
131 /* add 16 bit sign-extended offset */
132 framesize += -((short) read_memory_unsigned_integer (current_pc, 2));
133 else if (((insn >> 8) == 0xe4) && /* ld24 r4, xxxxxx ; sub sp, r4 */
134 read_memory_unsigned_integer (current_pc + 2, 2) == 0x0f24)
135 { /* subtract 24 bit sign-extended negative-offset */
136 insn = read_memory_unsigned_integer (current_pc - 2, 4);
137 if (insn & 0x00800000) /* sign extend */
138 insn |= 0xff000000; /* negative */
139 else
140 insn &= 0x00ffffff; /* positive */
141 framesize += insn;
142 }
e1703d1f
MS
143 else if (insn == 0x1d8f) { /* mv fp, sp */
144 fi->using_frame_pointer = 1; /* fp is now valid */
145 break; /* end of stack adjustments */
146 }
147 else
148 break; /* anything else isn't prologue */
70ab088d
MS
149 }
150 return framesize;
151}
152
dc1b349d
MS
153/* Function: init_extra_frame_info
154 This function actually figures out the frame address for a given pc and
e1703d1f
MS
155 sp. This is tricky on the m32r because we sometimes don't use an explicit
156 frame pointer, and the previous stack pointer isn't necessarily recorded
157 on the stack. The only reliable way to get this info is to
dc1b349d 158 examine the prologue. */
70ab088d
MS
159
160void
161m32r_init_extra_frame_info (fi)
162 struct frame_info *fi;
163{
164 int reg;
70ab088d
MS
165
166 if (fi->next)
167 fi->pc = FRAME_SAVED_PC (fi->next);
168
e1703d1f 169 memset (fi->fsr.regs, '\000', sizeof fi->fsr.regs);
dc1b349d
MS
170
171 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
172 {
173 /* We need to setup fi->frame here because run_stack_dummy gets it wrong
174 by assuming it's always FP. */
175 fi->frame = generic_read_register_dummy (fi->pc, fi->frame, SP_REGNUM);
176 fi->framesize = 0;
177 return;
178 }
8665f3dc 179 else
dc1b349d
MS
180 {
181 fi->using_frame_pointer = 0;
182 fi->framesize = m32r_scan_prologue (fi, &fi->fsr);
183
184 if (!fi->next)
185 if (fi->using_frame_pointer)
186 fi->frame = read_register (FP_REGNUM);
187 else
188 fi->frame = read_register (SP_REGNUM);
189 else /* fi->next means this is not the innermost frame */
190 if (fi->using_frame_pointer) /* we have an FP */
191 if (fi->next->fsr.regs[FP_REGNUM] != 0) /* caller saved our FP */
192 fi->frame = read_memory_integer (fi->next->fsr.regs[FP_REGNUM], 4);
193 for (reg = 0; reg < NUM_REGS; reg++)
194 if (fi->fsr.regs[reg] != 0)
195 fi->fsr.regs[reg] = fi->frame + fi->framesize - fi->fsr.regs[reg];
196 }
70ab088d
MS
197}
198
dc1b349d
MS
199/* Function: find_callers_reg
200 Find REGNUM on the stack. Otherwise, it's in an active register. One thing
201 we might want to do here is to check REGNUM against the clobber mask, and
202 somehow flag it as invalid if it isn't saved on the stack somewhere. This
203 would provide a graceful failure mode when trying to get the value of
204 caller-saves registers for an inner frame. */
70ab088d
MS
205
206CORE_ADDR
207m32r_find_callers_reg (fi, regnum)
208 struct frame_info *fi;
209 int regnum;
210{
70ab088d 211 for (; fi; fi = fi->next)
dc1b349d
MS
212 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
213 return generic_read_register_dummy (fi->pc, fi->frame, regnum);
214 else if (fi->fsr.regs[regnum] != 0)
215 return read_memory_integer (fi->fsr.regs[regnum],
216 REGISTER_RAW_SIZE(regnum));
70ab088d
MS
217 return read_register (regnum);
218}
219
dc1b349d
MS
220/* Function: frame_chain
221 Given a GDB frame, determine the address of the calling function's frame.
70ab088d
MS
222 This will be used to create a new GDB frame struct, and then
223 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
dc1b349d 224 For m32r, we save the frame size when we initialize the frame_info. */
70ab088d
MS
225
226CORE_ADDR
227m32r_frame_chain (fi)
228 struct frame_info *fi;
229{
dc1b349d
MS
230 CORE_ADDR fn_start, callers_pc, fp;
231
232 /* is this a dummy frame? */
233 if (PC_IN_CALL_DUMMY(fi->pc, fi->frame, fi->frame))
234 return fi->frame; /* dummy frame same as caller's frame */
235
236 /* is caller-of-this a dummy frame? */
237 callers_pc = FRAME_SAVED_PC(fi); /* find out who called us: */
238 fp = m32r_find_callers_reg (fi, FP_REGNUM);
239 if (PC_IN_CALL_DUMMY(callers_pc, fp, fp))
240 return fp; /* dummy frame's frame may bear no relation to ours */
e1703d1f
MS
241
242 if (find_pc_partial_function (fi->pc, 0, &fn_start, 0))
243 if (fn_start == entry_point_address ())
244 return 0; /* in _start fn, don't chain further */
245 return fi->frame + fi->framesize;
70ab088d
MS
246}
247
dc1b349d
MS
248/* Function: push_return_address (pc)
249 Set up the return address for the inferior function call.
250 Necessary for targets that don't actually execute a JSR/BSR instruction
251 (ie. when using an empty CALL_DUMMY) */
70ab088d 252
dc1b349d
MS
253CORE_ADDR
254m32r_push_return_address (pc, sp)
70ab088d 255 CORE_ADDR pc;
dc1b349d 256 CORE_ADDR sp;
70ab088d 257{
dc1b349d
MS
258#if CALL_DUMMY_LOCATION != AT_ENTRY_POINT
259 pc = pc - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
8665f3dc 260#else
dc1b349d 261 pc = CALL_DUMMY_ADDRESS ();
8665f3dc 262#endif
dc1b349d
MS
263 write_register (RP_REGNUM, pc);
264 return sp;
70ab088d
MS
265}
266
dc1b349d
MS
267
268/* Function: pop_frame
269 Discard from the stack the innermost frame,
70ab088d
MS
270 restoring all saved registers. */
271
272struct frame_info *
273m32r_pop_frame (frame)
274 struct frame_info *frame;
275{
276 int regnum;
277
dc1b349d
MS
278 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
279 generic_pop_dummy_frame ();
280 else
70ab088d 281 {
dc1b349d
MS
282 for (regnum = 0; regnum < NUM_REGS; regnum++)
283 if (frame->fsr.regs[regnum] != 0)
284 write_register (regnum,
285 read_memory_integer (frame->fsr.regs[regnum], 4));
286
287 write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
288 write_register (SP_REGNUM, read_register (FP_REGNUM));
289 if (read_register (PSW_REGNUM) & 0x80)
290 write_register (SPU_REGNUM, read_register (SP_REGNUM));
291 else
292 write_register (SPI_REGNUM, read_register (SP_REGNUM));
70ab088d 293 }
70ab088d 294 flush_cached_frames ();
70ab088d
MS
295 return NULL;
296}
297
dc1b349d
MS
298/* Function: frame_saved_pc
299 Find the caller of this frame. We do this by seeing if RP_REGNUM is saved
300 in the stack anywhere, otherwise we get it from the registers. */
70ab088d 301
dc1b349d
MS
302CORE_ADDR
303m32r_frame_saved_pc (fi)
304 struct frame_info *fi;
305{
306 if (PC_IN_CALL_DUMMY(fi->pc, fi->frame, fi->frame))
307 return generic_read_register_dummy(fi->pc, fi->frame, PC_REGNUM);
308 else
309 return m32r_find_callers_reg (fi, RP_REGNUM);
310}
311
312/* Function: push_arguments
313 Setup the function arguments for calling a function in the inferior.
314
315 On the Mitsubishi M32R architecture, there are four registers (R0 to R3)
316 which are dedicated for passing function arguments. Up to the first
317 four arguments (depending on size) may go into these registers.
318 The rest go on the stack.
319
320 Arguments that are smaller than 4 bytes will still take up a whole
321 register or a whole 32-bit word on the stack, and will be
322 right-justified in the register or the stack word. This includes
323 chars, shorts, and small aggregate types.
324
325 Arguments of 8 bytes size are split between two registers, if
326 available. If only one register is available, the argument will
327 be split between the register and the stack. Otherwise it is
328 passed entirely on the stack. Aggregate types with sizes between
329 4 and 8 bytes are passed entirely on the stack, and are left-justified
330 within the double-word (as opposed to aggregates smaller than 4 bytes
331 which are right-justified).
332
333 Aggregates of greater than 8 bytes are first copied onto the stack,
334 and then a pointer to the copy is passed in the place of the normal
335 argument (either in a register if available, or on the stack).
336
337 Functions that must return an aggregate type can return it in the
338 normal return value registers (R0 and R1) if its size is 8 bytes or
339 less. For larger return values, the caller must allocate space for
340 the callee to copy the return value to. A pointer to this space is
341 passed as an implicit first argument, always in R0. */
70ab088d
MS
342
343CORE_ADDR
344m32r_push_arguments (nargs, args, sp, struct_return, struct_addr)
345 int nargs;
346 value_ptr *args;
347 CORE_ADDR sp;
348 unsigned char struct_return;
349 CORE_ADDR struct_addr;
350{
dc1b349d 351 int stack_offset, stack_alloc;
70ab088d
MS
352 int argreg;
353 int argnum;
dc1b349d
MS
354 struct type *type;
355 CORE_ADDR regval;
356 char *val;
357 char valbuf[4];
358 int len;
359 int odd_sized_struct;
360
361 /* first force sp to a 4-byte alignment */
362 sp = sp & ~3;
363
364 argreg = ARG0_REGNUM;
365 /* The "struct return pointer" pseudo-argument goes in R0 */
70ab088d 366 if (struct_return)
70ab088d 367 write_register (argreg++, struct_addr);
dc1b349d
MS
368
369 /* Now make sure there's space on the stack */
370 for (argnum = 0, stack_alloc = 0;
371 argnum < nargs; argnum++)
372 stack_alloc += ((TYPE_LENGTH(VALUE_TYPE(args[argnum])) + 3) & ~3);
373 sp -= stack_alloc; /* make room on stack for args */
374
375
376 /* Now load as many as possible of the first arguments into
377 registers, and push the rest onto the stack. There are 16 bytes
378 in four registers available. Loop thru args from first to last. */
379
380 argreg = ARG0_REGNUM;
381 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
70ab088d 382 {
dc1b349d
MS
383 type = VALUE_TYPE (args[argnum]);
384 len = TYPE_LENGTH (type);
385 memset(valbuf, 0, sizeof(valbuf));
386 if (len < 4)
387 { /* value gets right-justified in the register or stack word */
388 memcpy(valbuf + (4 - len),
389 (char *) VALUE_CONTENTS (args[argnum]), len);
390 val = valbuf;
391 }
70ab088d 392 else
dc1b349d
MS
393 val = (char *) VALUE_CONTENTS (args[argnum]);
394
395 if (len > 4 && (len & 3) != 0)
396 odd_sized_struct = 1; /* such structs go entirely on stack */
397 else
398 odd_sized_struct = 0;
70ab088d 399 while (len > 0)
dc1b349d
MS
400 {
401 if (argreg > ARGLAST_REGNUM || odd_sized_struct)
402 { /* must go on the stack */
403 write_memory (sp + stack_offset, val, 4);
404 stack_offset += 4;
405 }
406 /* NOTE WELL!!!!! This is not an "else if" clause!!!
407 That's because some *&^%$ things get passed on the stack
408 AND in the registers! */
409 if (argreg <= ARGLAST_REGNUM)
410 { /* there's room in a register */
411 regval = extract_address (val, REGISTER_RAW_SIZE(argreg));
412 write_register (argreg++, regval);
413 }
414 /* Store the value 4 bytes at a time. This means that things
415 larger than 4 bytes may go partly in registers and partly
416 on the stack. */
417 len -= REGISTER_RAW_SIZE(argreg);
418 val += REGISTER_RAW_SIZE(argreg);
419 }
420 }
421 return sp;
422}
70ab088d 423
dc1b349d
MS
424/* Function: fix_call_dummy
425 If there is real CALL_DUMMY code (eg. on the stack), this function
426 has the responsability to insert the address of the actual code that
427 is the target of the target function call. */
70ab088d 428
dc1b349d
MS
429int
430m32r_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p)
431 char *dummy;
432 CORE_ADDR pc;
433 CORE_ADDR fun;
434 int nargs;
435 value_ptr *args;
436 struct type *type;
437 int gcc_p;
438{
439 /* ld24 r8, <(imm24) fun> */
440 *(unsigned long *) (dummy) = (fun & 0x00ffffff) | 0xe8000000;
441}
70ab088d 442
dc1b349d
MS
443/* Function: get_saved_register
444 Just call the generic_get_saved_register function. */
70ab088d 445
dc1b349d
MS
446void
447get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
448 char *raw_buffer;
449 int *optimized;
450 CORE_ADDR *addrp;
451 struct frame_info *frame;
452 int regnum;
453 enum lval_type *lval;
454{
455 generic_get_saved_register (raw_buffer, optimized, addrp,
456 frame, regnum, lval);
457}
70ab088d 458
dc1b349d
MS
459
460/* Function: m32r_write_sp
461 Because SP is really a read-only register that mirrors either SPU or SPI,
462 we must actually write one of those two as well, depending on PSW. */
463
464void
465m32r_write_sp (val)
466 CORE_ADDR val;
467{
468 unsigned long psw = read_register (PSW_REGNUM);
469
470 if (psw & 0x80) /* stack mode: user or interrupt */
471 write_register (SPU_REGNUM, val);
472 else
473 write_register (SPI_REGNUM, val);
474 write_register (SP_REGNUM, val);
70ab088d 475}
dc1b349d 476
70ab088d
MS
477void
478_initialize_m32r_tdep ()
479{
480 tm_print_insn = print_insn_m32r;
481}
dc1b349d 482
This page took 0.13837 seconds and 4 git commands to generate.