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