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