* mon960-rom.c (mon960_cmds): Remove forward decl.
[deliverable/binutils-gdb.git] / gdb / config / sh / tm-sh.h
CommitLineData
00dd4fd9 1/* Target-specific definition for a Hitachi Super-H.
9faacb92
SC
2 Copyright (C) 1993 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
6c9638b4 18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
9faacb92
SC
19
20/* Contributed by Steve Chamberlain sac@cygnus.com */
21
22#define GDB_TARGET_IS_SH
23
24#define IEEE_FLOAT 1
25
26/* Define the bit, byte, and word ordering of the machine. */
27
5f2f2809 28#define TARGET_BYTE_ORDER_SELECTABLE
9faacb92
SC
29
30
31/* Offset from address of function to start of its code.
32 Zero on most machines. */
33
34#define FUNCTION_START_OFFSET 0
35
36/* Advance PC across any function entry prologue instructions
37 to reach some "real" code. */
38
39extern CORE_ADDR sh_skip_prologue ();
40#define SKIP_PROLOGUE(ip) \
41 {(ip) = sh_skip_prologue(ip);}
42
43
44/* Immediately after a function call, return the saved pc.
45 Can't always go through the frames for this because on some machines
46 the new frame is not set up until the new function executes
47 some instructions.
48
49 The return address is the value saved in the PR register + 4 */
50
51#define SAVED_PC_AFTER_CALL(frame) \
ee824ca6 52 (ADDR_BITS_REMOVE(read_register(PR_REGNUM)))
9faacb92
SC
53
54/* Stack grows downward. */
55
56#define INNER_THAN <
57
58/* Illegal instruction - used by the simulator for breakpoint
59 detection */
60
5f2f2809
SC
61#define BREAKPOINT {0xc3, 0xc3} /* 0xc3c3 is trapa #c3, and it works in big
62 and little endian modes */
7f4b5f94 63#define REMOTE_BREAKPOINT { 0xc3, 0x20}
9faacb92
SC
64
65/* If your kernel resets the pc after the trap happens you may need to
66 define this before including this file. */
2e2b2779 67#define DECR_PC_AFTER_BREAK 0
9faacb92
SC
68
69/* Nonzero if instruction at PC is a return instruction. */
70#define ABOUT_TO_RETURN(pc) (read_memory_integer(pc,2) == 0x000b)
71
826e69cf
SC
72/* Say how long registers are. */
73#define REGISTER_TYPE long
9faacb92
SC
74
75/* Say how much memory is needed to store a copy of the register set */
76#define REGISTER_BYTES (NUM_REGS*4)
77
78/* Index within `registers' of the first byte of the space for
79 register N. */
80
81#define REGISTER_BYTE(N) ((N)*4)
82
83/* Number of bytes of storage in the actual machine representation
84 for register N. */
85
86#define REGISTER_RAW_SIZE(N) 4
87
88#define REGISTER_VIRTUAL_SIZE(N) 4
89
90/* Largest value REGISTER_RAW_SIZE can have. */
91
92#define MAX_REGISTER_RAW_SIZE 4
93
94/* Largest value REGISTER_VIRTUAL_SIZE can have. */
95
96#define MAX_REGISTER_VIRTUAL_SIZE 4
97
9faacb92
SC
98/* Return the GDB type object for the "standard" data type
99 of data in register N. */
100
a8620985 101#define REGISTER_VIRTUAL_TYPE(N) \
00dd4fd9 102 ((((N) >= FP0_REGNUM && (N) < FP15_REGNUM) \
a8620985
JW
103 || (N) == FPUL_REGNUM) \
104 ? builtin_type_float : builtin_type_int)
9faacb92
SC
105
106/* Initializer for an array of names of registers.
107 Entries beyond the first NUM_REGS are ignored. */
108
a8620985 109#define REGISTER_NAMES \
00dd4fd9
SS
110 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
111 "r8", "r9", "r10","r11","r12", "r13", "r14","r15",\
112 "pc", "pr", "gbr","vbr","mach","macl","sr", \
113 "fpul","fpscr", \
a8620985
JW
114 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", \
115 "fr8", "fr9", "fr10","fr11","fr12","fr13","fr14","fr15",\
00dd4fd9
SS
116 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0", \
117 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1" \
a8620985 118 }
9faacb92 119
00dd4fd9 120#define NUM_REGS 57
9faacb92
SC
121
122/* Register numbers of various important registers.
123 Note that some of these values are "real" register numbers,
124 and correspond to the general registers of the machine,
125 and some are "phony" register numbers which are too large
126 to be actual register numbers as far as the user is concerned
127 but do serve to get the desired values when passed to read_register. */
128
1480482a 129#define R0_REGNUM 0
9faacb92
SC
130#define FP_REGNUM 14
131#define SP_REGNUM 15
132#define PC_REGNUM 16
133#define PR_REGNUM 17
134#define GBR_REGNUM 18
135#define VBR_REGNUM 19
136#define MACH_REGNUM 20
137#define MACL_REGNUM 21
2f5e1736 138#define SR_REGNUM 22
a8620985 139#define NUM_REALREGS 23
a8620985
JW
140#define FPUL_REGNUM 23
141#define FP0_REGNUM 25
00dd4fd9 142#define FP15_REGNUM 41
a8620985 143#undef NUM_REALREGS
00dd4fd9 144#define NUM_REALREGS 57
a8620985 145
9faacb92
SC
146/* Store the address of the place in which to copy the structure the
147 subroutine will return. This is called from call_function.
148
149 We store structs through a pointer passed in R4 */
150
151#define STORE_STRUCT_RETURN(ADDR, SP) \
152 { write_register (4, (ADDR)); }
153
154/* Extract from an array REGBUF containing the (raw) register state
155 a function return value of type TYPE, and copy that, in virtual format,
156 into VALBUF. */
157
158#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
ade40d31 159 memcpy (VALBUF, (char *)(REGBUF), TYPE_LENGTH(TYPE))
9faacb92
SC
160
161
162/* Write into appropriate registers a function return value
163 of type TYPE, given in virtual format.
164
165 Things always get returned in R4/R5 */
166
167#define STORE_RETURN_VALUE(TYPE,VALBUF) \
168 write_register_bytes (REGISTER_BYTE(4), VALBUF, TYPE_LENGTH (TYPE))
169
170
171/* Extract from an array REGBUF containing the (raw) register state
172 the address in which a function should return its structure value,
173 as a CORE_ADDR (or an expression that can be used as one). */
174
175#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(CORE_ADDR *)(REGBUF))
176\f
177
178/* Define other aspects of the stack frame.
179 we keep a copy of the worked out return pc lying around, since it
180 is a useful bit of info */
181
182#define EXTRA_FRAME_INFO \
e4483b99
SC
183 CORE_ADDR return_pc; \
184 int leaf_function; \
185 int f_offset;
9faacb92
SC
186
187#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) \
188 init_extra_frame_info(fromleaf, fi)
189
190/* A macro that tells us whether the function invocation represented
191 by FI does not have a frame on the stack associated with it. If it
192 does not, FRAMELESS is set to 1, else 0. */
193
194#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
195 (FRAMELESS) = frameless_look_for_prologue(FI)
196
9faacb92
SC
197#define FRAME_CHAIN(FRAME) sh_frame_chain(FRAME)
198#define FRAME_SAVED_PC(FRAME) ((FRAME)->return_pc)
199#define FRAME_ARGS_ADDRESS(fi) (fi)->frame
200#define FRAME_LOCALS_ADDRESS(fi) (fi)->frame
201
202/* Set VAL to the number of args passed to frame described by FI.
203 Can set VAL to -1, meaning no way to tell. */
204
205/* We can't tell how many args there are */
206
207#define FRAME_NUM_ARGS(val,fi) (val = -1)
208
209/* Return number of bytes at start of arglist that are not really args. */
210
211#define FRAME_ARGS_SKIP 0
212
213/* Put here the code to store, into a struct frame_saved_regs,
214 the addresses of the saved registers of frame described by FRAME_INFO.
215 This includes special registers such as pc and fp saved in special
216 ways in the stack frame. sp is even more special:
217 the address we return for it IS the sp for the next frame. */
218
219#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
220 frame_find_saved_regs(frame_info, &(frame_saved_regs))
221
222#define NAMES_HAVE_UNDERSCORE
223
224typedef unsigned short INSN_WORD;
225
2f5e1736 226#define ADDR_BITS_REMOVE(addr) ((addr))
9faacb92
SC
227
228#define CALL_DUMMY_LENGTH 10
229
230/* Discard from the stack the innermost frame,
231 restoring all saved registers. */
232
233#define POP_FRAME pop_frame();
234
2f5e1736 235
b4d3d0e5 236#define NOP {0x20, 0x0b}
826e69cf
SC
237
238#define REGISTER_SIZE 4
7f4b5f94 239
This page took 0.188773 seconds and 4 git commands to generate.