]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/config/mn10300/tm-mn10300.h
import gdb-1999-08-30 snapshot
[thirdparty/binutils-gdb.git] / gdb / config / mn10300 / tm-mn10300.h
CommitLineData
c906108c
SS
1/* Parameters for execution on a Matsushita mn10300 processor.
2 Copyright 1996, 1997 Free Software Foundation, Inc.
3
4 Contributed by Geoffrey Noer <noer@cygnus.com>
5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23/* The mn10300 is little endian. */
24#define TARGET_BYTE_ORDER_DEFAULT LITTLE_ENDIAN
25
26/* All registers are 32bits (phew!). */
27#define REGISTER_SIZE 4
28#define MAX_REGISTER_RAW_SIZE 4
29#define NUM_REGS 32
30
31#define REGISTER_VIRTUAL_TYPE(REG) builtin_type_int
32
33#define REGISTER_BYTE(REG) ((REG) * 4)
34#define REGISTER_VIRTUAL_SIZE(REG) 4
35#define REGISTER_RAW_SIZE(REG) 4
36
37#define MAX_REGISTER_VIRTUAL_SIZE 4
38
39#define REGISTER_BYTES (NUM_REGS * REGISTER_SIZE)
40
0f71a2f6
JM
41extern char *mn10300_register_name PARAMS ((int regnr));
42#define REGISTER_NAME(i) (mn10300_register_name (i))
c906108c
SS
43
44#define D2_REGNUM 2
45#define D3_REGNUM 3
46#define A2_REGNUM 6
47#define A3_REGNUM 7
48#define SP_REGNUM 8
49#define PC_REGNUM 9
50#define MDR_REGNUM 10
51#define PSW_REGNUM 11
52#define LIR_REGNUM 12
53#define LAR_REGNUM 13
54
55/* Pseudo register that contains true address of executing stack frame */
56#define FP_REGNUM 31
57
58/* BREAKPOINT_FROM_PC uses the program counter value to determine the
59 breakpoint that should be used */
60extern breakpoint_from_pc_fn mn10300_breakpoint_from_pc;
61#define BREAKPOINT_FROM_PC(pcptr, lenptr) mn10300_breakpoint_from_pc (pcptr, lenptr)
62
63#define FUNCTION_START_OFFSET 0
64
65#define DECR_PC_AFTER_BREAK 0
66
67#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
68
c5aa993b 69extern CORE_ADDR mn10300_saved_pc_after_call PARAMS ((struct frame_info * frame));
c906108c 70#define SAVED_PC_AFTER_CALL(frame) \
0f71a2f6 71 mn10300_saved_pc_after_call (frame)
c906108c 72
c906108c
SS
73struct frame_info;
74struct type;
75struct value;
c906108c
SS
76
77extern void mn10300_init_extra_frame_info PARAMS ((struct frame_info *));
78#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) mn10300_init_extra_frame_info (fi)
79#define INIT_FRAME_PC /* Not necessary */
80
c5aa993b 81#define FRAME_INIT_SAVED_REGS(fi) /* handled by init_extra_frame_info */
c906108c
SS
82
83extern CORE_ADDR mn10300_frame_chain PARAMS ((struct frame_info *));
84#define FRAME_CHAIN(fi) mn10300_frame_chain (fi)
85#define FRAME_CHAIN_VALID(FP, FI) generic_frame_chain_valid (FP, FI)
86
87extern CORE_ADDR mn10300_find_callers_reg PARAMS ((struct frame_info *, int));
c5aa993b 88extern CORE_ADDR mn10300_frame_saved_pc PARAMS ((struct frame_info *));
c906108c
SS
89#define FRAME_SAVED_PC(FI) (mn10300_frame_saved_pc (FI))
90
91/* Extract from an array REGBUF containing the (raw) register state
92 a function return value of type TYPE, and copy that, in virtual format,
93 into VALBUF. */
94
c5aa993b 95extern void mn10300_extract_return_value PARAMS ((struct type * type, char *regbuf, char *valbuf));
c906108c 96#define EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
0f71a2f6 97 mn10300_extract_return_value (TYPE, REGBUF, VALBUF)
c906108c 98
0f71a2f6 99CORE_ADDR mn10300_extract_struct_value_address PARAMS ((char *regbuf));
c906108c 100#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
0f71a2f6 101 mn10300_extract_struct_value_address (REGBUF)
c906108c 102
c5aa993b 103void mn10300_store_return_value PARAMS ((struct type * type, char *valbuf));
c906108c 104#define STORE_RETURN_VALUE(TYPE, VALBUF) \
0f71a2f6 105 mn10300_store_return_value (TYPE, VALBUF)
c906108c
SS
106
107#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
0f71a2f6 108 (mn10300_store_struct_return (STRUCT_ADDR, SP))
c906108c
SS
109
110extern CORE_ADDR mn10300_skip_prologue PARAMS ((CORE_ADDR));
b83266a0 111#define SKIP_PROLOGUE(pc) (mn10300_skip_prologue (pc))
c906108c
SS
112
113#define FRAME_ARGS_SKIP 0
114
115#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
116#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
392a587b 117#define FRAME_NUM_ARGS(fi) (-1)
c906108c
SS
118
119extern void mn10300_pop_frame PARAMS ((struct frame_info *));
120#define POP_FRAME mn10300_pop_frame (get_current_frame ())
121
7a292a7a 122#define USE_GENERIC_DUMMY_FRAMES 1
c906108c
SS
123#define CALL_DUMMY {0}
124#define CALL_DUMMY_START_OFFSET (0)
125#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
126#define CALL_DUMMY_LOCATION AT_ENTRY_POINT
127#define FIX_CALL_DUMMY(DUMMY, START, FUNADDR, NARGS, ARGS, TYPE, GCCP)
128#define CALL_DUMMY_ADDRESS() entry_point_address ()
129
43ff13b4
JM
130#define TARGET_READ_FP() read_sp ()
131
c906108c
SS
132extern CORE_ADDR mn10300_push_return_address PARAMS ((CORE_ADDR, CORE_ADDR));
133#define PUSH_RETURN_ADDRESS(PC, SP) mn10300_push_return_address (PC, SP)
134
135#define PUSH_DUMMY_FRAME generic_push_dummy_frame ()
43ff13b4 136#define SAVE_DUMMY_FRAME_TOS(SP) generic_save_dummy_frame_tos (SP)
c906108c
SS
137
138extern CORE_ADDR
c5aa993b
JM
139 mn10300_push_arguments PARAMS ((int, struct value **, CORE_ADDR,
140 unsigned char, CORE_ADDR));
c906108c 141#define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
392a587b 142 (mn10300_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR))
c906108c 143
7a292a7a 144#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP)
c906108c
SS
145
146#define REG_STRUCT_HAS_ADDR(gcc_p,TYPE) \
147 (TYPE_LENGTH (TYPE) > 8)
148
149extern use_struct_convention_fn mn10300_use_struct_convention;
150#define USE_STRUCT_CONVENTION(GCC_P, TYPE) mn10300_use_struct_convention (GCC_P, TYPE)
151
152/* override the default get_saved_register function with
153 one that takes account of generic CALL_DUMMY frames */
7a292a7a
SS
154#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \
155 generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
c906108c
SS
156
157/* Cons up virtual frame pointer for trace */
158extern void mn10300_virtual_frame_pointer PARAMS ((CORE_ADDR, long *, long *));
159#define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \
160 mn10300_virtual_frame_pointer ((PC), (REGP), (OFFP))