OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [config/] [m32r/] [tm-m32r.h] - Blame information for rev 1775

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Parameters for execution on a Mitsubishi m32r processor.
2
   Copyright 1996, 1997 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 59 Temple Place - Suite 330,
19
   Boston, MA 02111-1307, USA.  */
20
 
21
#include "regcache.h"
22
 
23
/* Used by mswin.  */
24
#define TARGET_M32R 1
25
 
26
/* mvs_check REGISTER_NAMES */
27
#define REGISTER_NAMES \
28
{ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
29
  "r8", "r9", "r10", "r11", "r12", "fp", "lr", "sp", \
30
  "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch", \
31
    /*  "cond", "sm", "bsm", "ie", "bie", "bcarry",  */ \
32
}
33
/* mvs_check  NUM_REGS */
34
#define NUM_REGS                        24
35
 
36
/* mvs_check  REGISTER_SIZE */
37
#define REGISTER_SIZE                   4
38
/* mvs_check  MAX_REGISTER_RAW_SIZE */
39
#define MAX_REGISTER_RAW_SIZE           4
40
 
41
/* mvs_check  *_REGNUM */
42
#define R0_REGNUM       0
43
#define STRUCT_RETURN_REGNUM 0
44
#define ARG0_REGNUM     0
45
#define ARGLAST_REGNUM  3
46
#define V0_REGNUM       0
47
#define V1_REGNUM       1
48
#define FP_REGNUM       13
49
#define RP_REGNUM       14
50
#define SP_REGNUM       15
51
#define PSW_REGNUM      16
52
#define CBR_REGNUM      17
53
#define SPI_REGNUM      18
54
#define SPU_REGNUM      19
55
#define BPC_REGNUM      20
56
#define PC_REGNUM       21
57
#define ACCL_REGNUM     22
58
#define ACCH_REGNUM     23
59
 
60
/* mvs_check  REGISTER_BYTES */
61
#define REGISTER_BYTES                  (NUM_REGS * 4)
62
 
63
/* mvs_check  REGISTER_VIRTUAL_TYPE */
64
#define REGISTER_VIRTUAL_TYPE(REG)      builtin_type_int
65
 
66
/* mvs_check  REGISTER_BYTE */
67
#define REGISTER_BYTE(REG)              ((REG) * 4)
68
/* mvs_check  REGISTER_VIRTUAL_SIZE */
69
#define REGISTER_VIRTUAL_SIZE(REG)      4
70
/* mvs_check  REGISTER_RAW_SIZE */
71
#define REGISTER_RAW_SIZE(REG)          4
72
 
73
/* mvs_check  MAX_REGISTER_VIRTUAL_SIZE */
74
#define MAX_REGISTER_VIRTUAL_SIZE       4
75
 
76
/* mvs_check  BREAKPOINT */
77
#define BREAKPOINT {0x10, 0xf1}
78
 
79
/* mvs_no_check  FUNCTION_START_OFFSET */
80
#define FUNCTION_START_OFFSET 0
81
 
82
/* mvs_check  DECR_PC_AFTER_BREAK */
83
#define DECR_PC_AFTER_BREAK 0
84
 
85
/* mvs_check  INNER_THAN */
86
#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
87
 
88
/* mvs_check  SAVED_PC_AFTER_CALL */
89
#define SAVED_PC_AFTER_CALL(fi) read_register (RP_REGNUM)
90
 
91
struct frame_info;
92
struct frame_saved_regs;
93
struct type;
94
struct value;
95
 
96
/* Define other aspects of the stack frame.
97
   We keep the offsets of all saved registers, 'cause we need 'em a lot!
98
   We also keep the current size of the stack frame, and whether
99
   the frame pointer is valid (for frameless functions, and when we're
100
   still in the prologue of a function with a frame) */
101
 
102
/* mvs_check  EXTRA_FRAME_INFO */
103
#define EXTRA_FRAME_INFO        \
104
  struct frame_saved_regs fsr;  \
105
  int framesize;                \
106
  int using_frame_pointer;
107
 
108
 
109
extern void m32r_init_extra_frame_info (struct frame_info *fi);
110
/* mvs_check  INIT_EXTRA_FRAME_INFO */
111
#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) m32r_init_extra_frame_info (fi)
112
/* mvs_no_check  INIT_FRAME_PC */
113
#define INIT_FRAME_PC           /* Not necessary */
114
 
115
extern void
116
m32r_frame_find_saved_regs (struct frame_info *fi,
117
                            struct frame_saved_regs *regaddr);
118
 
119
/* Put here the code to store, into a struct frame_saved_regs,
120
   the addresses of the saved registers of frame described by FRAME_INFO.
121
   This includes special registers such as pc and fp saved in special
122
   ways in the stack frame.  sp is even more special:
123
   the address we return for it IS the sp for the next frame.  */
124
 
125
/* mvs_check  FRAME_FIND_SAVED_REGS */
126
#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs)         \
127
   m32r_frame_find_saved_regs(frame_info, &(frame_saved_regs))
128
 
129
extern CORE_ADDR m32r_frame_chain (struct frame_info *fi);
130
/* mvs_check  FRAME_CHAIN */
131
#define FRAME_CHAIN(fi)                 m32r_frame_chain (fi)
132
 
133
#define FRAME_CHAIN_VALID(fp, frame)    generic_file_frame_chain_valid (fp, frame)
134
 
135
extern CORE_ADDR m32r_find_callers_reg (struct frame_info *fi, int regnum);
136
extern CORE_ADDR m32r_frame_saved_pc (struct frame_info *);
137
/* mvs_check  FRAME_SAVED_PC */
138
#define FRAME_SAVED_PC(fi)              m32r_frame_saved_pc (fi)
139
 
140
/* mvs_check  DEPRECATED_EXTRACT_RETURN_VALUE */
141
#define DEPRECATED_EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
142
  memcpy ((VALBUF), \
143
          (char *)(REGBUF) + REGISTER_BYTE (V0_REGNUM) + \
144
          ((TYPE_LENGTH (TYPE) > 4 ? 8 : 4) - TYPE_LENGTH (TYPE)), \
145
          TYPE_LENGTH (TYPE))
146
 
147
/* mvs_check  DEPRECATED_STORE_RETURN_VALUE */
148
#define DEPRECATED_STORE_RETURN_VALUE(TYPE, VALBUF) \
149
  write_register_bytes(REGISTER_BYTE (V0_REGNUM) + \
150
                       ((TYPE_LENGTH (TYPE) > 4 ? 8:4) - TYPE_LENGTH (TYPE)),\
151
                       (VALBUF), TYPE_LENGTH (TYPE));
152
 
153
extern CORE_ADDR m32r_skip_prologue (CORE_ADDR pc);
154
/* mvs_check  SKIP_PROLOGUE */
155
#define SKIP_PROLOGUE(pc) (m32r_skip_prologue (pc))
156
 
157
/* mvs_no_check  FRAME_ARGS_SKIP */
158
#define FRAME_ARGS_SKIP 0
159
 
160
/* mvs_no_check  FRAME_ARGS_ADDRESS */
161
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
162
/* mvs_no_check  FRAME_LOCALS_ADDRESS */
163
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
164
/* mvs_no_check  FRAME_NUM_ARGS */
165
#define FRAME_NUM_ARGS(fi) (-1)
166
 
167
#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (1)
168
 
169
extern void m32r_write_sp (CORE_ADDR val);
170
#define TARGET_WRITE_SP m32r_write_sp
171
 
172
 
173
 
174
 
175
 
176
 
177
/* struct passing and returning stuff */
178
#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP)    \
179
        write_register (0, STRUCT_ADDR)
180
 
181
extern use_struct_convention_fn m32r_use_struct_convention;
182
#define USE_STRUCT_CONVENTION(GCC_P, TYPE) m32r_use_struct_convention (GCC_P, TYPE)
183
 
184
#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
185
  extract_address (REGBUF + REGISTER_BYTE (V0_REGNUM), \
186
                   REGISTER_RAW_SIZE (V0_REGNUM))
187
 
188
#define REG_STRUCT_HAS_ADDR(gcc_p,type)     (TYPE_LENGTH (type) > 8)
189
 
190
 
191
/* generic dummy frame stuff */
192
 
193
#define PUSH_DUMMY_FRAME             generic_push_dummy_frame ()
194
#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP)
195
 
196
 
197
/* target-specific dummy_frame stuff */
198
 
199
extern struct frame_info *m32r_pop_frame (struct frame_info *frame);
200
/* mvs_check  POP_FRAME */
201
#define POP_FRAME m32r_pop_frame (get_current_frame ())
202
 
203
/* mvs_no_check  STACK_ALIGN */
204
/* #define STACK_ALIGN(x) ((x + 3) & ~3) */
205
 
206
extern CORE_ADDR m32r_push_return_address (CORE_ADDR, CORE_ADDR);
207
extern CORE_ADDR m32r_push_arguments (int nargs,
208
                                      struct value **args,
209
                                      CORE_ADDR sp,
210
                                      unsigned char struct_return,
211
                                      CORE_ADDR struct_addr);
212
 
213
 
214
 
215
/* mvs_no_check  PUSH_ARGUMENTS */
216
#define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
217
  (m32r_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR))
218
 
219
#define PUSH_RETURN_ADDRESS(PC, SP)      m32r_push_return_address (PC, SP)
220
 
221
/* override the standard get_saved_register function with
222
   one that takes account of generic CALL_DUMMY frames */
223
#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \
224
     generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
225
 
226
 
227
#define USE_GENERIC_DUMMY_FRAMES 1
228
#define CALL_DUMMY                   {0}
229
#define CALL_DUMMY_LENGTH            (0)
230
#define CALL_DUMMY_START_OFFSET      (0)
231
#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
232
#define FIX_CALL_DUMMY(DUMMY1, STARTADDR, FUNADDR, NARGS, ARGS, TYPE, GCCP)
233
#define CALL_DUMMY_LOCATION          AT_ENTRY_POINT
234
#define CALL_DUMMY_ADDRESS()         entry_point_address ()

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.