* i386-tdep.h (FPU_REG_RAW_SIZE): Define unconditionally.
[deliverable/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
SS
34
35#define TARGET_BYTE_ORDER LITTLE_ENDIAN
36
ac27f131
MK
37/* The format used for `long double' on almost all i386 targets is the
38 i387 extended floating-point format. In fact, of all targets in the
39 GCC 2.95 tree, only OSF/1 does it different, and insists on having
40 a `long double' that's not `long' at all. */
41
42#define TARGET_LONG_DOUBLE_FORMAT &floatformat_i387_ext
43
44/* Although the i386 extended floating-point has only 80 significant
45 bits, a `long double' actually takes up 96, probably to enforce
46 alignment. */
47
6e2e8c24 48#define TARGET_LONG_DOUBLE_BIT 96
ac27f131 49
c906108c
SS
50/* Used for example in valprint.c:print_floating() to enable checking
51 for NaN's */
52
7355ddba 53#define IEEE_FLOAT (1)
c906108c
SS
54
55/* Number of traps that happen between exec'ing the shell to run an
56 inferior, and when we finally get to the inferior code. This is 2
57 on most implementations. */
58
59#define START_INFERIOR_TRAPS_EXPECTED 2
60
61/* Offset from address of function to start of its code.
62 Zero on most machines. */
63
64#define FUNCTION_START_OFFSET 0
65
66/* Advance PC across any function entry prologue instructions to reach some
67 "real" code. */
68
b83266a0 69#define SKIP_PROLOGUE(frompc) (i386_skip_prologue (frompc))
c906108c 70
a14ed312 71extern int i386_skip_prologue (int);
c906108c 72
ed84f6c1 73/* Immediately after a function call, return the saved pc. */
c906108c 74
ed84f6c1
MK
75#define SAVED_PC_AFTER_CALL(frame) i386_saved_pc_after_call (frame)
76extern CORE_ADDR i386_saved_pc_after_call (struct frame_info *frame);
c906108c
SS
77
78/* Stack grows downward. */
79
80#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
81
82/* Sequence of bytes for breakpoint instruction. */
83
84#define BREAKPOINT {0xcc}
85
86/* Amount PC must be decremented by after a breakpoint. This is often the
87 number of bytes in BREAKPOINT but not always. */
88
89#define DECR_PC_AFTER_BREAK 1
90
91/* Say how long (ordinary) registers are. This is a piece of bogosity
92 used in push_word and a few other places; REGISTER_RAW_SIZE is the
93 real way to know how big a register is. */
94
95#define REGISTER_SIZE 4
96
917317f4
JM
97/* This register file is parameterized by two macros:
98 HAVE_I387_REGS --- register file should include i387 registers
99 HAVE_SSE_REGS --- register file should include SSE registers
100 If HAVE_SSE_REGS is #defined, then HAVE_I387_REGS must also be #defined.
101
102 However, GDB code should not test those macros with #ifdef, since
103 that makes code which is annoying to multi-arch. Instead, GDB code
104 should check the values of NUM_GREGS, NUM_FREGS, and NUM_SSE_REGS,
105 which will eventually get mapped onto architecture vector entries.
106
107 It's okay to use the macros in tm-*.h files, though, since those
108 files will get completely replaced when we multi-arch anyway. */
109
110/* Number of general registers, present on every 32-bit x86 variant. */
111#define NUM_GREGS (16)
112
113/* Number of floating-point unit registers. */
114#ifdef HAVE_I387_REGS
115#define NUM_FREGS (16)
116#else
117#define NUM_FREGS (0)
118#endif
119
120/* Number of SSE registers. */
121#ifdef HAVE_SSE_REGS
122#define NUM_SSE_REGS (9)
123#else
124#define NUM_SSE_REGS (0)
125#endif
126
127#define NUM_REGS (NUM_GREGS + NUM_FREGS + NUM_SSE_REGS)
128
129/* Largest number of registers we could have in any configuration. */
130#define MAX_NUM_REGS (16 + 16 + 9)
c906108c 131
c906108c
SS
132/* Register numbers of various important registers.
133 Note that some of these values are "real" register numbers,
134 and correspond to the general registers of the machine,
135 and some are "phony" register numbers which are too large
136 to be actual register numbers as far as the user is concerned
137 but do serve to get the desired values when passed to read_register. */
138
917317f4
JM
139#define FP_REGNUM 5 /* (ebp) Contains address of executing stack
140 frame */
c5aa993b
JM
141#define SP_REGNUM 4 /* (usp) Contains address of top of stack */
142#define PC_REGNUM 8 /* (eip) Contains program counter */
143#define PS_REGNUM 9 /* (ps) Contains processor status */
c906108c 144
917317f4
JM
145/* These registers are present only if HAVE_I387_REGS is #defined.
146 We promise that FP0 .. FP7 will always be consecutive register numbers. */
147#define FP0_REGNUM 16 /* first FPU floating-point register */
148#define FP7_REGNUM 23 /* last FPU floating-point register */
149
4ce44c66
JM
150/* All of these control registers (except for FCOFF and FDOFF) are
151 sixteen bits long (at most) in the FPU, but are zero-extended to
152 thirty-two bits in GDB's register file. This makes it easier to
153 compute the size of the control register file, and somewhat easier
154 to convert to and from the FSAVE instruction's 32-bit format. */
917317f4
JM
155#define FIRST_FPU_CTRL_REGNUM 24
156#define FCTRL_REGNUM 24 /* FPU control word */
157#define FPC_REGNUM 24 /* old name for FCTRL_REGNUM */
158#define FSTAT_REGNUM 25 /* FPU status word */
159#define FTAG_REGNUM 26 /* FPU register tag word */
160#define FCS_REGNUM 27 /* FPU instruction's code segment selector
161 16 bits, called "FPU Instruction Pointer
162 Selector" in the x86 manuals */
163#define FCOFF_REGNUM 28 /* FPU instruction's offset within segment
164 ("Fpu Code OFFset") */
165#define FDS_REGNUM 29 /* FPU operand's data segment */
166#define FDOFF_REGNUM 30 /* FPU operand's offset within segment */
167#define FOP_REGNUM 31 /* FPU opcode, bottom eleven bits */
168#define LAST_FPU_CTRL_REGNUM 31
169
170/* These registers are present only if HAVE_SSE_REGS is #defined.
171 We promise that XMM0 .. XMM7 will always have consecutive reg numbers. */
172#define XMM0_REGNUM 32 /* first SSE data register */
173#define XMM7_REGNUM 39 /* last SSE data register */
174#define MXCSR_REGNUM 40 /* Streaming SIMD Extension control/status */
175
176#define IS_FP_REGNUM(n) (FP0_REGNUM <= (n) && (n) <= FP7_REGNUM)
177#define IS_SSE_REGNUM(n) (XMM0_REGNUM <= (n) && (n) <= XMM7_REGNUM)
178
fc633446
MK
179/* Return the name of register REG. */
180
181#define REGISTER_NAME(reg) i386_register_name ((reg))
182extern char *i386_register_name (int reg);
183
a2585ce7
MK
184/* Use the "default" register numbering scheme for stabs and COFF. */
185
186#define STAB_REG_TO_REGNUM(reg) i386_stab_reg_to_regnum ((reg))
187#define SDB_REG_TO_REGNUM(reg) i386_stab_reg_to_regnum ((reg))
188extern int i386_stab_reg_to_regnum (int reg);
189
190/* Use the DWARF register numbering scheme for DWARF and DWARF 2. */
191
192#define DWARF_REG_TO_REGNUM(reg) i386_dwarf_reg_to_regnum ((reg))
193#define DWARF2_REG_TO_REGNUM(reg) i386_dwarf_reg_to_regnum ((reg))
194extern int i386_dwarf_reg_to_regnum (int reg);
195
196/* We don't define ECOFF_REG_TO_REGNUM, since ECOFF doesn't seem to be
197 in use on any of the supported i386 targets. */
198\f
199
917317f4
JM
200/* Sizes of individual register sets. These cover the entire register
201 file, so summing up the sizes of those portions actually present
202 yields REGISTER_BYTES. */
203#define SIZEOF_GREGS (NUM_GREGS * 4)
226271d3 204#define SIZEOF_FPU_REGS (8 * 10)
917317f4
JM
205#define SIZEOF_FPU_CTRL_REGS \
206 ((LAST_FPU_CTRL_REGNUM - FIRST_FPU_CTRL_REGNUM + 1) * 4)
207#define SIZEOF_SSE_REGS (8 * 16 + 4)
208
c906108c
SS
209
210/* Total amount of space needed to store our copies of the machine's register
211 state, the array `registers'. */
917317f4
JM
212#ifdef HAVE_SSE_REGS
213#define REGISTER_BYTES \
214 (SIZEOF_GREGS + SIZEOF_FPU_REGS + SIZEOF_FPU_CTRL_REGS + SIZEOF_SSE_REGS)
215#else
216#ifdef HAVE_I387_REGS
217#define REGISTER_BYTES (SIZEOF_GREGS + SIZEOF_FPU_REGS + SIZEOF_FPU_CTRL_REGS)
218#else
219#define REGISTER_BYTES (SIZEOF_GREGS)
220#endif
221#endif
c906108c 222
1a11ba71
MK
223/* Return the offset into the register array of the start of register
224 number REG. */
225#define REGISTER_BYTE(reg) i386_register_byte ((reg))
226extern int i386_register_byte (int reg);
c5aa993b 227
1a11ba71
MK
228/* Return the number of bytes of storage in GDB's register array
229 occupied by register REG. */
230#define REGISTER_RAW_SIZE(reg) i386_register_raw_size ((reg))
231extern int i386_register_raw_size (int reg);
c906108c
SS
232
233/* Largest value REGISTER_RAW_SIZE can have. */
917317f4 234#define MAX_REGISTER_RAW_SIZE 16
c906108c 235
1a11ba71
MK
236/* Return the size in bytes of the virtual type of register REG. */
237#define REGISTER_VIRTUAL_SIZE(reg) i386_register_virtual_size ((reg))
238extern int i386_register_virtual_size (int reg);
c906108c
SS
239
240/* Largest value REGISTER_VIRTUAL_SIZE can have. */
917317f4 241#define MAX_REGISTER_VIRTUAL_SIZE 16
c906108c 242
d7a0d72c
MK
243/* Return the GDB type object for the "standard" data type of data in
244 register REGNUM. */
245
246#define REGISTER_VIRTUAL_TYPE(regnum) i386_register_virtual_type (regnum)
247extern struct type *i386_register_virtual_type (int regnum);
248
249/* Return true iff register REGNUM's virtual format is different from
250 its raw format. */
251
252#define REGISTER_CONVERTIBLE(regnum) i386_register_convertible (regnum)
253extern int i386_register_convertible (int regnum);
917317f4 254
ac27f131
MK
255/* Convert data from raw format for register REGNUM in buffer FROM to
256 virtual format with type TYPE in buffer TO. */
917317f4 257
ac27f131 258#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) \
cc533b9d 259 i386_register_convert_to_virtual ((regnum), (type), (from), (to))
ac27f131
MK
260extern void i386_register_convert_to_virtual (int regnum, struct type *type,
261 char *from, char *to);
917317f4 262
ac27f131
MK
263/* Convert data from virtual format with type TYPE in buffer FROM to
264 raw format for register REGNUM in buffer TO. */
917317f4 265
ac27f131 266#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) \
cc533b9d 267 i386_register_convert_to_raw ((type), (regnum), (from), (to))
ac27f131
MK
268extern void i386_register_convert_to_raw (struct type *type, int regnum,
269 char *from, char *to);
c906108c 270
de57eccd
JM
271/* Print out the i387 floating point state. */
272#ifdef HAVE_I387_REGS
273extern void i387_float_info (void);
274#define FLOAT_INFO { i387_float_info (); }
275#endif
de57eccd 276\f
22f8ba57
MK
277
278#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
279 i386_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr))
280extern CORE_ADDR i386_push_arguments (int nargs, struct value **args,
281 CORE_ADDR sp, int struct_return,
282 CORE_ADDR struct_addr);
283
c906108c 284/* Store the address of the place in which to copy the structure the
22f8ba57 285 subroutine will return. This is called from call_function. */
c906108c 286
22f8ba57
MK
287#define STORE_STRUCT_RETURN(addr, sp) \
288 i386_store_struct_return ((addr), (sp))
289extern void i386_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
c906108c
SS
290
291/* Extract from an array REGBUF containing the (raw) register state
292 a function return value of type TYPE, and copy that, in virtual format,
293 into VALBUF. */
294
ac27f131
MK
295#define EXTRACT_RETURN_VALUE(type, regbuf, valbuf) \
296 i386_extract_return_value ((type), (regbuf), (valbuf))
297extern void i386_extract_return_value (struct type *type, char *regbuf,
298 char *valbuf);
c906108c 299
ef9dff19
MK
300/* Write into the appropriate registers a function return value stored
301 in VALBUF of type TYPE, given in virtual format. */
f7af9647 302
ef9dff19
MK
303#define STORE_RETURN_VALUE(type, valbuf) \
304 i386_store_return_value ((type), (valbuf))
305extern void i386_store_return_value (struct type *type, char *valbuf);
c906108c 306
f7af9647
MK
307/* Extract from an array REGBUF containing the (raw) register state
308 the address in which a function should return its structure value,
309 as a CORE_ADDR. */
c906108c 310
f7af9647
MK
311#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) \
312 i386_extract_struct_value_address ((regbuf))
313extern CORE_ADDR i386_extract_struct_value_address (char *regbuf);
c906108c
SS
314
315/* The following redefines make backtracing through sigtramp work.
316 They manufacture a fake sigtramp frame and obtain the saved pc in sigtramp
317 from the sigcontext structure which is pushed by the kernel on the
318 user stack, along with a pointer to it. */
319
c833a37e
MK
320/* Return the chain-pointer for FRAME. In the case of the i386, the
321 frame's nominal address is the address of a 4-byte word containing
322 the calling frame's address. */
323
324#define FRAME_CHAIN(frame) i386_frame_chain ((frame))
325extern CORE_ADDR i386_frame_chain (struct frame_info *frame);
c906108c 326
539ffe0b
MK
327/* Determine whether the function invocation represented by FRAME does
328 not have a from on the stack associated with it. If it does not,
329 return non-zero, otherwise return zero. */
c906108c 330
539ffe0b
MK
331#define FRAMELESS_FUNCTION_INVOCATION(frame) \
332 i386_frameless_function_invocation (frame)
333extern int i386_frameless_function_invocation (struct frame_info *frame);
c906108c 334
0d17c81d 335/* Return the saved program counter for FRAME. */
c906108c 336
0d17c81d
MK
337#define FRAME_SAVED_PC(frame) i386_frame_saved_pc (frame)
338extern CORE_ADDR i386_frame_saved_pc (struct frame_info *frame);
c906108c
SS
339
340#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
341
342#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
343
344/* Return number of args passed to a frame. Can return -1, meaning no way
345 to tell, which is typical now that the C compiler delays popping them. */
346
392a587b 347#define FRAME_NUM_ARGS(fi) (i386_frame_num_args(fi))
c906108c 348
a14ed312 349extern int i386_frame_num_args (struct frame_info *);
c906108c
SS
350
351/* Return number of bytes at start of arglist that are not really args. */
352
353#define FRAME_ARGS_SKIP 8
354
355/* Put here the code to store, into a struct frame_saved_regs,
356 the addresses of the saved registers of frame described by FRAME_INFO.
357 This includes special registers such as pc and fp saved in special
358 ways in the stack frame. sp is even more special:
359 the address we return for it IS the sp for the next frame. */
360
a14ed312 361extern void i386_frame_init_saved_regs (struct frame_info *);
1211c4e4 362#define FRAME_INIT_SAVED_REGS(FI) i386_frame_init_saved_regs (FI)
c906108c 363
c906108c 364\f
c5aa993b 365
c906108c
SS
366/* Things needed for making the inferior call functions. */
367
2df3850c
JM
368/* "An argument's size is increased, if necessary, to make it a
369 multiple of [32 bit] words. This may require tail padding,
370 depending on the size of the argument" - from the x86 ABI. */
371#define PARM_BOUNDARY 32
372
c906108c
SS
373/* Push an empty stack frame, to record the current PC, etc. */
374
375#define PUSH_DUMMY_FRAME { i386_push_dummy_frame (); }
376
a14ed312 377extern void i386_push_dummy_frame (void);
c906108c
SS
378
379/* Discard from the stack the innermost frame, restoring all registers. */
380
381#define POP_FRAME { i386_pop_frame (); }
382
a14ed312 383extern void i386_pop_frame (void);
c906108c 384\f
c5aa993b 385
c906108c
SS
386/* this is
387 * call 11223344 (32 bit relative)
388 * int3
389 */
390
391#define CALL_DUMMY { 0x223344e8, 0xcc11 }
392
393#define CALL_DUMMY_LENGTH 8
394
c5aa993b 395#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
c906108c
SS
396
397#define CALL_DUMMY_BREAKPOINT_OFFSET 5
398
399/* Insert the specified number of args and function address
400 into a call sequence of the above form stored at DUMMYNAME. */
401
a7769679
MK
402#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
403 i386_fix_call_dummy (dummyname, pc, fun, nargs, args, type, gcc_p)
404extern void i386_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun,
405 int nargs, struct value **args,
406 struct type *type, int gcc_p);
c906108c 407
a7769679 408/* FIXME: kettenis/2000-06-12: These do not belong here. */
a14ed312
KB
409extern void print_387_control_word (unsigned int);
410extern void print_387_status_word (unsigned int);
c906108c
SS
411
412/* Offset from SP to first arg on stack at first instruction of a function */
413
414#define SP_ARG0 (1 * 4)
415
416#endif /* ifndef TM_I386_H */
This page took 0.141239 seconds and 4 git commands to generate.