* Makefile.in (LIBCOMMON): Define.
[deliverable/binutils-gdb.git] / gdb / sh-tdep.c
CommitLineData
66d05e03 1/* Target-dependent code for Hitachi Super-H, for GDB.
00dd4fd9 2 Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
9faacb92
SC
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
6c9638b4 18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
9faacb92
SC
19
20/*
21 Contributed by Steve Chamberlain
22 sac@cygnus.com
23 */
24
25#include "defs.h"
26#include "frame.h"
27#include "obstack.h"
28#include "symtab.h"
29#include "gdbtypes.h"
30#include "gdbcmd.h"
66d05e03 31#include "gdbcore.h"
9faacb92
SC
32#include "value.h"
33#include "dis-asm.h"
69992fc8 34#include "inferior.h" /* for BEFORE_TEXT_END etc. */
5f2f2809 35
cd21cbc4
MA
36extern int remote_write_size; /* in remote.c */
37
00dd4fd9
SS
38/* Default to the original SH. */
39
40#define DEFAULT_SH_TYPE "sh"
41
42/* This value is the model of SH in use. */
43
44char *sh_processor_type;
45
46char *tmp_sh_processor_type;
47
48/* A set of original names, to be used when restoring back to generic
49 registers from a specific set. */
50
51char *sh_generic_reg_names[] = REGISTER_NAMES;
52
53char *sh_reg_names[] = {
12ffa10c
SS
54 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
55 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
56 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
57 "", "",
58 "", "", "", "", "", "", "", "",
59 "", "", "", "", "", "", "", "",
60 "", "",
61 "", "", "", "", "", "", "", "",
62 "", "", "", "", "", "", "", "",
00dd4fd9
SS
63};
64
65char *sh3_reg_names[] = {
12ffa10c
SS
66 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
67 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
68 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
69 "", "",
70 "", "", "", "", "", "", "", "",
71 "", "", "", "", "", "", "", "",
72 "ssr", "spc",
05535e79 73 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
12ffa10c 74 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1"
05535e79
SS
75};
76
77char *sh3e_reg_names[] = {
12ffa10c
SS
78 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
79 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
80 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
81 "fpul", "fpscr",
82 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
83 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
84 "ssr", "spc",
05535e79
SS
85 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
86 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
00dd4fd9
SS
87};
88
89struct {
90 char *name;
91 char **regnames;
92} sh_processor_type_table[] = {
93 { "sh", sh_reg_names },
94 { "sh3", sh3_reg_names },
05535e79 95 { "sh3e", sh3e_reg_names },
00dd4fd9
SS
96 { NULL, NULL }
97};
98
9faacb92
SC
99/* Prologue looks like
100 [mov.l <regs>,@-r15]...
101 [sts.l pr,@-r15]
102 [mov.l r14,@-r15]
103 [mov r15,r14]
104*/
105
106#define IS_STS(x) ((x) == 0x4f22)
107#define IS_PUSH(x) (((x) & 0xff0f) == 0x2f06)
108#define GET_PUSHED_REG(x) (((x) >> 4) & 0xf)
109#define IS_MOV_SP_FP(x) ((x) == 0x6ef3)
110#define IS_ADD_SP(x) (((x) & 0xff00) == 0x7f00)
c4deed18
SC
111#define IS_MOV_R3(x) (((x) & 0xff00) == 0x1a00)
112#define IS_SHLL_R3(x) ((x) == 0x4300)
113#define IS_ADD_R3SP(x) ((x) == 0x3f3c)
9faacb92
SC
114
115/* Skip any prologue before the guts of a function */
116
117CORE_ADDR
118sh_skip_prologue (start_pc)
119 CORE_ADDR start_pc;
9faacb92
SC
120{
121 int w;
122
123 w = read_memory_integer (start_pc, 2);
124 while (IS_STS (w)
125 || IS_PUSH (w)
c4deed18 126 || IS_MOV_SP_FP (w)
5f2f2809
SC
127 || IS_MOV_R3 (w)
128 || IS_ADD_R3SP (w)
129 || IS_ADD_SP (w)
130 || IS_SHLL_R3 (w))
9faacb92
SC
131 {
132 start_pc += 2;
133 w = read_memory_integer (start_pc, 2);
134 }
135
136 return start_pc;
137}
138
18b46e7c 139/* Disassemble an instruction. */
9faacb92
SC
140
141int
18b46e7c
SS
142gdb_print_insn_sh (memaddr, info)
143 bfd_vma memaddr;
144 disassemble_info *info;
9faacb92 145{
5f2f2809 146 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
5076ecd0 147 return print_insn_sh (memaddr, info);
5f2f2809 148 else
5076ecd0 149 return print_insn_shl (memaddr, info);
9faacb92 150}
18b46e7c 151
9faacb92
SC
152/* Given a GDB frame, determine the address of the calling function's frame.
153 This will be used to create a new GDB frame struct, and then
154 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
155
156 For us, the frame address is its stack pointer value, so we look up
157 the function prologue to determine the caller's sp value, and return it. */
158
669caa9c
SS
159CORE_ADDR
160sh_frame_chain (frame)
161 struct frame_info *frame;
9faacb92 162{
69992fc8
MS
163 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
164 return frame->frame; /* dummy frame same as caller's frame */
669caa9c
SS
165 if (!inside_entry_file (frame->pc))
166 return read_memory_integer (FRAME_FP (frame) + frame->f_offset, 4);
9faacb92
SC
167 else
168 return 0;
169}
170
69992fc8
MS
171/* Find REGNUM on the stack. Otherwise, it's in an active register. One thing
172 we might want to do here is to check REGNUM against the clobber mask, and
173 somehow flag it as invalid if it isn't saved on the stack somewhere. This
174 would provide a graceful failure mode when trying to get the value of
175 caller-saves registers for an inner frame. */
176
177CORE_ADDR
178sh_find_callers_reg (fi, regnum)
179 struct frame_info *fi;
180 int regnum;
181{
182 struct frame_saved_regs fsr;
183
184 for (; fi; fi = fi->next)
185 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
186 /* When the caller requests PR from the dummy frame, we return PC because
187 that's where the previous routine appears to have done a call from. */
188 return generic_read_register_dummy (fi, regnum);
189 else
190 {
191 FRAME_FIND_SAVED_REGS(fi, fsr);
192 if (fsr.regs[regnum] != 0)
193 return read_memory_integer (fsr.regs[regnum],
194 REGISTER_RAW_SIZE(regnum));
195 }
196 return read_register (regnum);
197}
198
66d05e03
SS
199/* Put here the code to store, into a struct frame_saved_regs, the
200 addresses of the saved registers of frame described by FRAME_INFO.
9faacb92 201 This includes special registers such as pc and fp saved in special
66d05e03
SS
202 ways in the stack frame. sp is even more special: the address we
203 return for it IS the sp for the next frame. */
9faacb92 204
69992fc8
MS
205/* FIXME! A lot of this should be abstracted out into a sh_scan_prologue
206 function, and the struct frame_info should have a frame_saved_regs
207 embedded in it, so we would only have to do this once. */
208
9faacb92 209void
69992fc8 210sh_frame_find_saved_regs (fi, fsr)
9faacb92
SC
211 struct frame_info *fi;
212 struct frame_saved_regs *fsr;
213{
7ccb1e44 214 int where[NUM_REGS];
9faacb92
SC
215 int rn;
216 int have_fp = 0;
217 int depth;
218 int pc;
219 int opc;
220 int insn;
c4deed18 221 int r3_val = 0;
69992fc8
MS
222 char * dummy_regs = generic_find_dummy_frame (fi->pc, fi->frame, fi->frame);
223
224 if (dummy_regs)
225 {
226 /* DANGER! This is ONLY going to work if the char buffer format of
227 the saved registers is byte-for-byte identical to the
228 CORE_ADDR regs[NUM_REGS] format used by struct frame_saved_regs! */
229 memcpy (&fsr->regs, dummy_regs, sizeof(fsr));
230 return;
231 }
9faacb92
SC
232
233 opc = pc = get_pc_function_start (fi->pc);
234
235 insn = read_memory_integer (pc, 2);
236
c4deed18
SC
237 fi->leaf_function = 1;
238 fi->f_offset = 0;
239
9faacb92
SC
240 for (rn = 0; rn < NUM_REGS; rn++)
241 where[rn] = -1;
242
243 depth = 0;
244
245 /* Loop around examining the prologue insns, but give up
246 after 15 of them, since we're getting silly then */
247 while (pc < opc + 15 * 2)
248 {
249 /* See where the registers will be saved to */
250 if (IS_PUSH (insn))
251 {
252 pc += 2;
253 rn = GET_PUSHED_REG (insn);
254 where[rn] = depth;
255 insn = read_memory_integer (pc, 2);
256 depth += 4;
257 }
258 else if (IS_STS (insn))
259 {
260 pc += 2;
261 where[PR_REGNUM] = depth;
262 insn = read_memory_integer (pc, 2);
c4deed18
SC
263 /* If we're storing the pr then this isn't a leaf */
264 fi->leaf_function = 0;
9faacb92
SC
265 depth += 4;
266 }
c4deed18
SC
267 else if (IS_MOV_R3 (insn))
268 {
5f2f2809
SC
269 r3_val = (char) (insn & 0xff);
270 pc += 2;
c4deed18
SC
271 insn = read_memory_integer (pc, 2);
272 }
273 else if (IS_SHLL_R3 (insn))
274 {
5f2f2809
SC
275 r3_val <<= 1;
276 pc += 2;
c4deed18
SC
277 insn = read_memory_integer (pc, 2);
278 }
279 else if (IS_ADD_R3SP (insn))
280 {
281 depth += -r3_val;
5f2f2809 282 pc += 2;
c4deed18
SC
283 insn = read_memory_integer (pc, 2);
284 }
9faacb92
SC
285 else if (IS_ADD_SP (insn))
286 {
287 pc += 2;
288 depth += -((char) (insn & 0xff));
289 insn = read_memory_integer (pc, 2);
290 }
df14b38b
SC
291 else
292 break;
9faacb92
SC
293 }
294
295 /* Now we know how deep things are, we can work out their addresses */
296
297 for (rn = 0; rn < NUM_REGS; rn++)
298 {
299 if (where[rn] >= 0)
300 {
301 if (rn == FP_REGNUM)
302 have_fp = 1;
303
304 fsr->regs[rn] = fi->frame - where[rn] + depth - 4;
305 }
306 else
307 {
308 fsr->regs[rn] = 0;
309 }
310 }
311
312 if (have_fp)
313 {
9faacb92
SC
314 fsr->regs[SP_REGNUM] = read_memory_integer (fsr->regs[FP_REGNUM], 4);
315 }
316 else
317 {
318 fsr->regs[SP_REGNUM] = fi->frame - 4;
319 }
320
c4deed18 321 fi->f_offset = depth - where[FP_REGNUM] - 4;
9faacb92
SC
322 /* Work out the return pc - either from the saved pr or the pr
323 value */
9faacb92
SC
324}
325
326/* initialize the extra info saved in a FRAME */
327
328void
69992fc8 329sh_init_extra_frame_info (fromleaf, fi)
9faacb92
SC
330 int fromleaf;
331 struct frame_info *fi;
332{
69992fc8 333 struct frame_saved_regs fsr;
66d05e03 334
5c8ba017 335 if (fi->next)
69992fc8 336 fi->pc = FRAME_SAVED_PC (fi->next);
5c8ba017 337
69992fc8
MS
338 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
339 {
340 /* We need to setup fi->frame here because run_stack_dummy gets it wrong
341 by assuming it's always FP. */
342 fi->frame = generic_read_register_dummy (fi, SP_REGNUM);
343 fi->return_pc = generic_read_register_dummy (fi, PC_REGNUM);
344 fi->f_offset = -(CALL_DUMMY_LENGTH + 4);
345 fi->leaf_function = 0;
346 return;
347 }
348 else
349 {
350 FRAME_FIND_SAVED_REGS (fi, fsr);
351 fi->return_pc = sh_find_callers_reg (fi, PR_REGNUM);
352 }
9faacb92
SC
353}
354
9faacb92
SC
355/* Discard from the stack the innermost frame,
356 restoring all saved registers. */
357
358void
69992fc8 359sh_pop_frame ()
9faacb92 360{
669caa9c 361 register struct frame_info *frame = get_current_frame ();
9faacb92
SC
362 register CORE_ADDR fp;
363 register int regnum;
364 struct frame_saved_regs fsr;
9faacb92 365
69992fc8
MS
366 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
367 generic_pop_dummy_frame ();
368 else
369 {
370 fp = FRAME_FP (frame);
371 get_frame_saved_regs (frame, &fsr);
9faacb92 372
69992fc8
MS
373 /* Copy regs from where they were saved in the frame */
374 for (regnum = 0; regnum < NUM_REGS; regnum++)
9faacb92 375 if (fsr.regs[regnum])
69992fc8
MS
376 write_register (regnum, read_memory_integer (fsr.regs[regnum], 4));
377
378 write_register (PC_REGNUM, frame->return_pc);
379 write_register (SP_REGNUM, fp + 4);
380 }
381 flush_cached_frames ();
382}
383
384/* Function: push_arguments
385 Setup the function arguments for calling a function in the inferior.
386
387 On the Hitachi SH architecture, there are four registers (R4 to R7)
388 which are dedicated for passing function arguments. Up to the first
389 four arguments (depending on size) may go into these registers.
390 The rest go on the stack.
391
392 Arguments that are smaller than 4 bytes will still take up a whole
393 register or a whole 32-bit word on the stack, and will be
394 right-justified in the register or the stack word. This includes
395 chars, shorts, and small aggregate types.
396
397 Arguments that are larger than 4 bytes may be split between two or
398 more registers. If there are not enough registers free, an argument
399 may be passed partly in a register (or registers), and partly on the
400 stack. This includes doubles, long longs, and larger aggregates.
401 As far as I know, there is no upper limit to the size of aggregates
402 that will be passed in this way; in other words, the convention of
403 passing a pointer to a large aggregate instead of a copy is not used.
404
405 An exceptional case exists for struct arguments (and possibly other
406 aggregates such as arrays) if the size is larger than 4 bytes but
407 not a multiple of 4 bytes. In this case the argument is never split
408 between the registers and the stack, but instead is copied in its
409 entirety onto the stack, AND also copied into as many registers as
410 there is room for. In other words, space in registers permitting,
411 two copies of the same argument are passed in. As far as I can tell,
412 only the one on the stack is used, although that may be a function
413 of the level of compiler optimization. I suspect this is a compiler
414 bug. Arguments of these odd sizes are left-justified within the
415 word (as opposed to arguments smaller than 4 bytes, which are
416 right-justified).
417
418
419 If the function is to return an aggregate type such as a struct, it
420 is either returned in the normal return value register R0 (if its
421 size is no greater than one byte), or else the caller must allocate
422 space into which the callee will copy the return value (if the size
423 is greater than one byte). In this case, a pointer to the return
424 value location is passed into the callee in register R2, which does
425 not displace any of the other arguments passed in via registers R4
426 to R7. */
427
428CORE_ADDR
429sh_push_arguments (nargs, args, sp, struct_return, struct_addr)
430 int nargs;
431 value_ptr *args;
432 CORE_ADDR sp;
433 unsigned char struct_return;
434 CORE_ADDR struct_addr;
435{
436 int argreg;
437 int argnum;
438 CORE_ADDR regval;
439 char *val;
440 char valbuf[4];
441 int len;
442 int push[4]; /* some of the first 4 args may not need to be pushed
443 onto the stack, because they can go in registers */
444
445 /* first force sp to a 4-byte alignment */
446 sp = sp & ~3;
447
448 /* The "struct return pointer" pseudo-argument has its own dedicated
449 register */
450 if (struct_return)
451 write_register (STRUCT_RETURN_REGNUM, struct_addr);
452
453 /* Now load as many as possible of the first arguments into registers.
454 There are 16 bytes in four registers available.
455 Loop thru args from first to last. */
456 push[0] = push[1] = push[2] = push[3] = 0;
457 for (argnum = 0, argreg = ARG0_REGNUM;
458 argnum < nargs && argreg <= ARGLAST_REGNUM;
459 argnum++)
460 {
461 struct type *type = VALUE_TYPE (args[argnum]);
462
463 len = TYPE_LENGTH (type);
464
465 switch (TYPE_CODE(type)) {
466 case TYPE_CODE_STRUCT:
467 case TYPE_CODE_UNION:
468 /* case TYPE_CODE_ARRAY: case TYPE_CODE_STRING: */
469 if (len <= 4 || (len & ~3) == 0)
470 push[argnum] = 0; /* doesn't get pushed onto stack */
471 else
472 push[argnum] = len; /* does get pushed onto stack */
473 break;
474 default:
475 push[argnum] = 0; /* doesn't get pushed onto stack */
476 }
477 if (len < 4)
478 { /* value gets right-justified in the register */
479 memcpy(valbuf + (4 - len),
480 (char *) VALUE_CONTENTS (args[argnum]), len);
481 val = valbuf;
482 }
483 else
484 val = (char *) VALUE_CONTENTS (args[argnum]);
485
486 while (len > 0)
9faacb92 487 {
69992fc8
MS
488 regval = extract_address (val, REGISTER_RAW_SIZE (argreg));
489 write_register (argreg, regval);
490
491 len -= REGISTER_RAW_SIZE (argreg);
492 val += REGISTER_RAW_SIZE (argreg);
493 argreg++;
494 if (argreg > ARGLAST_REGNUM)
495 {
496 push[argnum] = len; /* ran out of arg passing registers! */
497 break; /* len bytes remain to go onto stack */
498 }
9faacb92
SC
499 }
500 }
501
69992fc8
MS
502 /* Now push as many as necessary of the remaining arguments onto the stack.
503 For args 0 to 3, the arg may have been passed in a register.
504 Loop thru args from last to first. */
505 for (argnum = nargs-1; argnum >= 0; --argnum)
506 {
507 if (argnum < 4 && push[argnum] == 0)
508 continue; /* no need to push this arg */
509
510 len = TYPE_LENGTH (VALUE_TYPE (args[argnum]));
511 if (len < 4)
512 {
513 memcpy(valbuf + (4 - len),
514 (char *) VALUE_CONTENTS (args[argnum]), len);
515 val = valbuf;
516 }
517 else
518 val = (char *) VALUE_CONTENTS (args[argnum]);
519
520 if (argnum < 4)
521 if (len > push[argnum]) /* some part may already be in a reg */
522 {
523 val += (len - push[argnum]);
524 len = push[argnum];
525 }
526
527 sp -= (len + 3) & ~3;
528 write_memory (sp, val, len);
529 }
530 return sp;
531}
532
533/* Function: push_return_address (pc)
534 Set up the return address for the inferior function call.
535 Necessary for targets where we don't actually execute a JSR/BSR instruction */
536
537void
538sh_push_return_address (pc)
539 CORE_ADDR pc;
540{
541 write_register (PR_REGNUM, entry_point_address ());
9faacb92 542}
edd01519 543
00dd4fd9
SS
544/* Command to set the processor type. */
545
546void
547sh_set_processor_type_command (args, from_tty)
548 char *args;
549 int from_tty;
550{
551 int i;
552 char *temp;
553
554 /* The `set' commands work by setting the value, then calling the hook,
555 so we let the general command modify a scratch location, then decide
556 here if we really want to modify the processor type. */
557 if (tmp_sh_processor_type == NULL || *tmp_sh_processor_type == '\0')
558 {
559 printf_unfiltered ("The known SH processor types are as follows:\n\n");
560 for (i = 0; sh_processor_type_table[i].name != NULL; ++i)
561 printf_unfiltered ("%s\n", sh_processor_type_table[i].name);
562
563 /* Restore the value. */
564 tmp_sh_processor_type = strsave (sh_processor_type);
565
566 return;
567 }
568
569 if (!sh_set_processor_type (tmp_sh_processor_type))
570 {
571 /* Restore to a valid value before erroring out. */
572 temp = tmp_sh_processor_type;
573 tmp_sh_processor_type = strsave (sh_processor_type);
574 error ("Unknown processor type `%s'.", temp);
575 }
576}
577
12ffa10c
SS
578/* This is a dummy not actually run. */
579
00dd4fd9
SS
580static void
581sh_show_processor_type_command (args, from_tty)
582 char *args;
583 int from_tty;
584{
585}
586
587/* Modify the actual processor type. */
588
589int
590sh_set_processor_type (str)
591 char *str;
592{
593 int i, j;
594
595 if (str == NULL)
596 return 0;
597
598 for (i = 0; sh_processor_type_table[i].name != NULL; ++i)
599 {
600 if (strcasecmp (str, sh_processor_type_table[i].name) == 0)
601 {
602 sh_processor_type = str;
603
604 for (j = 0; j < NUM_REGS; ++j)
605 reg_names[j] = sh_processor_type_table[i].regnames[j];
606
607 return 1;
608 }
609 }
610
611 return 0;
612}
613
edd01519 614/* Print the registers in a form similar to the E7000 */
669caa9c 615
edd01519 616static void
69992fc8 617sh_show_regs (args, from_tty)
669caa9c
SS
618 char *args;
619 int from_tty;
edd01519 620{
5f2f2809
SC
621 printf_filtered ("PC=%08x SR=%08x PR=%08x MACH=%08x MACHL=%08x\n",
622 read_register (PC_REGNUM),
623 read_register (SR_REGNUM),
624 read_register (PR_REGNUM),
625 read_register (MACH_REGNUM),
626 read_register (MACL_REGNUM));
627
628 printf_filtered ("R0-R7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
629 read_register (0),
630 read_register (1),
631 read_register (2),
632 read_register (3),
633 read_register (4),
634 read_register (5),
635 read_register (6),
636 read_register (7));
637 printf_filtered ("R8-R15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
638 read_register (8),
639 read_register (9),
640 read_register (10),
641 read_register (11),
642 read_register (12),
643 read_register (13),
644 read_register (14),
645 read_register (15));
edd01519 646}
69992fc8
MS
647
648void
649sh_extract_return_value (type, regbuf, valbuf)
650 struct type *type;
651 void *regbuf;
652 void *valbuf;
653{
654 int len = TYPE_LENGTH(type);
655
656 if (len <= 4)
657 memcpy (valbuf, ((char *) regbuf) + 4 - len, len);
658 else if (len <= 8)
659 memcpy (valbuf, ((char *) regbuf) + 8 - len, len);
660 else
661 error ("bad size for return value");
662}
663
976bb0be 664void
df14b38b
SC
665_initialize_sh_tdep ()
666{
00dd4fd9
SS
667 struct cmd_list_element *c;
668
18b46e7c
SS
669 tm_print_insn = gdb_print_insn_sh;
670
00dd4fd9
SS
671 c = add_set_cmd ("processor", class_support, var_string_noescape,
672 (char *) &tmp_sh_processor_type,
673 "Set the type of SH processor in use.\n\
674Set this to be able to access processor-type-specific registers.\n\
675",
676 &setlist);
677 c->function.cfunc = sh_set_processor_type_command;
678 c = add_show_from_set (c, &showlist);
679 c->function.cfunc = sh_show_processor_type_command;
680
681 tmp_sh_processor_type = strsave (DEFAULT_SH_TYPE);
682 sh_set_processor_type_command (strsave (DEFAULT_SH_TYPE), 0);
683
69992fc8 684 add_com ("regs", class_vars, sh_show_regs, "Print all registers");
cd21cbc4
MA
685
686 /* Reduce the remote write size because some CMONs can't take
687 more than 400 bytes in a packet. 300 seems like a safe bet. */
688 remote_write_size = 300;
df14b38b 689}
69992fc8
MS
690
691/*
692 * DUMMY FRAMES
693 *
694 * The following code serves to maintain the dummy stack frames for
695 * inferior function calls (ie. when gdb calls into the inferior via
696 * call_function_by_hand). This code saves the machine state before
697 * the call in host memory, so it must maintain an independant stack
698 * and keep it consistant etc. I am attempting to make this code
699 * generic enough to be used by many targets.
700 *
701 * The cheapest and most generic way to do CALL_DUMMY on a new target
702 * is probably to define CALL_DUMMY to be empty, CALL_DUMMY_LENGTH to zero,
703 * and CALL_DUMMY_LOCATION to AT_ENTRY. Then you must remember to define
704 * PUSH_RETURN_ADDRESS, because there won't be a call instruction to do it.
705 */
706
707/* Dummy frame. This saves the processor state just prior to setting up the
708 inferior function call. On most targets, the registers are saved on the
709 target stack, but that really slows down function calls. */
710
711struct dummy_frame
712{
713 struct dummy_frame *next;
714
715 CORE_ADDR pc;
716 CORE_ADDR fp;
717 CORE_ADDR sp;
718 char regs[REGISTER_BYTES];
719};
720
721static struct dummy_frame *dummy_frame_stack = NULL;
722
723/* Function: find_dummy_frame(pc, fp, sp)
724 Search the stack of dummy frames for one matching the given PC, FP and SP.
725 This is the work-horse for pc_in_call_dummy and read_register_dummy */
726
727char *
728generic_find_dummy_frame (pc, fp, sp)
729 CORE_ADDR pc;
730 CORE_ADDR fp;
731 CORE_ADDR sp;
732{
733 struct dummy_frame * dummyframe;
734 CORE_ADDR bkpt_address;
735 extern CORE_ADDR text_end;
736
737#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT
738 bkpt_address = entry_point_address () + CALL_DUMMY_BREAKPOINT_OFFSET;
739 if (pc != bkpt_address &&
740 pc != bkpt_address + DECR_PC_AFTER_BREAK)
741 return 0;
742#endif /* AT_ENTRY_POINT */
743
744#if CALL_DUMMY_LOCATION == BEFORE_TEXT_END
745 bkpt_address = text_end - CALL_DUMMY_LENGTH + CALL_DUMMY_BREAKPOINT_OFFSET;
746 if (pc != bkpt_address &&
747 pc != bkpt_address + DECR_PC_AFTER_BREAK)
748 return 0;
749#endif /* BEFORE_TEXT_END */
750
751#if CALL_DUMMY_LOCATION == AFTER_TEXT_END
752 bkpt_address = text_end + CALL_DUMMY_BREAKPOINT_OFFSET;
753 if (pc != bkpt_address &&
754 pc != bkpt_address + DECR_PC_AFTER_BREAK)
755 return 0;
756#endif /* AFTER_TEXT_END */
757
758 for (dummyframe = dummy_frame_stack;
759 dummyframe;
760 dummyframe = dummyframe->next)
761 if (fp == dummyframe->fp ||
762 sp == dummyframe->sp)
763 {
764#if CALL_DUMMY_LOCATION == ON_STACK
765 CORE_ADDR bkpt_offset; /* distance from original frame ptr to bkpt */
766
767 if (1 INNER_THAN 2)
768 bkpt_offset = CALL_DUMMY_BREAK_OFFSET;
769 else
770 bkpt_offset = CALL_DUMMY_LENGTH - CALL_DUMMY_BREAK_OFFSET;
771
772 if (pc + bkpt_offset == dummyframe->fp ||
773 pc + bkpt_offset == dummyframe->sp ||
774 pc + bkpt_offset + DECR_PC_AFTER_BREAK == dummyframe->fp ||
775 pc + bkpt_offset + DECR_PC_AFTER_BREAK == dummyframe->sp)
776#endif /* ON_STACK */
777 return dummyframe->regs;
778 }
779 return 0;
780}
781
782/* Function: pc_in_call_dummy (pc, fp, sp)
783 Return true if this is a dummy frame created by gdb for an inferior call */
784
785int
786generic_pc_in_call_dummy (pc, fp, sp)
787 CORE_ADDR pc;
788 CORE_ADDR fp;
789 CORE_ADDR sp;
790{
791 /* if find_dummy_frame succeeds, then PC is in a call dummy */
792 return (generic_find_dummy_frame (pc, fp, sp) != 0);
793}
794
795/* Function: read_register_dummy (pc, fp, sp, regno)
796 Find a saved register from before GDB calls a function in the inferior */
797
798CORE_ADDR
799generic_read_register_dummy (fi, regno)
800 struct frame_info *fi;
801 int regno;
802{
803 char *dummy_regs = generic_find_dummy_frame (fi->pc, fi->frame, NULL);
804
805 if (dummy_regs)
806 return extract_address (&dummy_regs[REGISTER_BYTE (regno)],
807 REGISTER_RAW_SIZE(regno));
808 else
809 return 0;
810}
811
812/* Save all the registers on the dummy frame stack. Most ports save the
813 registers on the target stack. This results in lots of unnecessary memory
814 references, which are slow when debugging via a serial line. Instead, we
815 save all the registers internally, and never write them to the stack. The
816 registers get restored when the called function returns to the entry point,
817 where a breakpoint is laying in wait. */
818
819void
820generic_push_dummy_frame ()
821{
822 struct dummy_frame *dummy_frame;
823 CORE_ADDR fp = read_register(FP_REGNUM);
824
825 /* check to see if there are stale dummy frames,
826 perhaps left over from when a longjump took us out of a
827 function that was called by the debugger */
828
829 dummy_frame = dummy_frame_stack;
830 while (dummy_frame)
831 if (dummy_frame->fp INNER_THAN fp) /* stale -- destroy! */
832 {
833 dummy_frame_stack = dummy_frame->next;
834 free (dummy_frame);
835 dummy_frame = dummy_frame_stack;
836 }
837 else
838 dummy_frame = dummy_frame->next;
839
840 dummy_frame = xmalloc (sizeof (struct dummy_frame));
841
842 read_register_bytes (0, dummy_frame->regs, REGISTER_BYTES);
843 dummy_frame->pc = read_register (PC_REGNUM);
844 dummy_frame->fp = read_register (FP_REGNUM);
845 dummy_frame->sp = read_register (SP_REGNUM);
846 dummy_frame->next = dummy_frame_stack;
847 dummy_frame_stack = dummy_frame;
848}
849
850/* Function: pop_dummy_frame
851 Restore the machine state from a saved dummy stack frame. */
852
853void
854generic_pop_dummy_frame ()
855{
856 struct dummy_frame *dummy_frame = dummy_frame_stack;
857
858 if (!dummy_frame)
859 error ("Can't pop dummy frame!");
860 dummy_frame_stack = dummy_frame->next;
861 write_register_bytes (0, dummy_frame->regs, REGISTER_BYTES);
862 free (dummy_frame);
863}
864
865/* Function: frame_chain_valid
866 Returns true for a user frame or a call_function_by_hand dummy frame,
867 and false for the CRT0 start-up frame. Purpose is to terminate backtrace */
868
869int
870generic_frame_chain_valid (fp, fi)
871 CORE_ADDR fp;
872 struct frame_info *fi;
873{
874 if (PC_IN_CALL_DUMMY(FRAME_SAVED_PC(fi), fp, fp))
875 return 1; /* don't prune CALL_DUMMY frames */
876 else /* fall back to default algorithm (see frame.h) */
877 return (fp != 0 && !inside_entry_file (FRAME_SAVED_PC(fi)));
878}
879
This page took 0.250482 seconds and 4 git commands to generate.