]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/config/i386/tm-i386.h
* config/i386/tm-cygwin.h, config/i386/tm-fbsd.h,
[thirdparty/binutils-gdb.git] / gdb / config / i386 / tm-i386.h
CommitLineData
c906108c 1/* Macro definitions for GDB on an Intel i[345]86.
b6ba6518
KB
2 Copyright 1995, 1996, 1998, 1999, 2000, 2001
3 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22#ifndef TM_I386_H
23#define TM_I386_H 1
24
a62cc96e
AC
25#define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL
26
f88e2c52
AC
27#include "regcache.h"
28
a7769679 29/* Forward declarations for prototypes. */
c906108c
SS
30struct frame_info;
31struct frame_saved_regs;
a7769679 32struct value;
c906108c 33struct type;
c906108c 34
c906108c
SS
35/* Offset from address of function to start of its code.
36 Zero on most machines. */
37
38#define FUNCTION_START_OFFSET 0
39
40/* Advance PC across any function entry prologue instructions to reach some
41 "real" code. */
42
b83266a0 43#define SKIP_PROLOGUE(frompc) (i386_skip_prologue (frompc))
c906108c 44
a14ed312 45extern int i386_skip_prologue (int);
c906108c 46
c906108c
SS
47/* Stack grows downward. */
48
49#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
50
51/* Sequence of bytes for breakpoint instruction. */
52
53#define BREAKPOINT {0xcc}
54
55/* Amount PC must be decremented by after a breakpoint. This is often the
56 number of bytes in BREAKPOINT but not always. */
57
58#define DECR_PC_AFTER_BREAK 1
a2585ce7
MK
59\f
60
d7a0d72c
MK
61/* Return the GDB type object for the "standard" data type of data in
62 register REGNUM. */
63
64#define REGISTER_VIRTUAL_TYPE(regnum) i386_register_virtual_type (regnum)
65extern struct type *i386_register_virtual_type (int regnum);
66
67/* Return true iff register REGNUM's virtual format is different from
68 its raw format. */
69
70#define REGISTER_CONVERTIBLE(regnum) i386_register_convertible (regnum)
71extern int i386_register_convertible (int regnum);
917317f4 72
ac27f131
MK
73/* Convert data from raw format for register REGNUM in buffer FROM to
74 virtual format with type TYPE in buffer TO. */
917317f4 75
ac27f131 76#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) \
cc533b9d 77 i386_register_convert_to_virtual ((regnum), (type), (from), (to))
ac27f131
MK
78extern void i386_register_convert_to_virtual (int regnum, struct type *type,
79 char *from, char *to);
917317f4 80
ac27f131
MK
81/* Convert data from virtual format with type TYPE in buffer FROM to
82 raw format for register REGNUM in buffer TO. */
917317f4 83
ac27f131 84#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) \
cc533b9d 85 i386_register_convert_to_raw ((type), (regnum), (from), (to))
ac27f131
MK
86extern void i386_register_convert_to_raw (struct type *type, int regnum,
87 char *from, char *to);
c906108c 88
de57eccd 89/* Print out the i387 floating point state. */
de57eccd
JM
90extern void i387_float_info (void);
91#define FLOAT_INFO { i387_float_info (); }
de57eccd 92\f
22f8ba57
MK
93
94#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
95 i386_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr))
96extern CORE_ADDR i386_push_arguments (int nargs, struct value **args,
97 CORE_ADDR sp, int struct_return,
98 CORE_ADDR struct_addr);
99
c906108c 100/* Store the address of the place in which to copy the structure the
22f8ba57 101 subroutine will return. This is called from call_function. */
c906108c 102
22f8ba57
MK
103#define STORE_STRUCT_RETURN(addr, sp) \
104 i386_store_struct_return ((addr), (sp))
105extern void i386_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
c906108c
SS
106
107/* Extract from an array REGBUF containing the (raw) register state
108 a function return value of type TYPE, and copy that, in virtual format,
109 into VALBUF. */
110
26e9b323 111#define DEPRECATED_EXTRACT_RETURN_VALUE(type, regbuf, valbuf) \
ac27f131
MK
112 i386_extract_return_value ((type), (regbuf), (valbuf))
113extern void i386_extract_return_value (struct type *type, char *regbuf,
114 char *valbuf);
c906108c 115
ef9dff19
MK
116/* Write into the appropriate registers a function return value stored
117 in VALBUF of type TYPE, given in virtual format. */
f7af9647 118
ef9dff19
MK
119#define STORE_RETURN_VALUE(type, valbuf) \
120 i386_store_return_value ((type), (valbuf))
121extern void i386_store_return_value (struct type *type, char *valbuf);
c906108c 122
f7af9647
MK
123/* Extract from an array REGBUF containing the (raw) register state
124 the address in which a function should return its structure value,
125 as a CORE_ADDR. */
c906108c 126
26e9b323 127#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) \
f7af9647
MK
128 i386_extract_struct_value_address ((regbuf))
129extern CORE_ADDR i386_extract_struct_value_address (char *regbuf);
c906108c 130
539ffe0b
MK
131/* Determine whether the function invocation represented by FRAME does
132 not have a from on the stack associated with it. If it does not,
133 return non-zero, otherwise return zero. */
c906108c 134
539ffe0b
MK
135#define FRAMELESS_FUNCTION_INVOCATION(frame) \
136 i386_frameless_function_invocation (frame)
137extern int i386_frameless_function_invocation (struct frame_info *frame);
c906108c 138
c906108c
SS
139#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
140
141#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
142
143/* Return number of args passed to a frame. Can return -1, meaning no way
144 to tell, which is typical now that the C compiler delays popping them. */
145
392a587b 146#define FRAME_NUM_ARGS(fi) (i386_frame_num_args(fi))
c906108c 147
a14ed312 148extern int i386_frame_num_args (struct frame_info *);
c906108c
SS
149
150/* Return number of bytes at start of arglist that are not really args. */
151
152#define FRAME_ARGS_SKIP 8
153
154/* Put here the code to store, into a struct frame_saved_regs,
155 the addresses of the saved registers of frame described by FRAME_INFO.
156 This includes special registers such as pc and fp saved in special
157 ways in the stack frame. sp is even more special:
158 the address we return for it IS the sp for the next frame. */
159
a14ed312 160extern void i386_frame_init_saved_regs (struct frame_info *);
1211c4e4 161#define FRAME_INIT_SAVED_REGS(FI) i386_frame_init_saved_regs (FI)
c906108c 162
c906108c 163\f
c5aa993b 164
c906108c
SS
165/* Things needed for making the inferior call functions. */
166
2df3850c
JM
167/* "An argument's size is increased, if necessary, to make it a
168 multiple of [32 bit] words. This may require tail padding,
169 depending on the size of the argument" - from the x86 ABI. */
170#define PARM_BOUNDARY 32
171
c906108c
SS
172/* Push an empty stack frame, to record the current PC, etc. */
173
174#define PUSH_DUMMY_FRAME { i386_push_dummy_frame (); }
175
a14ed312 176extern void i386_push_dummy_frame (void);
c906108c
SS
177
178/* Discard from the stack the innermost frame, restoring all registers. */
179
180#define POP_FRAME { i386_pop_frame (); }
181
a14ed312 182extern void i386_pop_frame (void);
c906108c 183\f
c5aa993b 184
c906108c
SS
185/* this is
186 * call 11223344 (32 bit relative)
187 * int3
188 */
189
190#define CALL_DUMMY { 0x223344e8, 0xcc11 }
191
192#define CALL_DUMMY_LENGTH 8
193
c5aa993b 194#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
c906108c
SS
195
196#define CALL_DUMMY_BREAKPOINT_OFFSET 5
197
198/* Insert the specified number of args and function address
199 into a call sequence of the above form stored at DUMMYNAME. */
200
a7769679
MK
201#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
202 i386_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p)
203extern void i386_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun,
204 int nargs, struct value **args,
205 struct type *type, int gcc_p);
c906108c 206
a7769679 207/* FIXME: kettenis/2000-06-12: These do not belong here. */
a14ed312
KB
208extern void print_387_control_word (unsigned int);
209extern void print_387_status_word (unsigned int);
c906108c
SS
210
211/* Offset from SP to first arg on stack at first instruction of a function */
212
213#define SP_ARG0 (1 * 4)
214
215#endif /* ifndef TM_I386_H */