start-sanitize-m32r
[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 */
fea17b55
SS
63
64#define BIG_REMOTE_BREAKPOINT { 0xc3, 0x20 }
65#define LITTLE_REMOTE_BREAKPOINT { 0x20, 0xc3 }
9faacb92
SC
66
67/* If your kernel resets the pc after the trap happens you may need to
68 define this before including this file. */
2e2b2779 69#define DECR_PC_AFTER_BREAK 0
9faacb92
SC
70
71/* Nonzero if instruction at PC is a return instruction. */
72#define ABOUT_TO_RETURN(pc) (read_memory_integer(pc,2) == 0x000b)
73
826e69cf
SC
74/* Say how long registers are. */
75#define REGISTER_TYPE long
9faacb92
SC
76
77/* Say how much memory is needed to store a copy of the register set */
78#define REGISTER_BYTES (NUM_REGS*4)
79
80/* Index within `registers' of the first byte of the space for
81 register N. */
82
83#define REGISTER_BYTE(N) ((N)*4)
84
85/* Number of bytes of storage in the actual machine representation
86 for register N. */
87
88#define REGISTER_RAW_SIZE(N) 4
89
90#define REGISTER_VIRTUAL_SIZE(N) 4
91
92/* Largest value REGISTER_RAW_SIZE can have. */
93
94#define MAX_REGISTER_RAW_SIZE 4
95
96/* Largest value REGISTER_VIRTUAL_SIZE can have. */
97
98#define MAX_REGISTER_VIRTUAL_SIZE 4
99
9faacb92
SC
100/* Return the GDB type object for the "standard" data type
101 of data in register N. */
102
a8620985 103#define REGISTER_VIRTUAL_TYPE(N) \
05535e79 104 ((((N) >= FP0_REGNUM && (N) <= FP15_REGNUM) \
a8620985
JW
105 || (N) == FPUL_REGNUM) \
106 ? builtin_type_float : builtin_type_int)
9faacb92
SC
107
108/* Initializer for an array of names of registers.
109 Entries beyond the first NUM_REGS are ignored. */
110
a8620985 111#define REGISTER_NAMES \
12ffa10c
SS
112 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
113 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
114 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr", \
115 "fpul", "fpscr", \
4dc42997
MS
116 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", \
117 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15", \
12ffa10c
SS
118 "ssr", "spc", \
119 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0", \
120 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1", \
a8620985 121 }
9faacb92 122
05535e79 123#define NUM_REGS 59
9faacb92 124
12ffa10c
SS
125/* Register numbers of various important registers. Note that some of
126 these values are "real" register numbers, and correspond to the
127 general registers of the machine, and some are "phony" register
128 numbers which are too large to be actual register numbers as far as
129 the user is concerned but do serve to get the desired values when
130 passed to read_register. */
9faacb92 131
1480482a 132#define R0_REGNUM 0
9faacb92
SC
133#define FP_REGNUM 14
134#define SP_REGNUM 15
135#define PC_REGNUM 16
136#define PR_REGNUM 17
137#define GBR_REGNUM 18
138#define VBR_REGNUM 19
139#define MACH_REGNUM 20
140#define MACL_REGNUM 21
2f5e1736 141#define SR_REGNUM 22
12ffa10c
SS
142#define FPUL_REGNUM 23
143#define FP0_REGNUM 25
144#define FP15_REGNUM 40
145#define SSR_REGNUM 41
146#define SPC_REGNUM 42
147#define R0B0_REGNUM 43
148#define R0B1_REGNUM 51
149
150#define NUM_REALREGS 59
a8620985 151
9faacb92
SC
152/* Store the address of the place in which to copy the structure the
153 subroutine will return. This is called from call_function.
154
155 We store structs through a pointer passed in R4 */
156
157#define STORE_STRUCT_RETURN(ADDR, SP) \
158 { write_register (4, (ADDR)); }
159
160/* Extract from an array REGBUF containing the (raw) register state
161 a function return value of type TYPE, and copy that, in virtual format,
162 into VALBUF. */
163
164#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
ade40d31 165 memcpy (VALBUF, (char *)(REGBUF), TYPE_LENGTH(TYPE))
9faacb92 166
9faacb92
SC
167/* Write into appropriate registers a function return value
168 of type TYPE, given in virtual format.
169
170 Things always get returned in R4/R5 */
171
172#define STORE_RETURN_VALUE(TYPE,VALBUF) \
173 write_register_bytes (REGISTER_BYTE(4), VALBUF, TYPE_LENGTH (TYPE))
174
9faacb92
SC
175/* Extract from an array REGBUF containing the (raw) register state
176 the address in which a function should return its structure value,
177 as a CORE_ADDR (or an expression that can be used as one). */
178
179#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(CORE_ADDR *)(REGBUF))
180\f
181
182/* Define other aspects of the stack frame.
183 we keep a copy of the worked out return pc lying around, since it
184 is a useful bit of info */
185
186#define EXTRA_FRAME_INFO \
e4483b99
SC
187 CORE_ADDR return_pc; \
188 int leaf_function; \
189 int f_offset;
9faacb92
SC
190
191#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) \
192 init_extra_frame_info(fromleaf, fi)
193
194/* A macro that tells us whether the function invocation represented
195 by FI does not have a frame on the stack associated with it. If it
196 does not, FRAMELESS is set to 1, else 0. */
197
198#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
199 (FRAMELESS) = frameless_look_for_prologue(FI)
200
9faacb92
SC
201#define FRAME_CHAIN(FRAME) sh_frame_chain(FRAME)
202#define FRAME_SAVED_PC(FRAME) ((FRAME)->return_pc)
203#define FRAME_ARGS_ADDRESS(fi) (fi)->frame
204#define FRAME_LOCALS_ADDRESS(fi) (fi)->frame
205
206/* Set VAL to the number of args passed to frame described by FI.
207 Can set VAL to -1, meaning no way to tell. */
208
209/* We can't tell how many args there are */
210
211#define FRAME_NUM_ARGS(val,fi) (val = -1)
212
213/* Return number of bytes at start of arglist that are not really args. */
214
215#define FRAME_ARGS_SKIP 0
216
217/* Put here the code to store, into a struct frame_saved_regs,
218 the addresses of the saved registers of frame described by FRAME_INFO.
219 This includes special registers such as pc and fp saved in special
220 ways in the stack frame. sp is even more special:
221 the address we return for it IS the sp for the next frame. */
222
223#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
224 frame_find_saved_regs(frame_info, &(frame_saved_regs))
225
226#define NAMES_HAVE_UNDERSCORE
227
228typedef unsigned short INSN_WORD;
229
9faacb92
SC
230#define CALL_DUMMY_LENGTH 10
231
12ffa10c
SS
232/* Discard from the stack the innermost frame, restoring all saved
233 registers. */
9faacb92
SC
234
235#define POP_FRAME pop_frame();
236
b4d3d0e5 237#define NOP {0x20, 0x0b}
826e69cf
SC
238
239#define REGISTER_SIZE 4
7f4b5f94 240
This page took 0.188397 seconds and 4 git commands to generate.