1 /* Target-dependent code for the TI TMS320C80 (MVP) for GDB, the GNU debugger.
2 Copyright 1996, Free Software Foundation, Inc.
4 This file is part of GDB.
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.
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.
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. */
28 #include "gdb_string.h"
32 /* Function: frame_find_saved_regs
33 Return the frame_saved_regs structure for the frame.
34 Doesn't really work for dummy frames, but it does pass back
35 an empty frame_saved_regs, so I guess that's better than total failure */
38 tic80_frame_find_saved_regs (fi, regaddr)
39 struct frame_info *fi;
40 struct frame_saved_regs *regaddr;
42 memcpy (regaddr, &fi->fsr, sizeof (struct frame_saved_regs));
45 /* Function: skip_prologue
46 Find end of function prologue. */
49 tic80_skip_prologue (pc)
52 CORE_ADDR func_addr, func_end;
53 struct symtab_and_line sal;
55 /* See what the symbol table says */
57 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
59 sal = find_pc_line (func_addr, 0);
61 if (sal.line != 0 && sal.end < func_end)
64 /* Either there's no line info, or the line after the prologue is after
65 the end of the function. In this case, there probably isn't a
70 /* We can't find the start of this function, so there's nothing we can do. */
74 /* Function: tic80_scan_prologue
75 This function decodes the target function prologue to determine:
76 1) the size of the stack frame
77 2) which registers are saved on it
78 3) the offsets of saved regs
80 This information is stored in the "extra" fields of the frame_info. */
83 tic80_scan_prologue (fi)
84 struct frame_info *fi;
86 struct symtab_and_line sal;
87 CORE_ADDR prologue_start, prologue_end, current_pc;
89 /* Assume there is no frame until proven otherwise. */
90 fi->framereg = SP_REGNUM;
94 /* this code essentially duplicates skip_prologue,
95 but we need the start address below. */
97 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
99 sal = find_pc_line (prologue_start, 0);
101 if (sal.line == 0) /* no line info, use current PC */
102 if (prologue_start != entry_point_address ())
103 prologue_end = fi->pc;
105 return; /* _start has no frame or prologue */
106 else if (sal.end < prologue_end) /* next line begins after fn end */
107 prologue_end = sal.end; /* (probably means no prologue) */
111 prologue_end = prologue_start + 40; /* We're in the boondocks: allow for */
112 /* 16 pushes, an add, and "mv fp,sp" */
114 prologue_end = min (prologue_end, fi->pc);
116 /* Now search the prologue looking for instructions that set up the
117 frame pointer, adjust the stack pointer, and save registers. */
119 for (current_pc = prologue_start; current_pc < prologue_end; current_pc += 4)
125 insn = read_memory_unsigned_integer (current_pc, 4);
127 if ((insn & 0x301000) == 0x301000) /* Long immediate? */
128 /* FIXME - set offset for long immediate instructions */
132 offset = insn & 0x7fff; /* extract 15-bit offset */
133 if (offset & 0x4000) /* if negative, sign-extend */
134 offset = -(0x8000 - offset);
137 if ((insn & 0x7fd0000) == 0x590000) /* st.{w,d} reg, xx(r1) */
139 regno = ((insn >> 27) & 0x1f);
140 fi->fsr.regs[regno] = offset;
141 if (insn & 0x8000) /* 64-bit store (st.d)? */
142 fi->fsr.regs[regno + 1] = offset + 4;
144 else if ((insn & 0xffff8000) == 0x086c8000) /* addu xx, r1, r1 */
145 fi->framesize = -offset;
146 else if ((insn & 0xffff8000) == 0xf06c8000) /* addu xx, r1, r30 */
148 fi->framereg = FP_REGNUM; /* fp is now valid */
149 fi->frameoffset = offset;
150 break; /* end of stack adjustments */
152 else if (insn == 0xf03b2001) /* addu r1, r0, r30 */
154 fi->framereg = FP_REGNUM; /* fp is now valid */
156 break; /* end of stack adjustments */
159 /* FIXME - handle long immediate instructions */
160 break; /* anything else isn't prologue */
164 /* Function: init_extra_frame_info
165 This function actually figures out the frame address for a given pc and
166 sp. This is tricky on the c80 because we sometimes don't use an explicit
167 frame pointer, and the previous stack pointer isn't necessarily recorded
168 on the stack. The only reliable way to get this info is to
169 examine the prologue. */
172 tic80_init_extra_frame_info (fi)
173 struct frame_info *fi;
178 fi->pc = FRAME_SAVED_PC (fi->next);
180 /* Because zero is a valid register offset relative to SP, we initialize
181 the offsets to -1 to indicate unused entries. */
182 for (reg = 0; reg < NUM_REGS; reg++)
183 fi->fsr.regs[reg] = -1;
185 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
187 /* We need to setup fi->frame here because run_stack_dummy gets it wrong
188 by assuming it's always FP. */
189 fi->frame = generic_read_register_dummy (fi->pc, fi->frame, SP_REGNUM);
196 tic80_scan_prologue (fi);
198 if (!fi->next) /* this is the innermost frame? */
199 fi->frame = read_register (fi->framereg);
201 /* not the innermost frame */
202 /* If this function uses FP as the frame register, and the function
203 it called saved the FP, get the saved FP. */ if (fi->framereg == FP_REGNUM &&
204 fi->next->fsr.regs[FP_REGNUM] != (unsigned) -1)
205 fi->frame = read_memory_integer (fi->next->fsr.regs[FP_REGNUM], 4);
207 /* Convert SP-relative offsets of saved registers to real addresses. */
208 for (reg = 0; reg < NUM_REGS; reg++)
209 if (fi->fsr.regs[reg] == (unsigned) -1)
210 fi->fsr.regs[reg] = 0; /* unused entry */
212 fi->fsr.regs[reg] += fi->frame - fi->frameoffset;
216 /* Function: find_callers_reg
217 Find REGNUM on the stack. Otherwise, it's in an active register. One thing
218 we might want to do here is to check REGNUM against the clobber mask, and
219 somehow flag it as invalid if it isn't saved on the stack somewhere. This
220 would provide a graceful failure mode when trying to get the value of
221 caller-saves registers for an inner frame. */
224 tic80_find_callers_reg (fi, regnum)
225 struct frame_info *fi;
228 for (; fi; fi = fi->next)
229 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
230 return generic_read_register_dummy (fi->pc, fi->frame, regnum);
231 else if (fi->fsr.regs[regnum] != 0)
232 return read_memory_integer (fi->fsr.regs[regnum],
233 REGISTER_RAW_SIZE (regnum));
234 return read_register (regnum);
237 /* Function: frame_chain
238 Given a GDB frame, determine the address of the calling function's frame.
239 This will be used to create a new GDB frame struct, and then
240 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
241 For c80, we save the frame size when we initialize the frame_info. */
244 tic80_frame_chain (fi)
245 struct frame_info *fi;
247 CORE_ADDR fn_start, callers_pc, fp;
249 /* is this a dummy frame? */
250 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
251 return fi->frame; /* dummy frame same as caller's frame */
253 /* is caller-of-this a dummy frame? */
254 callers_pc = FRAME_SAVED_PC (fi); /* find out who called us: */
255 fp = tic80_find_callers_reg (fi, FP_REGNUM);
256 if (PC_IN_CALL_DUMMY (callers_pc, fp, fp))
257 return fp; /* dummy frame's frame may bear no relation to ours */
259 if (find_pc_partial_function (fi->pc, 0, &fn_start, 0))
260 if (fn_start == entry_point_address ())
261 return 0; /* in _start fn, don't chain further */
263 if (fi->framereg == FP_REGNUM)
264 return tic80_find_callers_reg (fi, FP_REGNUM);
266 return fi->frame + fi->framesize;
269 /* Function: pop_frame
270 Discard from the stack the innermost frame,
271 restoring all saved registers. */
274 tic80_pop_frame (frame)
275 struct frame_info *frame;
279 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
280 generic_pop_dummy_frame ();
283 for (regnum = 0; regnum < NUM_REGS; regnum++)
284 if (frame->fsr.regs[regnum] != 0)
285 write_register (regnum,
286 read_memory_integer (frame->fsr.regs[regnum], 4));
288 write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
289 write_register (SP_REGNUM, read_register (FP_REGNUM));
291 if (read_register (PSW_REGNUM) & 0x80)
292 write_register (SPU_REGNUM, read_register (SP_REGNUM));
294 write_register (SPI_REGNUM, read_register (SP_REGNUM));
297 flush_cached_frames ();
301 /* Function: frame_saved_pc
302 Find the caller of this frame. We do this by seeing if LR_REGNUM is saved
303 in the stack anywhere, otherwise we get it from the registers. */
306 tic80_frame_saved_pc (fi)
307 struct frame_info *fi;
309 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
310 return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
312 return tic80_find_callers_reg (fi, LR_REGNUM);
315 /* Function: tic80_push_return_address (pc, sp)
316 Set up the return address for the inferior function call.
317 Necessary for targets that don't actually execute a JSR/BSR instruction
318 (ie. when using an empty CALL_DUMMY) */
321 tic80_push_return_address (pc, sp)
325 write_register (LR_REGNUM, CALL_DUMMY_ADDRESS ());
330 /* Function: push_arguments
331 Setup the function arguments for calling a function in the inferior.
333 On the TI C80 architecture, there are six register pairs (R2/R3 to R12/13)
334 which are dedicated for passing function arguments. Up to the first six
335 arguments (depending on size) may go into these registers.
336 The rest go on the stack.
338 Arguments that are smaller than 4 bytes will still take up a whole
339 register or a whole 32-bit word on the stack, and will be
340 right-justified in the register or the stack word. This includes
341 chars, shorts, and small aggregate types.
343 Arguments that are four bytes or less in size are placed in the
344 even-numbered register of a register pair, and the odd-numbered
345 register is not used.
347 Arguments of 8 bytes size (such as floating point doubles) are placed
348 in a register pair. The least significant 32-bit word is placed in
349 the even-numbered register, and the most significant word in the
350 odd-numbered register.
352 Aggregate types with sizes between 4 and 8 bytes are passed
353 entirely on the stack, and are left-justified within the
354 double-word (as opposed to aggregates smaller than 4 bytes
355 which are right-justified).
357 Aggregates of greater than 8 bytes are first copied onto the stack,
358 and then a pointer to the copy is passed in the place of the normal
359 argument (either in a register if available, or on the stack).
361 Functions that must return an aggregate type can return it in the
362 normal return value registers (R2 and R3) if its size is 8 bytes or
363 less. For larger return values, the caller must allocate space for
364 the callee to copy the return value to. A pointer to this space is
365 passed as an implicit first argument, always in R0. */
368 tic80_push_arguments (nargs, args, sp, struct_return, struct_addr)
372 unsigned char struct_return;
373 CORE_ADDR struct_addr;
375 int stack_offset, stack_alloc;
383 int odd_sized_struct;
386 /* first force sp to a 4-byte alignment */
389 argreg = ARG0_REGNUM;
390 /* The "struct return pointer" pseudo-argument goes in R0 */
392 write_register (argreg++, struct_addr);
394 /* Now make sure there's space on the stack */
395 for (argnum = 0, stack_alloc = 0;
396 argnum < nargs; argnum++)
397 stack_alloc += ((TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3);
398 sp -= stack_alloc; /* make room on stack for args */
401 /* Now load as many as possible of the first arguments into
402 registers, and push the rest onto the stack. There are 16 bytes
403 in four registers available. Loop thru args from first to last. */
405 argreg = ARG0_REGNUM;
406 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
408 type = VALUE_TYPE (args[argnum]);
409 len = TYPE_LENGTH (type);
410 memset (valbuf, 0, sizeof (valbuf));
411 val = (char *) VALUE_CONTENTS (args[argnum]);
413 /* FIXME -- tic80 can take doubleword arguments in register pairs */
414 is_struct = (type->code == TYPE_CODE_STRUCT);
415 odd_sized_struct = 0;
420 { /* value gets right-justified in the register or stack word */
421 memcpy (valbuf + (4 - len), val, len);
424 if (len > 4 && (len & 3) != 0)
425 odd_sized_struct = 1; /* such structs go entirely on stack */
429 /* Structs are always passed by reference. */
430 write_register (argreg, sp + stack_offset);
436 if (is_struct || argreg > ARGLAST_REGNUM || odd_sized_struct)
437 { /* must go on the stack */
438 write_memory (sp + stack_offset, val, 4);
441 /* NOTE WELL!!!!! This is not an "else if" clause!!!
442 That's because some things get passed on the stack
443 AND in the registers! */
444 if (!is_struct && argreg <= ARGLAST_REGNUM)
445 { /* there's room in a register */
446 regval = extract_address (val, REGISTER_RAW_SIZE (argreg));
447 write_register (argreg, regval);
448 argreg += 2; /* FIXME -- what about doubleword args? */
450 /* Store the value 4 bytes at a time. This means that things
451 larger than 4 bytes may go partly in registers and partly
453 len -= REGISTER_RAW_SIZE (argreg);
454 val += REGISTER_RAW_SIZE (argreg);
460 /* Function: tic80_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. */
469 unsigned long psw = read_register (PSW_REGNUM);
471 if (psw & 0x80) /* stack mode: user or interrupt */
472 write_register (SPU_REGNUM, val);
474 write_register (SPI_REGNUM, val);
476 write_register (SP_REGNUM, val);
480 _initialize_tic80_tdep ()
482 tm_print_insn = print_insn_tic80;