* config/mn10300/tm-mn10300.h (FP_REGNUM): Redefine to be a
[deliverable/binutils-gdb.git] / gdb / config / mn10300 / tm-mn10300.h
CommitLineData
6823374b 1/* Parameters for execution on a Matsushita mn10300 processor.
4efc4045 2 Copyright 1996, 1997 Free Software Foundation, Inc.
6823374b
GN
3
4 Contributed by Geoffrey Noer <noer@cygnus.com>
5
6This file is part of GDB.
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
fc8d57c2 22/* The mn10300 is little endian. */
6823374b
GN
23#define TARGET_BYTE_ORDER LITTLE_ENDIAN
24
fc8d57c2 25/* All registers are 32bits (phew!). */
6823374b
GN
26#define REGISTER_SIZE 4
27#define MAX_REGISTER_RAW_SIZE 4
f05bd277 28#define NUM_REGS 32
ddc2888e 29
fc8d57c2
JL
30#define REGISTER_VIRTUAL_TYPE(REG) builtin_type_int
31
32#define REGISTER_BYTE(REG) ((REG) * 4)
33#define REGISTER_VIRTUAL_SIZE(REG) 4
34#define REGISTER_RAW_SIZE(REG) 4
35
36#define MAX_REGISTER_VIRTUAL_SIZE 4
37
95efddf2
GN
38#define REGISTER_BYTES (NUM_REGS * REGISTER_SIZE)
39
ddc2888e
GN
40#define REGISTER_NAMES \
41{ "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3", \
f05bd277
JL
42 "sp", "pc", "mdr", "psw", "lir", "lar", "", "", \
43 "", "", "", "", "", "", "", "", \
11ac7952 44 "", "", "", "", "", "", "", "fp" }
ddc2888e 45
11ac7952
MA
46#define D2_REGNUM 2
47#define D3_REGNUM 3
48#define A2_REGNUM 6
49#define A3_REGNUM 7
ddc2888e
GN
50#define SP_REGNUM 8
51#define PC_REGNUM 9
52#define MDR_REGNUM 10
53#define PSW_REGNUM 11
54#define LIR_REGNUM 12
55#define LAR_REGNUM 13
f05bd277
JL
56/* start-sanitize-am33 */
57#define E0_REGNUM 14
58/* end-sanitize-am33 */
6823374b 59
11ac7952
MA
60/* Pseudo register that contains true address of executing stack frame */
61#define FP_REGNUM 31
578d1f44 62
fc8d57c2
JL
63/* The breakpoint instruction must be the same size as the smallest
64 instruction in the instruction set.
6823374b 65
fc8d57c2
JL
66 The Matsushita mn10x00 processors have single byte instructions
67 so we need a single byte breakpoint. Matsushita hasn't defined
68 one, so we defined it ourselves. */
1bb1df85 69#define BREAKPOINT {0xff}
6823374b
GN
70
71#define FUNCTION_START_OFFSET 0
72
73#define DECR_PC_AFTER_BREAK 0
74
75#define INNER_THAN <
76
4efc4045
GN
77#define SAVED_PC_AFTER_CALL(frame) \
78 read_memory_integer (read_register (SP_REGNUM), 4)
6823374b
GN
79
80#ifdef __STDC__
81struct frame_info;
82struct frame_saved_regs;
83struct type;
84struct value;
85#endif
86
fc8d57c2 87#define EXTRA_FRAME_INFO struct frame_saved_regs fsr; int status; int stack_size;
6823374b 88
fc8d57c2 89extern void mn10300_init_extra_frame_info PARAMS ((struct frame_info *));
95efddf2
GN
90#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) mn10300_init_extra_frame_info (fi)
91#define INIT_FRAME_PC /* Not necessary */
92
fc8d57c2
JL
93extern void mn10300_frame_find_saved_regs PARAMS ((struct frame_info *,
94 struct frame_saved_regs *));
6823374b
GN
95#define FRAME_FIND_SAVED_REGS(fi, regaddr) regaddr = fi->fsr
96
fc8d57c2 97extern CORE_ADDR mn10300_frame_chain PARAMS ((struct frame_info *));
6823374b
GN
98#define FRAME_CHAIN(fi) mn10300_frame_chain (fi)
99#define FRAME_CHAIN_VALID(FP, FI) generic_frame_chain_valid (FP, FI)
100
fc8d57c2 101extern CORE_ADDR mn10300_find_callers_reg PARAMS ((struct frame_info *, int));
6823374b
GN
102extern CORE_ADDR mn10300_frame_saved_pc PARAMS ((struct frame_info *));
103#define FRAME_SAVED_PC(FI) (mn10300_frame_saved_pc (FI))
104
4efc4045
GN
105/* Extract from an array REGBUF containing the (raw) register state
106 a function return value of type TYPE, and copy that, in virtual format,
107 into VALBUF. */
108
6823374b 109#define EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
726229db
JL
110 if (TYPE_CODE (TYPE) == TYPE_CODE_PTR) \
111 memcpy (VALBUF, REGBUF + REGISTER_BYTE (4), TYPE_LENGTH (TYPE)); \
112 else \
113 memcpy (VALBUF, REGBUF + REGISTER_BYTE (0), TYPE_LENGTH (TYPE));
114
6823374b
GN
115
116#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
157d3d5d
JL
117 extract_address (REGBUF + REGISTER_BYTE (4), \
118 REGISTER_RAW_SIZE (4))
6823374b
GN
119
120#define STORE_RETURN_VALUE(TYPE, VALBUF) \
726229db
JL
121 if (TYPE_CODE (TYPE) == TYPE_CODE_PTR) \
122 write_register_bytes(REGISTER_BYTE (4), VALBUF, TYPE_LENGTH (TYPE)); \
123 else \
124 write_register_bytes(REGISTER_BYTE (0), VALBUF, TYPE_LENGTH (TYPE));
6823374b 125
fc8d57c2
JL
126#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
127 (SP) = mn10300_store_struct_return (STRUCT_ADDR, SP)
128
129extern CORE_ADDR mn10300_skip_prologue PARAMS ((CORE_ADDR));
6823374b
GN
130#define SKIP_PROLOGUE(pc) pc = mn10300_skip_prologue (pc)
131
132#define FRAME_ARGS_SKIP 0
133
134#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
135#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
136#define FRAME_NUM_ARGS(val, fi) ((val) = -1)
137
fc8d57c2 138extern void mn10300_pop_frame PARAMS ((struct frame_info *));
6823374b
GN
139#define POP_FRAME mn10300_pop_frame (get_current_frame ())
140
4da0f856 141#define USE_GENERIC_DUMMY_FRAMES
6823374b
GN
142#define CALL_DUMMY {0}
143#define CALL_DUMMY_START_OFFSET (0)
144#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
145#define CALL_DUMMY_LOCATION AT_ENTRY_POINT
146#define FIX_CALL_DUMMY(DUMMY, START, FUNADDR, NARGS, ARGS, TYPE, GCCP)
147#define CALL_DUMMY_ADDRESS() entry_point_address ()
4efc4045 148
6823374b
GN
149extern CORE_ADDR mn10300_push_return_address PARAMS ((CORE_ADDR, CORE_ADDR));
150#define PUSH_RETURN_ADDRESS(PC, SP) mn10300_push_return_address (PC, SP)
151
6823374b
GN
152#define PUSH_DUMMY_FRAME generic_push_dummy_frame ()
153
154extern CORE_ADDR
fc8d57c2
JL
155mn10300_push_arguments PARAMS ((int, struct value **, CORE_ADDR,
156 unsigned char, CORE_ADDR ));
6823374b
GN
157#define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
158 (SP) = mn10300_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR)
159
6823374b
GN
160#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP)
161
fc8d57c2
JL
162#define REG_STRUCT_HAS_ADDR(gcc_p,TYPE) \
163 (TYPE_LENGTH (TYPE) > 8)
164
6823374b 165#define USE_STRUCT_CONVENTION(GCC_P, TYPE) \
fc8d57c2 166 (TYPE_NFIELDS (TYPE) > 1 || TYPE_LENGTH (TYPE) > 8)
6823374b
GN
167
168/* override the default get_saved_register function with
169 one that takes account of generic CALL_DUMMY frames */
170#define GET_SAVED_REGISTER
171
172/* Define this for Wingdb */
173
174#define TARGET_MN10300
This page took 0.092183 seconds and 4 git commands to generate.