1 /* Target-dependent code for Hitachi Super-H, for GDB.
2 Copyright (C) 1993, 1994, 1995, 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, Boston, MA 02111-1307, USA. */
21 Contributed by Steve Chamberlain
35 #include "inferior.h" /* for BEFORE_TEXT_END etc. */
36 #include "gdb_string.h"
38 extern int remote_write_size
; /* in remote.c */
40 /* Default to the original SH. */
42 #define DEFAULT_SH_TYPE "sh"
44 /* This value is the model of SH in use. */
46 char *sh_processor_type
;
48 char *tmp_sh_processor_type
;
50 /* A set of original names, to be used when restoring back to generic
51 registers from a specific set. */
53 char *sh_generic_reg_names
[] = REGISTER_NAMES
;
55 char *sh_reg_names
[] = {
56 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
57 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
58 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
60 "", "", "", "", "", "", "", "",
61 "", "", "", "", "", "", "", "",
63 "", "", "", "", "", "", "", "",
64 "", "", "", "", "", "", "", "",
67 char *sh3_reg_names
[] = {
68 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
69 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
70 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
72 "", "", "", "", "", "", "", "",
73 "", "", "", "", "", "", "", "",
75 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
76 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1"
79 char *sh3e_reg_names
[] = {
80 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
81 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
82 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
84 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
85 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
87 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
88 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
94 } sh_processor_type_table
[] = {
95 { "sh", sh_reg_names
},
96 { "sh3", sh3_reg_names
},
97 { "sh3e", sh3e_reg_names
},
101 /* Prologue looks like
102 [mov.l <regs>,@-r15]...
108 #define IS_STS(x) ((x) == 0x4f22)
109 #define IS_PUSH(x) (((x) & 0xff0f) == 0x2f06)
110 #define GET_PUSHED_REG(x) (((x) >> 4) & 0xf)
111 #define IS_MOV_SP_FP(x) ((x) == 0x6ef3)
112 #define IS_ADD_SP(x) (((x) & 0xff00) == 0x7f00)
113 #define IS_MOV_R3(x) (((x) & 0xff00) == 0x1a00)
114 #define IS_SHLL_R3(x) ((x) == 0x4300)
115 #define IS_ADD_R3SP(x) ((x) == 0x3f3c)
117 /* Skip any prologue before the guts of a function */
120 sh_skip_prologue (start_pc
)
125 w
= read_memory_integer (start_pc
, 2);
135 w
= read_memory_integer (start_pc
, 2);
141 /* Disassemble an instruction. */
144 gdb_print_insn_sh (memaddr
, info
)
146 disassemble_info
*info
;
148 if (TARGET_BYTE_ORDER
== BIG_ENDIAN
)
149 return print_insn_sh (memaddr
, info
);
151 return print_insn_shl (memaddr
, info
);
154 /* Given a GDB frame, determine the address of the calling function's frame.
155 This will be used to create a new GDB frame struct, and then
156 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
158 For us, the frame address is its stack pointer value, so we look up
159 the function prologue to determine the caller's sp value, and return it. */
162 sh_frame_chain (frame
)
163 struct frame_info
*frame
;
165 if (PC_IN_CALL_DUMMY (frame
->pc
, frame
->frame
, frame
->frame
))
166 return frame
->frame
; /* dummy frame same as caller's frame */
167 if (!inside_entry_file (frame
->pc
))
168 return read_memory_integer (FRAME_FP (frame
) + frame
->f_offset
, 4);
173 /* Find REGNUM on the stack. Otherwise, it's in an active register. One thing
174 we might want to do here is to check REGNUM against the clobber mask, and
175 somehow flag it as invalid if it isn't saved on the stack somewhere. This
176 would provide a graceful failure mode when trying to get the value of
177 caller-saves registers for an inner frame. */
180 sh_find_callers_reg (fi
, regnum
)
181 struct frame_info
*fi
;
184 struct frame_saved_regs fsr
;
186 for (; fi
; fi
= fi
->next
)
187 if (PC_IN_CALL_DUMMY (fi
->pc
, fi
->frame
, fi
->frame
))
188 /* When the caller requests PR from the dummy frame, we return PC because
189 that's where the previous routine appears to have done a call from. */
190 return generic_read_register_dummy (fi
->pc
, fi
->frame
, regnum
);
193 FRAME_FIND_SAVED_REGS(fi
, fsr
);
194 if (fsr
.regs
[regnum
] != 0)
195 return read_memory_integer (fsr
.regs
[regnum
],
196 REGISTER_RAW_SIZE(regnum
));
198 return read_register (regnum
);
201 /* Put here the code to store, into a struct frame_saved_regs, the
202 addresses of the saved registers of frame described by FRAME_INFO.
203 This includes special registers such as pc and fp saved in special
204 ways in the stack frame. sp is even more special: the address we
205 return for it IS the sp for the next frame. */
208 sh_frame_find_saved_regs (fi
, fsr
)
209 struct frame_info
*fi
;
210 struct frame_saved_regs
*fsr
;
220 char * dummy_regs
= generic_find_dummy_frame (fi
->pc
, fi
->frame
);
224 /* DANGER! This is ONLY going to work if the char buffer format of
225 the saved registers is byte-for-byte identical to the
226 CORE_ADDR regs[NUM_REGS] format used by struct frame_saved_regs! */
227 memcpy (&fsr
->regs
, dummy_regs
, sizeof(fsr
));
231 opc
= pc
= get_pc_function_start (fi
->pc
);
233 insn
= read_memory_integer (pc
, 2);
235 fi
->leaf_function
= 1;
238 for (rn
= 0; rn
< NUM_REGS
; rn
++)
243 /* Loop around examining the prologue insns, but give up
244 after 15 of them, since we're getting silly then */
245 while (pc
< opc
+ 15 * 2)
247 /* See where the registers will be saved to */
251 rn
= GET_PUSHED_REG (insn
);
253 insn
= read_memory_integer (pc
, 2);
256 else if (IS_STS (insn
))
259 where
[PR_REGNUM
] = depth
;
260 insn
= read_memory_integer (pc
, 2);
261 /* If we're storing the pr then this isn't a leaf */
262 fi
->leaf_function
= 0;
265 else if (IS_MOV_R3 (insn
))
267 r3_val
= ((insn
& 0xff) ^ 0x80) - 0x80;
269 insn
= read_memory_integer (pc
, 2);
271 else if (IS_SHLL_R3 (insn
))
275 insn
= read_memory_integer (pc
, 2);
277 else if (IS_ADD_R3SP (insn
))
281 insn
= read_memory_integer (pc
, 2);
283 else if (IS_ADD_SP (insn
))
286 depth
-= ((insn
& 0xff) ^ 0x80) - 0x80;
287 insn
= read_memory_integer (pc
, 2);
293 /* Now we know how deep things are, we can work out their addresses */
295 for (rn
= 0; rn
< NUM_REGS
; rn
++)
302 fsr
->regs
[rn
] = fi
->frame
- where
[rn
] + depth
- 4;
312 fsr
->regs
[SP_REGNUM
] = read_memory_integer (fsr
->regs
[FP_REGNUM
], 4);
316 fsr
->regs
[SP_REGNUM
] = fi
->frame
- 4;
319 fi
->f_offset
= depth
- where
[FP_REGNUM
] - 4;
320 /* Work out the return pc - either from the saved pr or the pr
324 /* initialize the extra info saved in a FRAME */
327 sh_init_extra_frame_info (fromleaf
, fi
)
329 struct frame_info
*fi
;
331 struct frame_saved_regs fsr
;
334 fi
->pc
= FRAME_SAVED_PC (fi
->next
);
336 if (PC_IN_CALL_DUMMY (fi
->pc
, fi
->frame
, fi
->frame
))
338 /* We need to setup fi->frame here because run_stack_dummy gets it wrong
339 by assuming it's always FP. */
340 fi
->frame
= generic_read_register_dummy (fi
->pc
, fi
->frame
,
342 fi
->return_pc
= generic_read_register_dummy (fi
->pc
, fi
->frame
,
344 fi
->f_offset
= -(CALL_DUMMY_LENGTH
+ 4);
345 fi
->leaf_function
= 0;
350 FRAME_FIND_SAVED_REGS (fi
, fsr
);
351 fi
->return_pc
= sh_find_callers_reg (fi
, PR_REGNUM
);
355 /* Discard from the stack the innermost frame,
356 restoring all saved registers. */
361 register struct frame_info
*frame
= get_current_frame ();
362 register CORE_ADDR fp
;
364 struct frame_saved_regs fsr
;
366 if (PC_IN_CALL_DUMMY (frame
->pc
, frame
->frame
, frame
->frame
))
367 generic_pop_dummy_frame ();
370 fp
= FRAME_FP (frame
);
371 get_frame_saved_regs (frame
, &fsr
);
373 /* Copy regs from where they were saved in the frame */
374 for (regnum
= 0; regnum
< NUM_REGS
; regnum
++)
375 if (fsr
.regs
[regnum
])
376 write_register (regnum
, read_memory_integer (fsr
.regs
[regnum
], 4));
378 write_register (PC_REGNUM
, frame
->return_pc
);
379 write_register (SP_REGNUM
, fp
+ 4);
381 flush_cached_frames ();
384 /* Function: push_arguments
385 Setup the function arguments for calling a function in the inferior.
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.
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.
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.
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
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
429 sh_push_arguments (nargs
, args
, sp
, struct_return
, struct_addr
)
433 unsigned char struct_return
;
434 CORE_ADDR struct_addr
;
436 int stack_offset
, stack_alloc
;
444 int odd_sized_struct
;
446 /* first force sp to a 4-byte alignment */
449 /* The "struct return pointer" pseudo-argument has its own dedicated
452 write_register (STRUCT_RETURN_REGNUM
, struct_addr
);
454 /* Now make sure there's space on the stack */
455 for (argnum
= 0, stack_alloc
= 0;
456 argnum
< nargs
; argnum
++)
457 stack_alloc
+= ((TYPE_LENGTH(VALUE_TYPE(args
[argnum
])) + 3) & ~3);
458 sp
-= stack_alloc
; /* make room on stack for args */
461 /* Now load as many as possible of the first arguments into
462 registers, and push the rest onto the stack. There are 16 bytes
463 in four registers available. Loop thru args from first to last. */
465 argreg
= ARG0_REGNUM
;
466 for (argnum
= 0, stack_offset
= 0; argnum
< nargs
; argnum
++)
468 type
= VALUE_TYPE (args
[argnum
]);
469 len
= TYPE_LENGTH (type
);
470 memset(valbuf
, 0, sizeof(valbuf
));
472 { /* value gets right-justified in the register or stack word */
473 memcpy(valbuf
+ (4 - len
),
474 (char *) VALUE_CONTENTS (args
[argnum
]), len
);
478 val
= (char *) VALUE_CONTENTS (args
[argnum
]);
480 if (len
> 4 && (len
& 3) != 0)
481 odd_sized_struct
= 1; /* such structs go entirely on stack */
483 odd_sized_struct
= 0;
486 if (argreg
> ARGLAST_REGNUM
|| odd_sized_struct
)
487 { /* must go on the stack */
488 write_memory (sp
+ stack_offset
, val
, 4);
491 /* NOTE WELL!!!!! This is not an "else if" clause!!!
492 That's because some *&^%$ things get passed on the stack
493 AND in the registers! */
494 if (argreg
<= ARGLAST_REGNUM
)
495 { /* there's room in a register */
496 regval
= extract_address (val
, REGISTER_RAW_SIZE(argreg
));
497 write_register (argreg
++, regval
);
499 /* Store the value 4 bytes at a time. This means that things
500 larger than 4 bytes may go partly in registers and partly
502 len
-= REGISTER_RAW_SIZE(argreg
);
503 val
+= REGISTER_RAW_SIZE(argreg
);
509 /* Function: push_return_address (pc)
510 Set up the return address for the inferior function call.
511 Needed for targets where we don't actually execute a JSR/BSR instruction */
514 sh_push_return_address (pc
, sp
)
518 write_register (PR_REGNUM
, CALL_DUMMY_ADDRESS ());
522 /* Function: fix_call_dummy
523 Poke the callee function's address into the destination part of
524 the CALL_DUMMY. The address is actually stored in a data word
525 following the actualy CALL_DUMMY instructions, which will load
526 it into a register using PC-relative addressing. This function
527 expects the CALL_DUMMY to look like this:
538 sh_fix_call_dummy (dummy
, pc
, fun
, nargs
, args
, type
, gcc_p
)
547 *(unsigned long *) (dummy
+ 8) = fun
;
551 /* Function: get_saved_register
552 Just call the generic_get_saved_register function. */
555 get_saved_register (raw_buffer
, optimized
, addrp
, frame
, regnum
, lval
)
559 struct frame_info
*frame
;
561 enum lval_type
*lval
;
563 generic_get_saved_register (raw_buffer
, optimized
, addrp
,
564 frame
, regnum
, lval
);
568 /* Command to set the processor type. */
571 sh_set_processor_type_command (args
, from_tty
)
578 /* The `set' commands work by setting the value, then calling the hook,
579 so we let the general command modify a scratch location, then decide
580 here if we really want to modify the processor type. */
581 if (tmp_sh_processor_type
== NULL
|| *tmp_sh_processor_type
== '\0')
583 printf_unfiltered ("The known SH processor types are as follows:\n\n");
584 for (i
= 0; sh_processor_type_table
[i
].name
!= NULL
; ++i
)
585 printf_unfiltered ("%s\n", sh_processor_type_table
[i
].name
);
587 /* Restore the value. */
588 tmp_sh_processor_type
= strsave (sh_processor_type
);
593 if (!sh_set_processor_type (tmp_sh_processor_type
))
595 /* Restore to a valid value before erroring out. */
596 temp
= tmp_sh_processor_type
;
597 tmp_sh_processor_type
= strsave (sh_processor_type
);
598 error ("Unknown processor type `%s'.", temp
);
602 /* This is a dummy not actually run. */
605 sh_show_processor_type_command (args
, from_tty
)
611 /* Modify the actual processor type. */
614 sh_set_processor_type (str
)
622 for (i
= 0; sh_processor_type_table
[i
].name
!= NULL
; ++i
)
624 if (strcasecmp (str
, sh_processor_type_table
[i
].name
) == 0)
626 sh_processor_type
= str
;
628 for (j
= 0; j
< NUM_REGS
; ++j
)
629 reg_names
[j
] = sh_processor_type_table
[i
].regnames
[j
];
638 /* Print the registers in a form similar to the E7000 */
641 sh_show_regs (args
, from_tty
)
647 if (strcmp (sh_processor_type
, "sh3") == 0)
649 else if (strcmp (sh_processor_type
, "sh3e") == 0)
652 printf_filtered ("PC=%08x SR=%08x PR=%08x MACH=%08x MACHL=%08x\n",
653 read_register (PC_REGNUM
),
654 read_register (SR_REGNUM
),
655 read_register (PR_REGNUM
),
656 read_register (MACH_REGNUM
),
657 read_register (MACL_REGNUM
));
659 printf_filtered ("GBR=%08x VBR=%08x",
660 read_register (GBR_REGNUM
),
661 read_register (VBR_REGNUM
));
662 if (cpu
== 1 || cpu
== 2)
664 printf_filtered (" SSR=%08x SPC=%08x",
665 read_register (SSR_REGNUM
),
666 read_register (SPC_REGNUM
));
669 printf_filtered (" FPUL=%08x FPSCR=%08x",
670 read_register (FPUL_REGNUM
),
671 read_register (FPSCR_REGNUM
));
675 printf_filtered ("\nR0-R7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
684 printf_filtered ("R8-R15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
695 printf_filtered ("FP0-FP7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
696 read_register (FP0_REGNUM
+ 0),
697 read_register (FP0_REGNUM
+ 1),
698 read_register (FP0_REGNUM
+ 2),
699 read_register (FP0_REGNUM
+ 3),
700 read_register (FP0_REGNUM
+ 4),
701 read_register (FP0_REGNUM
+ 5),
702 read_register (FP0_REGNUM
+ 6),
703 read_register (FP0_REGNUM
+ 7));
704 printf_filtered ("FP8-FP15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
705 read_register (FP0_REGNUM
+ 8),
706 read_register (FP0_REGNUM
+ 9),
707 read_register (FP0_REGNUM
+ 10),
708 read_register (FP0_REGNUM
+ 11),
709 read_register (FP0_REGNUM
+ 12),
710 read_register (FP0_REGNUM
+ 13),
711 read_register (FP0_REGNUM
+ 14),
712 read_register (FP0_REGNUM
+ 15));
716 /* Function: extract_return_value
717 Find a function's return value in the appropriate registers (in regbuf),
718 and copy it into valbuf. */
721 sh_extract_return_value (type
, regbuf
, valbuf
)
726 int len
= TYPE_LENGTH(type
);
729 memcpy (valbuf
, ((char *) regbuf
) + 4 - len
, len
);
731 memcpy (valbuf
, ((char *) regbuf
) + 8 - len
, len
);
733 error ("bad size for return value");
737 _initialize_sh_tdep ()
739 struct cmd_list_element
*c
;
741 tm_print_insn
= gdb_print_insn_sh
;
743 c
= add_set_cmd ("processor", class_support
, var_string_noescape
,
744 (char *) &tmp_sh_processor_type
,
745 "Set the type of SH processor in use.\n\
746 Set this to be able to access processor-type-specific registers.\n\
749 c
->function
.cfunc
= sh_set_processor_type_command
;
750 c
= add_show_from_set (c
, &showlist
);
751 c
->function
.cfunc
= sh_show_processor_type_command
;
753 tmp_sh_processor_type
= strsave (DEFAULT_SH_TYPE
);
754 sh_set_processor_type_command (strsave (DEFAULT_SH_TYPE
), 0);
756 add_com ("regs", class_vars
, sh_show_regs
, "Print all registers");