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