* i386-tdep.h (FPU_REG_RAW_SIZE): Define unconditionally.
[deliverable/binutils-gdb.git] / gdb / config / i386 / tm-i386.h
1 /* Macro definitions for GDB on an Intel i[345]86.
2 Copyright 1995, 1996, 1998, 1999, 2000, 2001
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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. */
21
22 #ifndef TM_I386_H
23 #define TM_I386_H 1
24
25 #define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL
26
27 #include "regcache.h"
28
29 /* Forward declarations for prototypes. */
30 struct frame_info;
31 struct frame_saved_regs;
32 struct value;
33 struct type;
34
35 #define TARGET_BYTE_ORDER LITTLE_ENDIAN
36
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
48 #define TARGET_LONG_DOUBLE_BIT 96
49
50 /* Used for example in valprint.c:print_floating() to enable checking
51 for NaN's */
52
53 #define IEEE_FLOAT (1)
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
69 #define SKIP_PROLOGUE(frompc) (i386_skip_prologue (frompc))
70
71 extern int i386_skip_prologue (int);
72
73 /* Immediately after a function call, return the saved pc. */
74
75 #define SAVED_PC_AFTER_CALL(frame) i386_saved_pc_after_call (frame)
76 extern CORE_ADDR i386_saved_pc_after_call (struct frame_info *frame);
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
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)
131
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
139 #define FP_REGNUM 5 /* (ebp) Contains address of executing stack
140 frame */
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 */
144
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
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. */
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
179 /* Return the name of register REG. */
180
181 #define REGISTER_NAME(reg) i386_register_name ((reg))
182 extern char *i386_register_name (int reg);
183
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))
188 extern 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))
194 extern 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
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)
204 #define SIZEOF_FPU_REGS (8 * 10)
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
209
210 /* Total amount of space needed to store our copies of the machine's register
211 state, the array `registers'. */
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
222
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))
226 extern int i386_register_byte (int reg);
227
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))
231 extern int i386_register_raw_size (int reg);
232
233 /* Largest value REGISTER_RAW_SIZE can have. */
234 #define MAX_REGISTER_RAW_SIZE 16
235
236 /* Return the size in bytes of the virtual type of register REG. */
237 #define REGISTER_VIRTUAL_SIZE(reg) i386_register_virtual_size ((reg))
238 extern int i386_register_virtual_size (int reg);
239
240 /* Largest value REGISTER_VIRTUAL_SIZE can have. */
241 #define MAX_REGISTER_VIRTUAL_SIZE 16
242
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)
247 extern 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)
253 extern int i386_register_convertible (int regnum);
254
255 /* Convert data from raw format for register REGNUM in buffer FROM to
256 virtual format with type TYPE in buffer TO. */
257
258 #define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) \
259 i386_register_convert_to_virtual ((regnum), (type), (from), (to))
260 extern void i386_register_convert_to_virtual (int regnum, struct type *type,
261 char *from, char *to);
262
263 /* Convert data from virtual format with type TYPE in buffer FROM to
264 raw format for register REGNUM in buffer TO. */
265
266 #define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) \
267 i386_register_convert_to_raw ((type), (regnum), (from), (to))
268 extern void i386_register_convert_to_raw (struct type *type, int regnum,
269 char *from, char *to);
270
271 /* Print out the i387 floating point state. */
272 #ifdef HAVE_I387_REGS
273 extern void i387_float_info (void);
274 #define FLOAT_INFO { i387_float_info (); }
275 #endif
276 \f
277
278 #define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
279 i386_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr))
280 extern CORE_ADDR i386_push_arguments (int nargs, struct value **args,
281 CORE_ADDR sp, int struct_return,
282 CORE_ADDR struct_addr);
283
284 /* Store the address of the place in which to copy the structure the
285 subroutine will return. This is called from call_function. */
286
287 #define STORE_STRUCT_RETURN(addr, sp) \
288 i386_store_struct_return ((addr), (sp))
289 extern void i386_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
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
295 #define EXTRACT_RETURN_VALUE(type, regbuf, valbuf) \
296 i386_extract_return_value ((type), (regbuf), (valbuf))
297 extern void i386_extract_return_value (struct type *type, char *regbuf,
298 char *valbuf);
299
300 /* Write into the appropriate registers a function return value stored
301 in VALBUF of type TYPE, given in virtual format. */
302
303 #define STORE_RETURN_VALUE(type, valbuf) \
304 i386_store_return_value ((type), (valbuf))
305 extern void i386_store_return_value (struct type *type, char *valbuf);
306
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. */
310
311 #define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) \
312 i386_extract_struct_value_address ((regbuf))
313 extern CORE_ADDR i386_extract_struct_value_address (char *regbuf);
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
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))
325 extern CORE_ADDR i386_frame_chain (struct frame_info *frame);
326
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. */
330
331 #define FRAMELESS_FUNCTION_INVOCATION(frame) \
332 i386_frameless_function_invocation (frame)
333 extern int i386_frameless_function_invocation (struct frame_info *frame);
334
335 /* Return the saved program counter for FRAME. */
336
337 #define FRAME_SAVED_PC(frame) i386_frame_saved_pc (frame)
338 extern CORE_ADDR i386_frame_saved_pc (struct frame_info *frame);
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
347 #define FRAME_NUM_ARGS(fi) (i386_frame_num_args(fi))
348
349 extern int i386_frame_num_args (struct frame_info *);
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
361 extern void i386_frame_init_saved_regs (struct frame_info *);
362 #define FRAME_INIT_SAVED_REGS(FI) i386_frame_init_saved_regs (FI)
363
364 \f
365
366 /* Things needed for making the inferior call functions. */
367
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
373 /* Push an empty stack frame, to record the current PC, etc. */
374
375 #define PUSH_DUMMY_FRAME { i386_push_dummy_frame (); }
376
377 extern void i386_push_dummy_frame (void);
378
379 /* Discard from the stack the innermost frame, restoring all registers. */
380
381 #define POP_FRAME { i386_pop_frame (); }
382
383 extern void i386_pop_frame (void);
384 \f
385
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
395 #define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
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
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)
404 extern 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);
407
408 /* FIXME: kettenis/2000-06-12: These do not belong here. */
409 extern void print_387_control_word (unsigned int);
410 extern void print_387_status_word (unsigned int);
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.075044 seconds and 4 git commands to generate.