2003-10-06 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / gdb / i386-tdep.c
CommitLineData
c906108c 1/* Intel 386 target-dependent stuff.
349c5d5f
AC
2
3 Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4be87837 4 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
c906108c 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#include "defs.h"
acd5c798
MK
24#include "arch-utils.h"
25#include "command.h"
26#include "dummy-frame.h"
6405b0a6 27#include "dwarf2-frame.h"
acd5c798
MK
28#include "doublest.h"
29#include "floatformat.h"
c906108c 30#include "frame.h"
acd5c798
MK
31#include "frame-base.h"
32#include "frame-unwind.h"
c906108c 33#include "inferior.h"
acd5c798 34#include "gdbcmd.h"
c906108c 35#include "gdbcore.h"
dfe01d39 36#include "objfiles.h"
acd5c798
MK
37#include "osabi.h"
38#include "regcache.h"
39#include "reggroups.h"
473f17b0 40#include "regset.h"
c0d1d883 41#include "symfile.h"
c906108c 42#include "symtab.h"
acd5c798 43#include "target.h"
fd0407d6 44#include "value.h"
a89aa300 45#include "dis-asm.h"
acd5c798 46
3d261580 47#include "gdb_assert.h"
acd5c798 48#include "gdb_string.h"
3d261580 49
d2a7c97a 50#include "i386-tdep.h"
61113f8b 51#include "i387-tdep.h"
d2a7c97a 52
fc633446
MK
53/* Names of the registers. The first 10 registers match the register
54 numbering scheme used by GCC for stabs and DWARF. */
c40e1eab 55
fc633446
MK
56static char *i386_register_names[] =
57{
58 "eax", "ecx", "edx", "ebx",
59 "esp", "ebp", "esi", "edi",
60 "eip", "eflags", "cs", "ss",
61 "ds", "es", "fs", "gs",
62 "st0", "st1", "st2", "st3",
63 "st4", "st5", "st6", "st7",
64 "fctrl", "fstat", "ftag", "fiseg",
65 "fioff", "foseg", "fooff", "fop",
66 "xmm0", "xmm1", "xmm2", "xmm3",
67 "xmm4", "xmm5", "xmm6", "xmm7",
68 "mxcsr"
69};
70
1cb97e17 71static const int i386_num_register_names = ARRAY_SIZE (i386_register_names);
c40e1eab 72
28fc6740
AC
73/* MMX registers. */
74
75static char *i386_mmx_names[] =
76{
77 "mm0", "mm1", "mm2", "mm3",
78 "mm4", "mm5", "mm6", "mm7"
79};
c40e1eab 80
1cb97e17 81static const int i386_num_mmx_regs = ARRAY_SIZE (i386_mmx_names);
c40e1eab 82
28fc6740 83static int
5716833c 84i386_mmx_regnum_p (struct gdbarch *gdbarch, int regnum)
28fc6740 85{
5716833c
MK
86 int mm0_regnum = gdbarch_tdep (gdbarch)->mm0_regnum;
87
88 if (mm0_regnum < 0)
89 return 0;
90
91 return (regnum >= mm0_regnum && regnum < mm0_regnum + i386_num_mmx_regs);
28fc6740
AC
92}
93
5716833c 94/* SSE register? */
23a34459 95
5716833c
MK
96static int
97i386_sse_regnum_p (struct gdbarch *gdbarch, int regnum)
23a34459 98{
5716833c
MK
99 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
100
101#define I387_ST0_REGNUM tdep->st0_regnum
102#define I387_NUM_XMM_REGS tdep->num_xmm_regs
103
104 if (I387_NUM_XMM_REGS == 0)
105 return 0;
106
107 return (I387_XMM0_REGNUM <= regnum && regnum < I387_MXCSR_REGNUM);
108
109#undef I387_ST0_REGNUM
110#undef I387_NUM_XMM_REGS
23a34459
AC
111}
112
5716833c
MK
113static int
114i386_mxcsr_regnum_p (struct gdbarch *gdbarch, int regnum)
23a34459 115{
5716833c
MK
116 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
117
118#define I387_ST0_REGNUM tdep->st0_regnum
119#define I387_NUM_XMM_REGS tdep->num_xmm_regs
120
121 if (I387_NUM_XMM_REGS == 0)
122 return 0;
123
124 return (regnum == I387_MXCSR_REGNUM);
125
126#undef I387_ST0_REGNUM
127#undef I387_NUM_XMM_REGS
23a34459
AC
128}
129
5716833c
MK
130#define I387_ST0_REGNUM (gdbarch_tdep (current_gdbarch)->st0_regnum)
131#define I387_MM0_REGNUM (gdbarch_tdep (current_gdbarch)->mm0_regnum)
132#define I387_NUM_XMM_REGS (gdbarch_tdep (current_gdbarch)->num_xmm_regs)
133
134/* FP register? */
23a34459
AC
135
136int
5716833c 137i386_fp_regnum_p (int regnum)
23a34459 138{
5716833c
MK
139 if (I387_ST0_REGNUM < 0)
140 return 0;
141
142 return (I387_ST0_REGNUM <= regnum && regnum < I387_FCTRL_REGNUM);
23a34459
AC
143}
144
145int
5716833c 146i386_fpc_regnum_p (int regnum)
23a34459 147{
5716833c
MK
148 if (I387_ST0_REGNUM < 0)
149 return 0;
150
151 return (I387_FCTRL_REGNUM <= regnum && regnum < I387_XMM0_REGNUM);
23a34459
AC
152}
153
fc633446
MK
154/* Return the name of register REG. */
155
fa88f677 156const char *
fc633446
MK
157i386_register_name (int reg)
158{
5716833c
MK
159 if (i386_mmx_regnum_p (current_gdbarch, reg))
160 return i386_mmx_names[reg - I387_MM0_REGNUM];
fc633446 161
70913449
MK
162 if (reg >= 0 && reg < i386_num_register_names)
163 return i386_register_names[reg];
164
c40e1eab 165 return NULL;
fc633446
MK
166}
167
85540d8c
MK
168/* Convert stabs register number REG to the appropriate register
169 number used by GDB. */
170
8201327c 171static int
85540d8c
MK
172i386_stab_reg_to_regnum (int reg)
173{
174 /* This implements what GCC calls the "default" register map. */
175 if (reg >= 0 && reg <= 7)
176 {
acd5c798 177 /* General-purpose registers. */
85540d8c
MK
178 return reg;
179 }
180 else if (reg >= 12 && reg <= 19)
181 {
182 /* Floating-point registers. */
5716833c 183 return reg - 12 + I387_ST0_REGNUM;
85540d8c
MK
184 }
185 else if (reg >= 21 && reg <= 28)
186 {
187 /* SSE registers. */
5716833c 188 return reg - 21 + I387_XMM0_REGNUM;
85540d8c
MK
189 }
190 else if (reg >= 29 && reg <= 36)
191 {
192 /* MMX registers. */
5716833c 193 return reg - 29 + I387_MM0_REGNUM;
85540d8c
MK
194 }
195
196 /* This will hopefully provoke a warning. */
197 return NUM_REGS + NUM_PSEUDO_REGS;
198}
199
8201327c 200/* Convert DWARF register number REG to the appropriate register
85540d8c
MK
201 number used by GDB. */
202
8201327c 203static int
85540d8c
MK
204i386_dwarf_reg_to_regnum (int reg)
205{
206 /* The DWARF register numbering includes %eip and %eflags, and
207 numbers the floating point registers differently. */
208 if (reg >= 0 && reg <= 9)
209 {
acd5c798 210 /* General-purpose registers. */
85540d8c
MK
211 return reg;
212 }
213 else if (reg >= 11 && reg <= 18)
214 {
215 /* Floating-point registers. */
5716833c 216 return reg - 11 + I387_ST0_REGNUM;
85540d8c
MK
217 }
218 else if (reg >= 21)
219 {
220 /* The SSE and MMX registers have identical numbers as in stabs. */
221 return i386_stab_reg_to_regnum (reg);
222 }
223
224 /* This will hopefully provoke a warning. */
225 return NUM_REGS + NUM_PSEUDO_REGS;
226}
5716833c
MK
227
228#undef I387_ST0_REGNUM
229#undef I387_MM0_REGNUM
230#undef I387_NUM_XMM_REGS
fc338970 231\f
917317f4 232
fc338970
MK
233/* This is the variable that is set with "set disassembly-flavor", and
234 its legitimate values. */
53904c9e
AC
235static const char att_flavor[] = "att";
236static const char intel_flavor[] = "intel";
237static const char *valid_flavors[] =
c5aa993b 238{
c906108c
SS
239 att_flavor,
240 intel_flavor,
241 NULL
242};
53904c9e 243static const char *disassembly_flavor = att_flavor;
acd5c798 244\f
c906108c 245
acd5c798
MK
246/* Use the program counter to determine the contents and size of a
247 breakpoint instruction. Return a pointer to a string of bytes that
248 encode a breakpoint instruction, store the length of the string in
249 *LEN and optionally adjust *PC to point to the correct memory
250 location for inserting the breakpoint.
c906108c 251
acd5c798
MK
252 On the i386 we have a single breakpoint that fits in a single byte
253 and can be inserted anywhere.
c906108c 254
acd5c798
MK
255 This function is 64-bit safe. */
256
257static const unsigned char *
258i386_breakpoint_from_pc (CORE_ADDR *pc, int *len)
c906108c 259{
acd5c798
MK
260 static unsigned char break_insn[] = { 0xcc }; /* int 3 */
261
262 *len = sizeof (break_insn);
263 return break_insn;
c906108c 264}
fc338970 265\f
acd5c798
MK
266#ifdef I386_REGNO_TO_SYMMETRY
267#error "The Sequent Symmetry is no longer supported."
268#endif
c906108c 269
acd5c798
MK
270/* According to the System V ABI, the registers %ebp, %ebx, %edi, %esi
271 and %esp "belong" to the calling function. Therefore these
272 registers should be saved if they're going to be modified. */
c906108c 273
acd5c798
MK
274/* The maximum number of saved registers. This should include all
275 registers mentioned above, and %eip. */
a3386186 276#define I386_NUM_SAVED_REGS I386_NUM_GREGS
acd5c798
MK
277
278struct i386_frame_cache
c906108c 279{
acd5c798
MK
280 /* Base address. */
281 CORE_ADDR base;
282 CORE_ADDR sp_offset;
283 CORE_ADDR pc;
284
fd13a04a
AC
285 /* Saved registers. */
286 CORE_ADDR saved_regs[I386_NUM_SAVED_REGS];
acd5c798
MK
287 CORE_ADDR saved_sp;
288 int pc_in_eax;
289
290 /* Stack space reserved for local variables. */
291 long locals;
292};
293
294/* Allocate and initialize a frame cache. */
295
296static struct i386_frame_cache *
fd13a04a 297i386_alloc_frame_cache (void)
acd5c798
MK
298{
299 struct i386_frame_cache *cache;
300 int i;
301
302 cache = FRAME_OBSTACK_ZALLOC (struct i386_frame_cache);
303
304 /* Base address. */
305 cache->base = 0;
306 cache->sp_offset = -4;
307 cache->pc = 0;
308
fd13a04a
AC
309 /* Saved registers. We initialize these to -1 since zero is a valid
310 offset (that's where %ebp is supposed to be stored). */
311 for (i = 0; i < I386_NUM_SAVED_REGS; i++)
312 cache->saved_regs[i] = -1;
acd5c798
MK
313 cache->saved_sp = 0;
314 cache->pc_in_eax = 0;
315
316 /* Frameless until proven otherwise. */
317 cache->locals = -1;
318
319 return cache;
320}
c906108c 321
acd5c798
MK
322/* If the instruction at PC is a jump, return the address of its
323 target. Otherwise, return PC. */
c906108c 324
acd5c798
MK
325static CORE_ADDR
326i386_follow_jump (CORE_ADDR pc)
327{
328 unsigned char op;
329 long delta = 0;
330 int data16 = 0;
c906108c 331
acd5c798
MK
332 op = read_memory_unsigned_integer (pc, 1);
333 if (op == 0x66)
c906108c 334 {
c906108c 335 data16 = 1;
acd5c798 336 op = read_memory_unsigned_integer (pc + 1, 1);
c906108c
SS
337 }
338
acd5c798 339 switch (op)
c906108c
SS
340 {
341 case 0xe9:
fc338970 342 /* Relative jump: if data16 == 0, disp32, else disp16. */
c906108c
SS
343 if (data16)
344 {
acd5c798 345 delta = read_memory_integer (pc + 2, 2);
c906108c 346
fc338970
MK
347 /* Include the size of the jmp instruction (including the
348 0x66 prefix). */
acd5c798 349 delta += 4;
c906108c
SS
350 }
351 else
352 {
acd5c798 353 delta = read_memory_integer (pc + 1, 4);
c906108c 354
acd5c798
MK
355 /* Include the size of the jmp instruction. */
356 delta += 5;
c906108c
SS
357 }
358 break;
359 case 0xeb:
fc338970 360 /* Relative jump, disp8 (ignore data16). */
acd5c798 361 delta = read_memory_integer (pc + data16 + 1, 1);
c906108c 362
acd5c798 363 delta += data16 + 2;
c906108c
SS
364 break;
365 }
c906108c 366
acd5c798
MK
367 return pc + delta;
368}
fc338970 369
acd5c798
MK
370/* Check whether PC points at a prologue for a function returning a
371 structure or union. If so, it updates CACHE and returns the
372 address of the first instruction after the code sequence that
373 removes the "hidden" argument from the stack or CURRENT_PC,
374 whichever is smaller. Otherwise, return PC. */
c906108c 375
acd5c798
MK
376static CORE_ADDR
377i386_analyze_struct_return (CORE_ADDR pc, CORE_ADDR current_pc,
378 struct i386_frame_cache *cache)
c906108c 379{
acd5c798
MK
380 /* Functions that return a structure or union start with:
381
382 popl %eax 0x58
383 xchgl %eax, (%esp) 0x87 0x04 0x24
384 or xchgl %eax, 0(%esp) 0x87 0x44 0x24 0x00
385
386 (the System V compiler puts out the second `xchg' instruction,
387 and the assembler doesn't try to optimize it, so the 'sib' form
388 gets generated). This sequence is used to get the address of the
389 return buffer for a function that returns a structure. */
390 static unsigned char proto1[3] = { 0x87, 0x04, 0x24 };
391 static unsigned char proto2[4] = { 0x87, 0x44, 0x24, 0x00 };
392 unsigned char buf[4];
c906108c
SS
393 unsigned char op;
394
acd5c798
MK
395 if (current_pc <= pc)
396 return pc;
397
398 op = read_memory_unsigned_integer (pc, 1);
c906108c 399
acd5c798
MK
400 if (op != 0x58) /* popl %eax */
401 return pc;
c906108c 402
acd5c798
MK
403 read_memory (pc + 1, buf, 4);
404 if (memcmp (buf, proto1, 3) != 0 && memcmp (buf, proto2, 4) != 0)
405 return pc;
c906108c 406
acd5c798 407 if (current_pc == pc)
c906108c 408 {
acd5c798
MK
409 cache->sp_offset += 4;
410 return current_pc;
c906108c
SS
411 }
412
acd5c798 413 if (current_pc == pc + 1)
c906108c 414 {
acd5c798
MK
415 cache->pc_in_eax = 1;
416 return current_pc;
417 }
418
419 if (buf[1] == proto1[1])
420 return pc + 4;
421 else
422 return pc + 5;
423}
424
425static CORE_ADDR
426i386_skip_probe (CORE_ADDR pc)
427{
428 /* A function may start with
fc338970 429
acd5c798
MK
430 pushl constant
431 call _probe
432 addl $4, %esp
fc338970 433
acd5c798
MK
434 followed by
435
436 pushl %ebp
fc338970 437
acd5c798
MK
438 etc. */
439 unsigned char buf[8];
440 unsigned char op;
fc338970 441
acd5c798
MK
442 op = read_memory_unsigned_integer (pc, 1);
443
444 if (op == 0x68 || op == 0x6a)
445 {
446 int delta;
c906108c 447
acd5c798
MK
448 /* Skip past the `pushl' instruction; it has either a one-byte or a
449 four-byte operand, depending on the opcode. */
c906108c 450 if (op == 0x68)
acd5c798 451 delta = 5;
c906108c 452 else
acd5c798 453 delta = 2;
c906108c 454
acd5c798
MK
455 /* Read the following 8 bytes, which should be `call _probe' (6
456 bytes) followed by `addl $4,%esp' (2 bytes). */
457 read_memory (pc + delta, buf, sizeof (buf));
c906108c 458 if (buf[0] == 0xe8 && buf[6] == 0xc4 && buf[7] == 0x4)
acd5c798 459 pc += delta + sizeof (buf);
c906108c
SS
460 }
461
acd5c798
MK
462 return pc;
463}
464
465/* Check whether PC points at a code that sets up a new stack frame.
466 If so, it updates CACHE and returns the address of the first
467 instruction after the sequence that sets removes the "hidden"
468 argument from the stack or CURRENT_PC, whichever is smaller.
469 Otherwise, return PC. */
470
471static CORE_ADDR
472i386_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc,
473 struct i386_frame_cache *cache)
474{
475 unsigned char op;
26604a34 476 int skip = 0;
acd5c798
MK
477
478 if (current_pc <= pc)
479 return current_pc;
480
481 op = read_memory_unsigned_integer (pc, 1);
482
c906108c 483 if (op == 0x55) /* pushl %ebp */
c5aa993b 484 {
acd5c798
MK
485 /* Take into account that we've executed the `pushl %ebp' that
486 starts this instruction sequence. */
fd13a04a 487 cache->saved_regs[I386_EBP_REGNUM] = 0;
acd5c798
MK
488 cache->sp_offset += 4;
489
490 /* If that's all, return now. */
491 if (current_pc <= pc + 1)
492 return current_pc;
493
acd5c798 494 op = read_memory_unsigned_integer (pc + 1, 1);
26604a34
MK
495
496 /* Check for some special instructions that might be migrated
497 by GCC into the prologue. We check for
498
499 xorl %ebx, %ebx
500 xorl %ecx, %ecx
501 xorl %edx, %edx
502
503 and the equivalent
504
505 subl %ebx, %ebx
506 subl %ecx, %ecx
507 subl %edx, %edx
508
509 Make sure we only skip these instructions if we later see the
510 `movl %esp, %ebp' that actually sets up the frame. */
511 while (op == 0x29 || op == 0x31)
512 {
513 op = read_memory_unsigned_integer (pc + skip + 2, 1);
514 switch (op)
515 {
516 case 0xdb: /* %ebx */
517 case 0xc9: /* %ecx */
518 case 0xd2: /* %edx */
519 skip += 2;
520 break;
521 default:
522 return pc + 1;
523 }
524
525 op = read_memory_unsigned_integer (pc + skip + 1, 1);
526 }
527
528 /* Check for `movl %esp, %ebp' -- can be written in two ways. */
acd5c798 529 switch (op)
c906108c
SS
530 {
531 case 0x8b:
26604a34 532 if (read_memory_unsigned_integer (pc + skip + 2, 1) != 0xec)
acd5c798 533 return pc + 1;
c906108c
SS
534 break;
535 case 0x89:
26604a34 536 if (read_memory_unsigned_integer (pc + skip + 2, 1) != 0xe5)
acd5c798 537 return pc + 1;
c906108c
SS
538 break;
539 default:
acd5c798 540 return pc + 1;
c906108c 541 }
acd5c798 542
26604a34
MK
543 /* OK, we actually have a frame. We just don't know how large
544 it is yet. Set its size to zero. We'll adjust it if
545 necessary. We also now commit to skipping the special
546 instructions mentioned before. */
acd5c798 547 cache->locals = 0;
26604a34 548 pc += skip;
acd5c798
MK
549
550 /* If that's all, return now. */
551 if (current_pc <= pc + 3)
552 return current_pc;
553
fc338970
MK
554 /* Check for stack adjustment
555
acd5c798 556 subl $XXX, %esp
fc338970
MK
557
558 NOTE: You can't subtract a 16 bit immediate from a 32 bit
559 reg, so we don't have to worry about a data16 prefix. */
acd5c798 560 op = read_memory_unsigned_integer (pc + 3, 1);
c906108c
SS
561 if (op == 0x83)
562 {
fc338970 563 /* `subl' with 8 bit immediate. */
acd5c798 564 if (read_memory_unsigned_integer (pc + 4, 1) != 0xec)
fc338970 565 /* Some instruction starting with 0x83 other than `subl'. */
acd5c798
MK
566 return pc + 3;
567
568 /* `subl' with signed byte immediate (though it wouldn't make
569 sense to be negative). */
570 cache->locals = read_memory_integer (pc + 5, 1);
571 return pc + 6;
c906108c
SS
572 }
573 else if (op == 0x81)
574 {
fc338970 575 /* Maybe it is `subl' with a 32 bit immedediate. */
acd5c798 576 if (read_memory_unsigned_integer (pc + 4, 1) != 0xec)
fc338970 577 /* Some instruction starting with 0x81 other than `subl'. */
acd5c798
MK
578 return pc + 3;
579
fc338970 580 /* It is `subl' with a 32 bit immediate. */
acd5c798
MK
581 cache->locals = read_memory_integer (pc + 5, 4);
582 return pc + 9;
c906108c
SS
583 }
584 else
585 {
acd5c798
MK
586 /* Some instruction other than `subl'. */
587 return pc + 3;
c906108c
SS
588 }
589 }
acd5c798 590 else if (op == 0xc8) /* enter $XXX */
c906108c 591 {
acd5c798
MK
592 cache->locals = read_memory_unsigned_integer (pc + 1, 2);
593 return pc + 4;
c906108c 594 }
21d0e8a4 595
acd5c798 596 return pc;
21d0e8a4
MK
597}
598
acd5c798
MK
599/* Check whether PC points at code that saves registers on the stack.
600 If so, it updates CACHE and returns the address of the first
601 instruction after the register saves or CURRENT_PC, whichever is
602 smaller. Otherwise, return PC. */
6bff26de
MK
603
604static CORE_ADDR
acd5c798
MK
605i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
606 struct i386_frame_cache *cache)
6bff26de 607{
99ab4326
MK
608 CORE_ADDR offset = 0;
609 unsigned char op;
610 int i;
c0d1d883 611
99ab4326
MK
612 if (cache->locals > 0)
613 offset -= cache->locals;
614 for (i = 0; i < 8 && pc < current_pc; i++)
615 {
616 op = read_memory_unsigned_integer (pc, 1);
617 if (op < 0x50 || op > 0x57)
618 break;
0d17c81d 619
99ab4326
MK
620 offset -= 4;
621 cache->saved_regs[op - 0x50] = offset;
622 cache->sp_offset += 4;
623 pc++;
6bff26de
MK
624 }
625
acd5c798 626 return pc;
22797942
AC
627}
628
acd5c798
MK
629/* Do a full analysis of the prologue at PC and update CACHE
630 accordingly. Bail out early if CURRENT_PC is reached. Return the
631 address where the analysis stopped.
ed84f6c1 632
fc338970
MK
633 We handle these cases:
634
635 The startup sequence can be at the start of the function, or the
636 function can start with a branch to startup code at the end.
637
638 %ebp can be set up with either the 'enter' instruction, or "pushl
639 %ebp, movl %esp, %ebp" (`enter' is too slow to be useful, but was
640 once used in the System V compiler).
641
642 Local space is allocated just below the saved %ebp by either the
643 'enter' instruction, or by "subl $<size>, %esp". 'enter' has a 16
644 bit unsigned argument for space to allocate, and the 'addl'
645 instruction could have either a signed byte, or 32 bit immediate.
646
647 Next, the registers used by this function are pushed. With the
648 System V compiler they will always be in the order: %edi, %esi,
649 %ebx (and sometimes a harmless bug causes it to also save but not
650 restore %eax); however, the code below is willing to see the pushes
651 in any order, and will handle up to 8 of them.
652
653 If the setup sequence is at the end of the function, then the next
654 instruction will be a branch back to the start. */
c906108c 655
acd5c798
MK
656static CORE_ADDR
657i386_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
658 struct i386_frame_cache *cache)
c906108c 659{
acd5c798
MK
660 pc = i386_follow_jump (pc);
661 pc = i386_analyze_struct_return (pc, current_pc, cache);
662 pc = i386_skip_probe (pc);
663 pc = i386_analyze_frame_setup (pc, current_pc, cache);
664 return i386_analyze_register_saves (pc, current_pc, cache);
c906108c
SS
665}
666
fc338970 667/* Return PC of first real instruction. */
c906108c 668
3a1e71e3 669static CORE_ADDR
acd5c798 670i386_skip_prologue (CORE_ADDR start_pc)
c906108c 671{
c5aa993b 672 static unsigned char pic_pat[6] =
acd5c798
MK
673 {
674 0xe8, 0, 0, 0, 0, /* call 0x0 */
675 0x5b, /* popl %ebx */
c5aa993b 676 };
acd5c798
MK
677 struct i386_frame_cache cache;
678 CORE_ADDR pc;
679 unsigned char op;
680 int i;
c5aa993b 681
acd5c798
MK
682 cache.locals = -1;
683 pc = i386_analyze_prologue (start_pc, 0xffffffff, &cache);
684 if (cache.locals < 0)
685 return start_pc;
c5aa993b 686
acd5c798 687 /* Found valid frame setup. */
c906108c 688
fc338970
MK
689 /* The native cc on SVR4 in -K PIC mode inserts the following code
690 to get the address of the global offset table (GOT) into register
acd5c798
MK
691 %ebx:
692
fc338970
MK
693 call 0x0
694 popl %ebx
695 movl %ebx,x(%ebp) (optional)
696 addl y,%ebx
697
c906108c
SS
698 This code is with the rest of the prologue (at the end of the
699 function), so we have to skip it to get to the first real
700 instruction at the start of the function. */
c5aa993b 701
c906108c
SS
702 for (i = 0; i < 6; i++)
703 {
acd5c798 704 op = read_memory_unsigned_integer (pc + i, 1);
c5aa993b 705 if (pic_pat[i] != op)
c906108c
SS
706 break;
707 }
708 if (i == 6)
709 {
acd5c798
MK
710 int delta = 6;
711
712 op = read_memory_unsigned_integer (pc + delta, 1);
c906108c 713
c5aa993b 714 if (op == 0x89) /* movl %ebx, x(%ebp) */
c906108c 715 {
acd5c798
MK
716 op = read_memory_unsigned_integer (pc + delta + 1, 1);
717
fc338970 718 if (op == 0x5d) /* One byte offset from %ebp. */
acd5c798 719 delta += 3;
fc338970 720 else if (op == 0x9d) /* Four byte offset from %ebp. */
acd5c798 721 delta += 6;
fc338970 722 else /* Unexpected instruction. */
acd5c798
MK
723 delta = 0;
724
725 op = read_memory_unsigned_integer (pc + delta, 1);
c906108c 726 }
acd5c798 727
c5aa993b 728 /* addl y,%ebx */
acd5c798
MK
729 if (delta > 0 && op == 0x81
730 && read_memory_unsigned_integer (pc + delta + 1, 1) == 0xc3);
c906108c 731 {
acd5c798 732 pc += delta + 6;
c906108c
SS
733 }
734 }
c5aa993b 735
acd5c798 736 return i386_follow_jump (pc);
c906108c
SS
737}
738
acd5c798 739/* This function is 64-bit safe. */
93924b6b 740
acd5c798
MK
741static CORE_ADDR
742i386_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
93924b6b 743{
acd5c798
MK
744 char buf[8];
745
746 frame_unwind_register (next_frame, PC_REGNUM, buf);
747 return extract_typed_address (buf, builtin_type_void_func_ptr);
93924b6b 748}
acd5c798 749\f
93924b6b 750
acd5c798 751/* Normal frames. */
c5aa993b 752
acd5c798
MK
753static struct i386_frame_cache *
754i386_frame_cache (struct frame_info *next_frame, void **this_cache)
a7769679 755{
acd5c798 756 struct i386_frame_cache *cache;
c0d1d883 757 char buf[4];
acd5c798
MK
758 int i;
759
760 if (*this_cache)
761 return *this_cache;
762
fd13a04a 763 cache = i386_alloc_frame_cache ();
acd5c798
MK
764 *this_cache = cache;
765
766 /* In principle, for normal frames, %ebp holds the frame pointer,
767 which holds the base address for the current stack frame.
768 However, for functions that don't need it, the frame pointer is
769 optional. For these "frameless" functions the frame pointer is
770 actually the frame pointer of the calling frame. Signal
771 trampolines are just a special case of a "frameless" function.
772 They (usually) share their frame pointer with the frame that was
773 in progress when the signal occurred. */
774
775 frame_unwind_register (next_frame, I386_EBP_REGNUM, buf);
776 cache->base = extract_unsigned_integer (buf, 4);
777 if (cache->base == 0)
778 return cache;
779
780 /* For normal frames, %eip is stored at 4(%ebp). */
fd13a04a 781 cache->saved_regs[I386_EIP_REGNUM] = 4;
acd5c798
MK
782
783 cache->pc = frame_func_unwind (next_frame);
784 if (cache->pc != 0)
785 i386_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache);
786
787 if (cache->locals < 0)
788 {
789 /* We didn't find a valid frame, which means that CACHE->base
790 currently holds the frame pointer for our calling frame. If
791 we're at the start of a function, or somewhere half-way its
792 prologue, the function's frame probably hasn't been fully
793 setup yet. Try to reconstruct the base address for the stack
794 frame by looking at the stack pointer. For truly "frameless"
795 functions this might work too. */
796
797 frame_unwind_register (next_frame, I386_ESP_REGNUM, buf);
798 cache->base = extract_unsigned_integer (buf, 4) + cache->sp_offset;
799 }
800
801 /* Now that we have the base address for the stack frame we can
802 calculate the value of %esp in the calling frame. */
803 cache->saved_sp = cache->base + 8;
a7769679 804
acd5c798
MK
805 /* Adjust all the saved registers such that they contain addresses
806 instead of offsets. */
807 for (i = 0; i < I386_NUM_SAVED_REGS; i++)
fd13a04a
AC
808 if (cache->saved_regs[i] != -1)
809 cache->saved_regs[i] += cache->base;
acd5c798
MK
810
811 return cache;
a7769679
MK
812}
813
3a1e71e3 814static void
acd5c798
MK
815i386_frame_this_id (struct frame_info *next_frame, void **this_cache,
816 struct frame_id *this_id)
c906108c 817{
acd5c798
MK
818 struct i386_frame_cache *cache = i386_frame_cache (next_frame, this_cache);
819
820 /* This marks the outermost frame. */
821 if (cache->base == 0)
822 return;
823
3e210248 824 /* See the end of i386_push_dummy_call. */
acd5c798
MK
825 (*this_id) = frame_id_build (cache->base + 8, cache->pc);
826}
827
828static void
829i386_frame_prev_register (struct frame_info *next_frame, void **this_cache,
830 int regnum, int *optimizedp,
831 enum lval_type *lvalp, CORE_ADDR *addrp,
832 int *realnump, void *valuep)
833{
834 struct i386_frame_cache *cache = i386_frame_cache (next_frame, this_cache);
835
836 gdb_assert (regnum >= 0);
837
838 /* The System V ABI says that:
839
840 "The flags register contains the system flags, such as the
841 direction flag and the carry flag. The direction flag must be
842 set to the forward (that is, zero) direction before entry and
843 upon exit from a function. Other user flags have no specified
844 role in the standard calling sequence and are not preserved."
845
846 To guarantee the "upon exit" part of that statement we fake a
847 saved flags register that has its direction flag cleared.
848
849 Note that GCC doesn't seem to rely on the fact that the direction
850 flag is cleared after a function return; it always explicitly
851 clears the flag before operations where it matters.
852
853 FIXME: kettenis/20030316: I'm not quite sure whether this is the
854 right thing to do. The way we fake the flags register here makes
855 it impossible to change it. */
856
857 if (regnum == I386_EFLAGS_REGNUM)
858 {
859 *optimizedp = 0;
860 *lvalp = not_lval;
861 *addrp = 0;
862 *realnump = -1;
863 if (valuep)
864 {
865 ULONGEST val;
c5aa993b 866
acd5c798 867 /* Clear the direction flag. */
f837910f
MK
868 val = frame_unwind_register_unsigned (next_frame,
869 I386_EFLAGS_REGNUM);
acd5c798
MK
870 val &= ~(1 << 10);
871 store_unsigned_integer (valuep, 4, val);
872 }
873
874 return;
875 }
1211c4e4 876
acd5c798 877 if (regnum == I386_EIP_REGNUM && cache->pc_in_eax)
c906108c 878 {
acd5c798
MK
879 frame_register_unwind (next_frame, I386_EAX_REGNUM,
880 optimizedp, lvalp, addrp, realnump, valuep);
881 return;
882 }
883
884 if (regnum == I386_ESP_REGNUM && cache->saved_sp)
885 {
886 *optimizedp = 0;
887 *lvalp = not_lval;
888 *addrp = 0;
889 *realnump = -1;
890 if (valuep)
c906108c 891 {
acd5c798
MK
892 /* Store the value. */
893 store_unsigned_integer (valuep, 4, cache->saved_sp);
c906108c 894 }
acd5c798 895 return;
c906108c 896 }
acd5c798 897
fd13a04a
AC
898 if (regnum < I386_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
899 {
900 *optimizedp = 0;
901 *lvalp = lval_memory;
902 *addrp = cache->saved_regs[regnum];
903 *realnump = -1;
904 if (valuep)
905 {
906 /* Read the value in from memory. */
907 read_memory (*addrp, valuep,
908 register_size (current_gdbarch, regnum));
909 }
910 return;
911 }
912
913 frame_register_unwind (next_frame, regnum,
914 optimizedp, lvalp, addrp, realnump, valuep);
acd5c798
MK
915}
916
917static const struct frame_unwind i386_frame_unwind =
918{
919 NORMAL_FRAME,
920 i386_frame_this_id,
921 i386_frame_prev_register
922};
923
924static const struct frame_unwind *
336d1bba 925i386_frame_sniffer (struct frame_info *next_frame)
acd5c798
MK
926{
927 return &i386_frame_unwind;
928}
929\f
930
931/* Signal trampolines. */
932
933static struct i386_frame_cache *
934i386_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
935{
936 struct i386_frame_cache *cache;
937 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
938 CORE_ADDR addr;
939 char buf[4];
940
941 if (*this_cache)
942 return *this_cache;
943
fd13a04a 944 cache = i386_alloc_frame_cache ();
acd5c798
MK
945
946 frame_unwind_register (next_frame, I386_ESP_REGNUM, buf);
947 cache->base = extract_unsigned_integer (buf, 4) - 4;
948
949 addr = tdep->sigcontext_addr (next_frame);
a3386186
MK
950 if (tdep->sc_reg_offset)
951 {
952 int i;
953
954 gdb_assert (tdep->sc_num_regs <= I386_NUM_SAVED_REGS);
955
956 for (i = 0; i < tdep->sc_num_regs; i++)
957 if (tdep->sc_reg_offset[i] != -1)
fd13a04a 958 cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
a3386186
MK
959 }
960 else
961 {
fd13a04a
AC
962 cache->saved_regs[I386_EIP_REGNUM] = addr + tdep->sc_pc_offset;
963 cache->saved_regs[I386_ESP_REGNUM] = addr + tdep->sc_sp_offset;
a3386186 964 }
acd5c798
MK
965
966 *this_cache = cache;
967 return cache;
968}
969
970static void
971i386_sigtramp_frame_this_id (struct frame_info *next_frame, void **this_cache,
972 struct frame_id *this_id)
973{
974 struct i386_frame_cache *cache =
975 i386_sigtramp_frame_cache (next_frame, this_cache);
976
3e210248 977 /* See the end of i386_push_dummy_call. */
acd5c798
MK
978 (*this_id) = frame_id_build (cache->base + 8, frame_pc_unwind (next_frame));
979}
980
981static void
982i386_sigtramp_frame_prev_register (struct frame_info *next_frame,
983 void **this_cache,
984 int regnum, int *optimizedp,
985 enum lval_type *lvalp, CORE_ADDR *addrp,
986 int *realnump, void *valuep)
987{
988 /* Make sure we've initialized the cache. */
989 i386_sigtramp_frame_cache (next_frame, this_cache);
990
991 i386_frame_prev_register (next_frame, this_cache, regnum,
992 optimizedp, lvalp, addrp, realnump, valuep);
c906108c 993}
c0d1d883 994
acd5c798
MK
995static const struct frame_unwind i386_sigtramp_frame_unwind =
996{
997 SIGTRAMP_FRAME,
998 i386_sigtramp_frame_this_id,
999 i386_sigtramp_frame_prev_register
1000};
1001
1002static const struct frame_unwind *
336d1bba 1003i386_sigtramp_frame_sniffer (struct frame_info *next_frame)
acd5c798 1004{
336d1bba 1005 CORE_ADDR pc = frame_pc_unwind (next_frame);
acd5c798
MK
1006 char *name;
1007
1c3545ae
MK
1008 /* We shouldn't even bother to try if the OSABI didn't register
1009 a sigcontext_addr handler. */
1010 if (!gdbarch_tdep (current_gdbarch)->sigcontext_addr)
1011 return NULL;
1012
acd5c798
MK
1013 find_pc_partial_function (pc, &name, NULL, NULL);
1014 if (PC_IN_SIGTRAMP (pc, name))
1015 return &i386_sigtramp_frame_unwind;
1016
1017 return NULL;
1018}
1019\f
1020
1021static CORE_ADDR
1022i386_frame_base_address (struct frame_info *next_frame, void **this_cache)
1023{
1024 struct i386_frame_cache *cache = i386_frame_cache (next_frame, this_cache);
1025
1026 return cache->base;
1027}
1028
1029static const struct frame_base i386_frame_base =
1030{
1031 &i386_frame_unwind,
1032 i386_frame_base_address,
1033 i386_frame_base_address,
1034 i386_frame_base_address
1035};
1036
acd5c798
MK
1037static struct frame_id
1038i386_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
1039{
1040 char buf[4];
1041 CORE_ADDR fp;
1042
1043 frame_unwind_register (next_frame, I386_EBP_REGNUM, buf);
1044 fp = extract_unsigned_integer (buf, 4);
1045
3e210248 1046 /* See the end of i386_push_dummy_call. */
acd5c798 1047 return frame_id_build (fp + 8, frame_pc_unwind (next_frame));
c0d1d883 1048}
fc338970 1049\f
c906108c 1050
fc338970
MK
1051/* Figure out where the longjmp will land. Slurp the args out of the
1052 stack. We expect the first arg to be a pointer to the jmp_buf
8201327c 1053 structure from which we extract the address that we will land at.
28bcfd30 1054 This address is copied into PC. This routine returns non-zero on
acd5c798
MK
1055 success.
1056
1057 This function is 64-bit safe. */
c906108c 1058
8201327c
MK
1059static int
1060i386_get_longjmp_target (CORE_ADDR *pc)
c906108c 1061{
28bcfd30 1062 char buf[8];
c906108c 1063 CORE_ADDR sp, jb_addr;
8201327c 1064 int jb_pc_offset = gdbarch_tdep (current_gdbarch)->jb_pc_offset;
f9d3c2a8 1065 int len = TYPE_LENGTH (builtin_type_void_func_ptr);
c906108c 1066
8201327c
MK
1067 /* If JB_PC_OFFSET is -1, we have no way to find out where the
1068 longjmp will land. */
1069 if (jb_pc_offset == -1)
c906108c
SS
1070 return 0;
1071
f837910f
MK
1072 /* Don't use I386_ESP_REGNUM here, since this function is also used
1073 for AMD64. */
1074 regcache_cooked_read (current_regcache, SP_REGNUM, buf);
1075 sp = extract_typed_address (buf, builtin_type_void_data_ptr);
28bcfd30 1076 if (target_read_memory (sp + len, buf, len))
c906108c
SS
1077 return 0;
1078
f837910f 1079 jb_addr = extract_typed_address (buf, builtin_type_void_data_ptr);
28bcfd30 1080 if (target_read_memory (jb_addr + jb_pc_offset, buf, len))
8201327c 1081 return 0;
c906108c 1082
f9d3c2a8 1083 *pc = extract_typed_address (buf, builtin_type_void_func_ptr);
c906108c
SS
1084 return 1;
1085}
fc338970 1086\f
c906108c 1087
3a1e71e3 1088static CORE_ADDR
6a65450a
AC
1089i386_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
1090 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
1091 struct value **args, CORE_ADDR sp, int struct_return,
1092 CORE_ADDR struct_addr)
22f8ba57 1093{
acd5c798
MK
1094 char buf[4];
1095 int i;
1096
1097 /* Push arguments in reverse order. */
1098 for (i = nargs - 1; i >= 0; i--)
22f8ba57 1099 {
acd5c798
MK
1100 int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i]));
1101
1102 /* The System V ABI says that:
1103
1104 "An argument's size is increased, if necessary, to make it a
1105 multiple of [32-bit] words. This may require tail padding,
1106 depending on the size of the argument."
1107
1108 This makes sure the stack says word-aligned. */
1109 sp -= (len + 3) & ~3;
1110 write_memory (sp, VALUE_CONTENTS_ALL (args[i]), len);
1111 }
22f8ba57 1112
acd5c798
MK
1113 /* Push value address. */
1114 if (struct_return)
1115 {
22f8ba57 1116 sp -= 4;
fbd9dcd3 1117 store_unsigned_integer (buf, 4, struct_addr);
22f8ba57
MK
1118 write_memory (sp, buf, 4);
1119 }
1120
acd5c798
MK
1121 /* Store return address. */
1122 sp -= 4;
6a65450a 1123 store_unsigned_integer (buf, 4, bp_addr);
acd5c798
MK
1124 write_memory (sp, buf, 4);
1125
1126 /* Finally, update the stack pointer... */
1127 store_unsigned_integer (buf, 4, sp);
1128 regcache_cooked_write (regcache, I386_ESP_REGNUM, buf);
1129
1130 /* ...and fake a frame pointer. */
1131 regcache_cooked_write (regcache, I386_EBP_REGNUM, buf);
1132
3e210248
AC
1133 /* MarkK wrote: This "+ 8" is all over the place:
1134 (i386_frame_this_id, i386_sigtramp_frame_this_id,
1135 i386_unwind_dummy_id). It's there, since all frame unwinders for
1136 a given target have to agree (within a certain margin) on the
1137 defenition of the stack address of a frame. Otherwise
1138 frame_id_inner() won't work correctly. Since DWARF2/GCC uses the
1139 stack address *before* the function call as a frame's CFA. On
1140 the i386, when %ebp is used as a frame pointer, the offset
1141 between the contents %ebp and the CFA as defined by GCC. */
1142 return sp + 8;
22f8ba57
MK
1143}
1144
1a309862
MK
1145/* These registers are used for returning integers (and on some
1146 targets also for returning `struct' and `union' values when their
ef9dff19 1147 size and alignment match an integer type). */
acd5c798
MK
1148#define LOW_RETURN_REGNUM I386_EAX_REGNUM /* %eax */
1149#define HIGH_RETURN_REGNUM I386_EDX_REGNUM /* %edx */
1a309862
MK
1150
1151/* Extract from an array REGBUF containing the (raw) register state, a
1152 function return value of TYPE, and copy that, in virtual format,
1153 into VALBUF. */
1154
3a1e71e3 1155static void
00f8375e 1156i386_extract_return_value (struct type *type, struct regcache *regcache,
ebba8386 1157 void *dst)
c906108c 1158{
5716833c 1159 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
ebba8386 1160 bfd_byte *valbuf = dst;
1a309862 1161 int len = TYPE_LENGTH (type);
00f8375e 1162 char buf[I386_MAX_REGISTER_SIZE];
1a309862 1163
1e8d0a7b
MK
1164 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1165 && TYPE_NFIELDS (type) == 1)
3df1b9b4 1166 {
00f8375e 1167 i386_extract_return_value (TYPE_FIELD_TYPE (type, 0), regcache, valbuf);
3df1b9b4
MK
1168 return;
1169 }
1e8d0a7b
MK
1170
1171 if (TYPE_CODE (type) == TYPE_CODE_FLT)
c906108c 1172 {
5716833c 1173 if (tdep->st0_regnum < 0)
1a309862
MK
1174 {
1175 warning ("Cannot find floating-point return value.");
1176 memset (valbuf, 0, len);
ef9dff19 1177 return;
1a309862
MK
1178 }
1179
c6ba6f0d
MK
1180 /* Floating-point return values can be found in %st(0). Convert
1181 its contents to the desired type. This is probably not
1182 exactly how it would happen on the target itself, but it is
1183 the best we can do. */
acd5c798 1184 regcache_raw_read (regcache, I386_ST0_REGNUM, buf);
00f8375e 1185 convert_typed_floating (buf, builtin_type_i387_ext, valbuf, type);
c906108c
SS
1186 }
1187 else
c5aa993b 1188 {
f837910f
MK
1189 int low_size = register_size (current_gdbarch, LOW_RETURN_REGNUM);
1190 int high_size = register_size (current_gdbarch, HIGH_RETURN_REGNUM);
d4f3574e
SS
1191
1192 if (len <= low_size)
00f8375e 1193 {
0818c12a 1194 regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
00f8375e
MK
1195 memcpy (valbuf, buf, len);
1196 }
d4f3574e
SS
1197 else if (len <= (low_size + high_size))
1198 {
0818c12a 1199 regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
00f8375e 1200 memcpy (valbuf, buf, low_size);
0818c12a 1201 regcache_raw_read (regcache, HIGH_RETURN_REGNUM, buf);
00f8375e 1202 memcpy (valbuf + low_size, buf, len - low_size);
d4f3574e
SS
1203 }
1204 else
8e65ff28
AC
1205 internal_error (__FILE__, __LINE__,
1206 "Cannot extract return value of %d bytes long.", len);
c906108c
SS
1207 }
1208}
1209
ef9dff19
MK
1210/* Write into the appropriate registers a function return value stored
1211 in VALBUF of type TYPE, given in virtual format. */
1212
3a1e71e3 1213static void
3d7f4f49
MK
1214i386_store_return_value (struct type *type, struct regcache *regcache,
1215 const void *valbuf)
ef9dff19 1216{
5716833c 1217 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
ef9dff19
MK
1218 int len = TYPE_LENGTH (type);
1219
5716833c
MK
1220 /* Define I387_ST0_REGNUM such that we use the proper definitions
1221 for the architecture. */
1222#define I387_ST0_REGNUM I386_ST0_REGNUM
1223
1e8d0a7b
MK
1224 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1225 && TYPE_NFIELDS (type) == 1)
3df1b9b4 1226 {
3d7f4f49 1227 i386_store_return_value (TYPE_FIELD_TYPE (type, 0), regcache, valbuf);
3df1b9b4
MK
1228 return;
1229 }
1e8d0a7b
MK
1230
1231 if (TYPE_CODE (type) == TYPE_CODE_FLT)
ef9dff19 1232 {
3d7f4f49 1233 ULONGEST fstat;
5716833c 1234 char buf[I386_MAX_REGISTER_SIZE];
ccb945b8 1235
5716833c 1236 if (tdep->st0_regnum < 0)
ef9dff19
MK
1237 {
1238 warning ("Cannot set floating-point return value.");
1239 return;
1240 }
1241
635b0cc1
MK
1242 /* Returning floating-point values is a bit tricky. Apart from
1243 storing the return value in %st(0), we have to simulate the
1244 state of the FPU at function return point. */
1245
c6ba6f0d
MK
1246 /* Convert the value found in VALBUF to the extended
1247 floating-point format used by the FPU. This is probably
1248 not exactly how it would happen on the target itself, but
1249 it is the best we can do. */
1250 convert_typed_floating (valbuf, type, buf, builtin_type_i387_ext);
acd5c798 1251 regcache_raw_write (regcache, I386_ST0_REGNUM, buf);
ccb945b8 1252
635b0cc1
MK
1253 /* Set the top of the floating-point register stack to 7. The
1254 actual value doesn't really matter, but 7 is what a normal
1255 function return would end up with if the program started out
1256 with a freshly initialized FPU. */
5716833c 1257 regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM, &fstat);
ccb945b8 1258 fstat |= (7 << 11);
5716833c 1259 regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM, fstat);
ccb945b8 1260
635b0cc1
MK
1261 /* Mark %st(1) through %st(7) as empty. Since we set the top of
1262 the floating-point register stack to 7, the appropriate value
1263 for the tag word is 0x3fff. */
5716833c 1264 regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM, 0x3fff);
ef9dff19
MK
1265 }
1266 else
1267 {
f837910f
MK
1268 int low_size = register_size (current_gdbarch, LOW_RETURN_REGNUM);
1269 int high_size = register_size (current_gdbarch, HIGH_RETURN_REGNUM);
ef9dff19
MK
1270
1271 if (len <= low_size)
3d7f4f49 1272 regcache_raw_write_part (regcache, LOW_RETURN_REGNUM, 0, len, valbuf);
ef9dff19
MK
1273 else if (len <= (low_size + high_size))
1274 {
3d7f4f49
MK
1275 regcache_raw_write (regcache, LOW_RETURN_REGNUM, valbuf);
1276 regcache_raw_write_part (regcache, HIGH_RETURN_REGNUM, 0,
1277 len - low_size, (char *) valbuf + low_size);
ef9dff19
MK
1278 }
1279 else
8e65ff28
AC
1280 internal_error (__FILE__, __LINE__,
1281 "Cannot store return value of %d bytes long.", len);
ef9dff19 1282 }
5716833c
MK
1283
1284#undef I387_ST0_REGNUM
ef9dff19 1285}
f7af9647 1286
751f1375
MK
1287/* Extract from REGCACHE, which contains the (raw) register state, the
1288 address in which a function should return its structure value, as a
1289 CORE_ADDR. */
f7af9647 1290
3a1e71e3 1291static CORE_ADDR
00f8375e 1292i386_extract_struct_value_address (struct regcache *regcache)
f7af9647 1293{
acd5c798 1294 char buf[4];
751f1375 1295
acd5c798
MK
1296 regcache_cooked_read (regcache, I386_EAX_REGNUM, buf);
1297 return extract_unsigned_integer (buf, 4);
f7af9647 1298}
fc338970 1299\f
ef9dff19 1300
8201327c
MK
1301/* This is the variable that is set with "set struct-convention", and
1302 its legitimate values. */
1303static const char default_struct_convention[] = "default";
1304static const char pcc_struct_convention[] = "pcc";
1305static const char reg_struct_convention[] = "reg";
1306static const char *valid_conventions[] =
1307{
1308 default_struct_convention,
1309 pcc_struct_convention,
1310 reg_struct_convention,
1311 NULL
1312};
1313static const char *struct_convention = default_struct_convention;
1314
1315static int
1316i386_use_struct_convention (int gcc_p, struct type *type)
1317{
1318 enum struct_return struct_return;
1319
1320 if (struct_convention == default_struct_convention)
1321 struct_return = gdbarch_tdep (current_gdbarch)->struct_return;
1322 else if (struct_convention == pcc_struct_convention)
1323 struct_return = pcc_struct_return;
1324 else
1325 struct_return = reg_struct_return;
1326
1327 return generic_use_struct_convention (struct_return == reg_struct_return,
1328 type);
1329}
1330\f
1331
d7a0d72c
MK
1332/* Return the GDB type object for the "standard" data type of data in
1333 register REGNUM. Perhaps %esi and %edi should go here, but
1334 potentially they could be used for things other than address. */
1335
3a1e71e3 1336static struct type *
4e259f09 1337i386_register_type (struct gdbarch *gdbarch, int regnum)
d7a0d72c 1338{
acd5c798
MK
1339 if (regnum == I386_EIP_REGNUM
1340 || regnum == I386_EBP_REGNUM || regnum == I386_ESP_REGNUM)
d7a0d72c
MK
1341 return lookup_pointer_type (builtin_type_void);
1342
23a34459 1343 if (i386_fp_regnum_p (regnum))
c6ba6f0d 1344 return builtin_type_i387_ext;
d7a0d72c 1345
5716833c 1346 if (i386_sse_regnum_p (gdbarch, regnum))
3139facc 1347 return builtin_type_vec128i;
d7a0d72c 1348
5716833c 1349 if (i386_mmx_regnum_p (gdbarch, regnum))
28fc6740
AC
1350 return builtin_type_vec64i;
1351
d7a0d72c
MK
1352 return builtin_type_int;
1353}
1354
28fc6740 1355/* Map a cooked register onto a raw register or memory. For the i386,
acd5c798 1356 the MMX registers need to be mapped onto floating point registers. */
28fc6740
AC
1357
1358static int
c86c27af 1359i386_mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
28fc6740 1360{
5716833c
MK
1361 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1362 int mmxreg, fpreg;
28fc6740
AC
1363 ULONGEST fstat;
1364 int tos;
c86c27af 1365
5716833c
MK
1366 /* Define I387_ST0_REGNUM such that we use the proper definitions
1367 for REGCACHE's architecture. */
1368#define I387_ST0_REGNUM tdep->st0_regnum
1369
1370 mmxreg = regnum - tdep->mm0_regnum;
1371 regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM, &fstat);
28fc6740 1372 tos = (fstat >> 11) & 0x7;
5716833c
MK
1373 fpreg = (mmxreg + tos) % 8;
1374
1375 return (I387_ST0_REGNUM + fpreg);
c86c27af 1376
5716833c 1377#undef I387_ST0_REGNUM
28fc6740
AC
1378}
1379
1380static void
1381i386_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
1382 int regnum, void *buf)
1383{
5716833c 1384 if (i386_mmx_regnum_p (gdbarch, regnum))
28fc6740 1385 {
d9d9c31f 1386 char mmx_buf[MAX_REGISTER_SIZE];
c86c27af
MK
1387 int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
1388
28fc6740 1389 /* Extract (always little endian). */
c86c27af 1390 regcache_raw_read (regcache, fpnum, mmx_buf);
f837910f 1391 memcpy (buf, mmx_buf, register_size (gdbarch, regnum));
28fc6740
AC
1392 }
1393 else
1394 regcache_raw_read (regcache, regnum, buf);
1395}
1396
1397static void
1398i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
1399 int regnum, const void *buf)
1400{
5716833c 1401 if (i386_mmx_regnum_p (gdbarch, regnum))
28fc6740 1402 {
d9d9c31f 1403 char mmx_buf[MAX_REGISTER_SIZE];
c86c27af
MK
1404 int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
1405
28fc6740
AC
1406 /* Read ... */
1407 regcache_raw_read (regcache, fpnum, mmx_buf);
1408 /* ... Modify ... (always little endian). */
f837910f 1409 memcpy (mmx_buf, buf, register_size (gdbarch, regnum));
28fc6740
AC
1410 /* ... Write. */
1411 regcache_raw_write (regcache, fpnum, mmx_buf);
1412 }
1413 else
1414 regcache_raw_write (regcache, regnum, buf);
1415}
ff2e87ac
AC
1416\f
1417
1418/* These registers don't have pervasive standard uses. Move them to
1419 i386-tdep.h if necessary. */
1420
1421#define I386_EBX_REGNUM 3 /* %ebx */
1422#define I386_ECX_REGNUM 1 /* %ecx */
1423#define I386_ESI_REGNUM 6 /* %esi */
1424#define I386_EDI_REGNUM 7 /* %edi */
1425
1426/* Return the register number of the register allocated by GCC after
1427 REGNUM, or -1 if there is no such register. */
1428
1429static int
1430i386_next_regnum (int regnum)
1431{
1432 /* GCC allocates the registers in the order:
1433
1434 %eax, %edx, %ecx, %ebx, %esi, %edi, %ebp, %esp, ...
1435
1436 Since storing a variable in %esp doesn't make any sense we return
1437 -1 for %ebp and for %esp itself. */
1438 static int next_regnum[] =
1439 {
1440 I386_EDX_REGNUM, /* Slot for %eax. */
1441 I386_EBX_REGNUM, /* Slot for %ecx. */
1442 I386_ECX_REGNUM, /* Slot for %edx. */
1443 I386_ESI_REGNUM, /* Slot for %ebx. */
1444 -1, -1, /* Slots for %esp and %ebp. */
1445 I386_EDI_REGNUM, /* Slot for %esi. */
1446 I386_EBP_REGNUM /* Slot for %edi. */
1447 };
1448
de5b9bb9 1449 if (regnum >= 0 && regnum < sizeof (next_regnum) / sizeof (next_regnum[0]))
ff2e87ac 1450 return next_regnum[regnum];
28fc6740 1451
ff2e87ac
AC
1452 return -1;
1453}
1454
1455/* Return nonzero if a value of type TYPE stored in register REGNUM
1456 needs any special handling. */
d7a0d72c 1457
3a1e71e3 1458static int
ff2e87ac 1459i386_convert_register_p (int regnum, struct type *type)
d7a0d72c 1460{
de5b9bb9
MK
1461 int len = TYPE_LENGTH (type);
1462
ff2e87ac
AC
1463 /* Values may be spread across multiple registers. Most debugging
1464 formats aren't expressive enough to specify the locations, so
1465 some heuristics is involved. Right now we only handle types that
de5b9bb9
MK
1466 have a length that is a multiple of the word size, since GCC
1467 doesn't seem to put any other types into registers. */
1468 if (len > 4 && len % 4 == 0)
1469 {
1470 int last_regnum = regnum;
1471
1472 while (len > 4)
1473 {
1474 last_regnum = i386_next_regnum (last_regnum);
1475 len -= 4;
1476 }
1477
1478 if (last_regnum != -1)
1479 return 1;
1480 }
ff2e87ac 1481
23a34459 1482 return i386_fp_regnum_p (regnum);
d7a0d72c
MK
1483}
1484
ff2e87ac
AC
1485/* Read a value of type TYPE from register REGNUM in frame FRAME, and
1486 return its contents in TO. */
ac27f131 1487
3a1e71e3 1488static void
ff2e87ac
AC
1489i386_register_to_value (struct frame_info *frame, int regnum,
1490 struct type *type, void *to)
ac27f131 1491{
de5b9bb9
MK
1492 int len = TYPE_LENGTH (type);
1493 char *buf = to;
1494
ff2e87ac
AC
1495 /* FIXME: kettenis/20030609: What should we do if REGNUM isn't
1496 available in FRAME (i.e. if it wasn't saved)? */
3d261580 1497
ff2e87ac 1498 if (i386_fp_regnum_p (regnum))
8d7f6b4a 1499 {
d532c08f
MK
1500 i387_register_to_value (frame, regnum, type, to);
1501 return;
8d7f6b4a 1502 }
ff2e87ac 1503
de5b9bb9
MK
1504 /* Read a value spread accross multiple registers. */
1505
1506 gdb_assert (len > 4 && len % 4 == 0);
3d261580 1507
de5b9bb9
MK
1508 while (len > 0)
1509 {
1510 gdb_assert (regnum != -1);
1511 gdb_assert (register_size (current_gdbarch, regnum) == 4);
d532c08f 1512
f837910f 1513 get_frame_register (frame, regnum, buf);
de5b9bb9
MK
1514 regnum = i386_next_regnum (regnum);
1515 len -= 4;
1516 buf += 4;
1517 }
ac27f131
MK
1518}
1519
ff2e87ac
AC
1520/* Write the contents FROM of a value of type TYPE into register
1521 REGNUM in frame FRAME. */
ac27f131 1522
3a1e71e3 1523static void
ff2e87ac
AC
1524i386_value_to_register (struct frame_info *frame, int regnum,
1525 struct type *type, const void *from)
ac27f131 1526{
de5b9bb9
MK
1527 int len = TYPE_LENGTH (type);
1528 const char *buf = from;
1529
ff2e87ac 1530 if (i386_fp_regnum_p (regnum))
c6ba6f0d 1531 {
d532c08f
MK
1532 i387_value_to_register (frame, regnum, type, from);
1533 return;
1534 }
3d261580 1535
de5b9bb9
MK
1536 /* Write a value spread accross multiple registers. */
1537
1538 gdb_assert (len > 4 && len % 4 == 0);
ff2e87ac 1539
de5b9bb9
MK
1540 while (len > 0)
1541 {
1542 gdb_assert (regnum != -1);
1543 gdb_assert (register_size (current_gdbarch, regnum) == 4);
d532c08f 1544
de5b9bb9
MK
1545 put_frame_register (frame, regnum, buf);
1546 regnum = i386_next_regnum (regnum);
1547 len -= 4;
1548 buf += 4;
1549 }
ac27f131 1550}
ff2e87ac 1551\f
473f17b0
MK
1552/* Supply register REGNUM from the general-purpose register set REGSET
1553 to register cache REGCACHE. If REGNUM is -1, do this for all
1554 registers in REGSET. */
ff2e87ac 1555
473f17b0
MK
1556static void
1557i386_supply_gregset (const struct regset *regset, struct regcache *regcache,
1558 int regnum, const void *gregs, size_t len)
1559{
1560 const struct gdbarch_tdep *tdep = regset->descr;
1561 const char *regs = gregs;
1562 int i;
1563
1564 gdb_assert (len == tdep->sizeof_gregset);
1565
1566 for (i = 0; i < tdep->gregset_num_regs; i++)
1567 {
1568 if ((regnum == i || regnum == -1)
1569 && tdep->gregset_reg_offset[i] != -1)
1570 regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
1571 }
1572}
1573
1574/* Supply register REGNUM from the floating-point register set REGSET
1575 to register cache REGCACHE. If REGNUM is -1, do this for all
1576 registers in REGSET. */
1577
1578static void
1579i386_supply_fpregset (const struct regset *regset, struct regcache *regcache,
1580 int regnum, const void *fpregs, size_t len)
1581{
1582 const struct gdbarch_tdep *tdep = regset->descr;
1583
1584 gdb_assert (len == tdep->sizeof_fpregset);
1585 i387_supply_fsave (regcache, regnum, fpregs);
1586}
1587\f
fc338970 1588
c906108c 1589#ifdef STATIC_TRANSFORM_NAME
fc338970
MK
1590/* SunPRO encodes the static variables. This is not related to C++
1591 mangling, it is done for C too. */
c906108c
SS
1592
1593char *
fba45db2 1594sunpro_static_transform_name (char *name)
c906108c
SS
1595{
1596 char *p;
1597 if (IS_STATIC_TRANSFORM_NAME (name))
1598 {
fc338970
MK
1599 /* For file-local statics there will be a period, a bunch of
1600 junk (the contents of which match a string given in the
c5aa993b
JM
1601 N_OPT), a period and the name. For function-local statics
1602 there will be a bunch of junk (which seems to change the
1603 second character from 'A' to 'B'), a period, the name of the
1604 function, and the name. So just skip everything before the
1605 last period. */
c906108c
SS
1606 p = strrchr (name, '.');
1607 if (p != NULL)
1608 name = p + 1;
1609 }
1610 return name;
1611}
1612#endif /* STATIC_TRANSFORM_NAME */
fc338970 1613\f
c906108c 1614
fc338970 1615/* Stuff for WIN32 PE style DLL's but is pretty generic really. */
c906108c
SS
1616
1617CORE_ADDR
1cce71eb 1618i386_pe_skip_trampoline_code (CORE_ADDR pc, char *name)
c906108c 1619{
fc338970 1620 if (pc && read_memory_unsigned_integer (pc, 2) == 0x25ff) /* jmp *(dest) */
c906108c 1621 {
c5aa993b 1622 unsigned long indirect = read_memory_unsigned_integer (pc + 2, 4);
c906108c 1623 struct minimal_symbol *indsym =
fc338970 1624 indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
645dd519 1625 char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
c906108c 1626
c5aa993b 1627 if (symname)
c906108c 1628 {
c5aa993b
JM
1629 if (strncmp (symname, "__imp_", 6) == 0
1630 || strncmp (symname, "_imp_", 5) == 0)
c906108c
SS
1631 return name ? 1 : read_memory_unsigned_integer (indirect, 4);
1632 }
1633 }
fc338970 1634 return 0; /* Not a trampoline. */
c906108c 1635}
fc338970
MK
1636\f
1637
8201327c
MK
1638/* Return non-zero if PC and NAME show that we are in a signal
1639 trampoline. */
1640
1641static int
1642i386_pc_in_sigtramp (CORE_ADDR pc, char *name)
1643{
1644 return (name && strcmp ("_sigtramp", name) == 0);
1645}
1646\f
1647
fc338970
MK
1648/* We have two flavours of disassembly. The machinery on this page
1649 deals with switching between those. */
c906108c
SS
1650
1651static int
a89aa300 1652i386_print_insn (bfd_vma pc, struct disassemble_info *info)
c906108c 1653{
5e3397bb
MK
1654 gdb_assert (disassembly_flavor == att_flavor
1655 || disassembly_flavor == intel_flavor);
1656
1657 /* FIXME: kettenis/20020915: Until disassembler_options is properly
1658 constified, cast to prevent a compiler warning. */
1659 info->disassembler_options = (char *) disassembly_flavor;
1660 info->mach = gdbarch_bfd_arch_info (current_gdbarch)->mach;
1661
1662 return print_insn_i386 (pc, info);
7a292a7a 1663}
fc338970 1664\f
3ce1502b 1665
8201327c
MK
1666/* There are a few i386 architecture variants that differ only
1667 slightly from the generic i386 target. For now, we don't give them
1668 their own source file, but include them here. As a consequence,
1669 they'll always be included. */
3ce1502b 1670
8201327c 1671/* System V Release 4 (SVR4). */
3ce1502b 1672
8201327c
MK
1673static int
1674i386_svr4_pc_in_sigtramp (CORE_ADDR pc, char *name)
d2a7c97a 1675{
acd5c798
MK
1676 /* UnixWare uses _sigacthandler. The origin of the other symbols is
1677 currently unknown. */
8201327c
MK
1678 return (name && (strcmp ("_sigreturn", name) == 0
1679 || strcmp ("_sigacthandler", name) == 0
1680 || strcmp ("sigvechandler", name) == 0));
1681}
d2a7c97a 1682
acd5c798
MK
1683/* Assuming NEXT_FRAME is for a frame following a SVR4 sigtramp
1684 routine, return the address of the associated sigcontext (ucontext)
1685 structure. */
3ce1502b 1686
3a1e71e3 1687static CORE_ADDR
acd5c798 1688i386_svr4_sigcontext_addr (struct frame_info *next_frame)
8201327c 1689{
acd5c798
MK
1690 char buf[4];
1691 CORE_ADDR sp;
3ce1502b 1692
acd5c798
MK
1693 frame_unwind_register (next_frame, I386_ESP_REGNUM, buf);
1694 sp = extract_unsigned_integer (buf, 4);
21d0e8a4 1695
acd5c798 1696 return read_memory_unsigned_integer (sp + 8, 4);
8201327c
MK
1697}
1698\f
3ce1502b 1699
8201327c 1700/* DJGPP. */
d2a7c97a 1701
8201327c
MK
1702static int
1703i386_go32_pc_in_sigtramp (CORE_ADDR pc, char *name)
1704{
1705 /* DJGPP doesn't have any special frames for signal handlers. */
1706 return 0;
1707}
1708\f
d2a7c97a 1709
8201327c 1710/* Generic ELF. */
d2a7c97a 1711
8201327c
MK
1712void
1713i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1714{
1715 /* We typically use stabs-in-ELF with the DWARF register numbering. */
1716 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dwarf_reg_to_regnum);
1717}
3ce1502b 1718
8201327c 1719/* System V Release 4 (SVR4). */
3ce1502b 1720
8201327c
MK
1721void
1722i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1723{
1724 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3ce1502b 1725
8201327c
MK
1726 /* System V Release 4 uses ELF. */
1727 i386_elf_init_abi (info, gdbarch);
3ce1502b 1728
dfe01d39
MK
1729 /* System V Release 4 has shared libraries. */
1730 set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
1731 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1732
8201327c 1733 set_gdbarch_pc_in_sigtramp (gdbarch, i386_svr4_pc_in_sigtramp);
21d0e8a4 1734 tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
acd5c798
MK
1735 tdep->sc_pc_offset = 36 + 14 * 4;
1736 tdep->sc_sp_offset = 36 + 17 * 4;
3ce1502b 1737
8201327c 1738 tdep->jb_pc_offset = 20;
3ce1502b
MK
1739}
1740
8201327c 1741/* DJGPP. */
3ce1502b 1742
3a1e71e3 1743static void
8201327c 1744i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3ce1502b 1745{
8201327c 1746 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3ce1502b 1747
8201327c 1748 set_gdbarch_pc_in_sigtramp (gdbarch, i386_go32_pc_in_sigtramp);
3ce1502b 1749
8201327c 1750 tdep->jb_pc_offset = 36;
3ce1502b
MK
1751}
1752
8201327c 1753/* NetWare. */
3ce1502b 1754
3a1e71e3 1755static void
8201327c 1756i386_nw_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3ce1502b 1757{
8201327c 1758 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3ce1502b 1759
8201327c 1760 tdep->jb_pc_offset = 24;
d2a7c97a 1761}
8201327c 1762\f
2acceee2 1763
38c968cf
AC
1764/* i386 register groups. In addition to the normal groups, add "mmx"
1765 and "sse". */
1766
1767static struct reggroup *i386_sse_reggroup;
1768static struct reggroup *i386_mmx_reggroup;
1769
1770static void
1771i386_init_reggroups (void)
1772{
1773 i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
1774 i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
1775}
1776
1777static void
1778i386_add_reggroups (struct gdbarch *gdbarch)
1779{
1780 reggroup_add (gdbarch, i386_sse_reggroup);
1781 reggroup_add (gdbarch, i386_mmx_reggroup);
1782 reggroup_add (gdbarch, general_reggroup);
1783 reggroup_add (gdbarch, float_reggroup);
1784 reggroup_add (gdbarch, all_reggroup);
1785 reggroup_add (gdbarch, save_reggroup);
1786 reggroup_add (gdbarch, restore_reggroup);
1787 reggroup_add (gdbarch, vector_reggroup);
1788 reggroup_add (gdbarch, system_reggroup);
1789}
1790
1791int
1792i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
1793 struct reggroup *group)
1794{
5716833c
MK
1795 int sse_regnum_p = (i386_sse_regnum_p (gdbarch, regnum)
1796 || i386_mxcsr_regnum_p (gdbarch, regnum));
38c968cf
AC
1797 int fp_regnum_p = (i386_fp_regnum_p (regnum)
1798 || i386_fpc_regnum_p (regnum));
5716833c 1799 int mmx_regnum_p = (i386_mmx_regnum_p (gdbarch, regnum));
acd5c798 1800
38c968cf
AC
1801 if (group == i386_mmx_reggroup)
1802 return mmx_regnum_p;
1803 if (group == i386_sse_reggroup)
1804 return sse_regnum_p;
1805 if (group == vector_reggroup)
1806 return (mmx_regnum_p || sse_regnum_p);
1807 if (group == float_reggroup)
1808 return fp_regnum_p;
1809 if (group == general_reggroup)
1810 return (!fp_regnum_p && !mmx_regnum_p && !sse_regnum_p);
acd5c798 1811
38c968cf
AC
1812 return default_register_reggroup_p (gdbarch, regnum, group);
1813}
38c968cf 1814\f
acd5c798 1815
f837910f
MK
1816/* Get the ARGIth function argument for the current function. */
1817
42c466d7 1818static CORE_ADDR
143985b7
AF
1819i386_fetch_pointer_argument (struct frame_info *frame, int argi,
1820 struct type *type)
1821{
f837910f
MK
1822 CORE_ADDR sp = get_frame_register_unsigned (frame, I386_ESP_REGNUM);
1823 return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4);
143985b7
AF
1824}
1825
1826\f
3a1e71e3 1827static struct gdbarch *
a62cc96e
AC
1828i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1829{
cd3c07fc 1830 struct gdbarch_tdep *tdep;
a62cc96e
AC
1831 struct gdbarch *gdbarch;
1832
4be87837
DJ
1833 /* If there is already a candidate, use it. */
1834 arches = gdbarch_list_lookup_by_info (arches, &info);
1835 if (arches != NULL)
1836 return arches->gdbarch;
a62cc96e
AC
1837
1838 /* Allocate space for the new architecture. */
1839 tdep = XMALLOC (struct gdbarch_tdep);
1840 gdbarch = gdbarch_alloc (&info, tdep);
1841
473f17b0
MK
1842 /* General-purpose registers. */
1843 tdep->gregset = NULL;
1844 tdep->gregset_reg_offset = NULL;
1845 tdep->gregset_num_regs = I386_NUM_GREGS;
1846 tdep->sizeof_gregset = 0;
1847
1848 /* Floating-point registers. */
1849 tdep->fpregset = NULL;
1850 tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
1851
5716833c
MK
1852 /* The default settings include the FPU registers, the MMX registers
1853 and the SSE registers. This can be overidden for a specific ABI
1854 by adjusting the members `st0_regnum', `mm0_regnum' and
1855 `num_xmm_regs' of `struct gdbarch_tdep', otherwise the registers
1856 will show up in the output of "info all-registers". Ideally we
1857 should try to autodetect whether they are available, such that we
1858 can prevent "info all-registers" from displaying registers that
1859 aren't available.
1860
1861 NOTE: kevinb/2003-07-13: ... if it's a choice between printing
1862 [the SSE registers] always (even when they don't exist) or never
1863 showing them to the user (even when they do exist), I prefer the
1864 former over the latter. */
1865
1866 tdep->st0_regnum = I386_ST0_REGNUM;
1867
1868 /* The MMX registers are implemented as pseudo-registers. Put off
1869 caclulating the register number for %mm0 until we know the number
1870 of raw registers. */
1871 tdep->mm0_regnum = 0;
1872
1873 /* I386_NUM_XREGS includes %mxcsr, so substract one. */
49ed40de 1874 tdep->num_xmm_regs = I386_NUM_XREGS - 1;
d2a7c97a 1875
8201327c
MK
1876 tdep->jb_pc_offset = -1;
1877 tdep->struct_return = pcc_struct_return;
8201327c
MK
1878 tdep->sigtramp_start = 0;
1879 tdep->sigtramp_end = 0;
21d0e8a4 1880 tdep->sigcontext_addr = NULL;
a3386186 1881 tdep->sc_reg_offset = NULL;
8201327c 1882 tdep->sc_pc_offset = -1;
21d0e8a4 1883 tdep->sc_sp_offset = -1;
8201327c 1884
896fb97d
MK
1885 /* The format used for `long double' on almost all i386 targets is
1886 the i387 extended floating-point format. In fact, of all targets
1887 in the GCC 2.95 tree, only OSF/1 does it different, and insists
1888 on having a `long double' that's not `long' at all. */
1889 set_gdbarch_long_double_format (gdbarch, &floatformat_i387_ext);
21d0e8a4 1890
66da5fd8 1891 /* Although the i387 extended floating-point has only 80 significant
896fb97d
MK
1892 bits, a `long double' actually takes up 96, probably to enforce
1893 alignment. */
1894 set_gdbarch_long_double_bit (gdbarch, 96);
1895
49ed40de
KB
1896 /* The default ABI includes general-purpose registers,
1897 floating-point registers, and the SSE registers. */
1898 set_gdbarch_num_regs (gdbarch, I386_SSE_NUM_REGS);
acd5c798
MK
1899 set_gdbarch_register_name (gdbarch, i386_register_name);
1900 set_gdbarch_register_type (gdbarch, i386_register_type);
21d0e8a4 1901
acd5c798
MK
1902 /* Register numbers of various important registers. */
1903 set_gdbarch_sp_regnum (gdbarch, I386_ESP_REGNUM); /* %esp */
1904 set_gdbarch_pc_regnum (gdbarch, I386_EIP_REGNUM); /* %eip */
1905 set_gdbarch_ps_regnum (gdbarch, I386_EFLAGS_REGNUM); /* %eflags */
1906 set_gdbarch_fp0_regnum (gdbarch, I386_ST0_REGNUM); /* %st(0) */
356a6b3e
MK
1907
1908 /* Use the "default" register numbering scheme for stabs and COFF. */
1909 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_stab_reg_to_regnum);
1910 set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_stab_reg_to_regnum);
1911
1912 /* Use the DWARF register numbering scheme for DWARF and DWARF 2. */
1913 set_gdbarch_dwarf_reg_to_regnum (gdbarch, i386_dwarf_reg_to_regnum);
1914 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_dwarf_reg_to_regnum);
1915
1916 /* We don't define ECOFF_REG_TO_REGNUM, since ECOFF doesn't seem to
1917 be in use on any of the supported i386 targets. */
1918
61113f8b
MK
1919 set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
1920
8201327c 1921 set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
96297dab 1922
a62cc96e 1923 /* Call dummy code. */
acd5c798 1924 set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
a62cc96e 1925
ff2e87ac
AC
1926 set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
1927 set_gdbarch_register_to_value (gdbarch, i386_register_to_value);
1928 set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
b6197528 1929
00f8375e 1930 set_gdbarch_extract_return_value (gdbarch, i386_extract_return_value);
3d7f4f49 1931 set_gdbarch_store_return_value (gdbarch, i386_store_return_value);
00f8375e 1932 set_gdbarch_extract_struct_value_address (gdbarch,
fc08ec52 1933 i386_extract_struct_value_address);
8201327c
MK
1934 set_gdbarch_use_struct_convention (gdbarch, i386_use_struct_convention);
1935
93924b6b
MK
1936 set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
1937
1938 /* Stack grows downward. */
1939 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1940
1941 set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
1942 set_gdbarch_decr_pc_after_break (gdbarch, 1);
1943 set_gdbarch_function_start_offset (gdbarch, 0);
42fdc8df 1944
42fdc8df 1945 set_gdbarch_frame_args_skip (gdbarch, 8);
8201327c
MK
1946 set_gdbarch_pc_in_sigtramp (gdbarch, i386_pc_in_sigtramp);
1947
28fc6740 1948 /* Wire in the MMX registers. */
0f751ff2 1949 set_gdbarch_num_pseudo_regs (gdbarch, i386_num_mmx_regs);
28fc6740
AC
1950 set_gdbarch_pseudo_register_read (gdbarch, i386_pseudo_register_read);
1951 set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
1952
5e3397bb
MK
1953 set_gdbarch_print_insn (gdbarch, i386_print_insn);
1954
acd5c798 1955 set_gdbarch_unwind_dummy_id (gdbarch, i386_unwind_dummy_id);
acd5c798
MK
1956
1957 set_gdbarch_unwind_pc (gdbarch, i386_unwind_pc);
1958
38c968cf
AC
1959 /* Add the i386 register groups. */
1960 i386_add_reggroups (gdbarch);
1961 set_gdbarch_register_reggroup_p (gdbarch, i386_register_reggroup_p);
1962
143985b7
AF
1963 /* Helper for function argument information. */
1964 set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
1965
6405b0a6 1966 /* Hook in the DWARF CFI frame unwinder. */
336d1bba 1967 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
6405b0a6 1968
acd5c798 1969 frame_base_set_default (gdbarch, &i386_frame_base);
6c0e89ed 1970
3ce1502b 1971 /* Hook in ABI-specific overrides, if they have been registered. */
4be87837 1972 gdbarch_init_osabi (info, gdbarch);
3ce1502b 1973
336d1bba
AC
1974 frame_unwind_append_sniffer (gdbarch, i386_sigtramp_frame_sniffer);
1975 frame_unwind_append_sniffer (gdbarch, i386_frame_sniffer);
acd5c798 1976
5716833c
MK
1977 /* Unless support for MMX has been disabled, make %mm0 the first
1978 pseudo-register. */
1979 if (tdep->mm0_regnum == 0)
1980 tdep->mm0_regnum = gdbarch_num_regs (gdbarch);
1981
a62cc96e
AC
1982 return gdbarch;
1983}
1984
8201327c
MK
1985static enum gdb_osabi
1986i386_coff_osabi_sniffer (bfd *abfd)
1987{
762c5349
MK
1988 if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
1989 || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
8201327c
MK
1990 return GDB_OSABI_GO32;
1991
1992 return GDB_OSABI_UNKNOWN;
1993}
1994
1995static enum gdb_osabi
1996i386_nlm_osabi_sniffer (bfd *abfd)
1997{
1998 return GDB_OSABI_NETWARE;
1999}
2000\f
2001
28e9e0f0
MK
2002/* Provide a prototype to silence -Wmissing-prototypes. */
2003void _initialize_i386_tdep (void);
2004
c906108c 2005void
fba45db2 2006_initialize_i386_tdep (void)
c906108c 2007{
a62cc96e
AC
2008 register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
2009
fc338970 2010 /* Add the variable that controls the disassembly flavor. */
917317f4
JM
2011 {
2012 struct cmd_list_element *new_cmd;
7a292a7a 2013
917317f4
JM
2014 new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
2015 valid_flavors,
1ed2a135 2016 &disassembly_flavor,
fc338970
MK
2017 "\
2018Set the disassembly flavor, the valid values are \"att\" and \"intel\", \
c906108c 2019and the default value is \"att\".",
917317f4 2020 &setlist);
917317f4
JM
2021 add_show_from_set (new_cmd, &showlist);
2022 }
8201327c
MK
2023
2024 /* Add the variable that controls the convention for returning
2025 structs. */
2026 {
2027 struct cmd_list_element *new_cmd;
2028
2029 new_cmd = add_set_enum_cmd ("struct-convention", no_class,
5e3397bb 2030 valid_conventions,
8201327c
MK
2031 &struct_convention, "\
2032Set the convention for returning small structs, valid values \
2033are \"default\", \"pcc\" and \"reg\", and the default value is \"default\".",
2034 &setlist);
2035 add_show_from_set (new_cmd, &showlist);
2036 }
2037
2038 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
2039 i386_coff_osabi_sniffer);
2040 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_nlm_flavour,
2041 i386_nlm_osabi_sniffer);
2042
05816f70 2043 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
8201327c 2044 i386_svr4_init_abi);
05816f70 2045 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
8201327c 2046 i386_go32_init_abi);
05816f70 2047 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETWARE,
8201327c 2048 i386_nw_init_abi);
38c968cf
AC
2049
2050 /* Initialize the i386 specific register groups. */
2051 i386_init_reggroups ();
c906108c 2052}
This page took 0.453359 seconds and 4 git commands to generate.