Remove SH3e sanitization.
[deliverable/binutils-gdb.git] / gdb / config / sh / tm-sh.h
CommitLineData
9faacb92
SC
1/* Parameters for execution on a Hitachi Super-H machine.
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
JW
101#define REGISTER_VIRTUAL_TYPE(N) \
102 ((((N) >= FP0_REGNUM && (N) < FP0_REGNUM+32) \
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
JW
109#define REGISTER_NAMES \
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", "fpul", "fpscr", \
113 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", \
114 "fr8", "fr9", "fr10","fr11","fr12","fr13","fr14","fr15",\
115 }
9faacb92 116
a8620985 117#define NUM_REGS 41
9faacb92
SC
118
119/* Register numbers of various important registers.
120 Note that some of these values are "real" register numbers,
121 and correspond to the general registers of the machine,
122 and some are "phony" register numbers which are too large
123 to be actual register numbers as far as the user is concerned
124 but do serve to get the desired values when passed to read_register. */
125
1480482a 126#define R0_REGNUM 0
9faacb92
SC
127#define FP_REGNUM 14
128#define SP_REGNUM 15
129#define PC_REGNUM 16
130#define PR_REGNUM 17
131#define GBR_REGNUM 18
132#define VBR_REGNUM 19
133#define MACH_REGNUM 20
134#define MACL_REGNUM 21
2f5e1736 135#define SR_REGNUM 22
a8620985 136#define NUM_REALREGS 23
a8620985
JW
137#define FPUL_REGNUM 23
138#define FP0_REGNUM 25
139#undef NUM_REALREGS
140#define NUM_REALREGS 41
a8620985 141
9faacb92
SC
142/* Store the address of the place in which to copy the structure the
143 subroutine will return. This is called from call_function.
144
145 We store structs through a pointer passed in R4 */
146
147#define STORE_STRUCT_RETURN(ADDR, SP) \
148 { write_register (4, (ADDR)); }
149
150/* Extract from an array REGBUF containing the (raw) register state
151 a function return value of type TYPE, and copy that, in virtual format,
152 into VALBUF. */
153
154#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
ade40d31 155 memcpy (VALBUF, (char *)(REGBUF), TYPE_LENGTH(TYPE))
9faacb92
SC
156
157
158/* Write into appropriate registers a function return value
159 of type TYPE, given in virtual format.
160
161 Things always get returned in R4/R5 */
162
163#define STORE_RETURN_VALUE(TYPE,VALBUF) \
164 write_register_bytes (REGISTER_BYTE(4), VALBUF, TYPE_LENGTH (TYPE))
165
166
167/* Extract from an array REGBUF containing the (raw) register state
168 the address in which a function should return its structure value,
169 as a CORE_ADDR (or an expression that can be used as one). */
170
171#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(CORE_ADDR *)(REGBUF))
172\f
173
174/* Define other aspects of the stack frame.
175 we keep a copy of the worked out return pc lying around, since it
176 is a useful bit of info */
177
178#define EXTRA_FRAME_INFO \
e4483b99
SC
179 CORE_ADDR return_pc; \
180 int leaf_function; \
181 int f_offset;
9faacb92
SC
182
183#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) \
184 init_extra_frame_info(fromleaf, fi)
185
186/* A macro that tells us whether the function invocation represented
187 by FI does not have a frame on the stack associated with it. If it
188 does not, FRAMELESS is set to 1, else 0. */
189
190#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
191 (FRAMELESS) = frameless_look_for_prologue(FI)
192
9faacb92
SC
193#define FRAME_CHAIN(FRAME) sh_frame_chain(FRAME)
194#define FRAME_SAVED_PC(FRAME) ((FRAME)->return_pc)
195#define FRAME_ARGS_ADDRESS(fi) (fi)->frame
196#define FRAME_LOCALS_ADDRESS(fi) (fi)->frame
197
198/* Set VAL to the number of args passed to frame described by FI.
199 Can set VAL to -1, meaning no way to tell. */
200
201/* We can't tell how many args there are */
202
203#define FRAME_NUM_ARGS(val,fi) (val = -1)
204
205/* Return number of bytes at start of arglist that are not really args. */
206
207#define FRAME_ARGS_SKIP 0
208
209/* Put here the code to store, into a struct frame_saved_regs,
210 the addresses of the saved registers of frame described by FRAME_INFO.
211 This includes special registers such as pc and fp saved in special
212 ways in the stack frame. sp is even more special:
213 the address we return for it IS the sp for the next frame. */
214
215#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
216 frame_find_saved_regs(frame_info, &(frame_saved_regs))
217
218#define NAMES_HAVE_UNDERSCORE
219
220typedef unsigned short INSN_WORD;
221
2f5e1736 222#define ADDR_BITS_REMOVE(addr) ((addr))
9faacb92
SC
223
224#define CALL_DUMMY_LENGTH 10
225
226/* Discard from the stack the innermost frame,
227 restoring all saved registers. */
228
229#define POP_FRAME pop_frame();
230
2f5e1736 231
b4d3d0e5 232#define NOP {0x20, 0x0b}
826e69cf
SC
233
234#define REGISTER_SIZE 4
7f4b5f94 235
This page took 0.150135 seconds and 4 git commands to generate.