Add return address collection for tracepoints.
[platform/upstream/binutils.git] / gdb / i386-tdep.c
1 /* Intel 386 target-dependent stuff.
2
3    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4    1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5    2010, 2011 Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "opcode/i386.h"
24 #include "arch-utils.h"
25 #include "command.h"
26 #include "dummy-frame.h"
27 #include "dwarf2-frame.h"
28 #include "doublest.h"
29 #include "frame.h"
30 #include "frame-base.h"
31 #include "frame-unwind.h"
32 #include "inferior.h"
33 #include "gdbcmd.h"
34 #include "gdbcore.h"
35 #include "gdbtypes.h"
36 #include "objfiles.h"
37 #include "osabi.h"
38 #include "regcache.h"
39 #include "reggroups.h"
40 #include "regset.h"
41 #include "symfile.h"
42 #include "symtab.h"
43 #include "target.h"
44 #include "value.h"
45 #include "dis-asm.h"
46 #include "disasm.h"
47 #include "remote.h"
48 #include "exceptions.h"
49 #include "gdb_assert.h"
50 #include "gdb_string.h"
51
52 #include "i386-tdep.h"
53 #include "i387-tdep.h"
54 #include "i386-xstate.h"
55
56 #include "record.h"
57 #include <stdint.h>
58
59 #include "features/i386/i386.c"
60 #include "features/i386/i386-avx.c"
61 #include "features/i386/i386-mmx.c"
62
63 #include "ax.h"
64 #include "ax-gdb.h"
65
66 /* Register names.  */
67
68 static const char *i386_register_names[] =
69 {
70   "eax",   "ecx",    "edx",   "ebx",
71   "esp",   "ebp",    "esi",   "edi",
72   "eip",   "eflags", "cs",    "ss",
73   "ds",    "es",     "fs",    "gs",
74   "st0",   "st1",    "st2",   "st3",
75   "st4",   "st5",    "st6",   "st7",
76   "fctrl", "fstat",  "ftag",  "fiseg",
77   "fioff", "foseg",  "fooff", "fop",
78   "xmm0",  "xmm1",   "xmm2",  "xmm3",
79   "xmm4",  "xmm5",   "xmm6",  "xmm7",
80   "mxcsr"
81 };
82
83 static const char *i386_ymm_names[] =
84 {
85   "ymm0",  "ymm1",   "ymm2",  "ymm3",
86   "ymm4",  "ymm5",   "ymm6",  "ymm7",
87 };
88
89 static const char *i386_ymmh_names[] =
90 {
91   "ymm0h",  "ymm1h",   "ymm2h",  "ymm3h",
92   "ymm4h",  "ymm5h",   "ymm6h",  "ymm7h",
93 };
94
95 /* Register names for MMX pseudo-registers.  */
96
97 static const char *i386_mmx_names[] =
98 {
99   "mm0", "mm1", "mm2", "mm3",
100   "mm4", "mm5", "mm6", "mm7"
101 };
102
103 /* Register names for byte pseudo-registers.  */
104
105 static const char *i386_byte_names[] =
106 {
107   "al", "cl", "dl", "bl", 
108   "ah", "ch", "dh", "bh"
109 };
110
111 /* Register names for word pseudo-registers.  */
112
113 static const char *i386_word_names[] =
114 {
115   "ax", "cx", "dx", "bx",
116   "", "bp", "si", "di"
117 };
118
119 /* MMX register?  */
120
121 static int
122 i386_mmx_regnum_p (struct gdbarch *gdbarch, int regnum)
123 {
124   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
125   int mm0_regnum = tdep->mm0_regnum;
126
127   if (mm0_regnum < 0)
128     return 0;
129
130   regnum -= mm0_regnum;
131   return regnum >= 0 && regnum < tdep->num_mmx_regs;
132 }
133
134 /* Byte register?  */
135
136 int
137 i386_byte_regnum_p (struct gdbarch *gdbarch, int regnum)
138 {
139   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
140
141   regnum -= tdep->al_regnum;
142   return regnum >= 0 && regnum < tdep->num_byte_regs;
143 }
144
145 /* Word register?  */
146
147 int
148 i386_word_regnum_p (struct gdbarch *gdbarch, int regnum)
149 {
150   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
151
152   regnum -= tdep->ax_regnum;
153   return regnum >= 0 && regnum < tdep->num_word_regs;
154 }
155
156 /* Dword register?  */
157
158 int
159 i386_dword_regnum_p (struct gdbarch *gdbarch, int regnum)
160 {
161   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
162   int eax_regnum = tdep->eax_regnum;
163
164   if (eax_regnum < 0)
165     return 0;
166
167   regnum -= eax_regnum;
168   return regnum >= 0 && regnum < tdep->num_dword_regs;
169 }
170
171 static int
172 i386_ymmh_regnum_p (struct gdbarch *gdbarch, int regnum)
173 {
174   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
175   int ymm0h_regnum = tdep->ymm0h_regnum;
176
177   if (ymm0h_regnum < 0)
178     return 0;
179
180   regnum -= ymm0h_regnum;
181   return regnum >= 0 && regnum < tdep->num_ymm_regs;
182 }
183
184 /* AVX register?  */
185
186 int
187 i386_ymm_regnum_p (struct gdbarch *gdbarch, int regnum)
188 {
189   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
190   int ymm0_regnum = tdep->ymm0_regnum;
191
192   if (ymm0_regnum < 0)
193     return 0;
194
195   regnum -= ymm0_regnum;
196   return regnum >= 0 && regnum < tdep->num_ymm_regs;
197 }
198
199 /* SSE register?  */
200
201 int
202 i386_xmm_regnum_p (struct gdbarch *gdbarch, int regnum)
203 {
204   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
205   int num_xmm_regs = I387_NUM_XMM_REGS (tdep);
206
207   if (num_xmm_regs == 0)
208     return 0;
209
210   regnum -= I387_XMM0_REGNUM (tdep);
211   return regnum >= 0 && regnum < num_xmm_regs;
212 }
213
214 static int
215 i386_mxcsr_regnum_p (struct gdbarch *gdbarch, int regnum)
216 {
217   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
218
219   if (I387_NUM_XMM_REGS (tdep) == 0)
220     return 0;
221
222   return (regnum == I387_MXCSR_REGNUM (tdep));
223 }
224
225 /* FP register?  */
226
227 int
228 i386_fp_regnum_p (struct gdbarch *gdbarch, int regnum)
229 {
230   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
231
232   if (I387_ST0_REGNUM (tdep) < 0)
233     return 0;
234
235   return (I387_ST0_REGNUM (tdep) <= regnum
236           && regnum < I387_FCTRL_REGNUM (tdep));
237 }
238
239 int
240 i386_fpc_regnum_p (struct gdbarch *gdbarch, int regnum)
241 {
242   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
243
244   if (I387_ST0_REGNUM (tdep) < 0)
245     return 0;
246
247   return (I387_FCTRL_REGNUM (tdep) <= regnum 
248           && regnum < I387_XMM0_REGNUM (tdep));
249 }
250
251 /* Return the name of register REGNUM, or the empty string if it is
252    an anonymous register.  */
253
254 static const char *
255 i386_register_name (struct gdbarch *gdbarch, int regnum)
256 {
257   /* Hide the upper YMM registers.  */
258   if (i386_ymmh_regnum_p (gdbarch, regnum))
259     return "";
260
261   return tdesc_register_name (gdbarch, regnum);
262 }
263
264 /* Return the name of register REGNUM.  */
265
266 const char *
267 i386_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
268 {
269   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
270   if (i386_mmx_regnum_p (gdbarch, regnum))
271     return i386_mmx_names[regnum - I387_MM0_REGNUM (tdep)];
272   else if (i386_ymm_regnum_p (gdbarch, regnum))
273     return i386_ymm_names[regnum - tdep->ymm0_regnum];
274   else if (i386_byte_regnum_p (gdbarch, regnum))
275     return i386_byte_names[regnum - tdep->al_regnum];
276   else if (i386_word_regnum_p (gdbarch, regnum))
277     return i386_word_names[regnum - tdep->ax_regnum];
278
279   internal_error (__FILE__, __LINE__, _("invalid regnum"));
280 }
281
282 /* Convert a dbx register number REG to the appropriate register
283    number used by GDB.  */
284
285 static int
286 i386_dbx_reg_to_regnum (struct gdbarch *gdbarch, int reg)
287 {
288   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
289
290   /* This implements what GCC calls the "default" register map
291      (dbx_register_map[]).  */
292
293   if (reg >= 0 && reg <= 7)
294     {
295       /* General-purpose registers.  The debug info calls %ebp
296          register 4, and %esp register 5.  */
297       if (reg == 4)
298         return 5;
299       else if (reg == 5)
300         return 4;
301       else return reg;
302     }
303   else if (reg >= 12 && reg <= 19)
304     {
305       /* Floating-point registers.  */
306       return reg - 12 + I387_ST0_REGNUM (tdep);
307     }
308   else if (reg >= 21 && reg <= 28)
309     {
310       /* SSE registers.  */
311       int ymm0_regnum = tdep->ymm0_regnum;
312
313       if (ymm0_regnum >= 0
314           && i386_xmm_regnum_p (gdbarch, reg))
315         return reg - 21 + ymm0_regnum;
316       else
317         return reg - 21 + I387_XMM0_REGNUM (tdep);
318     }
319   else if (reg >= 29 && reg <= 36)
320     {
321       /* MMX registers.  */
322       return reg - 29 + I387_MM0_REGNUM (tdep);
323     }
324
325   /* This will hopefully provoke a warning.  */
326   return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
327 }
328
329 /* Convert SVR4 register number REG to the appropriate register number
330    used by GDB.  */
331
332 static int
333 i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg)
334 {
335   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
336
337   /* This implements the GCC register map that tries to be compatible
338      with the SVR4 C compiler for DWARF (svr4_dbx_register_map[]).  */
339
340   /* The SVR4 register numbering includes %eip and %eflags, and
341      numbers the floating point registers differently.  */
342   if (reg >= 0 && reg <= 9)
343     {
344       /* General-purpose registers.  */
345       return reg;
346     }
347   else if (reg >= 11 && reg <= 18)
348     {
349       /* Floating-point registers.  */
350       return reg - 11 + I387_ST0_REGNUM (tdep);
351     }
352   else if (reg >= 21 && reg <= 36)
353     {
354       /* The SSE and MMX registers have the same numbers as with dbx.  */
355       return i386_dbx_reg_to_regnum (gdbarch, reg);
356     }
357
358   switch (reg)
359     {
360     case 37: return I387_FCTRL_REGNUM (tdep);
361     case 38: return I387_FSTAT_REGNUM (tdep);
362     case 39: return I387_MXCSR_REGNUM (tdep);
363     case 40: return I386_ES_REGNUM;
364     case 41: return I386_CS_REGNUM;
365     case 42: return I386_SS_REGNUM;
366     case 43: return I386_DS_REGNUM;
367     case 44: return I386_FS_REGNUM;
368     case 45: return I386_GS_REGNUM;
369     }
370
371   /* This will hopefully provoke a warning.  */
372   return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
373 }
374
375 \f
376
377 /* This is the variable that is set with "set disassembly-flavor", and
378    its legitimate values.  */
379 static const char att_flavor[] = "att";
380 static const char intel_flavor[] = "intel";
381 static const char *valid_flavors[] =
382 {
383   att_flavor,
384   intel_flavor,
385   NULL
386 };
387 static const char *disassembly_flavor = att_flavor;
388 \f
389
390 /* Use the program counter to determine the contents and size of a
391    breakpoint instruction.  Return a pointer to a string of bytes that
392    encode a breakpoint instruction, store the length of the string in
393    *LEN and optionally adjust *PC to point to the correct memory
394    location for inserting the breakpoint.
395
396    On the i386 we have a single breakpoint that fits in a single byte
397    and can be inserted anywhere.
398
399    This function is 64-bit safe.  */
400
401 static const gdb_byte *
402 i386_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
403 {
404   static gdb_byte break_insn[] = { 0xcc }; /* int 3 */
405
406   *len = sizeof (break_insn);
407   return break_insn;
408 }
409 \f
410 /* Displaced instruction handling.  */
411
412 /* Skip the legacy instruction prefixes in INSN.
413    Not all prefixes are valid for any particular insn
414    but we needn't care, the insn will fault if it's invalid.
415    The result is a pointer to the first opcode byte,
416    or NULL if we run off the end of the buffer.  */
417
418 static gdb_byte *
419 i386_skip_prefixes (gdb_byte *insn, size_t max_len)
420 {
421   gdb_byte *end = insn + max_len;
422
423   while (insn < end)
424     {
425       switch (*insn)
426         {
427         case DATA_PREFIX_OPCODE:
428         case ADDR_PREFIX_OPCODE:
429         case CS_PREFIX_OPCODE:
430         case DS_PREFIX_OPCODE:
431         case ES_PREFIX_OPCODE:
432         case FS_PREFIX_OPCODE:
433         case GS_PREFIX_OPCODE:
434         case SS_PREFIX_OPCODE:
435         case LOCK_PREFIX_OPCODE:
436         case REPE_PREFIX_OPCODE:
437         case REPNE_PREFIX_OPCODE:
438           ++insn;
439           continue;
440         default:
441           return insn;
442         }
443     }
444
445   return NULL;
446 }
447
448 static int
449 i386_absolute_jmp_p (const gdb_byte *insn)
450 {
451   /* jmp far (absolute address in operand).  */
452   if (insn[0] == 0xea)
453     return 1;
454
455   if (insn[0] == 0xff)
456     {
457       /* jump near, absolute indirect (/4).  */
458       if ((insn[1] & 0x38) == 0x20)
459         return 1;
460
461       /* jump far, absolute indirect (/5).  */
462       if ((insn[1] & 0x38) == 0x28)
463         return 1;
464     }
465
466   return 0;
467 }
468
469 static int
470 i386_absolute_call_p (const gdb_byte *insn)
471 {
472   /* call far, absolute.  */
473   if (insn[0] == 0x9a)
474     return 1;
475
476   if (insn[0] == 0xff)
477     {
478       /* Call near, absolute indirect (/2).  */
479       if ((insn[1] & 0x38) == 0x10)
480         return 1;
481
482       /* Call far, absolute indirect (/3).  */
483       if ((insn[1] & 0x38) == 0x18)
484         return 1;
485     }
486
487   return 0;
488 }
489
490 static int
491 i386_ret_p (const gdb_byte *insn)
492 {
493   switch (insn[0])
494     {
495     case 0xc2: /* ret near, pop N bytes.  */
496     case 0xc3: /* ret near */
497     case 0xca: /* ret far, pop N bytes.  */
498     case 0xcb: /* ret far */
499     case 0xcf: /* iret */
500       return 1;
501
502     default:
503       return 0;
504     }
505 }
506
507 static int
508 i386_call_p (const gdb_byte *insn)
509 {
510   if (i386_absolute_call_p (insn))
511     return 1;
512
513   /* call near, relative.  */
514   if (insn[0] == 0xe8)
515     return 1;
516
517   return 0;
518 }
519
520 /* Return non-zero if INSN is a system call, and set *LENGTHP to its
521    length in bytes.  Otherwise, return zero.  */
522
523 static int
524 i386_syscall_p (const gdb_byte *insn, int *lengthp)
525 {
526   if (insn[0] == 0xcd)
527     {
528       *lengthp = 2;
529       return 1;
530     }
531
532   return 0;
533 }
534
535 /* Some kernels may run one past a syscall insn, so we have to cope.
536    Otherwise this is just simple_displaced_step_copy_insn.  */
537
538 struct displaced_step_closure *
539 i386_displaced_step_copy_insn (struct gdbarch *gdbarch,
540                                CORE_ADDR from, CORE_ADDR to,
541                                struct regcache *regs)
542 {
543   size_t len = gdbarch_max_insn_length (gdbarch);
544   gdb_byte *buf = xmalloc (len);
545
546   read_memory (from, buf, len);
547
548   /* GDB may get control back after the insn after the syscall.
549      Presumably this is a kernel bug.
550      If this is a syscall, make sure there's a nop afterwards.  */
551   {
552     int syscall_length;
553     gdb_byte *insn;
554
555     insn = i386_skip_prefixes (buf, len);
556     if (insn != NULL && i386_syscall_p (insn, &syscall_length))
557       insn[syscall_length] = NOP_OPCODE;
558   }
559
560   write_memory (to, buf, len);
561
562   if (debug_displaced)
563     {
564       fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
565                           paddress (gdbarch, from), paddress (gdbarch, to));
566       displaced_step_dump_bytes (gdb_stdlog, buf, len);
567     }
568
569   return (struct displaced_step_closure *) buf;
570 }
571
572 /* Fix up the state of registers and memory after having single-stepped
573    a displaced instruction.  */
574
575 void
576 i386_displaced_step_fixup (struct gdbarch *gdbarch,
577                            struct displaced_step_closure *closure,
578                            CORE_ADDR from, CORE_ADDR to,
579                            struct regcache *regs)
580 {
581   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
582
583   /* The offset we applied to the instruction's address.
584      This could well be negative (when viewed as a signed 32-bit
585      value), but ULONGEST won't reflect that, so take care when
586      applying it.  */
587   ULONGEST insn_offset = to - from;
588
589   /* Since we use simple_displaced_step_copy_insn, our closure is a
590      copy of the instruction.  */
591   gdb_byte *insn = (gdb_byte *) closure;
592   /* The start of the insn, needed in case we see some prefixes.  */
593   gdb_byte *insn_start = insn;
594
595   if (debug_displaced)
596     fprintf_unfiltered (gdb_stdlog,
597                         "displaced: fixup (%s, %s), "
598                         "insn = 0x%02x 0x%02x ...\n",
599                         paddress (gdbarch, from), paddress (gdbarch, to),
600                         insn[0], insn[1]);
601
602   /* The list of issues to contend with here is taken from
603      resume_execution in arch/i386/kernel/kprobes.c, Linux 2.6.20.
604      Yay for Free Software!  */
605
606   /* Relocate the %eip, if necessary.  */
607
608   /* The instruction recognizers we use assume any leading prefixes
609      have been skipped.  */
610   {
611     /* This is the size of the buffer in closure.  */
612     size_t max_insn_len = gdbarch_max_insn_length (gdbarch);
613     gdb_byte *opcode = i386_skip_prefixes (insn, max_insn_len);
614     /* If there are too many prefixes, just ignore the insn.
615        It will fault when run.  */
616     if (opcode != NULL)
617       insn = opcode;
618   }
619
620   /* Except in the case of absolute or indirect jump or call
621      instructions, or a return instruction, the new eip is relative to
622      the displaced instruction; make it relative.  Well, signal
623      handler returns don't need relocation either, but we use the
624      value of %eip to recognize those; see below.  */
625   if (! i386_absolute_jmp_p (insn)
626       && ! i386_absolute_call_p (insn)
627       && ! i386_ret_p (insn))
628     {
629       ULONGEST orig_eip;
630       int insn_len;
631
632       regcache_cooked_read_unsigned (regs, I386_EIP_REGNUM, &orig_eip);
633
634       /* A signal trampoline system call changes the %eip, resuming
635          execution of the main program after the signal handler has
636          returned.  That makes them like 'return' instructions; we
637          shouldn't relocate %eip.
638
639          But most system calls don't, and we do need to relocate %eip.
640
641          Our heuristic for distinguishing these cases: if stepping
642          over the system call instruction left control directly after
643          the instruction, the we relocate --- control almost certainly
644          doesn't belong in the displaced copy.  Otherwise, we assume
645          the instruction has put control where it belongs, and leave
646          it unrelocated.  Goodness help us if there are PC-relative
647          system calls.  */
648       if (i386_syscall_p (insn, &insn_len)
649           && orig_eip != to + (insn - insn_start) + insn_len
650           /* GDB can get control back after the insn after the syscall.
651              Presumably this is a kernel bug.
652              i386_displaced_step_copy_insn ensures its a nop,
653              we add one to the length for it.  */
654           && orig_eip != to + (insn - insn_start) + insn_len + 1)
655         {
656           if (debug_displaced)
657             fprintf_unfiltered (gdb_stdlog,
658                                 "displaced: syscall changed %%eip; "
659                                 "not relocating\n");
660         }
661       else
662         {
663           ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL;
664
665           /* If we just stepped over a breakpoint insn, we don't backup
666              the pc on purpose; this is to match behaviour without
667              stepping.  */
668
669           regcache_cooked_write_unsigned (regs, I386_EIP_REGNUM, eip);
670
671           if (debug_displaced)
672             fprintf_unfiltered (gdb_stdlog,
673                                 "displaced: "
674                                 "relocated %%eip from %s to %s\n",
675                                 paddress (gdbarch, orig_eip),
676                                 paddress (gdbarch, eip));
677         }
678     }
679
680   /* If the instruction was PUSHFL, then the TF bit will be set in the
681      pushed value, and should be cleared.  We'll leave this for later,
682      since GDB already messes up the TF flag when stepping over a
683      pushfl.  */
684
685   /* If the instruction was a call, the return address now atop the
686      stack is the address following the copied instruction.  We need
687      to make it the address following the original instruction.  */
688   if (i386_call_p (insn))
689     {
690       ULONGEST esp;
691       ULONGEST retaddr;
692       const ULONGEST retaddr_len = 4;
693
694       regcache_cooked_read_unsigned (regs, I386_ESP_REGNUM, &esp);
695       retaddr = read_memory_unsigned_integer (esp, retaddr_len, byte_order);
696       retaddr = (retaddr - insn_offset) & 0xffffffffUL;
697       write_memory_unsigned_integer (esp, retaddr_len, byte_order, retaddr);
698
699       if (debug_displaced)
700         fprintf_unfiltered (gdb_stdlog,
701                             "displaced: relocated return addr at %s to %s\n",
702                             paddress (gdbarch, esp),
703                             paddress (gdbarch, retaddr));
704     }
705 }
706
707 static void
708 append_insns (CORE_ADDR *to, ULONGEST len, const gdb_byte *buf)
709 {
710   target_write_memory (*to, buf, len);
711   *to += len;
712 }
713
714 static void
715 i386_relocate_instruction (struct gdbarch *gdbarch,
716                            CORE_ADDR *to, CORE_ADDR oldloc)
717 {
718   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
719   gdb_byte buf[I386_MAX_INSN_LEN];
720   int offset = 0, rel32, newrel;
721   int insn_length;
722   gdb_byte *insn = buf;
723
724   read_memory (oldloc, buf, I386_MAX_INSN_LEN);
725
726   insn_length = gdb_buffered_insn_length (gdbarch, insn,
727                                           I386_MAX_INSN_LEN, oldloc);
728
729   /* Get past the prefixes.  */
730   insn = i386_skip_prefixes (insn, I386_MAX_INSN_LEN);
731
732   /* Adjust calls with 32-bit relative addresses as push/jump, with
733      the address pushed being the location where the original call in
734      the user program would return to.  */
735   if (insn[0] == 0xe8)
736     {
737       gdb_byte push_buf[16];
738       unsigned int ret_addr;
739
740       /* Where "ret" in the original code will return to.  */
741       ret_addr = oldloc + insn_length;
742       push_buf[0] = 0x68; /* pushq $...  */
743       memcpy (&push_buf[1], &ret_addr, 4);
744       /* Push the push.  */
745       append_insns (to, 5, push_buf);
746
747       /* Convert the relative call to a relative jump.  */
748       insn[0] = 0xe9;
749
750       /* Adjust the destination offset.  */
751       rel32 = extract_signed_integer (insn + 1, 4, byte_order);
752       newrel = (oldloc - *to) + rel32;
753       store_signed_integer (insn + 1, 4, byte_order, newrel);
754
755       if (debug_displaced)
756         fprintf_unfiltered (gdb_stdlog,
757                             "Adjusted insn rel32=%s at %s to"
758                             " rel32=%s at %s\n",
759                             hex_string (rel32), paddress (gdbarch, oldloc),
760                             hex_string (newrel), paddress (gdbarch, *to));
761
762       /* Write the adjusted jump into its displaced location.  */
763       append_insns (to, 5, insn);
764       return;
765     }
766
767   /* Adjust jumps with 32-bit relative addresses.  Calls are already
768      handled above.  */
769   if (insn[0] == 0xe9)
770     offset = 1;
771   /* Adjust conditional jumps.  */
772   else if (insn[0] == 0x0f && (insn[1] & 0xf0) == 0x80)
773     offset = 2;
774
775   if (offset)
776     {
777       rel32 = extract_signed_integer (insn + offset, 4, byte_order);
778       newrel = (oldloc - *to) + rel32;
779       store_signed_integer (insn + offset, 4, byte_order, newrel);
780       if (debug_displaced)
781         fprintf_unfiltered (gdb_stdlog,
782                             "Adjusted insn rel32=%s at %s to"
783                             " rel32=%s at %s\n",
784                             hex_string (rel32), paddress (gdbarch, oldloc),
785                             hex_string (newrel), paddress (gdbarch, *to));
786     }
787
788   /* Write the adjusted instructions into their displaced
789      location.  */
790   append_insns (to, insn_length, buf);
791 }
792
793 \f
794 #ifdef I386_REGNO_TO_SYMMETRY
795 #error "The Sequent Symmetry is no longer supported."
796 #endif
797
798 /* According to the System V ABI, the registers %ebp, %ebx, %edi, %esi
799    and %esp "belong" to the calling function.  Therefore these
800    registers should be saved if they're going to be modified.  */
801
802 /* The maximum number of saved registers.  This should include all
803    registers mentioned above, and %eip.  */
804 #define I386_NUM_SAVED_REGS     I386_NUM_GREGS
805
806 struct i386_frame_cache
807 {
808   /* Base address.  */
809   CORE_ADDR base;
810   int base_p;
811   LONGEST sp_offset;
812   CORE_ADDR pc;
813
814   /* Saved registers.  */
815   CORE_ADDR saved_regs[I386_NUM_SAVED_REGS];
816   CORE_ADDR saved_sp;
817   int saved_sp_reg;
818   int pc_in_eax;
819
820   /* Stack space reserved for local variables.  */
821   long locals;
822 };
823
824 /* Allocate and initialize a frame cache.  */
825
826 static struct i386_frame_cache *
827 i386_alloc_frame_cache (void)
828 {
829   struct i386_frame_cache *cache;
830   int i;
831
832   cache = FRAME_OBSTACK_ZALLOC (struct i386_frame_cache);
833
834   /* Base address.  */
835   cache->base_p = 0;
836   cache->base = 0;
837   cache->sp_offset = -4;
838   cache->pc = 0;
839
840   /* Saved registers.  We initialize these to -1 since zero is a valid
841      offset (that's where %ebp is supposed to be stored).  */
842   for (i = 0; i < I386_NUM_SAVED_REGS; i++)
843     cache->saved_regs[i] = -1;
844   cache->saved_sp = 0;
845   cache->saved_sp_reg = -1;
846   cache->pc_in_eax = 0;
847
848   /* Frameless until proven otherwise.  */
849   cache->locals = -1;
850
851   return cache;
852 }
853
854 /* If the instruction at PC is a jump, return the address of its
855    target.  Otherwise, return PC.  */
856
857 static CORE_ADDR
858 i386_follow_jump (struct gdbarch *gdbarch, CORE_ADDR pc)
859 {
860   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
861   gdb_byte op;
862   long delta = 0;
863   int data16 = 0;
864
865   if (target_read_memory (pc, &op, 1))
866     return pc;
867
868   if (op == 0x66)
869     {
870       data16 = 1;
871       op = read_memory_unsigned_integer (pc + 1, 1, byte_order);
872     }
873
874   switch (op)
875     {
876     case 0xe9:
877       /* Relative jump: if data16 == 0, disp32, else disp16.  */
878       if (data16)
879         {
880           delta = read_memory_integer (pc + 2, 2, byte_order);
881
882           /* Include the size of the jmp instruction (including the
883              0x66 prefix).  */
884           delta += 4;
885         }
886       else
887         {
888           delta = read_memory_integer (pc + 1, 4, byte_order);
889
890           /* Include the size of the jmp instruction.  */
891           delta += 5;
892         }
893       break;
894     case 0xeb:
895       /* Relative jump, disp8 (ignore data16).  */
896       delta = read_memory_integer (pc + data16 + 1, 1, byte_order);
897
898       delta += data16 + 2;
899       break;
900     }
901
902   return pc + delta;
903 }
904
905 /* Check whether PC points at a prologue for a function returning a
906    structure or union.  If so, it updates CACHE and returns the
907    address of the first instruction after the code sequence that
908    removes the "hidden" argument from the stack or CURRENT_PC,
909    whichever is smaller.  Otherwise, return PC.  */
910
911 static CORE_ADDR
912 i386_analyze_struct_return (CORE_ADDR pc, CORE_ADDR current_pc,
913                             struct i386_frame_cache *cache)
914 {
915   /* Functions that return a structure or union start with:
916
917         popl %eax             0x58
918         xchgl %eax, (%esp)    0x87 0x04 0x24
919      or xchgl %eax, 0(%esp)   0x87 0x44 0x24 0x00
920
921      (the System V compiler puts out the second `xchg' instruction,
922      and the assembler doesn't try to optimize it, so the 'sib' form
923      gets generated).  This sequence is used to get the address of the
924      return buffer for a function that returns a structure.  */
925   static gdb_byte proto1[3] = { 0x87, 0x04, 0x24 };
926   static gdb_byte proto2[4] = { 0x87, 0x44, 0x24, 0x00 };
927   gdb_byte buf[4];
928   gdb_byte op;
929
930   if (current_pc <= pc)
931     return pc;
932
933   if (target_read_memory (pc, &op, 1))
934     return pc;
935
936   if (op != 0x58)               /* popl %eax */
937     return pc;
938
939   if (target_read_memory (pc + 1, buf, 4))
940     return pc;
941
942   if (memcmp (buf, proto1, 3) != 0 && memcmp (buf, proto2, 4) != 0)
943     return pc;
944
945   if (current_pc == pc)
946     {
947       cache->sp_offset += 4;
948       return current_pc;
949     }
950
951   if (current_pc == pc + 1)
952     {
953       cache->pc_in_eax = 1;
954       return current_pc;
955     }
956   
957   if (buf[1] == proto1[1])
958     return pc + 4;
959   else
960     return pc + 5;
961 }
962
963 static CORE_ADDR
964 i386_skip_probe (CORE_ADDR pc)
965 {
966   /* A function may start with
967
968         pushl constant
969         call _probe
970         addl $4, %esp
971            
972      followed by
973
974         pushl %ebp
975
976      etc.  */
977   gdb_byte buf[8];
978   gdb_byte op;
979
980   if (target_read_memory (pc, &op, 1))
981     return pc;
982
983   if (op == 0x68 || op == 0x6a)
984     {
985       int delta;
986
987       /* Skip past the `pushl' instruction; it has either a one-byte or a
988          four-byte operand, depending on the opcode.  */
989       if (op == 0x68)
990         delta = 5;
991       else
992         delta = 2;
993
994       /* Read the following 8 bytes, which should be `call _probe' (6
995          bytes) followed by `addl $4,%esp' (2 bytes).  */
996       read_memory (pc + delta, buf, sizeof (buf));
997       if (buf[0] == 0xe8 && buf[6] == 0xc4 && buf[7] == 0x4)
998         pc += delta + sizeof (buf);
999     }
1000
1001   return pc;
1002 }
1003
1004 /* GCC 4.1 and later, can put code in the prologue to realign the
1005    stack pointer.  Check whether PC points to such code, and update
1006    CACHE accordingly.  Return the first instruction after the code
1007    sequence or CURRENT_PC, whichever is smaller.  If we don't
1008    recognize the code, return PC.  */
1009
1010 static CORE_ADDR
1011 i386_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
1012                           struct i386_frame_cache *cache)
1013 {
1014   /* There are 2 code sequences to re-align stack before the frame
1015      gets set up:
1016
1017         1. Use a caller-saved saved register:
1018
1019                 leal  4(%esp), %reg
1020                 andl  $-XXX, %esp
1021                 pushl -4(%reg)
1022
1023         2. Use a callee-saved saved register:
1024
1025                 pushl %reg
1026                 leal  8(%esp), %reg
1027                 andl  $-XXX, %esp
1028                 pushl -4(%reg)
1029
1030      "andl $-XXX, %esp" can be either 3 bytes or 6 bytes:
1031      
1032         0x83 0xe4 0xf0                  andl $-16, %esp
1033         0x81 0xe4 0x00 0xff 0xff 0xff   andl $-256, %esp
1034    */
1035
1036   gdb_byte buf[14];
1037   int reg;
1038   int offset, offset_and;
1039   static int regnums[8] = {
1040     I386_EAX_REGNUM,            /* %eax */
1041     I386_ECX_REGNUM,            /* %ecx */
1042     I386_EDX_REGNUM,            /* %edx */
1043     I386_EBX_REGNUM,            /* %ebx */
1044     I386_ESP_REGNUM,            /* %esp */
1045     I386_EBP_REGNUM,            /* %ebp */
1046     I386_ESI_REGNUM,            /* %esi */
1047     I386_EDI_REGNUM             /* %edi */
1048   };
1049
1050   if (target_read_memory (pc, buf, sizeof buf))
1051     return pc;
1052
1053   /* Check caller-saved saved register.  The first instruction has
1054      to be "leal 4(%esp), %reg".  */
1055   if (buf[0] == 0x8d && buf[2] == 0x24 && buf[3] == 0x4)
1056     {
1057       /* MOD must be binary 10 and R/M must be binary 100.  */
1058       if ((buf[1] & 0xc7) != 0x44)
1059         return pc;
1060
1061       /* REG has register number.  */
1062       reg = (buf[1] >> 3) & 7;
1063       offset = 4;
1064     }
1065   else
1066     {
1067       /* Check callee-saved saved register.  The first instruction
1068          has to be "pushl %reg".  */
1069       if ((buf[0] & 0xf8) != 0x50)
1070         return pc;
1071
1072       /* Get register.  */
1073       reg = buf[0] & 0x7;
1074
1075       /* The next instruction has to be "leal 8(%esp), %reg".  */
1076       if (buf[1] != 0x8d || buf[3] != 0x24 || buf[4] != 0x8)
1077         return pc;
1078
1079       /* MOD must be binary 10 and R/M must be binary 100.  */
1080       if ((buf[2] & 0xc7) != 0x44)
1081         return pc;
1082       
1083       /* REG has register number.  Registers in pushl and leal have to
1084          be the same.  */
1085       if (reg != ((buf[2] >> 3) & 7))
1086         return pc;
1087
1088       offset = 5;
1089     }
1090
1091   /* Rigister can't be %esp nor %ebp.  */
1092   if (reg == 4 || reg == 5)
1093     return pc;
1094
1095   /* The next instruction has to be "andl $-XXX, %esp".  */
1096   if (buf[offset + 1] != 0xe4
1097       || (buf[offset] != 0x81 && buf[offset] != 0x83))
1098     return pc;
1099
1100   offset_and = offset;
1101   offset += buf[offset] == 0x81 ? 6 : 3;
1102
1103   /* The next instruction has to be "pushl -4(%reg)".  8bit -4 is
1104      0xfc.  REG must be binary 110 and MOD must be binary 01.  */
1105   if (buf[offset] != 0xff
1106       || buf[offset + 2] != 0xfc
1107       || (buf[offset + 1] & 0xf8) != 0x70)
1108     return pc;
1109
1110   /* R/M has register.  Registers in leal and pushl have to be the
1111      same.  */
1112   if (reg != (buf[offset + 1] & 7))
1113     return pc;
1114
1115   if (current_pc > pc + offset_and)
1116     cache->saved_sp_reg = regnums[reg];
1117
1118   return min (pc + offset + 3, current_pc);
1119 }
1120
1121 /* Maximum instruction length we need to handle.  */
1122 #define I386_MAX_MATCHED_INSN_LEN       6
1123
1124 /* Instruction description.  */
1125 struct i386_insn
1126 {
1127   size_t len;
1128   gdb_byte insn[I386_MAX_MATCHED_INSN_LEN];
1129   gdb_byte mask[I386_MAX_MATCHED_INSN_LEN];
1130 };
1131
1132 /* Return whether instruction at PC matches PATTERN.  */
1133
1134 static int
1135 i386_match_pattern (CORE_ADDR pc, struct i386_insn pattern)
1136 {
1137   gdb_byte op;
1138
1139   if (target_read_memory (pc, &op, 1))
1140     return 0;
1141
1142   if ((op & pattern.mask[0]) == pattern.insn[0])
1143     {
1144       gdb_byte buf[I386_MAX_MATCHED_INSN_LEN - 1];
1145       int insn_matched = 1;
1146       size_t i;
1147
1148       gdb_assert (pattern.len > 1);
1149       gdb_assert (pattern.len <= I386_MAX_MATCHED_INSN_LEN);
1150
1151       if (target_read_memory (pc + 1, buf, pattern.len - 1))
1152         return 0;
1153
1154       for (i = 1; i < pattern.len; i++)
1155         {
1156           if ((buf[i - 1] & pattern.mask[i]) != pattern.insn[i])
1157             insn_matched = 0;
1158         }
1159       return insn_matched;
1160     }
1161   return 0;
1162 }
1163
1164 /* Search for the instruction at PC in the list INSN_PATTERNS.  Return
1165    the first instruction description that matches.  Otherwise, return
1166    NULL.  */
1167
1168 static struct i386_insn *
1169 i386_match_insn (CORE_ADDR pc, struct i386_insn *insn_patterns)
1170 {
1171   struct i386_insn *pattern;
1172
1173   for (pattern = insn_patterns; pattern->len > 0; pattern++)
1174     {
1175       if (i386_match_pattern (pc, *pattern))
1176         return pattern;
1177     }
1178
1179   return NULL;
1180 }
1181
1182 /* Return whether PC points inside a sequence of instructions that
1183    matches INSN_PATTERNS.  */
1184
1185 static int
1186 i386_match_insn_block (CORE_ADDR pc, struct i386_insn *insn_patterns)
1187 {
1188   CORE_ADDR current_pc;
1189   int ix, i;
1190   gdb_byte op;
1191   struct i386_insn *insn;
1192
1193   insn = i386_match_insn (pc, insn_patterns);
1194   if (insn == NULL)
1195     return 0;
1196
1197   current_pc = pc;
1198   ix = insn - insn_patterns;
1199   for (i = ix - 1; i >= 0; i--)
1200     {
1201       current_pc -= insn_patterns[i].len;
1202
1203       if (!i386_match_pattern (current_pc, insn_patterns[i]))
1204         return 0;
1205     }
1206
1207   current_pc = pc + insn->len;
1208   for (insn = insn_patterns + ix + 1; insn->len > 0; insn++)
1209     {
1210       if (!i386_match_pattern (current_pc, *insn))
1211         return 0;
1212
1213       current_pc += insn->len;
1214     }
1215
1216   return 1;
1217 }
1218
1219 /* Some special instructions that might be migrated by GCC into the
1220    part of the prologue that sets up the new stack frame.  Because the
1221    stack frame hasn't been setup yet, no registers have been saved
1222    yet, and only the scratch registers %eax, %ecx and %edx can be
1223    touched.  */
1224
1225 struct i386_insn i386_frame_setup_skip_insns[] =
1226 {
1227   /* Check for `movb imm8, r' and `movl imm32, r'.
1228     
1229      ??? Should we handle 16-bit operand-sizes here?  */
1230
1231   /* `movb imm8, %al' and `movb imm8, %ah' */
1232   /* `movb imm8, %cl' and `movb imm8, %ch' */
1233   { 2, { 0xb0, 0x00 }, { 0xfa, 0x00 } },
1234   /* `movb imm8, %dl' and `movb imm8, %dh' */
1235   { 2, { 0xb2, 0x00 }, { 0xfb, 0x00 } },
1236   /* `movl imm32, %eax' and `movl imm32, %ecx' */
1237   { 5, { 0xb8 }, { 0xfe } },
1238   /* `movl imm32, %edx' */
1239   { 5, { 0xba }, { 0xff } },
1240
1241   /* Check for `mov imm32, r32'.  Note that there is an alternative
1242      encoding for `mov m32, %eax'.
1243
1244      ??? Should we handle SIB adressing here?
1245      ??? Should we handle 16-bit operand-sizes here?  */
1246
1247   /* `movl m32, %eax' */
1248   { 5, { 0xa1 }, { 0xff } },
1249   /* `movl m32, %eax' and `mov; m32, %ecx' */
1250   { 6, { 0x89, 0x05 }, {0xff, 0xf7 } },
1251   /* `movl m32, %edx' */
1252   { 6, { 0x89, 0x15 }, {0xff, 0xff } },
1253
1254   /* Check for `xorl r32, r32' and the equivalent `subl r32, r32'.
1255      Because of the symmetry, there are actually two ways to encode
1256      these instructions; opcode bytes 0x29 and 0x2b for `subl' and
1257      opcode bytes 0x31 and 0x33 for `xorl'.  */
1258
1259   /* `subl %eax, %eax' */
1260   { 2, { 0x29, 0xc0 }, { 0xfd, 0xff } },
1261   /* `subl %ecx, %ecx' */
1262   { 2, { 0x29, 0xc9 }, { 0xfd, 0xff } },
1263   /* `subl %edx, %edx' */
1264   { 2, { 0x29, 0xd2 }, { 0xfd, 0xff } },
1265   /* `xorl %eax, %eax' */
1266   { 2, { 0x31, 0xc0 }, { 0xfd, 0xff } },
1267   /* `xorl %ecx, %ecx' */
1268   { 2, { 0x31, 0xc9 }, { 0xfd, 0xff } },
1269   /* `xorl %edx, %edx' */
1270   { 2, { 0x31, 0xd2 }, { 0xfd, 0xff } },
1271   { 0 }
1272 };
1273
1274
1275 /* Check whether PC points to a no-op instruction.  */
1276 static CORE_ADDR
1277 i386_skip_noop (CORE_ADDR pc)
1278 {
1279   gdb_byte op;
1280   int check = 1;
1281
1282   if (target_read_memory (pc, &op, 1))
1283     return pc;
1284
1285   while (check) 
1286     {
1287       check = 0;
1288       /* Ignore `nop' instruction.  */
1289       if (op == 0x90) 
1290         {
1291           pc += 1;
1292           if (target_read_memory (pc, &op, 1))
1293             return pc;
1294           check = 1;
1295         }
1296       /* Ignore no-op instruction `mov %edi, %edi'.
1297          Microsoft system dlls often start with
1298          a `mov %edi,%edi' instruction.
1299          The 5 bytes before the function start are
1300          filled with `nop' instructions.
1301          This pattern can be used for hot-patching:
1302          The `mov %edi, %edi' instruction can be replaced by a
1303          near jump to the location of the 5 `nop' instructions
1304          which can be replaced by a 32-bit jump to anywhere
1305          in the 32-bit address space.  */
1306
1307       else if (op == 0x8b)
1308         {
1309           if (target_read_memory (pc + 1, &op, 1))
1310             return pc;
1311
1312           if (op == 0xff)
1313             {
1314               pc += 2;
1315               if (target_read_memory (pc, &op, 1))
1316                 return pc;
1317
1318               check = 1;
1319             }
1320         }
1321     }
1322   return pc; 
1323 }
1324
1325 /* Check whether PC points at a code that sets up a new stack frame.
1326    If so, it updates CACHE and returns the address of the first
1327    instruction after the sequence that sets up the frame or LIMIT,
1328    whichever is smaller.  If we don't recognize the code, return PC.  */
1329
1330 static CORE_ADDR
1331 i386_analyze_frame_setup (struct gdbarch *gdbarch,
1332                           CORE_ADDR pc, CORE_ADDR limit,
1333                           struct i386_frame_cache *cache)
1334 {
1335   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1336   struct i386_insn *insn;
1337   gdb_byte op;
1338   int skip = 0;
1339
1340   if (limit <= pc)
1341     return limit;
1342
1343   if (target_read_memory (pc, &op, 1))
1344     return pc;
1345
1346   if (op == 0x55)               /* pushl %ebp */
1347     {
1348       /* Take into account that we've executed the `pushl %ebp' that
1349          starts this instruction sequence.  */
1350       cache->saved_regs[I386_EBP_REGNUM] = 0;
1351       cache->sp_offset += 4;
1352       pc++;
1353
1354       /* If that's all, return now.  */
1355       if (limit <= pc)
1356         return limit;
1357
1358       /* Check for some special instructions that might be migrated by
1359          GCC into the prologue and skip them.  At this point in the
1360          prologue, code should only touch the scratch registers %eax,
1361          %ecx and %edx, so while the number of posibilities is sheer,
1362          it is limited.
1363
1364          Make sure we only skip these instructions if we later see the
1365          `movl %esp, %ebp' that actually sets up the frame.  */
1366       while (pc + skip < limit)
1367         {
1368           insn = i386_match_insn (pc + skip, i386_frame_setup_skip_insns);
1369           if (insn == NULL)
1370             break;
1371
1372           skip += insn->len;
1373         }
1374
1375       /* If that's all, return now.  */
1376       if (limit <= pc + skip)
1377         return limit;
1378
1379       if (target_read_memory (pc + skip, &op, 1))
1380         return pc + skip;
1381
1382       /* Check for `movl %esp, %ebp' -- can be written in two ways.  */
1383       switch (op)
1384         {
1385         case 0x8b:
1386           if (read_memory_unsigned_integer (pc + skip + 1, 1, byte_order)
1387               != 0xec)
1388             return pc;
1389           break;
1390         case 0x89:
1391           if (read_memory_unsigned_integer (pc + skip + 1, 1, byte_order)
1392               != 0xe5)
1393             return pc;
1394           break;
1395         default:
1396           return pc;
1397         }
1398
1399       /* OK, we actually have a frame.  We just don't know how large
1400          it is yet.  Set its size to zero.  We'll adjust it if
1401          necessary.  We also now commit to skipping the special
1402          instructions mentioned before.  */
1403       cache->locals = 0;
1404       pc += (skip + 2);
1405
1406       /* If that's all, return now.  */
1407       if (limit <= pc)
1408         return limit;
1409
1410       /* Check for stack adjustment 
1411
1412             subl $XXX, %esp
1413
1414          NOTE: You can't subtract a 16-bit immediate from a 32-bit
1415          reg, so we don't have to worry about a data16 prefix.  */
1416       if (target_read_memory (pc, &op, 1))
1417         return pc;
1418       if (op == 0x83)
1419         {
1420           /* `subl' with 8-bit immediate.  */
1421           if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0xec)
1422             /* Some instruction starting with 0x83 other than `subl'.  */
1423             return pc;
1424
1425           /* `subl' with signed 8-bit immediate (though it wouldn't
1426              make sense to be negative).  */
1427           cache->locals = read_memory_integer (pc + 2, 1, byte_order);
1428           return pc + 3;
1429         }
1430       else if (op == 0x81)
1431         {
1432           /* Maybe it is `subl' with a 32-bit immediate.  */
1433           if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0xec)
1434             /* Some instruction starting with 0x81 other than `subl'.  */
1435             return pc;
1436
1437           /* It is `subl' with a 32-bit immediate.  */
1438           cache->locals = read_memory_integer (pc + 2, 4, byte_order);
1439           return pc + 6;
1440         }
1441       else
1442         {
1443           /* Some instruction other than `subl'.  */
1444           return pc;
1445         }
1446     }
1447   else if (op == 0xc8)          /* enter */
1448     {
1449       cache->locals = read_memory_unsigned_integer (pc + 1, 2, byte_order);
1450       return pc + 4;
1451     }
1452
1453   return pc;
1454 }
1455
1456 /* Check whether PC points at code that saves registers on the stack.
1457    If so, it updates CACHE and returns the address of the first
1458    instruction after the register saves or CURRENT_PC, whichever is
1459    smaller.  Otherwise, return PC.  */
1460
1461 static CORE_ADDR
1462 i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
1463                              struct i386_frame_cache *cache)
1464 {
1465   CORE_ADDR offset = 0;
1466   gdb_byte op;
1467   int i;
1468
1469   if (cache->locals > 0)
1470     offset -= cache->locals;
1471   for (i = 0; i < 8 && pc < current_pc; i++)
1472     {
1473       if (target_read_memory (pc, &op, 1))
1474         return pc;
1475       if (op < 0x50 || op > 0x57)
1476         break;
1477
1478       offset -= 4;
1479       cache->saved_regs[op - 0x50] = offset;
1480       cache->sp_offset += 4;
1481       pc++;
1482     }
1483
1484   return pc;
1485 }
1486
1487 /* Do a full analysis of the prologue at PC and update CACHE
1488    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
1489    address where the analysis stopped.
1490
1491    We handle these cases:
1492
1493    The startup sequence can be at the start of the function, or the
1494    function can start with a branch to startup code at the end.
1495
1496    %ebp can be set up with either the 'enter' instruction, or "pushl
1497    %ebp, movl %esp, %ebp" (`enter' is too slow to be useful, but was
1498    once used in the System V compiler).
1499
1500    Local space is allocated just below the saved %ebp by either the
1501    'enter' instruction, or by "subl $<size>, %esp".  'enter' has a
1502    16-bit unsigned argument for space to allocate, and the 'addl'
1503    instruction could have either a signed byte, or 32-bit immediate.
1504
1505    Next, the registers used by this function are pushed.  With the
1506    System V compiler they will always be in the order: %edi, %esi,
1507    %ebx (and sometimes a harmless bug causes it to also save but not
1508    restore %eax); however, the code below is willing to see the pushes
1509    in any order, and will handle up to 8 of them.
1510  
1511    If the setup sequence is at the end of the function, then the next
1512    instruction will be a branch back to the start.  */
1513
1514 static CORE_ADDR
1515 i386_analyze_prologue (struct gdbarch *gdbarch,
1516                        CORE_ADDR pc, CORE_ADDR current_pc,
1517                        struct i386_frame_cache *cache)
1518 {
1519   pc = i386_skip_noop (pc);
1520   pc = i386_follow_jump (gdbarch, pc);
1521   pc = i386_analyze_struct_return (pc, current_pc, cache);
1522   pc = i386_skip_probe (pc);
1523   pc = i386_analyze_stack_align (pc, current_pc, cache);
1524   pc = i386_analyze_frame_setup (gdbarch, pc, current_pc, cache);
1525   return i386_analyze_register_saves (pc, current_pc, cache);
1526 }
1527
1528 /* Return PC of first real instruction.  */
1529
1530 static CORE_ADDR
1531 i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1532 {
1533   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1534
1535   static gdb_byte pic_pat[6] =
1536   {
1537     0xe8, 0, 0, 0, 0,           /* call 0x0 */
1538     0x5b,                       /* popl %ebx */
1539   };
1540   struct i386_frame_cache cache;
1541   CORE_ADDR pc;
1542   gdb_byte op;
1543   int i;
1544
1545   cache.locals = -1;
1546   pc = i386_analyze_prologue (gdbarch, start_pc, 0xffffffff, &cache);
1547   if (cache.locals < 0)
1548     return start_pc;
1549
1550   /* Found valid frame setup.  */
1551
1552   /* The native cc on SVR4 in -K PIC mode inserts the following code
1553      to get the address of the global offset table (GOT) into register
1554      %ebx:
1555
1556         call    0x0
1557         popl    %ebx
1558         movl    %ebx,x(%ebp)    (optional)
1559         addl    y,%ebx
1560
1561      This code is with the rest of the prologue (at the end of the
1562      function), so we have to skip it to get to the first real
1563      instruction at the start of the function.  */
1564
1565   for (i = 0; i < 6; i++)
1566     {
1567       if (target_read_memory (pc + i, &op, 1))
1568         return pc;
1569
1570       if (pic_pat[i] != op)
1571         break;
1572     }
1573   if (i == 6)
1574     {
1575       int delta = 6;
1576
1577       if (target_read_memory (pc + delta, &op, 1))
1578         return pc;
1579
1580       if (op == 0x89)           /* movl %ebx, x(%ebp) */
1581         {
1582           op = read_memory_unsigned_integer (pc + delta + 1, 1, byte_order);
1583
1584           if (op == 0x5d)       /* One byte offset from %ebp.  */
1585             delta += 3;
1586           else if (op == 0x9d)  /* Four byte offset from %ebp.  */
1587             delta += 6;
1588           else                  /* Unexpected instruction.  */
1589             delta = 0;
1590
1591           if (target_read_memory (pc + delta, &op, 1))
1592             return pc;
1593         }
1594
1595       /* addl y,%ebx */
1596       if (delta > 0 && op == 0x81
1597           && read_memory_unsigned_integer (pc + delta + 1, 1, byte_order)
1598              == 0xc3)
1599         {
1600           pc += delta + 6;
1601         }
1602     }
1603
1604   /* If the function starts with a branch (to startup code at the end)
1605      the last instruction should bring us back to the first
1606      instruction of the real code.  */
1607   if (i386_follow_jump (gdbarch, start_pc) != start_pc)
1608     pc = i386_follow_jump (gdbarch, pc);
1609
1610   return pc;
1611 }
1612
1613 /* Check that the code pointed to by PC corresponds to a call to
1614    __main, skip it if so.  Return PC otherwise.  */
1615
1616 CORE_ADDR
1617 i386_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1618 {
1619   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1620   gdb_byte op;
1621
1622   if (target_read_memory (pc, &op, 1))
1623     return pc;
1624   if (op == 0xe8)
1625     {
1626       gdb_byte buf[4];
1627
1628       if (target_read_memory (pc + 1, buf, sizeof buf) == 0)
1629         {
1630           /* Make sure address is computed correctly as a 32bit
1631              integer even if CORE_ADDR is 64 bit wide.  */
1632           struct minimal_symbol *s;
1633           CORE_ADDR call_dest;
1634
1635           call_dest = pc + 5 + extract_signed_integer (buf, 4, byte_order);
1636           call_dest = call_dest & 0xffffffffU;
1637           s = lookup_minimal_symbol_by_pc (call_dest);
1638           if (s != NULL
1639               && SYMBOL_LINKAGE_NAME (s) != NULL
1640               && strcmp (SYMBOL_LINKAGE_NAME (s), "__main") == 0)
1641             pc += 5;
1642         }
1643     }
1644
1645   return pc;
1646 }
1647
1648 /* This function is 64-bit safe.  */
1649
1650 static CORE_ADDR
1651 i386_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1652 {
1653   gdb_byte buf[8];
1654
1655   frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
1656   return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
1657 }
1658 \f
1659
1660 /* Normal frames.  */
1661
1662 static void
1663 i386_frame_cache_1 (struct frame_info *this_frame,
1664                     struct i386_frame_cache *cache)
1665 {
1666   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1667   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1668   gdb_byte buf[4];
1669   int i;
1670
1671   cache->pc = get_frame_func (this_frame);
1672
1673   /* In principle, for normal frames, %ebp holds the frame pointer,
1674      which holds the base address for the current stack frame.
1675      However, for functions that don't need it, the frame pointer is
1676      optional.  For these "frameless" functions the frame pointer is
1677      actually the frame pointer of the calling frame.  Signal
1678      trampolines are just a special case of a "frameless" function.
1679      They (usually) share their frame pointer with the frame that was
1680      in progress when the signal occurred.  */
1681
1682   get_frame_register (this_frame, I386_EBP_REGNUM, buf);
1683   cache->base = extract_unsigned_integer (buf, 4, byte_order);
1684   if (cache->base == 0)
1685     return;
1686
1687   /* For normal frames, %eip is stored at 4(%ebp).  */
1688   cache->saved_regs[I386_EIP_REGNUM] = 4;
1689
1690   if (cache->pc != 0)
1691     i386_analyze_prologue (gdbarch, cache->pc, get_frame_pc (this_frame),
1692                            cache);
1693
1694   if (cache->locals < 0)
1695     {
1696       /* We didn't find a valid frame, which means that CACHE->base
1697          currently holds the frame pointer for our calling frame.  If
1698          we're at the start of a function, or somewhere half-way its
1699          prologue, the function's frame probably hasn't been fully
1700          setup yet.  Try to reconstruct the base address for the stack
1701          frame by looking at the stack pointer.  For truly "frameless"
1702          functions this might work too.  */
1703
1704       if (cache->saved_sp_reg != -1)
1705         {
1706           /* Saved stack pointer has been saved.  */
1707           get_frame_register (this_frame, cache->saved_sp_reg, buf);
1708           cache->saved_sp = extract_unsigned_integer (buf, 4, byte_order);
1709
1710           /* We're halfway aligning the stack.  */
1711           cache->base = ((cache->saved_sp - 4) & 0xfffffff0) - 4;
1712           cache->saved_regs[I386_EIP_REGNUM] = cache->saved_sp - 4;
1713
1714           /* This will be added back below.  */
1715           cache->saved_regs[I386_EIP_REGNUM] -= cache->base;
1716         }
1717       else if (cache->pc != 0
1718                || target_read_memory (get_frame_pc (this_frame), buf, 1))
1719         {
1720           /* We're in a known function, but did not find a frame
1721              setup.  Assume that the function does not use %ebp.
1722              Alternatively, we may have jumped to an invalid
1723              address; in that case there is definitely no new
1724              frame in %ebp.  */
1725           get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1726           cache->base = extract_unsigned_integer (buf, 4, byte_order)
1727                         + cache->sp_offset;
1728         }
1729       else
1730         /* We're in an unknown function.  We could not find the start
1731            of the function to analyze the prologue; our best option is
1732            to assume a typical frame layout with the caller's %ebp
1733            saved.  */
1734         cache->saved_regs[I386_EBP_REGNUM] = 0;
1735     }
1736
1737   if (cache->saved_sp_reg != -1)
1738     {
1739       /* Saved stack pointer has been saved (but the SAVED_SP_REG
1740          register may be unavailable).  */
1741       if (cache->saved_sp == 0
1742           && frame_register_read (this_frame, cache->saved_sp_reg, buf))
1743         cache->saved_sp = extract_unsigned_integer (buf, 4, byte_order);
1744     }
1745   /* Now that we have the base address for the stack frame we can
1746      calculate the value of %esp in the calling frame.  */
1747   else if (cache->saved_sp == 0)
1748     cache->saved_sp = cache->base + 8;
1749
1750   /* Adjust all the saved registers such that they contain addresses
1751      instead of offsets.  */
1752   for (i = 0; i < I386_NUM_SAVED_REGS; i++)
1753     if (cache->saved_regs[i] != -1)
1754       cache->saved_regs[i] += cache->base;
1755
1756   cache->base_p = 1;
1757 }
1758
1759 static struct i386_frame_cache *
1760 i386_frame_cache (struct frame_info *this_frame, void **this_cache)
1761 {
1762   volatile struct gdb_exception ex;
1763   struct i386_frame_cache *cache;
1764
1765   if (*this_cache)
1766     return *this_cache;
1767
1768   cache = i386_alloc_frame_cache ();
1769   *this_cache = cache;
1770
1771   TRY_CATCH (ex, RETURN_MASK_ERROR)
1772     {
1773       i386_frame_cache_1 (this_frame, cache);
1774     }
1775   if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
1776     throw_exception (ex);
1777
1778   return cache;
1779 }
1780
1781 static void
1782 i386_frame_this_id (struct frame_info *this_frame, void **this_cache,
1783                     struct frame_id *this_id)
1784 {
1785   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1786
1787   /* This marks the outermost frame.  */
1788   if (cache->base == 0)
1789     return;
1790
1791   /* See the end of i386_push_dummy_call.  */
1792   (*this_id) = frame_id_build (cache->base + 8, cache->pc);
1793 }
1794
1795 static enum unwind_stop_reason
1796 i386_frame_unwind_stop_reason (struct frame_info *this_frame,
1797                                void **this_cache)
1798 {
1799   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1800
1801   if (!cache->base_p)
1802     return UNWIND_UNAVAILABLE;
1803
1804   /* This marks the outermost frame.  */
1805   if (cache->base == 0)
1806     return UNWIND_OUTERMOST;
1807
1808   return UNWIND_NO_REASON;
1809 }
1810
1811 static struct value *
1812 i386_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1813                           int regnum)
1814 {
1815   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1816
1817   gdb_assert (regnum >= 0);
1818
1819   /* The System V ABI says that:
1820
1821      "The flags register contains the system flags, such as the
1822      direction flag and the carry flag.  The direction flag must be
1823      set to the forward (that is, zero) direction before entry and
1824      upon exit from a function.  Other user flags have no specified
1825      role in the standard calling sequence and are not preserved."
1826
1827      To guarantee the "upon exit" part of that statement we fake a
1828      saved flags register that has its direction flag cleared.
1829
1830      Note that GCC doesn't seem to rely on the fact that the direction
1831      flag is cleared after a function return; it always explicitly
1832      clears the flag before operations where it matters.
1833
1834      FIXME: kettenis/20030316: I'm not quite sure whether this is the
1835      right thing to do.  The way we fake the flags register here makes
1836      it impossible to change it.  */
1837
1838   if (regnum == I386_EFLAGS_REGNUM)
1839     {
1840       ULONGEST val;
1841
1842       val = get_frame_register_unsigned (this_frame, regnum);
1843       val &= ~(1 << 10);
1844       return frame_unwind_got_constant (this_frame, regnum, val);
1845     }
1846
1847   if (regnum == I386_EIP_REGNUM && cache->pc_in_eax)
1848     return frame_unwind_got_register (this_frame, regnum, I386_EAX_REGNUM);
1849
1850   if (regnum == I386_ESP_REGNUM
1851       && (cache->saved_sp != 0 || cache->saved_sp_reg != -1))
1852     {
1853       /* If the SP has been saved, but we don't know where, then this
1854          means that SAVED_SP_REG register was found unavailable back
1855          when we built the cache.  */
1856       if (cache->saved_sp == 0)
1857         return frame_unwind_got_register (this_frame, regnum,
1858                                           cache->saved_sp_reg);
1859       else
1860         return frame_unwind_got_constant (this_frame, regnum,
1861                                           cache->saved_sp);
1862     }
1863
1864   if (regnum < I386_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
1865     return frame_unwind_got_memory (this_frame, regnum,
1866                                     cache->saved_regs[regnum]);
1867
1868   return frame_unwind_got_register (this_frame, regnum, regnum);
1869 }
1870
1871 static const struct frame_unwind i386_frame_unwind =
1872 {
1873   NORMAL_FRAME,
1874   i386_frame_unwind_stop_reason,
1875   i386_frame_this_id,
1876   i386_frame_prev_register,
1877   NULL,
1878   default_frame_sniffer
1879 };
1880
1881 /* Normal frames, but in a function epilogue.  */
1882
1883 /* The epilogue is defined here as the 'ret' instruction, which will
1884    follow any instruction such as 'leave' or 'pop %ebp' that destroys
1885    the function's stack frame.  */
1886
1887 static int
1888 i386_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1889 {
1890   gdb_byte insn;
1891   struct symtab *symtab;
1892
1893   symtab = find_pc_symtab (pc);
1894   if (symtab && symtab->epilogue_unwind_valid)
1895     return 0;
1896
1897   if (target_read_memory (pc, &insn, 1))
1898     return 0;   /* Can't read memory at pc.  */
1899
1900   if (insn != 0xc3)     /* 'ret' instruction.  */
1901     return 0;
1902
1903   return 1;
1904 }
1905
1906 static int
1907 i386_epilogue_frame_sniffer (const struct frame_unwind *self,
1908                              struct frame_info *this_frame,
1909                              void **this_prologue_cache)
1910 {
1911   if (frame_relative_level (this_frame) == 0)
1912     return i386_in_function_epilogue_p (get_frame_arch (this_frame),
1913                                         get_frame_pc (this_frame));
1914   else
1915     return 0;
1916 }
1917
1918 static struct i386_frame_cache *
1919 i386_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
1920 {
1921   volatile struct gdb_exception ex;
1922   struct i386_frame_cache *cache;
1923   CORE_ADDR sp;
1924
1925   if (*this_cache)
1926     return *this_cache;
1927
1928   cache = i386_alloc_frame_cache ();
1929   *this_cache = cache;
1930
1931   TRY_CATCH (ex, RETURN_MASK_ERROR)
1932     {
1933       cache->pc = get_frame_func (this_frame);
1934
1935       /* At this point the stack looks as if we just entered the
1936          function, with the return address at the top of the
1937          stack.  */
1938       sp = get_frame_register_unsigned (this_frame, I386_ESP_REGNUM);
1939       cache->base = sp + cache->sp_offset;
1940       cache->saved_sp = cache->base + 8;
1941       cache->saved_regs[I386_EIP_REGNUM] = cache->base + 4;
1942
1943       cache->base_p = 1;
1944     }
1945   if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
1946     throw_exception (ex);
1947
1948   return cache;
1949 }
1950
1951 static enum unwind_stop_reason
1952 i386_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
1953                                         void **this_cache)
1954 {
1955   struct i386_frame_cache *cache =
1956     i386_epilogue_frame_cache (this_frame, this_cache);
1957
1958   if (!cache->base_p)
1959     return UNWIND_UNAVAILABLE;
1960
1961   return UNWIND_NO_REASON;
1962 }
1963
1964 static void
1965 i386_epilogue_frame_this_id (struct frame_info *this_frame,
1966                              void **this_cache,
1967                              struct frame_id *this_id)
1968 {
1969   struct i386_frame_cache *cache =
1970     i386_epilogue_frame_cache (this_frame, this_cache);
1971
1972   if (!cache->base_p)
1973     return;
1974
1975   (*this_id) = frame_id_build (cache->base + 8, cache->pc);
1976 }
1977
1978 static struct value *
1979 i386_epilogue_frame_prev_register (struct frame_info *this_frame,
1980                                    void **this_cache, int regnum)
1981 {
1982   /* Make sure we've initialized the cache.  */
1983   i386_epilogue_frame_cache (this_frame, this_cache);
1984
1985   return i386_frame_prev_register (this_frame, this_cache, regnum);
1986 }
1987
1988 static const struct frame_unwind i386_epilogue_frame_unwind =
1989 {
1990   NORMAL_FRAME,
1991   i386_epilogue_frame_unwind_stop_reason,
1992   i386_epilogue_frame_this_id,
1993   i386_epilogue_frame_prev_register,
1994   NULL, 
1995   i386_epilogue_frame_sniffer
1996 };
1997 \f
1998
1999 /* Stack-based trampolines.  */
2000
2001 /* These trampolines are used on cross x86 targets, when taking the
2002    address of a nested function.  When executing these trampolines,
2003    no stack frame is set up, so we are in a similar situation as in
2004    epilogues and i386_epilogue_frame_this_id can be re-used.  */
2005
2006 /* Static chain passed in register.  */
2007
2008 struct i386_insn i386_tramp_chain_in_reg_insns[] =
2009 {
2010   /* `movl imm32, %eax' and `movl imm32, %ecx' */
2011   { 5, { 0xb8 }, { 0xfe } },
2012
2013   /* `jmp imm32' */
2014   { 5, { 0xe9 }, { 0xff } },
2015
2016   {0}
2017 };
2018
2019 /* Static chain passed on stack (when regparm=3).  */
2020
2021 struct i386_insn i386_tramp_chain_on_stack_insns[] =
2022 {
2023   /* `push imm32' */
2024   { 5, { 0x68 }, { 0xff } },
2025
2026   /* `jmp imm32' */
2027   { 5, { 0xe9 }, { 0xff } },
2028
2029   {0}
2030 };
2031
2032 /* Return whether PC points inside a stack trampoline.   */
2033
2034 static int
2035 i386_in_stack_tramp_p (struct gdbarch *gdbarch, CORE_ADDR pc)
2036 {
2037   gdb_byte insn;
2038   char *name;
2039
2040   /* A stack trampoline is detected if no name is associated
2041     to the current pc and if it points inside a trampoline
2042     sequence.  */
2043
2044   find_pc_partial_function (pc, &name, NULL, NULL);
2045   if (name)
2046     return 0;
2047
2048   if (target_read_memory (pc, &insn, 1))
2049     return 0;
2050
2051   if (!i386_match_insn_block (pc, i386_tramp_chain_in_reg_insns)
2052       && !i386_match_insn_block (pc, i386_tramp_chain_on_stack_insns))
2053     return 0;
2054
2055   return 1;
2056 }
2057
2058 static int
2059 i386_stack_tramp_frame_sniffer (const struct frame_unwind *self,
2060                                 struct frame_info *this_frame,
2061                                 void **this_cache)
2062 {
2063   if (frame_relative_level (this_frame) == 0)
2064     return i386_in_stack_tramp_p (get_frame_arch (this_frame),
2065                                   get_frame_pc (this_frame));
2066   else
2067     return 0;
2068 }
2069
2070 static const struct frame_unwind i386_stack_tramp_frame_unwind =
2071 {
2072   NORMAL_FRAME,
2073   i386_epilogue_frame_unwind_stop_reason,
2074   i386_epilogue_frame_this_id,
2075   i386_epilogue_frame_prev_register,
2076   NULL, 
2077   i386_stack_tramp_frame_sniffer
2078 };
2079 \f
2080 /* Generate a bytecode expression to get the value of the saved PC.  */
2081
2082 static void
2083 i386_gen_return_address (struct gdbarch *gdbarch,
2084                          struct agent_expr *ax, struct axs_value *value,
2085                          CORE_ADDR scope)
2086 {
2087   /* The following sequence assumes the traditional use of the base
2088      register.  */
2089   ax_reg (ax, I386_EBP_REGNUM);
2090   ax_const_l (ax, 4);
2091   ax_simple (ax, aop_add);
2092   value->type = register_type (gdbarch, I386_EIP_REGNUM);
2093   value->kind = axs_lvalue_memory;
2094 }
2095 \f
2096
2097 /* Signal trampolines.  */
2098
2099 static struct i386_frame_cache *
2100 i386_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
2101 {
2102   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2103   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2104   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2105   volatile struct gdb_exception ex;
2106   struct i386_frame_cache *cache;
2107   CORE_ADDR addr;
2108   gdb_byte buf[4];
2109
2110   if (*this_cache)
2111     return *this_cache;
2112
2113   cache = i386_alloc_frame_cache ();
2114
2115   TRY_CATCH (ex, RETURN_MASK_ERROR)
2116     {
2117       get_frame_register (this_frame, I386_ESP_REGNUM, buf);
2118       cache->base = extract_unsigned_integer (buf, 4, byte_order) - 4;
2119
2120       addr = tdep->sigcontext_addr (this_frame);
2121       if (tdep->sc_reg_offset)
2122         {
2123           int i;
2124
2125           gdb_assert (tdep->sc_num_regs <= I386_NUM_SAVED_REGS);
2126
2127           for (i = 0; i < tdep->sc_num_regs; i++)
2128             if (tdep->sc_reg_offset[i] != -1)
2129               cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
2130         }
2131       else
2132         {
2133           cache->saved_regs[I386_EIP_REGNUM] = addr + tdep->sc_pc_offset;
2134           cache->saved_regs[I386_ESP_REGNUM] = addr + tdep->sc_sp_offset;
2135         }
2136
2137       cache->base_p = 1;
2138     }
2139   if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
2140     throw_exception (ex);
2141
2142   *this_cache = cache;
2143   return cache;
2144 }
2145
2146 static enum unwind_stop_reason
2147 i386_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
2148                                         void **this_cache)
2149 {
2150   struct i386_frame_cache *cache =
2151     i386_sigtramp_frame_cache (this_frame, this_cache);
2152
2153   if (!cache->base_p)
2154     return UNWIND_UNAVAILABLE;
2155
2156   return UNWIND_NO_REASON;
2157 }
2158
2159 static void
2160 i386_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
2161                              struct frame_id *this_id)
2162 {
2163   struct i386_frame_cache *cache =
2164     i386_sigtramp_frame_cache (this_frame, this_cache);
2165
2166   if (!cache->base_p)
2167     return;
2168
2169   /* See the end of i386_push_dummy_call.  */
2170   (*this_id) = frame_id_build (cache->base + 8, get_frame_pc (this_frame));
2171 }
2172
2173 static struct value *
2174 i386_sigtramp_frame_prev_register (struct frame_info *this_frame,
2175                                    void **this_cache, int regnum)
2176 {
2177   /* Make sure we've initialized the cache.  */
2178   i386_sigtramp_frame_cache (this_frame, this_cache);
2179
2180   return i386_frame_prev_register (this_frame, this_cache, regnum);
2181 }
2182
2183 static int
2184 i386_sigtramp_frame_sniffer (const struct frame_unwind *self,
2185                              struct frame_info *this_frame,
2186                              void **this_prologue_cache)
2187 {
2188   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2189
2190   /* We shouldn't even bother if we don't have a sigcontext_addr
2191      handler.  */
2192   if (tdep->sigcontext_addr == NULL)
2193     return 0;
2194
2195   if (tdep->sigtramp_p != NULL)
2196     {
2197       if (tdep->sigtramp_p (this_frame))
2198         return 1;
2199     }
2200
2201   if (tdep->sigtramp_start != 0)
2202     {
2203       CORE_ADDR pc = get_frame_pc (this_frame);
2204
2205       gdb_assert (tdep->sigtramp_end != 0);
2206       if (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end)
2207         return 1;
2208     }
2209
2210   return 0;
2211 }
2212
2213 static const struct frame_unwind i386_sigtramp_frame_unwind =
2214 {
2215   SIGTRAMP_FRAME,
2216   i386_sigtramp_frame_unwind_stop_reason,
2217   i386_sigtramp_frame_this_id,
2218   i386_sigtramp_frame_prev_register,
2219   NULL,
2220   i386_sigtramp_frame_sniffer
2221 };
2222 \f
2223
2224 static CORE_ADDR
2225 i386_frame_base_address (struct frame_info *this_frame, void **this_cache)
2226 {
2227   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
2228
2229   return cache->base;
2230 }
2231
2232 static const struct frame_base i386_frame_base =
2233 {
2234   &i386_frame_unwind,
2235   i386_frame_base_address,
2236   i386_frame_base_address,
2237   i386_frame_base_address
2238 };
2239
2240 static struct frame_id
2241 i386_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2242 {
2243   CORE_ADDR fp;
2244
2245   fp = get_frame_register_unsigned (this_frame, I386_EBP_REGNUM);
2246
2247   /* See the end of i386_push_dummy_call.  */
2248   return frame_id_build (fp + 8, get_frame_pc (this_frame));
2249 }
2250
2251 /* _Decimal128 function return values need 16-byte alignment on the
2252    stack.  */
2253
2254 static CORE_ADDR
2255 i386_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
2256 {
2257   return sp & -(CORE_ADDR)16;
2258 }
2259 \f
2260
2261 /* Figure out where the longjmp will land.  Slurp the args out of the
2262    stack.  We expect the first arg to be a pointer to the jmp_buf
2263    structure from which we extract the address that we will land at.
2264    This address is copied into PC.  This routine returns non-zero on
2265    success.  */
2266
2267 static int
2268 i386_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
2269 {
2270   gdb_byte buf[4];
2271   CORE_ADDR sp, jb_addr;
2272   struct gdbarch *gdbarch = get_frame_arch (frame);
2273   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2274   int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
2275
2276   /* If JB_PC_OFFSET is -1, we have no way to find out where the
2277      longjmp will land.  */
2278   if (jb_pc_offset == -1)
2279     return 0;
2280
2281   get_frame_register (frame, I386_ESP_REGNUM, buf);
2282   sp = extract_unsigned_integer (buf, 4, byte_order);
2283   if (target_read_memory (sp + 4, buf, 4))
2284     return 0;
2285
2286   jb_addr = extract_unsigned_integer (buf, 4, byte_order);
2287   if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
2288     return 0;
2289
2290   *pc = extract_unsigned_integer (buf, 4, byte_order);
2291   return 1;
2292 }
2293 \f
2294
2295 /* Check whether TYPE must be 16-byte-aligned when passed as a
2296    function argument.  16-byte vectors, _Decimal128 and structures or
2297    unions containing such types must be 16-byte-aligned; other
2298    arguments are 4-byte-aligned.  */
2299
2300 static int
2301 i386_16_byte_align_p (struct type *type)
2302 {
2303   type = check_typedef (type);
2304   if ((TYPE_CODE (type) == TYPE_CODE_DECFLOAT
2305        || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)))
2306       && TYPE_LENGTH (type) == 16)
2307     return 1;
2308   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2309     return i386_16_byte_align_p (TYPE_TARGET_TYPE (type));
2310   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
2311       || TYPE_CODE (type) == TYPE_CODE_UNION)
2312     {
2313       int i;
2314       for (i = 0; i < TYPE_NFIELDS (type); i++)
2315         {
2316           if (i386_16_byte_align_p (TYPE_FIELD_TYPE (type, i)))
2317             return 1;
2318         }
2319     }
2320   return 0;
2321 }
2322
2323 static CORE_ADDR
2324 i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2325                       struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
2326                       struct value **args, CORE_ADDR sp, int struct_return,
2327                       CORE_ADDR struct_addr)
2328 {
2329   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2330   gdb_byte buf[4];
2331   int i;
2332   int write_pass;
2333   int args_space = 0;
2334
2335   /* Determine the total space required for arguments and struct
2336      return address in a first pass (allowing for 16-byte-aligned
2337      arguments), then push arguments in a second pass.  */
2338
2339   for (write_pass = 0; write_pass < 2; write_pass++)
2340     {
2341       int args_space_used = 0;
2342       int have_16_byte_aligned_arg = 0;
2343
2344       if (struct_return)
2345         {
2346           if (write_pass)
2347             {
2348               /* Push value address.  */
2349               store_unsigned_integer (buf, 4, byte_order, struct_addr);
2350               write_memory (sp, buf, 4);
2351               args_space_used += 4;
2352             }
2353           else
2354             args_space += 4;
2355         }
2356
2357       for (i = 0; i < nargs; i++)
2358         {
2359           int len = TYPE_LENGTH (value_enclosing_type (args[i]));
2360
2361           if (write_pass)
2362             {
2363               if (i386_16_byte_align_p (value_enclosing_type (args[i])))
2364                 args_space_used = align_up (args_space_used, 16);
2365
2366               write_memory (sp + args_space_used,
2367                             value_contents_all (args[i]), len);
2368               /* The System V ABI says that:
2369
2370               "An argument's size is increased, if necessary, to make it a
2371               multiple of [32-bit] words.  This may require tail padding,
2372               depending on the size of the argument."
2373
2374               This makes sure the stack stays word-aligned.  */
2375               args_space_used += align_up (len, 4);
2376             }
2377           else
2378             {
2379               if (i386_16_byte_align_p (value_enclosing_type (args[i])))
2380                 {
2381                   args_space = align_up (args_space, 16);
2382                   have_16_byte_aligned_arg = 1;
2383                 }
2384               args_space += align_up (len, 4);
2385             }
2386         }
2387
2388       if (!write_pass)
2389         {
2390           if (have_16_byte_aligned_arg)
2391             args_space = align_up (args_space, 16);
2392           sp -= args_space;
2393         }
2394     }
2395
2396   /* Store return address.  */
2397   sp -= 4;
2398   store_unsigned_integer (buf, 4, byte_order, bp_addr);
2399   write_memory (sp, buf, 4);
2400
2401   /* Finally, update the stack pointer...  */
2402   store_unsigned_integer (buf, 4, byte_order, sp);
2403   regcache_cooked_write (regcache, I386_ESP_REGNUM, buf);
2404
2405   /* ...and fake a frame pointer.  */
2406   regcache_cooked_write (regcache, I386_EBP_REGNUM, buf);
2407
2408   /* MarkK wrote: This "+ 8" is all over the place:
2409      (i386_frame_this_id, i386_sigtramp_frame_this_id,
2410      i386_dummy_id).  It's there, since all frame unwinders for
2411      a given target have to agree (within a certain margin) on the
2412      definition of the stack address of a frame.  Otherwise frame id
2413      comparison might not work correctly.  Since DWARF2/GCC uses the
2414      stack address *before* the function call as a frame's CFA.  On
2415      the i386, when %ebp is used as a frame pointer, the offset
2416      between the contents %ebp and the CFA as defined by GCC.  */
2417   return sp + 8;
2418 }
2419
2420 /* These registers are used for returning integers (and on some
2421    targets also for returning `struct' and `union' values when their
2422    size and alignment match an integer type).  */
2423 #define LOW_RETURN_REGNUM       I386_EAX_REGNUM /* %eax */
2424 #define HIGH_RETURN_REGNUM      I386_EDX_REGNUM /* %edx */
2425
2426 /* Read, for architecture GDBARCH, a function return value of TYPE
2427    from REGCACHE, and copy that into VALBUF.  */
2428
2429 static void
2430 i386_extract_return_value (struct gdbarch *gdbarch, struct type *type,
2431                            struct regcache *regcache, gdb_byte *valbuf)
2432 {
2433   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2434   int len = TYPE_LENGTH (type);
2435   gdb_byte buf[I386_MAX_REGISTER_SIZE];
2436
2437   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2438     {
2439       if (tdep->st0_regnum < 0)
2440         {
2441           warning (_("Cannot find floating-point return value."));
2442           memset (valbuf, 0, len);
2443           return;
2444         }
2445
2446       /* Floating-point return values can be found in %st(0).  Convert
2447          its contents to the desired type.  This is probably not
2448          exactly how it would happen on the target itself, but it is
2449          the best we can do.  */
2450       regcache_raw_read (regcache, I386_ST0_REGNUM, buf);
2451       convert_typed_floating (buf, i387_ext_type (gdbarch), valbuf, type);
2452     }
2453   else
2454     {
2455       int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
2456       int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
2457
2458       if (len <= low_size)
2459         {
2460           regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
2461           memcpy (valbuf, buf, len);
2462         }
2463       else if (len <= (low_size + high_size))
2464         {
2465           regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
2466           memcpy (valbuf, buf, low_size);
2467           regcache_raw_read (regcache, HIGH_RETURN_REGNUM, buf);
2468           memcpy (valbuf + low_size, buf, len - low_size);
2469         }
2470       else
2471         internal_error (__FILE__, __LINE__,
2472                         _("Cannot extract return value of %d bytes long."),
2473                         len);
2474     }
2475 }
2476
2477 /* Write, for architecture GDBARCH, a function return value of TYPE
2478    from VALBUF into REGCACHE.  */
2479
2480 static void
2481 i386_store_return_value (struct gdbarch *gdbarch, struct type *type,
2482                          struct regcache *regcache, const gdb_byte *valbuf)
2483 {
2484   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2485   int len = TYPE_LENGTH (type);
2486
2487   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2488     {
2489       ULONGEST fstat;
2490       gdb_byte buf[I386_MAX_REGISTER_SIZE];
2491
2492       if (tdep->st0_regnum < 0)
2493         {
2494           warning (_("Cannot set floating-point return value."));
2495           return;
2496         }
2497
2498       /* Returning floating-point values is a bit tricky.  Apart from
2499          storing the return value in %st(0), we have to simulate the
2500          state of the FPU at function return point.  */
2501
2502       /* Convert the value found in VALBUF to the extended
2503          floating-point format used by the FPU.  This is probably
2504          not exactly how it would happen on the target itself, but
2505          it is the best we can do.  */
2506       convert_typed_floating (valbuf, type, buf, i387_ext_type (gdbarch));
2507       regcache_raw_write (regcache, I386_ST0_REGNUM, buf);
2508
2509       /* Set the top of the floating-point register stack to 7.  The
2510          actual value doesn't really matter, but 7 is what a normal
2511          function return would end up with if the program started out
2512          with a freshly initialized FPU.  */
2513       regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2514       fstat |= (7 << 11);
2515       regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM (tdep), fstat);
2516
2517       /* Mark %st(1) through %st(7) as empty.  Since we set the top of
2518          the floating-point register stack to 7, the appropriate value
2519          for the tag word is 0x3fff.  */
2520       regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM (tdep), 0x3fff);
2521     }
2522   else
2523     {
2524       int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
2525       int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
2526
2527       if (len <= low_size)
2528         regcache_raw_write_part (regcache, LOW_RETURN_REGNUM, 0, len, valbuf);
2529       else if (len <= (low_size + high_size))
2530         {
2531           regcache_raw_write (regcache, LOW_RETURN_REGNUM, valbuf);
2532           regcache_raw_write_part (regcache, HIGH_RETURN_REGNUM, 0,
2533                                    len - low_size, valbuf + low_size);
2534         }
2535       else
2536         internal_error (__FILE__, __LINE__,
2537                         _("Cannot store return value of %d bytes long."), len);
2538     }
2539 }
2540 \f
2541
2542 /* This is the variable that is set with "set struct-convention", and
2543    its legitimate values.  */
2544 static const char default_struct_convention[] = "default";
2545 static const char pcc_struct_convention[] = "pcc";
2546 static const char reg_struct_convention[] = "reg";
2547 static const char *valid_conventions[] =
2548 {
2549   default_struct_convention,
2550   pcc_struct_convention,
2551   reg_struct_convention,
2552   NULL
2553 };
2554 static const char *struct_convention = default_struct_convention;
2555
2556 /* Return non-zero if TYPE, which is assumed to be a structure,
2557    a union type, or an array type, should be returned in registers
2558    for architecture GDBARCH.  */
2559
2560 static int
2561 i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
2562 {
2563   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2564   enum type_code code = TYPE_CODE (type);
2565   int len = TYPE_LENGTH (type);
2566
2567   gdb_assert (code == TYPE_CODE_STRUCT
2568               || code == TYPE_CODE_UNION
2569               || code == TYPE_CODE_ARRAY);
2570
2571   if (struct_convention == pcc_struct_convention
2572       || (struct_convention == default_struct_convention
2573           && tdep->struct_return == pcc_struct_return))
2574     return 0;
2575
2576   /* Structures consisting of a single `float', `double' or 'long
2577      double' member are returned in %st(0).  */
2578   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2579     {
2580       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2581       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2582         return (len == 4 || len == 8 || len == 12);
2583     }
2584
2585   return (len == 1 || len == 2 || len == 4 || len == 8);
2586 }
2587
2588 /* Determine, for architecture GDBARCH, how a return value of TYPE
2589    should be returned.  If it is supposed to be returned in registers,
2590    and READBUF is non-zero, read the appropriate value from REGCACHE,
2591    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
2592    from WRITEBUF into REGCACHE.  */
2593
2594 static enum return_value_convention
2595 i386_return_value (struct gdbarch *gdbarch, struct type *func_type,
2596                    struct type *type, struct regcache *regcache,
2597                    gdb_byte *readbuf, const gdb_byte *writebuf)
2598 {
2599   enum type_code code = TYPE_CODE (type);
2600
2601   if (((code == TYPE_CODE_STRUCT
2602         || code == TYPE_CODE_UNION
2603         || code == TYPE_CODE_ARRAY)
2604        && !i386_reg_struct_return_p (gdbarch, type))
2605       /* 128-bit decimal float uses the struct return convention.  */
2606       || (code == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 16))
2607     {
2608       /* The System V ABI says that:
2609
2610          "A function that returns a structure or union also sets %eax
2611          to the value of the original address of the caller's area
2612          before it returns.  Thus when the caller receives control
2613          again, the address of the returned object resides in register
2614          %eax and can be used to access the object."
2615
2616          So the ABI guarantees that we can always find the return
2617          value just after the function has returned.  */
2618
2619       /* Note that the ABI doesn't mention functions returning arrays,
2620          which is something possible in certain languages such as Ada.
2621          In this case, the value is returned as if it was wrapped in
2622          a record, so the convention applied to records also applies
2623          to arrays.  */
2624
2625       if (readbuf)
2626         {
2627           ULONGEST addr;
2628
2629           regcache_raw_read_unsigned (regcache, I386_EAX_REGNUM, &addr);
2630           read_memory (addr, readbuf, TYPE_LENGTH (type));
2631         }
2632
2633       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
2634     }
2635
2636   /* This special case is for structures consisting of a single
2637      `float', `double' or 'long double' member.  These structures are
2638      returned in %st(0).  For these structures, we call ourselves
2639      recursively, changing TYPE into the type of the first member of
2640      the structure.  Since that should work for all structures that
2641      have only one member, we don't bother to check the member's type
2642      here.  */
2643   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2644     {
2645       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2646       return i386_return_value (gdbarch, func_type, type, regcache,
2647                                 readbuf, writebuf);
2648     }
2649
2650   if (readbuf)
2651     i386_extract_return_value (gdbarch, type, regcache, readbuf);
2652   if (writebuf)
2653     i386_store_return_value (gdbarch, type, regcache, writebuf);
2654
2655   return RETURN_VALUE_REGISTER_CONVENTION;
2656 }
2657 \f
2658
2659 struct type *
2660 i387_ext_type (struct gdbarch *gdbarch)
2661 {
2662   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2663
2664   if (!tdep->i387_ext_type)
2665     {
2666       tdep->i387_ext_type = tdesc_find_type (gdbarch, "i387_ext");
2667       gdb_assert (tdep->i387_ext_type != NULL);
2668     }
2669
2670   return tdep->i387_ext_type;
2671 }
2672
2673 /* Construct vector type for pseudo YMM registers.  We can't use
2674    tdesc_find_type since YMM isn't described in target description.  */
2675
2676 static struct type *
2677 i386_ymm_type (struct gdbarch *gdbarch)
2678 {
2679   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2680
2681   if (!tdep->i386_ymm_type)
2682     {
2683       const struct builtin_type *bt = builtin_type (gdbarch);
2684
2685       /* The type we're building is this: */
2686 #if 0
2687       union __gdb_builtin_type_vec256i
2688       {
2689         int128_t uint128[2];
2690         int64_t v2_int64[4];
2691         int32_t v4_int32[8];
2692         int16_t v8_int16[16];
2693         int8_t v16_int8[32];
2694         double v2_double[4];
2695         float v4_float[8];
2696       };
2697 #endif
2698
2699       struct type *t;
2700
2701       t = arch_composite_type (gdbarch,
2702                                "__gdb_builtin_type_vec256i", TYPE_CODE_UNION);
2703       append_composite_type_field (t, "v8_float",
2704                                    init_vector_type (bt->builtin_float, 8));
2705       append_composite_type_field (t, "v4_double",
2706                                    init_vector_type (bt->builtin_double, 4));
2707       append_composite_type_field (t, "v32_int8",
2708                                    init_vector_type (bt->builtin_int8, 32));
2709       append_composite_type_field (t, "v16_int16",
2710                                    init_vector_type (bt->builtin_int16, 16));
2711       append_composite_type_field (t, "v8_int32",
2712                                    init_vector_type (bt->builtin_int32, 8));
2713       append_composite_type_field (t, "v4_int64",
2714                                    init_vector_type (bt->builtin_int64, 4));
2715       append_composite_type_field (t, "v2_int128",
2716                                    init_vector_type (bt->builtin_int128, 2));
2717
2718       TYPE_VECTOR (t) = 1;
2719       TYPE_NAME (t) = "builtin_type_vec256i";
2720       tdep->i386_ymm_type = t;
2721     }
2722
2723   return tdep->i386_ymm_type;
2724 }
2725
2726 /* Construct vector type for MMX registers.  */
2727 static struct type *
2728 i386_mmx_type (struct gdbarch *gdbarch)
2729 {
2730   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2731
2732   if (!tdep->i386_mmx_type)
2733     {
2734       const struct builtin_type *bt = builtin_type (gdbarch);
2735
2736       /* The type we're building is this: */
2737 #if 0
2738       union __gdb_builtin_type_vec64i
2739       {
2740         int64_t uint64;
2741         int32_t v2_int32[2];
2742         int16_t v4_int16[4];
2743         int8_t v8_int8[8];
2744       };
2745 #endif
2746
2747       struct type *t;
2748
2749       t = arch_composite_type (gdbarch,
2750                                "__gdb_builtin_type_vec64i", TYPE_CODE_UNION);
2751
2752       append_composite_type_field (t, "uint64", bt->builtin_int64);
2753       append_composite_type_field (t, "v2_int32",
2754                                    init_vector_type (bt->builtin_int32, 2));
2755       append_composite_type_field (t, "v4_int16",
2756                                    init_vector_type (bt->builtin_int16, 4));
2757       append_composite_type_field (t, "v8_int8",
2758                                    init_vector_type (bt->builtin_int8, 8));
2759
2760       TYPE_VECTOR (t) = 1;
2761       TYPE_NAME (t) = "builtin_type_vec64i";
2762       tdep->i386_mmx_type = t;
2763     }
2764
2765   return tdep->i386_mmx_type;
2766 }
2767
2768 /* Return the GDB type object for the "standard" data type of data in
2769    register REGNUM.  */
2770
2771 static struct type *
2772 i386_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2773 {
2774   if (i386_mmx_regnum_p (gdbarch, regnum))
2775     return i386_mmx_type (gdbarch);
2776   else if (i386_ymm_regnum_p (gdbarch, regnum))
2777     return i386_ymm_type (gdbarch);
2778   else
2779     {
2780       const struct builtin_type *bt = builtin_type (gdbarch);
2781       if (i386_byte_regnum_p (gdbarch, regnum))
2782         return bt->builtin_int8;
2783       else if (i386_word_regnum_p (gdbarch, regnum))
2784         return bt->builtin_int16;
2785       else if (i386_dword_regnum_p (gdbarch, regnum))
2786         return bt->builtin_int32;
2787     }
2788
2789   internal_error (__FILE__, __LINE__, _("invalid regnum"));
2790 }
2791
2792 /* Map a cooked register onto a raw register or memory.  For the i386,
2793    the MMX registers need to be mapped onto floating point registers.  */
2794
2795 static int
2796 i386_mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
2797 {
2798   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
2799   int mmxreg, fpreg;
2800   ULONGEST fstat;
2801   int tos;
2802
2803   mmxreg = regnum - tdep->mm0_regnum;
2804   regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2805   tos = (fstat >> 11) & 0x7;
2806   fpreg = (mmxreg + tos) % 8;
2807
2808   return (I387_ST0_REGNUM (tdep) + fpreg);
2809 }
2810
2811 /* A helper function for us by i386_pseudo_register_read_value and
2812    amd64_pseudo_register_read_value.  It does all the work but reads
2813    the data into an already-allocated value.  */
2814
2815 void
2816 i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
2817                                       struct regcache *regcache,
2818                                       int regnum,
2819                                       struct value *result_value)
2820 {
2821   gdb_byte raw_buf[MAX_REGISTER_SIZE];
2822   enum register_status status;
2823   gdb_byte *buf = value_contents_raw (result_value);
2824
2825   if (i386_mmx_regnum_p (gdbarch, regnum))
2826     {
2827       int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2828
2829       /* Extract (always little endian).  */
2830       status = regcache_raw_read (regcache, fpnum, raw_buf);
2831       if (status != REG_VALID)
2832         mark_value_bytes_unavailable (result_value, 0,
2833                                       TYPE_LENGTH (value_type (result_value)));
2834       else
2835         memcpy (buf, raw_buf, register_size (gdbarch, regnum));
2836     }
2837   else
2838     {
2839       struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2840
2841       if (i386_ymm_regnum_p (gdbarch, regnum))
2842         {
2843           regnum -= tdep->ymm0_regnum;
2844
2845           /* Extract (always little endian).  Read lower 128bits.  */
2846           status = regcache_raw_read (regcache,
2847                                       I387_XMM0_REGNUM (tdep) + regnum,
2848                                       raw_buf);
2849           if (status != REG_VALID)
2850             mark_value_bytes_unavailable (result_value, 0, 16);
2851           else
2852             memcpy (buf, raw_buf, 16);
2853           /* Read upper 128bits.  */
2854           status = regcache_raw_read (regcache,
2855                                       tdep->ymm0h_regnum + regnum,
2856                                       raw_buf);
2857           if (status != REG_VALID)
2858             mark_value_bytes_unavailable (result_value, 16, 32);
2859           else
2860             memcpy (buf + 16, raw_buf, 16);
2861         }
2862       else if (i386_word_regnum_p (gdbarch, regnum))
2863         {
2864           int gpnum = regnum - tdep->ax_regnum;
2865
2866           /* Extract (always little endian).  */
2867           status = regcache_raw_read (regcache, gpnum, raw_buf);
2868           if (status != REG_VALID)
2869             mark_value_bytes_unavailable (result_value, 0,
2870                                           TYPE_LENGTH (value_type (result_value)));
2871           else
2872             memcpy (buf, raw_buf, 2);
2873         }
2874       else if (i386_byte_regnum_p (gdbarch, regnum))
2875         {
2876           /* Check byte pseudo registers last since this function will
2877              be called from amd64_pseudo_register_read, which handles
2878              byte pseudo registers differently.  */
2879           int gpnum = regnum - tdep->al_regnum;
2880
2881           /* Extract (always little endian).  We read both lower and
2882              upper registers.  */
2883           status = regcache_raw_read (regcache, gpnum % 4, raw_buf);
2884           if (status != REG_VALID)
2885             mark_value_bytes_unavailable (result_value, 0,
2886                                           TYPE_LENGTH (value_type (result_value)));
2887           else if (gpnum >= 4)
2888             memcpy (buf, raw_buf + 1, 1);
2889           else
2890             memcpy (buf, raw_buf, 1);
2891         }
2892       else
2893         internal_error (__FILE__, __LINE__, _("invalid regnum"));
2894     }
2895 }
2896
2897 static struct value *
2898 i386_pseudo_register_read_value (struct gdbarch *gdbarch,
2899                                  struct regcache *regcache,
2900                                  int regnum)
2901 {
2902   struct value *result;
2903
2904   result = allocate_value (register_type (gdbarch, regnum));
2905   VALUE_LVAL (result) = lval_register;
2906   VALUE_REGNUM (result) = regnum;
2907
2908   i386_pseudo_register_read_into_value (gdbarch, regcache, regnum, result);
2909
2910   return result;
2911 }
2912
2913 void
2914 i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2915                             int regnum, const gdb_byte *buf)
2916 {
2917   gdb_byte raw_buf[MAX_REGISTER_SIZE];
2918
2919   if (i386_mmx_regnum_p (gdbarch, regnum))
2920     {
2921       int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2922
2923       /* Read ...  */
2924       regcache_raw_read (regcache, fpnum, raw_buf);
2925       /* ... Modify ... (always little endian).  */
2926       memcpy (raw_buf, buf, register_size (gdbarch, regnum));
2927       /* ... Write.  */
2928       regcache_raw_write (regcache, fpnum, raw_buf);
2929     }
2930   else
2931     {
2932       struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2933
2934       if (i386_ymm_regnum_p (gdbarch, regnum))
2935         {
2936           regnum -= tdep->ymm0_regnum;
2937
2938           /* ... Write lower 128bits.  */
2939           regcache_raw_write (regcache,
2940                              I387_XMM0_REGNUM (tdep) + regnum,
2941                              buf);
2942           /* ... Write upper 128bits.  */
2943           regcache_raw_write (regcache,
2944                              tdep->ymm0h_regnum + regnum,
2945                              buf + 16);
2946         }
2947       else if (i386_word_regnum_p (gdbarch, regnum))
2948         {
2949           int gpnum = regnum - tdep->ax_regnum;
2950
2951           /* Read ...  */
2952           regcache_raw_read (regcache, gpnum, raw_buf);
2953           /* ... Modify ... (always little endian).  */
2954           memcpy (raw_buf, buf, 2);
2955           /* ... Write.  */
2956           regcache_raw_write (regcache, gpnum, raw_buf);
2957         }
2958       else if (i386_byte_regnum_p (gdbarch, regnum))
2959         {
2960           /* Check byte pseudo registers last since this function will
2961              be called from amd64_pseudo_register_read, which handles
2962              byte pseudo registers differently.  */
2963           int gpnum = regnum - tdep->al_regnum;
2964
2965           /* Read ...  We read both lower and upper registers.  */
2966           regcache_raw_read (regcache, gpnum % 4, raw_buf);
2967           /* ... Modify ... (always little endian).  */
2968           if (gpnum >= 4)
2969             memcpy (raw_buf + 1, buf, 1);
2970           else
2971             memcpy (raw_buf, buf, 1);
2972           /* ... Write.  */
2973           regcache_raw_write (regcache, gpnum % 4, raw_buf);
2974         }
2975       else
2976         internal_error (__FILE__, __LINE__, _("invalid regnum"));
2977     }
2978 }
2979 \f
2980
2981 /* Return the register number of the register allocated by GCC after
2982    REGNUM, or -1 if there is no such register.  */
2983
2984 static int
2985 i386_next_regnum (int regnum)
2986 {
2987   /* GCC allocates the registers in the order:
2988
2989      %eax, %edx, %ecx, %ebx, %esi, %edi, %ebp, %esp, ...
2990
2991      Since storing a variable in %esp doesn't make any sense we return
2992      -1 for %ebp and for %esp itself.  */
2993   static int next_regnum[] =
2994   {
2995     I386_EDX_REGNUM,            /* Slot for %eax.  */
2996     I386_EBX_REGNUM,            /* Slot for %ecx.  */
2997     I386_ECX_REGNUM,            /* Slot for %edx.  */
2998     I386_ESI_REGNUM,            /* Slot for %ebx.  */
2999     -1, -1,                     /* Slots for %esp and %ebp.  */
3000     I386_EDI_REGNUM,            /* Slot for %esi.  */
3001     I386_EBP_REGNUM             /* Slot for %edi.  */
3002   };
3003
3004   if (regnum >= 0 && regnum < sizeof (next_regnum) / sizeof (next_regnum[0]))
3005     return next_regnum[regnum];
3006
3007   return -1;
3008 }
3009
3010 /* Return nonzero if a value of type TYPE stored in register REGNUM
3011    needs any special handling.  */
3012
3013 static int
3014 i386_convert_register_p (struct gdbarch *gdbarch,
3015                          int regnum, struct type *type)
3016 {
3017   int len = TYPE_LENGTH (type);
3018
3019   /* Values may be spread across multiple registers.  Most debugging
3020      formats aren't expressive enough to specify the locations, so
3021      some heuristics is involved.  Right now we only handle types that
3022      have a length that is a multiple of the word size, since GCC
3023      doesn't seem to put any other types into registers.  */
3024   if (len > 4 && len % 4 == 0)
3025     {
3026       int last_regnum = regnum;
3027
3028       while (len > 4)
3029         {
3030           last_regnum = i386_next_regnum (last_regnum);
3031           len -= 4;
3032         }
3033
3034       if (last_regnum != -1)
3035         return 1;
3036     }
3037
3038   return i387_convert_register_p (gdbarch, regnum, type);
3039 }
3040
3041 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
3042    return its contents in TO.  */
3043
3044 static int
3045 i386_register_to_value (struct frame_info *frame, int regnum,
3046                         struct type *type, gdb_byte *to,
3047                         int *optimizedp, int *unavailablep)
3048 {
3049   struct gdbarch *gdbarch = get_frame_arch (frame);
3050   int len = TYPE_LENGTH (type);
3051
3052   if (i386_fp_regnum_p (gdbarch, regnum))
3053     return i387_register_to_value (frame, regnum, type, to,
3054                                    optimizedp, unavailablep);
3055
3056   /* Read a value spread across multiple registers.  */
3057
3058   gdb_assert (len > 4 && len % 4 == 0);
3059
3060   while (len > 0)
3061     {
3062       gdb_assert (regnum != -1);
3063       gdb_assert (register_size (gdbarch, regnum) == 4);
3064
3065       if (!get_frame_register_bytes (frame, regnum, 0,
3066                                      register_size (gdbarch, regnum),
3067                                      to, optimizedp, unavailablep))
3068         return 0;
3069
3070       regnum = i386_next_regnum (regnum);
3071       len -= 4;
3072       to += 4;
3073     }
3074
3075   *optimizedp = *unavailablep = 0;
3076   return 1;
3077 }
3078
3079 /* Write the contents FROM of a value of type TYPE into register
3080    REGNUM in frame FRAME.  */
3081
3082 static void
3083 i386_value_to_register (struct frame_info *frame, int regnum,
3084                         struct type *type, const gdb_byte *from)
3085 {
3086   int len = TYPE_LENGTH (type);
3087
3088   if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
3089     {
3090       i387_value_to_register (frame, regnum, type, from);
3091       return;
3092     }
3093
3094   /* Write a value spread across multiple registers.  */
3095
3096   gdb_assert (len > 4 && len % 4 == 0);
3097
3098   while (len > 0)
3099     {
3100       gdb_assert (regnum != -1);
3101       gdb_assert (register_size (get_frame_arch (frame), regnum) == 4);
3102
3103       put_frame_register (frame, regnum, from);
3104       regnum = i386_next_regnum (regnum);
3105       len -= 4;
3106       from += 4;
3107     }
3108 }
3109 \f
3110 /* Supply register REGNUM from the buffer specified by GREGS and LEN
3111    in the general-purpose register set REGSET to register cache
3112    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
3113
3114 void
3115 i386_supply_gregset (const struct regset *regset, struct regcache *regcache,
3116                      int regnum, const void *gregs, size_t len)
3117 {
3118   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3119   const gdb_byte *regs = gregs;
3120   int i;
3121
3122   gdb_assert (len == tdep->sizeof_gregset);
3123
3124   for (i = 0; i < tdep->gregset_num_regs; i++)
3125     {
3126       if ((regnum == i || regnum == -1)
3127           && tdep->gregset_reg_offset[i] != -1)
3128         regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
3129     }
3130 }
3131
3132 /* Collect register REGNUM from the register cache REGCACHE and store
3133    it in the buffer specified by GREGS and LEN as described by the
3134    general-purpose register set REGSET.  If REGNUM is -1, do this for
3135    all registers in REGSET.  */
3136
3137 void
3138 i386_collect_gregset (const struct regset *regset,
3139                       const struct regcache *regcache,
3140                       int regnum, void *gregs, size_t len)
3141 {
3142   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3143   gdb_byte *regs = gregs;
3144   int i;
3145
3146   gdb_assert (len == tdep->sizeof_gregset);
3147
3148   for (i = 0; i < tdep->gregset_num_regs; i++)
3149     {
3150       if ((regnum == i || regnum == -1)
3151           && tdep->gregset_reg_offset[i] != -1)
3152         regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]);
3153     }
3154 }
3155
3156 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
3157    in the floating-point register set REGSET to register cache
3158    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
3159
3160 static void
3161 i386_supply_fpregset (const struct regset *regset, struct regcache *regcache,
3162                       int regnum, const void *fpregs, size_t len)
3163 {
3164   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3165
3166   if (len == I387_SIZEOF_FXSAVE)
3167     {
3168       i387_supply_fxsave (regcache, regnum, fpregs);
3169       return;
3170     }
3171
3172   gdb_assert (len == tdep->sizeof_fpregset);
3173   i387_supply_fsave (regcache, regnum, fpregs);
3174 }
3175
3176 /* Collect register REGNUM from the register cache REGCACHE and store
3177    it in the buffer specified by FPREGS and LEN as described by the
3178    floating-point register set REGSET.  If REGNUM is -1, do this for
3179    all registers in REGSET.  */
3180
3181 static void
3182 i386_collect_fpregset (const struct regset *regset,
3183                        const struct regcache *regcache,
3184                        int regnum, void *fpregs, size_t len)
3185 {
3186   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3187
3188   if (len == I387_SIZEOF_FXSAVE)
3189     {
3190       i387_collect_fxsave (regcache, regnum, fpregs);
3191       return;
3192     }
3193
3194   gdb_assert (len == tdep->sizeof_fpregset);
3195   i387_collect_fsave (regcache, regnum, fpregs);
3196 }
3197
3198 /* Similar to i386_supply_fpregset, but use XSAVE extended state.  */
3199
3200 static void
3201 i386_supply_xstateregset (const struct regset *regset,
3202                           struct regcache *regcache, int regnum,
3203                           const void *xstateregs, size_t len)
3204 {
3205   i387_supply_xsave (regcache, regnum, xstateregs);
3206 }
3207
3208 /* Similar to i386_collect_fpregset , but use XSAVE extended state.  */
3209
3210 static void
3211 i386_collect_xstateregset (const struct regset *regset,
3212                            const struct regcache *regcache,
3213                            int regnum, void *xstateregs, size_t len)
3214 {
3215   i387_collect_xsave (regcache, regnum, xstateregs, 1);
3216 }
3217
3218 /* Return the appropriate register set for the core section identified
3219    by SECT_NAME and SECT_SIZE.  */
3220
3221 const struct regset *
3222 i386_regset_from_core_section (struct gdbarch *gdbarch,
3223                                const char *sect_name, size_t sect_size)
3224 {
3225   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3226
3227   if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
3228     {
3229       if (tdep->gregset == NULL)
3230         tdep->gregset = regset_alloc (gdbarch, i386_supply_gregset,
3231                                       i386_collect_gregset);
3232       return tdep->gregset;
3233     }
3234
3235   if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
3236       || (strcmp (sect_name, ".reg-xfp") == 0
3237           && sect_size == I387_SIZEOF_FXSAVE))
3238     {
3239       if (tdep->fpregset == NULL)
3240         tdep->fpregset = regset_alloc (gdbarch, i386_supply_fpregset,
3241                                        i386_collect_fpregset);
3242       return tdep->fpregset;
3243     }
3244
3245   if (strcmp (sect_name, ".reg-xstate") == 0)
3246     {
3247       if (tdep->xstateregset == NULL)
3248         tdep->xstateregset = regset_alloc (gdbarch,
3249                                            i386_supply_xstateregset,
3250                                            i386_collect_xstateregset);
3251
3252       return tdep->xstateregset;
3253     }
3254
3255   return NULL;
3256 }
3257 \f
3258
3259 /* Stuff for WIN32 PE style DLL's but is pretty generic really.  */
3260
3261 CORE_ADDR
3262 i386_pe_skip_trampoline_code (struct frame_info *frame,
3263                               CORE_ADDR pc, char *name)
3264 {
3265   struct gdbarch *gdbarch = get_frame_arch (frame);
3266   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3267
3268   /* jmp *(dest) */
3269   if (pc && read_memory_unsigned_integer (pc, 2, byte_order) == 0x25ff)
3270     {
3271       unsigned long indirect =
3272         read_memory_unsigned_integer (pc + 2, 4, byte_order);
3273       struct minimal_symbol *indsym =
3274         indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
3275       char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
3276
3277       if (symname)
3278         {
3279           if (strncmp (symname, "__imp_", 6) == 0
3280               || strncmp (symname, "_imp_", 5) == 0)
3281             return name ? 1 :
3282                    read_memory_unsigned_integer (indirect, 4, byte_order);
3283         }
3284     }
3285   return 0;                     /* Not a trampoline.  */
3286 }
3287 \f
3288
3289 /* Return whether the THIS_FRAME corresponds to a sigtramp
3290    routine.  */
3291
3292 int
3293 i386_sigtramp_p (struct frame_info *this_frame)
3294 {
3295   CORE_ADDR pc = get_frame_pc (this_frame);
3296   char *name;
3297
3298   find_pc_partial_function (pc, &name, NULL, NULL);
3299   return (name && strcmp ("_sigtramp", name) == 0);
3300 }
3301 \f
3302
3303 /* We have two flavours of disassembly.  The machinery on this page
3304    deals with switching between those.  */
3305
3306 static int
3307 i386_print_insn (bfd_vma pc, struct disassemble_info *info)
3308 {
3309   gdb_assert (disassembly_flavor == att_flavor
3310               || disassembly_flavor == intel_flavor);
3311
3312   /* FIXME: kettenis/20020915: Until disassembler_options is properly
3313      constified, cast to prevent a compiler warning.  */
3314   info->disassembler_options = (char *) disassembly_flavor;
3315
3316   return print_insn_i386 (pc, info);
3317 }
3318 \f
3319
3320 /* There are a few i386 architecture variants that differ only
3321    slightly from the generic i386 target.  For now, we don't give them
3322    their own source file, but include them here.  As a consequence,
3323    they'll always be included.  */
3324
3325 /* System V Release 4 (SVR4).  */
3326
3327 /* Return whether THIS_FRAME corresponds to a SVR4 sigtramp
3328    routine.  */
3329
3330 static int
3331 i386_svr4_sigtramp_p (struct frame_info *this_frame)
3332 {
3333   CORE_ADDR pc = get_frame_pc (this_frame);
3334   char *name;
3335
3336   /* UnixWare uses _sigacthandler.  The origin of the other symbols is
3337      currently unknown.  */
3338   find_pc_partial_function (pc, &name, NULL, NULL);
3339   return (name && (strcmp ("_sigreturn", name) == 0
3340                    || strcmp ("_sigacthandler", name) == 0
3341                    || strcmp ("sigvechandler", name) == 0));
3342 }
3343
3344 /* Assuming THIS_FRAME is for a SVR4 sigtramp routine, return the
3345    address of the associated sigcontext (ucontext) structure.  */
3346
3347 static CORE_ADDR
3348 i386_svr4_sigcontext_addr (struct frame_info *this_frame)
3349 {
3350   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3351   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3352   gdb_byte buf[4];
3353   CORE_ADDR sp;
3354
3355   get_frame_register (this_frame, I386_ESP_REGNUM, buf);
3356   sp = extract_unsigned_integer (buf, 4, byte_order);
3357
3358   return read_memory_unsigned_integer (sp + 8, 4, byte_order);
3359 }
3360 \f
3361
3362 /* Generic ELF.  */
3363
3364 void
3365 i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3366 {
3367   /* We typically use stabs-in-ELF with the SVR4 register numbering.  */
3368   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3369 }
3370
3371 /* System V Release 4 (SVR4).  */
3372
3373 void
3374 i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3375 {
3376   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3377
3378   /* System V Release 4 uses ELF.  */
3379   i386_elf_init_abi (info, gdbarch);
3380
3381   /* System V Release 4 has shared libraries.  */
3382   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
3383
3384   tdep->sigtramp_p = i386_svr4_sigtramp_p;
3385   tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
3386   tdep->sc_pc_offset = 36 + 14 * 4;
3387   tdep->sc_sp_offset = 36 + 17 * 4;
3388
3389   tdep->jb_pc_offset = 20;
3390 }
3391
3392 /* DJGPP.  */
3393
3394 static void
3395 i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3396 {
3397   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3398
3399   /* DJGPP doesn't have any special frames for signal handlers.  */
3400   tdep->sigtramp_p = NULL;
3401
3402   tdep->jb_pc_offset = 36;
3403
3404   /* DJGPP does not support the SSE registers.  */
3405   if (! tdesc_has_registers (info.target_desc))
3406     tdep->tdesc = tdesc_i386_mmx;
3407
3408   /* Native compiler is GCC, which uses the SVR4 register numbering
3409      even in COFF and STABS.  See the comment in i386_gdbarch_init,
3410      before the calls to set_gdbarch_stab_reg_to_regnum and
3411      set_gdbarch_sdb_reg_to_regnum.  */
3412   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3413   set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3414
3415   set_gdbarch_has_dos_based_file_system (gdbarch, 1);
3416 }
3417 \f
3418
3419 /* i386 register groups.  In addition to the normal groups, add "mmx"
3420    and "sse".  */
3421
3422 static struct reggroup *i386_sse_reggroup;
3423 static struct reggroup *i386_mmx_reggroup;
3424
3425 static void
3426 i386_init_reggroups (void)
3427 {
3428   i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
3429   i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
3430 }
3431
3432 static void
3433 i386_add_reggroups (struct gdbarch *gdbarch)
3434 {
3435   reggroup_add (gdbarch, i386_sse_reggroup);
3436   reggroup_add (gdbarch, i386_mmx_reggroup);
3437   reggroup_add (gdbarch, general_reggroup);
3438   reggroup_add (gdbarch, float_reggroup);
3439   reggroup_add (gdbarch, all_reggroup);
3440   reggroup_add (gdbarch, save_reggroup);
3441   reggroup_add (gdbarch, restore_reggroup);
3442   reggroup_add (gdbarch, vector_reggroup);
3443   reggroup_add (gdbarch, system_reggroup);
3444 }
3445
3446 int
3447 i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
3448                           struct reggroup *group)
3449 {
3450   const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3451   int fp_regnum_p, mmx_regnum_p, xmm_regnum_p, mxcsr_regnum_p,
3452       ymm_regnum_p, ymmh_regnum_p;
3453
3454   /* Don't include pseudo registers, except for MMX, in any register
3455      groups.  */
3456   if (i386_byte_regnum_p (gdbarch, regnum))
3457     return 0;
3458
3459   if (i386_word_regnum_p (gdbarch, regnum))
3460     return 0;
3461
3462   if (i386_dword_regnum_p (gdbarch, regnum))
3463     return 0;
3464
3465   mmx_regnum_p = i386_mmx_regnum_p (gdbarch, regnum);
3466   if (group == i386_mmx_reggroup)
3467     return mmx_regnum_p;
3468
3469   xmm_regnum_p = i386_xmm_regnum_p (gdbarch, regnum);
3470   mxcsr_regnum_p = i386_mxcsr_regnum_p (gdbarch, regnum);
3471   if (group == i386_sse_reggroup)
3472     return xmm_regnum_p || mxcsr_regnum_p;
3473
3474   ymm_regnum_p = i386_ymm_regnum_p (gdbarch, regnum);
3475   if (group == vector_reggroup)
3476     return (mmx_regnum_p
3477             || ymm_regnum_p
3478             || mxcsr_regnum_p
3479             || (xmm_regnum_p
3480                 && ((tdep->xcr0 & I386_XSTATE_AVX_MASK)
3481                     == I386_XSTATE_SSE_MASK)));
3482
3483   fp_regnum_p = (i386_fp_regnum_p (gdbarch, regnum)
3484                  || i386_fpc_regnum_p (gdbarch, regnum));
3485   if (group == float_reggroup)
3486     return fp_regnum_p;
3487
3488   /* For "info reg all", don't include upper YMM registers nor XMM
3489      registers when AVX is supported.  */
3490   ymmh_regnum_p = i386_ymmh_regnum_p (gdbarch, regnum);
3491   if (group == all_reggroup
3492       && ((xmm_regnum_p
3493            && (tdep->xcr0 & I386_XSTATE_AVX))
3494           || ymmh_regnum_p))
3495     return 0;
3496
3497   if (group == general_reggroup)
3498     return (!fp_regnum_p
3499             && !mmx_regnum_p
3500             && !mxcsr_regnum_p
3501             && !xmm_regnum_p
3502             && !ymm_regnum_p
3503             && !ymmh_regnum_p);
3504
3505   return default_register_reggroup_p (gdbarch, regnum, group);
3506 }
3507 \f
3508
3509 /* Get the ARGIth function argument for the current function.  */
3510
3511 static CORE_ADDR
3512 i386_fetch_pointer_argument (struct frame_info *frame, int argi, 
3513                              struct type *type)
3514 {
3515   struct gdbarch *gdbarch = get_frame_arch (frame);
3516   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3517   CORE_ADDR sp = get_frame_register_unsigned  (frame, I386_ESP_REGNUM);
3518   return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4, byte_order);
3519 }
3520
3521 static void
3522 i386_skip_permanent_breakpoint (struct regcache *regcache)
3523 {
3524   CORE_ADDR current_pc = regcache_read_pc (regcache);
3525
3526  /* On i386, breakpoint is exactly 1 byte long, so we just
3527     adjust the PC in the regcache.  */
3528   current_pc += 1;
3529   regcache_write_pc (regcache, current_pc);
3530 }
3531
3532
3533 #define PREFIX_REPZ     0x01
3534 #define PREFIX_REPNZ    0x02
3535 #define PREFIX_LOCK     0x04
3536 #define PREFIX_DATA     0x08
3537 #define PREFIX_ADDR     0x10
3538
3539 /* operand size */
3540 enum
3541 {
3542   OT_BYTE = 0,
3543   OT_WORD,
3544   OT_LONG,
3545   OT_QUAD,
3546   OT_DQUAD,
3547 };
3548
3549 /* i386 arith/logic operations */
3550 enum
3551 {
3552   OP_ADDL,
3553   OP_ORL,
3554   OP_ADCL,
3555   OP_SBBL,
3556   OP_ANDL,
3557   OP_SUBL,
3558   OP_XORL,
3559   OP_CMPL,
3560 };
3561
3562 struct i386_record_s
3563 {
3564   struct gdbarch *gdbarch;
3565   struct regcache *regcache;
3566   CORE_ADDR orig_addr;
3567   CORE_ADDR addr;
3568   int aflag;
3569   int dflag;
3570   int override;
3571   uint8_t modrm;
3572   uint8_t mod, reg, rm;
3573   int ot;
3574   uint8_t rex_x;
3575   uint8_t rex_b;
3576   int rip_offset;
3577   int popl_esp_hack;
3578   const int *regmap;
3579 };
3580
3581 /* Parse "modrm" part in current memory address that irp->addr point to
3582    Return -1 if something wrong.  */
3583
3584 static int
3585 i386_record_modrm (struct i386_record_s *irp)
3586 {
3587   struct gdbarch *gdbarch = irp->gdbarch;
3588
3589   if (target_read_memory (irp->addr, &irp->modrm, 1))
3590     {
3591       if (record_debug)
3592         printf_unfiltered (_("Process record: error reading memory at "
3593                              "addr %s len = 1.\n"),
3594                            paddress (gdbarch, irp->addr));
3595       return -1;
3596     }
3597   irp->addr++;
3598   irp->mod = (irp->modrm >> 6) & 3;
3599   irp->reg = (irp->modrm >> 3) & 7;
3600   irp->rm = irp->modrm & 7;
3601
3602   return 0;
3603 }
3604
3605 /* Get the memory address that current instruction  write to and set it to
3606    the argument "addr".
3607    Return -1 if something wrong.  */
3608
3609 static int
3610 i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr)
3611 {
3612   struct gdbarch *gdbarch = irp->gdbarch;
3613   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3614   gdb_byte buf[4];
3615   ULONGEST offset64;
3616
3617   *addr = 0;
3618   if (irp->aflag)
3619     {
3620       /* 32 bits */
3621       int havesib = 0;
3622       uint8_t scale = 0;
3623       uint8_t byte;
3624       uint8_t index = 0;
3625       uint8_t base = irp->rm;
3626
3627       if (base == 4)
3628         {
3629           havesib = 1;
3630           if (target_read_memory (irp->addr, &byte, 1))
3631             {
3632               if (record_debug)
3633                 printf_unfiltered (_("Process record: error reading memory "
3634                                      "at addr %s len = 1.\n"),
3635                                    paddress (gdbarch, irp->addr));
3636               return -1;
3637             }
3638           irp->addr++;
3639           scale = (byte >> 6) & 3;
3640           index = ((byte >> 3) & 7) | irp->rex_x;
3641           base = (byte & 7);
3642         }
3643       base |= irp->rex_b;
3644
3645       switch (irp->mod)
3646         {
3647         case 0:
3648           if ((base & 7) == 5)
3649             {
3650               base = 0xff;
3651               if (target_read_memory (irp->addr, buf, 4))
3652                 {
3653                   if (record_debug)
3654                     printf_unfiltered (_("Process record: error reading "
3655                                          "memory at addr %s len = 4.\n"),
3656                                        paddress (gdbarch, irp->addr));
3657                   return -1;
3658                 }
3659               irp->addr += 4;
3660               *addr = extract_signed_integer (buf, 4, byte_order);
3661               if (irp->regmap[X86_RECORD_R8_REGNUM] && !havesib)
3662                 *addr += irp->addr + irp->rip_offset;
3663             }
3664           break;
3665         case 1:
3666           if (target_read_memory (irp->addr, buf, 1))
3667             {
3668               if (record_debug)
3669                 printf_unfiltered (_("Process record: error reading memory "
3670                                      "at addr %s len = 1.\n"),
3671                                    paddress (gdbarch, irp->addr));
3672               return -1;
3673             }
3674           irp->addr++;
3675           *addr = (int8_t) buf[0];
3676           break;
3677         case 2:
3678           if (target_read_memory (irp->addr, buf, 4))
3679             {
3680               if (record_debug)
3681                 printf_unfiltered (_("Process record: error reading memory "
3682                                      "at addr %s len = 4.\n"),
3683                                    paddress (gdbarch, irp->addr));
3684               return -1;
3685             }
3686           *addr = extract_signed_integer (buf, 4, byte_order);
3687           irp->addr += 4;
3688           break;
3689         }
3690
3691       offset64 = 0;
3692       if (base != 0xff)
3693         {
3694           if (base == 4 && irp->popl_esp_hack)
3695             *addr += irp->popl_esp_hack;
3696           regcache_raw_read_unsigned (irp->regcache, irp->regmap[base],
3697                                       &offset64);
3698         }
3699       if (irp->aflag == 2)
3700         {
3701           *addr += offset64;
3702         }
3703       else
3704         *addr = (uint32_t) (offset64 + *addr);
3705
3706       if (havesib && (index != 4 || scale != 0))
3707         {
3708           regcache_raw_read_unsigned (irp->regcache, irp->regmap[index],
3709                                       &offset64);
3710           if (irp->aflag == 2)
3711             *addr += offset64 << scale;
3712           else
3713             *addr = (uint32_t) (*addr + (offset64 << scale));
3714         }
3715     }
3716   else
3717     {
3718       /* 16 bits */
3719       switch (irp->mod)
3720         {
3721         case 0:
3722           if (irp->rm == 6)
3723             {
3724               if (target_read_memory (irp->addr, buf, 2))
3725                 {
3726                   if (record_debug)
3727                     printf_unfiltered (_("Process record: error reading "
3728                                          "memory at addr %s len = 2.\n"),
3729                                        paddress (gdbarch, irp->addr));
3730                   return -1;
3731                 }
3732               irp->addr += 2;
3733               *addr = extract_signed_integer (buf, 2, byte_order);
3734               irp->rm = 0;
3735               goto no_rm;
3736             }
3737           break;
3738         case 1:
3739           if (target_read_memory (irp->addr, buf, 1))
3740             {
3741               if (record_debug)
3742                 printf_unfiltered (_("Process record: error reading memory "
3743                                      "at addr %s len = 1.\n"),
3744                                    paddress (gdbarch, irp->addr));
3745               return -1;
3746             }
3747           irp->addr++;
3748           *addr = (int8_t) buf[0];
3749           break;
3750         case 2:
3751           if (target_read_memory (irp->addr, buf, 2))
3752             {
3753               if (record_debug)
3754                 printf_unfiltered (_("Process record: error reading memory "
3755                                      "at addr %s len = 2.\n"),
3756                                    paddress (gdbarch, irp->addr));
3757               return -1;
3758             }
3759           irp->addr += 2;
3760           *addr = extract_signed_integer (buf, 2, byte_order);
3761           break;
3762         }
3763
3764       switch (irp->rm)
3765         {
3766         case 0:
3767           regcache_raw_read_unsigned (irp->regcache,
3768                                       irp->regmap[X86_RECORD_REBX_REGNUM],
3769                                       &offset64);
3770           *addr = (uint32_t) (*addr + offset64);
3771           regcache_raw_read_unsigned (irp->regcache,
3772                                       irp->regmap[X86_RECORD_RESI_REGNUM],
3773                                       &offset64);
3774           *addr = (uint32_t) (*addr + offset64);
3775           break;
3776         case 1:
3777           regcache_raw_read_unsigned (irp->regcache,
3778                                       irp->regmap[X86_RECORD_REBX_REGNUM],
3779                                       &offset64);
3780           *addr = (uint32_t) (*addr + offset64);
3781           regcache_raw_read_unsigned (irp->regcache,
3782                                       irp->regmap[X86_RECORD_REDI_REGNUM],
3783                                       &offset64);
3784           *addr = (uint32_t) (*addr + offset64);
3785           break;
3786         case 2:
3787           regcache_raw_read_unsigned (irp->regcache,
3788                                       irp->regmap[X86_RECORD_REBP_REGNUM],
3789                                       &offset64);
3790           *addr = (uint32_t) (*addr + offset64);
3791           regcache_raw_read_unsigned (irp->regcache,
3792                                       irp->regmap[X86_RECORD_RESI_REGNUM],
3793                                       &offset64);
3794           *addr = (uint32_t) (*addr + offset64);
3795           break;
3796         case 3:
3797           regcache_raw_read_unsigned (irp->regcache,
3798                                       irp->regmap[X86_RECORD_REBP_REGNUM],
3799                                       &offset64);
3800           *addr = (uint32_t) (*addr + offset64);
3801           regcache_raw_read_unsigned (irp->regcache,
3802                                       irp->regmap[X86_RECORD_REDI_REGNUM],
3803                                       &offset64);
3804           *addr = (uint32_t) (*addr + offset64);
3805           break;
3806         case 4:
3807           regcache_raw_read_unsigned (irp->regcache,
3808                                       irp->regmap[X86_RECORD_RESI_REGNUM],
3809                                       &offset64);
3810           *addr = (uint32_t) (*addr + offset64);
3811           break;
3812         case 5:
3813           regcache_raw_read_unsigned (irp->regcache,
3814                                       irp->regmap[X86_RECORD_REDI_REGNUM],
3815                                       &offset64);
3816           *addr = (uint32_t) (*addr + offset64);
3817           break;
3818         case 6:
3819           regcache_raw_read_unsigned (irp->regcache,
3820                                       irp->regmap[X86_RECORD_REBP_REGNUM],
3821                                       &offset64);
3822           *addr = (uint32_t) (*addr + offset64);
3823           break;
3824         case 7:
3825           regcache_raw_read_unsigned (irp->regcache,
3826                                       irp->regmap[X86_RECORD_REBX_REGNUM],
3827                                       &offset64);
3828           *addr = (uint32_t) (*addr + offset64);
3829           break;
3830         }
3831       *addr &= 0xffff;
3832     }
3833
3834  no_rm:
3835   return 0;
3836 }
3837
3838 /* Record the value of the memory that willbe changed in current instruction
3839    to "record_arch_list".
3840    Return -1 if something wrong.  */
3841
3842 static int
3843 i386_record_lea_modrm (struct i386_record_s *irp)
3844 {
3845   struct gdbarch *gdbarch = irp->gdbarch;
3846   uint64_t addr;
3847
3848   if (irp->override >= 0)
3849     {
3850       if (record_memory_query)
3851         {
3852           int q;
3853
3854           target_terminal_ours ();
3855           q = yquery (_("\
3856 Process record ignores the memory change of instruction at address %s\n\
3857 because it can't get the value of the segment register.\n\
3858 Do you want to stop the program?"),
3859                       paddress (gdbarch, irp->orig_addr));
3860             target_terminal_inferior ();
3861             if (q)
3862               return -1;
3863         }
3864
3865       return 0;
3866     }
3867
3868   if (i386_record_lea_modrm_addr (irp, &addr))
3869     return -1;
3870
3871   if (record_arch_list_add_mem (addr, 1 << irp->ot))
3872     return -1;
3873
3874   return 0;
3875 }
3876
3877 /* Record the push operation to "record_arch_list".
3878    Return -1 if something wrong.  */
3879
3880 static int
3881 i386_record_push (struct i386_record_s *irp, int size)
3882 {
3883   ULONGEST addr;
3884
3885   if (record_arch_list_add_reg (irp->regcache,
3886                                 irp->regmap[X86_RECORD_RESP_REGNUM]))
3887     return -1;
3888   regcache_raw_read_unsigned (irp->regcache,
3889                               irp->regmap[X86_RECORD_RESP_REGNUM],
3890                               &addr);
3891   if (record_arch_list_add_mem ((CORE_ADDR) addr - size, size))
3892     return -1;
3893
3894   return 0;
3895 }
3896
3897
3898 /* Defines contents to record.  */
3899 #define I386_SAVE_FPU_REGS              0xfffd
3900 #define I386_SAVE_FPU_ENV               0xfffe
3901 #define I386_SAVE_FPU_ENV_REG_STACK     0xffff
3902
3903 /* Record the value of floating point registers which will be changed
3904    by the current instruction to "record_arch_list".  Return -1 if
3905    something is wrong.  */
3906
3907 static int i386_record_floats (struct gdbarch *gdbarch,
3908                                struct i386_record_s *ir,
3909                                uint32_t iregnum)
3910 {
3911   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3912   int i;
3913
3914   /* Oza: Because of floating point insn push/pop of fpu stack is going to
3915      happen.  Currently we store st0-st7 registers, but we need not store all
3916      registers all the time, in future we use ftag register and record only
3917      those who are not marked as an empty.  */
3918
3919   if (I386_SAVE_FPU_REGS == iregnum)
3920     {
3921       for (i = I387_ST0_REGNUM (tdep); i <= I387_ST0_REGNUM (tdep) + 7; i++)
3922         {
3923           if (record_arch_list_add_reg (ir->regcache, i))
3924             return -1;
3925         }
3926     }
3927   else if (I386_SAVE_FPU_ENV == iregnum)
3928     {
3929       for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3930               {
3931               if (record_arch_list_add_reg (ir->regcache, i))
3932                 return -1;
3933               }
3934     }
3935   else if (I386_SAVE_FPU_ENV_REG_STACK == iregnum)
3936     {
3937       for (i = I387_ST0_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3938       {
3939         if (record_arch_list_add_reg (ir->regcache, i))
3940           return -1;
3941       }
3942     }
3943   else if ((iregnum >= I387_ST0_REGNUM (tdep)) &&
3944            (iregnum <= I387_FOP_REGNUM (tdep)))
3945     {
3946       if (record_arch_list_add_reg (ir->regcache,iregnum))
3947         return -1;
3948     }
3949   else
3950     {
3951       /* Parameter error.  */
3952       return -1;
3953     }
3954   if(I386_SAVE_FPU_ENV != iregnum)
3955     {
3956     for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3957       {
3958       if (record_arch_list_add_reg (ir->regcache, i))
3959         return -1;
3960       }
3961     }
3962   return 0;
3963 }
3964
3965 /* Parse the current instruction and record the values of the registers and
3966    memory that will be changed in current instruction to "record_arch_list".
3967    Return -1 if something wrong.  */
3968
3969 #define I386_RECORD_ARCH_LIST_ADD_REG(regnum) \
3970     record_arch_list_add_reg (ir.regcache, ir.regmap[(regnum)])
3971
3972 int
3973 i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
3974                      CORE_ADDR input_addr)
3975 {
3976   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3977   int prefixes = 0;
3978   int regnum = 0;
3979   uint32_t opcode;
3980   uint8_t  opcode8;
3981   ULONGEST addr;
3982   gdb_byte buf[MAX_REGISTER_SIZE];
3983   struct i386_record_s ir;
3984   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3985   int rex = 0;
3986   uint8_t rex_w = -1;
3987   uint8_t rex_r = 0;
3988
3989   memset (&ir, 0, sizeof (struct i386_record_s));
3990   ir.regcache = regcache;
3991   ir.addr = input_addr;
3992   ir.orig_addr = input_addr;
3993   ir.aflag = 1;
3994   ir.dflag = 1;
3995   ir.override = -1;
3996   ir.popl_esp_hack = 0;
3997   ir.regmap = tdep->record_regmap;
3998   ir.gdbarch = gdbarch;
3999
4000   if (record_debug > 1)
4001     fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
4002                                     "addr = %s\n",
4003                         paddress (gdbarch, ir.addr));
4004
4005   /* prefixes */
4006   while (1)
4007     {
4008       if (target_read_memory (ir.addr, &opcode8, 1))
4009         {
4010           if (record_debug)
4011             printf_unfiltered (_("Process record: error reading memory at "
4012                                  "addr %s len = 1.\n"),
4013                                paddress (gdbarch, ir.addr));
4014           return -1;
4015         }
4016       ir.addr++;
4017       switch (opcode8)  /* Instruction prefixes */
4018         {
4019         case REPE_PREFIX_OPCODE:
4020           prefixes |= PREFIX_REPZ;
4021           break;
4022         case REPNE_PREFIX_OPCODE:
4023           prefixes |= PREFIX_REPNZ;
4024           break;
4025         case LOCK_PREFIX_OPCODE:
4026           prefixes |= PREFIX_LOCK;
4027           break;
4028         case CS_PREFIX_OPCODE:
4029           ir.override = X86_RECORD_CS_REGNUM;
4030           break;
4031         case SS_PREFIX_OPCODE:
4032           ir.override = X86_RECORD_SS_REGNUM;
4033           break;
4034         case DS_PREFIX_OPCODE:
4035           ir.override = X86_RECORD_DS_REGNUM;
4036           break;
4037         case ES_PREFIX_OPCODE:
4038           ir.override = X86_RECORD_ES_REGNUM;
4039           break;
4040         case FS_PREFIX_OPCODE:
4041           ir.override = X86_RECORD_FS_REGNUM;
4042           break;
4043         case GS_PREFIX_OPCODE:
4044           ir.override = X86_RECORD_GS_REGNUM;
4045           break;
4046         case DATA_PREFIX_OPCODE:
4047           prefixes |= PREFIX_DATA;
4048           break;
4049         case ADDR_PREFIX_OPCODE:
4050           prefixes |= PREFIX_ADDR;
4051           break;
4052         case 0x40:      /* i386 inc %eax */
4053         case 0x41:      /* i386 inc %ecx */
4054         case 0x42:      /* i386 inc %edx */
4055         case 0x43:      /* i386 inc %ebx */
4056         case 0x44:      /* i386 inc %esp */
4057         case 0x45:      /* i386 inc %ebp */
4058         case 0x46:      /* i386 inc %esi */
4059         case 0x47:      /* i386 inc %edi */
4060         case 0x48:      /* i386 dec %eax */
4061         case 0x49:      /* i386 dec %ecx */
4062         case 0x4a:      /* i386 dec %edx */
4063         case 0x4b:      /* i386 dec %ebx */
4064         case 0x4c:      /* i386 dec %esp */
4065         case 0x4d:      /* i386 dec %ebp */
4066         case 0x4e:      /* i386 dec %esi */
4067         case 0x4f:      /* i386 dec %edi */
4068           if (ir.regmap[X86_RECORD_R8_REGNUM])  /* 64 bit target */
4069             {
4070                /* REX */
4071                rex = 1;
4072                rex_w = (opcode8 >> 3) & 1;
4073                rex_r = (opcode8 & 0x4) << 1;
4074                ir.rex_x = (opcode8 & 0x2) << 2;
4075                ir.rex_b = (opcode8 & 0x1) << 3;
4076             }
4077           else                                  /* 32 bit target */
4078             goto out_prefixes;
4079           break;
4080         default:
4081           goto out_prefixes;
4082           break;
4083         }
4084     }
4085  out_prefixes:
4086   if (ir.regmap[X86_RECORD_R8_REGNUM] && rex_w == 1)
4087     {
4088       ir.dflag = 2;
4089     }
4090   else
4091     {
4092       if (prefixes & PREFIX_DATA)
4093         ir.dflag ^= 1;
4094     }
4095   if (prefixes & PREFIX_ADDR)
4096     ir.aflag ^= 1;
4097   else if (ir.regmap[X86_RECORD_R8_REGNUM])
4098     ir.aflag = 2;
4099
4100   /* Now check op code.  */
4101   opcode = (uint32_t) opcode8;
4102  reswitch:
4103   switch (opcode)
4104     {
4105     case 0x0f:
4106       if (target_read_memory (ir.addr, &opcode8, 1))
4107         {
4108           if (record_debug)
4109             printf_unfiltered (_("Process record: error reading memory at "
4110                                  "addr %s len = 1.\n"),
4111                                paddress (gdbarch, ir.addr));
4112           return -1;
4113         }
4114       ir.addr++;
4115       opcode = (uint32_t) opcode8 | 0x0f00;
4116       goto reswitch;
4117       break;
4118
4119     case 0x00:    /* arith & logic */
4120     case 0x01:
4121     case 0x02:
4122     case 0x03:
4123     case 0x04:
4124     case 0x05:
4125     case 0x08:
4126     case 0x09:
4127     case 0x0a:
4128     case 0x0b:
4129     case 0x0c:
4130     case 0x0d:
4131     case 0x10:
4132     case 0x11:
4133     case 0x12:
4134     case 0x13:
4135     case 0x14:
4136     case 0x15:
4137     case 0x18:
4138     case 0x19:
4139     case 0x1a:
4140     case 0x1b:
4141     case 0x1c:
4142     case 0x1d:
4143     case 0x20:
4144     case 0x21:
4145     case 0x22:
4146     case 0x23:
4147     case 0x24:
4148     case 0x25:
4149     case 0x28:
4150     case 0x29:
4151     case 0x2a:
4152     case 0x2b:
4153     case 0x2c:
4154     case 0x2d:
4155     case 0x30:
4156     case 0x31:
4157     case 0x32:
4158     case 0x33:
4159     case 0x34:
4160     case 0x35:
4161     case 0x38:
4162     case 0x39:
4163     case 0x3a:
4164     case 0x3b:
4165     case 0x3c:
4166     case 0x3d:
4167       if (((opcode >> 3) & 7) != OP_CMPL)
4168         {
4169           if ((opcode & 1) == 0)
4170             ir.ot = OT_BYTE;
4171           else
4172             ir.ot = ir.dflag + OT_WORD;
4173
4174           switch ((opcode >> 1) & 3)
4175             {
4176             case 0:    /* OP Ev, Gv */
4177               if (i386_record_modrm (&ir))
4178                 return -1;
4179               if (ir.mod != 3)
4180                 {
4181                   if (i386_record_lea_modrm (&ir))
4182                     return -1;
4183                 }
4184               else
4185                 {
4186                   ir.rm |= ir.rex_b;
4187                   if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4188                     ir.rm &= 0x3;
4189                   I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4190                 }
4191               break;
4192             case 1:    /* OP Gv, Ev */
4193               if (i386_record_modrm (&ir))
4194                 return -1;
4195               ir.reg |= rex_r;
4196               if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4197                 ir.reg &= 0x3;
4198               I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4199               break;
4200             case 2:    /* OP A, Iv */
4201               I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4202               break;
4203             }
4204         }
4205       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4206       break;
4207
4208     case 0x80:    /* GRP1 */
4209     case 0x81:
4210     case 0x82:
4211     case 0x83:
4212       if (i386_record_modrm (&ir))
4213         return -1;
4214
4215       if (ir.reg != OP_CMPL)
4216         {
4217           if ((opcode & 1) == 0)
4218             ir.ot = OT_BYTE;
4219           else
4220             ir.ot = ir.dflag + OT_WORD;
4221
4222           if (ir.mod != 3)
4223             {
4224               if (opcode == 0x83)
4225                 ir.rip_offset = 1;
4226               else
4227                 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4228               if (i386_record_lea_modrm (&ir))
4229                 return -1;
4230             }
4231           else
4232             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4233         }
4234       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4235       break;
4236
4237     case 0x40:      /* inc */
4238     case 0x41:
4239     case 0x42:
4240     case 0x43:
4241     case 0x44:
4242     case 0x45:
4243     case 0x46:
4244     case 0x47:
4245
4246     case 0x48:      /* dec */
4247     case 0x49:
4248     case 0x4a:
4249     case 0x4b:
4250     case 0x4c:
4251     case 0x4d:
4252     case 0x4e:
4253     case 0x4f:
4254
4255       I386_RECORD_ARCH_LIST_ADD_REG (opcode & 7);
4256       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4257       break;
4258
4259     case 0xf6:    /* GRP3 */
4260     case 0xf7:
4261       if ((opcode & 1) == 0)
4262         ir.ot = OT_BYTE;
4263       else
4264         ir.ot = ir.dflag + OT_WORD;
4265       if (i386_record_modrm (&ir))
4266         return -1;
4267
4268       if (ir.mod != 3 && ir.reg == 0)
4269         ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4270
4271       switch (ir.reg)
4272         {
4273         case 0:    /* test */
4274           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4275           break;
4276         case 2:    /* not */
4277         case 3:    /* neg */
4278           if (ir.mod != 3)
4279             {
4280               if (i386_record_lea_modrm (&ir))
4281                 return -1;
4282             }
4283           else
4284             {
4285               ir.rm |= ir.rex_b;
4286               if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4287                 ir.rm &= 0x3;
4288               I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4289             }
4290           if (ir.reg == 3)  /* neg */
4291             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4292           break;
4293         case 4:    /* mul  */
4294         case 5:    /* imul */
4295         case 6:    /* div  */
4296         case 7:    /* idiv */
4297           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4298           if (ir.ot != OT_BYTE)
4299             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4300           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4301           break;
4302         default:
4303           ir.addr -= 2;
4304           opcode = opcode << 8 | ir.modrm;
4305           goto no_support;
4306           break;
4307         }
4308       break;
4309
4310     case 0xfe:    /* GRP4 */
4311     case 0xff:    /* GRP5 */
4312       if (i386_record_modrm (&ir))
4313         return -1;
4314       if (ir.reg >= 2 && opcode == 0xfe)
4315         {
4316           ir.addr -= 2;
4317           opcode = opcode << 8 | ir.modrm;
4318           goto no_support;
4319         }
4320       switch (ir.reg)
4321         {
4322         case 0:    /* inc */
4323         case 1:    /* dec */
4324           if ((opcode & 1) == 0)
4325             ir.ot = OT_BYTE;
4326           else
4327             ir.ot = ir.dflag + OT_WORD;
4328           if (ir.mod != 3)
4329             {
4330               if (i386_record_lea_modrm (&ir))
4331                 return -1;
4332             }
4333           else
4334             {
4335               ir.rm |= ir.rex_b;
4336               if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4337                 ir.rm &= 0x3;
4338               I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4339             }
4340           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4341           break;
4342         case 2:    /* call */
4343           if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4344             ir.dflag = 2;
4345           if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4346             return -1;
4347           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4348           break;
4349         case 3:    /* lcall */
4350           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
4351           if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4352             return -1;
4353           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4354           break;
4355         case 4:    /* jmp  */
4356         case 5:    /* ljmp */
4357           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4358           break;
4359         case 6:    /* push */
4360           if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4361             ir.dflag = 2;
4362           if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4363             return -1;
4364           break;
4365         default:
4366           ir.addr -= 2;
4367           opcode = opcode << 8 | ir.modrm;
4368           goto no_support;
4369           break;
4370         }
4371       break;
4372
4373     case 0x84:    /* test */
4374     case 0x85:
4375     case 0xa8:
4376     case 0xa9:
4377       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4378       break;
4379
4380     case 0x98:    /* CWDE/CBW */
4381       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4382       break;
4383
4384     case 0x99:    /* CDQ/CWD */
4385       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4386       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4387       break;
4388
4389     case 0x0faf:  /* imul */
4390     case 0x69:
4391     case 0x6b:
4392       ir.ot = ir.dflag + OT_WORD;
4393       if (i386_record_modrm (&ir))
4394         return -1;
4395       if (opcode == 0x69)
4396         ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4397       else if (opcode == 0x6b)
4398         ir.rip_offset = 1;
4399       ir.reg |= rex_r;
4400       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4401         ir.reg &= 0x3;
4402       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4403       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4404       break;
4405
4406     case 0x0fc0:  /* xadd */
4407     case 0x0fc1:
4408       if ((opcode & 1) == 0)
4409         ir.ot = OT_BYTE;
4410       else
4411         ir.ot = ir.dflag + OT_WORD;
4412       if (i386_record_modrm (&ir))
4413         return -1;
4414       ir.reg |= rex_r;
4415       if (ir.mod == 3)
4416         {
4417           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4418             ir.reg &= 0x3;
4419           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4420           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4421             ir.rm &= 0x3;
4422           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4423         }
4424       else
4425         {
4426           if (i386_record_lea_modrm (&ir))
4427             return -1;
4428           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4429             ir.reg &= 0x3;
4430           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4431         }
4432       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4433       break;
4434
4435     case 0x0fb0:  /* cmpxchg */
4436     case 0x0fb1:
4437       if ((opcode & 1) == 0)
4438         ir.ot = OT_BYTE;
4439       else
4440         ir.ot = ir.dflag + OT_WORD;
4441       if (i386_record_modrm (&ir))
4442         return -1;
4443       if (ir.mod == 3)
4444         {
4445           ir.reg |= rex_r;
4446           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4447           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4448             ir.reg &= 0x3;
4449           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4450         }
4451       else
4452         {
4453           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4454           if (i386_record_lea_modrm (&ir))
4455             return -1;
4456         }
4457       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4458       break;
4459
4460     case 0x0fc7:    /* cmpxchg8b */
4461       if (i386_record_modrm (&ir))
4462         return -1;
4463       if (ir.mod == 3)
4464         {
4465           ir.addr -= 2;
4466           opcode = opcode << 8 | ir.modrm;
4467           goto no_support;
4468         }
4469       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4470       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4471       if (i386_record_lea_modrm (&ir))
4472         return -1;
4473       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4474       break;
4475
4476     case 0x50:    /* push */
4477     case 0x51:
4478     case 0x52:
4479     case 0x53:
4480     case 0x54:
4481     case 0x55:
4482     case 0x56:
4483     case 0x57:
4484     case 0x68:
4485     case 0x6a:
4486       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4487         ir.dflag = 2;
4488       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4489         return -1;
4490       break;
4491
4492     case 0x06:    /* push es */
4493     case 0x0e:    /* push cs */
4494     case 0x16:    /* push ss */
4495     case 0x1e:    /* push ds */
4496       if (ir.regmap[X86_RECORD_R8_REGNUM])
4497         {
4498           ir.addr -= 1;
4499           goto no_support;
4500         }
4501       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4502         return -1;
4503       break;
4504
4505     case 0x0fa0:    /* push fs */
4506     case 0x0fa8:    /* push gs */
4507       if (ir.regmap[X86_RECORD_R8_REGNUM])
4508         {
4509           ir.addr -= 2;
4510           goto no_support;
4511         }
4512       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4513         return -1;
4514       break;
4515
4516     case 0x60:    /* pusha */
4517       if (ir.regmap[X86_RECORD_R8_REGNUM])
4518         {
4519           ir.addr -= 1;
4520           goto no_support;
4521         }
4522       if (i386_record_push (&ir, 1 << (ir.dflag + 4)))
4523         return -1;
4524       break;
4525
4526     case 0x58:    /* pop */
4527     case 0x59:
4528     case 0x5a:
4529     case 0x5b:
4530     case 0x5c:
4531     case 0x5d:
4532     case 0x5e:
4533     case 0x5f:
4534       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4535       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
4536       break;
4537
4538     case 0x61:    /* popa */
4539       if (ir.regmap[X86_RECORD_R8_REGNUM])
4540         {
4541           ir.addr -= 1;
4542           goto no_support;
4543         }
4544       for (regnum = X86_RECORD_REAX_REGNUM; 
4545            regnum <= X86_RECORD_REDI_REGNUM;
4546            regnum++)
4547         I386_RECORD_ARCH_LIST_ADD_REG (regnum);
4548       break;
4549
4550     case 0x8f:    /* pop */
4551       if (ir.regmap[X86_RECORD_R8_REGNUM])
4552         ir.ot = ir.dflag ? OT_QUAD : OT_WORD;
4553       else
4554         ir.ot = ir.dflag + OT_WORD;
4555       if (i386_record_modrm (&ir))
4556         return -1;
4557       if (ir.mod == 3)
4558         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4559       else
4560         {
4561           ir.popl_esp_hack = 1 << ir.ot;
4562           if (i386_record_lea_modrm (&ir))
4563             return -1;
4564         }
4565       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4566       break;
4567
4568     case 0xc8:    /* enter */
4569       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
4570       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4571         ir.dflag = 2;
4572       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4573         return -1;
4574       break;
4575
4576     case 0xc9:    /* leave */
4577       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4578       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
4579       break;
4580
4581     case 0x07:    /* pop es */
4582       if (ir.regmap[X86_RECORD_R8_REGNUM])
4583         {
4584           ir.addr -= 1;
4585           goto no_support;
4586         }
4587       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4588       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_ES_REGNUM);
4589       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4590       break;
4591
4592     case 0x17:    /* pop ss */
4593       if (ir.regmap[X86_RECORD_R8_REGNUM])
4594         {
4595           ir.addr -= 1;
4596           goto no_support;
4597         }
4598       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4599       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_SS_REGNUM);
4600       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4601       break;
4602
4603     case 0x1f:    /* pop ds */
4604       if (ir.regmap[X86_RECORD_R8_REGNUM])
4605         {
4606           ir.addr -= 1;
4607           goto no_support;
4608         }
4609       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4610       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_DS_REGNUM);
4611       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4612       break;
4613
4614     case 0x0fa1:    /* pop fs */
4615       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4616       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_FS_REGNUM);
4617       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4618       break;
4619
4620     case 0x0fa9:    /* pop gs */
4621       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4622       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
4623       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4624       break;
4625
4626     case 0x88:    /* mov */
4627     case 0x89:
4628     case 0xc6:
4629     case 0xc7:
4630       if ((opcode & 1) == 0)
4631         ir.ot = OT_BYTE;
4632       else
4633         ir.ot = ir.dflag + OT_WORD;
4634
4635       if (i386_record_modrm (&ir))
4636         return -1;
4637
4638       if (ir.mod != 3)
4639         {
4640           if (opcode == 0xc6 || opcode == 0xc7)
4641             ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4642           if (i386_record_lea_modrm (&ir))
4643             return -1;
4644         }
4645       else
4646         {
4647           if (opcode == 0xc6 || opcode == 0xc7)
4648             ir.rm |= ir.rex_b;
4649           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4650             ir.rm &= 0x3;
4651           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4652         }
4653       break;
4654
4655     case 0x8a:    /* mov */
4656     case 0x8b:
4657       if ((opcode & 1) == 0)
4658         ir.ot = OT_BYTE;
4659       else
4660         ir.ot = ir.dflag + OT_WORD;
4661       if (i386_record_modrm (&ir))
4662         return -1;
4663       ir.reg |= rex_r;
4664       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4665         ir.reg &= 0x3;
4666       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4667       break;
4668
4669     case 0x8c:    /* mov seg */
4670       if (i386_record_modrm (&ir))
4671         return -1;
4672       if (ir.reg > 5)
4673         {
4674           ir.addr -= 2;
4675           opcode = opcode << 8 | ir.modrm;
4676           goto no_support;
4677         }
4678
4679       if (ir.mod == 3)
4680         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4681       else
4682         {
4683           ir.ot = OT_WORD;
4684           if (i386_record_lea_modrm (&ir))
4685             return -1;
4686         }
4687       break;
4688
4689     case 0x8e:    /* mov seg */
4690       if (i386_record_modrm (&ir))
4691         return -1;
4692       switch (ir.reg)
4693         {
4694         case 0:
4695           regnum = X86_RECORD_ES_REGNUM;
4696           break;
4697         case 2:
4698           regnum = X86_RECORD_SS_REGNUM;
4699           break;
4700         case 3:
4701           regnum = X86_RECORD_DS_REGNUM;
4702           break;
4703         case 4:
4704           regnum = X86_RECORD_FS_REGNUM;
4705           break;
4706         case 5:
4707           regnum = X86_RECORD_GS_REGNUM;
4708           break;
4709         default:
4710           ir.addr -= 2;
4711           opcode = opcode << 8 | ir.modrm;
4712           goto no_support;
4713           break;
4714         }
4715       I386_RECORD_ARCH_LIST_ADD_REG (regnum);
4716       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4717       break;
4718
4719     case 0x0fb6:    /* movzbS */
4720     case 0x0fb7:    /* movzwS */
4721     case 0x0fbe:    /* movsbS */
4722     case 0x0fbf:    /* movswS */
4723       if (i386_record_modrm (&ir))
4724         return -1;
4725       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
4726       break;
4727
4728     case 0x8d:      /* lea */
4729       if (i386_record_modrm (&ir))
4730         return -1;
4731       if (ir.mod == 3)
4732         {
4733           ir.addr -= 2;
4734           opcode = opcode << 8 | ir.modrm;
4735           goto no_support;
4736         }
4737       ir.ot = ir.dflag;
4738       ir.reg |= rex_r;
4739       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4740         ir.reg &= 0x3;
4741       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4742       break;
4743
4744     case 0xa0:    /* mov EAX */
4745     case 0xa1:
4746
4747     case 0xd7:    /* xlat */
4748       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4749       break;
4750
4751     case 0xa2:    /* mov EAX */
4752     case 0xa3:
4753       if (ir.override >= 0)
4754         {
4755           if (record_memory_query)
4756             {
4757               int q;
4758
4759               target_terminal_ours ();
4760               q = yquery (_("\
4761 Process record ignores the memory change of instruction at address %s\n\
4762 because it can't get the value of the segment register.\n\
4763 Do you want to stop the program?"),
4764                           paddress (gdbarch, ir.orig_addr));
4765               target_terminal_inferior ();
4766               if (q)
4767                 return -1;
4768             }
4769         }
4770       else
4771         {
4772           if ((opcode & 1) == 0)
4773             ir.ot = OT_BYTE;
4774           else
4775             ir.ot = ir.dflag + OT_WORD;
4776           if (ir.aflag == 2)
4777             {
4778               if (target_read_memory (ir.addr, buf, 8))
4779                 {
4780                   if (record_debug)
4781                     printf_unfiltered (_("Process record: error reading "
4782                                          "memory at addr 0x%s len = 8.\n"),
4783                                        paddress (gdbarch, ir.addr));
4784                   return -1;
4785                 }
4786               ir.addr += 8;
4787               addr = extract_unsigned_integer (buf, 8, byte_order);
4788             }
4789           else if (ir.aflag)
4790             {
4791               if (target_read_memory (ir.addr, buf, 4))
4792                 {
4793                   if (record_debug)
4794                     printf_unfiltered (_("Process record: error reading "
4795                                          "memory at addr 0x%s len = 4.\n"),
4796                                        paddress (gdbarch, ir.addr));
4797                   return -1;
4798                 }
4799               ir.addr += 4;
4800               addr = extract_unsigned_integer (buf, 4, byte_order);
4801             }
4802           else
4803             {
4804               if (target_read_memory (ir.addr, buf, 2))
4805                 {
4806                   if (record_debug)
4807                     printf_unfiltered (_("Process record: error reading "
4808                                          "memory at addr 0x%s len = 2.\n"),
4809                                        paddress (gdbarch, ir.addr));
4810                   return -1;
4811                 }
4812               ir.addr += 2;
4813               addr = extract_unsigned_integer (buf, 2, byte_order);
4814             }
4815           if (record_arch_list_add_mem (addr, 1 << ir.ot))
4816             return -1;
4817         }
4818       break;
4819
4820     case 0xb0:    /* mov R, Ib */
4821     case 0xb1:
4822     case 0xb2:
4823     case 0xb3:
4824     case 0xb4:
4825     case 0xb5:
4826     case 0xb6:
4827     case 0xb7:
4828       I386_RECORD_ARCH_LIST_ADD_REG ((ir.regmap[X86_RECORD_R8_REGNUM])
4829                                         ? ((opcode & 0x7) | ir.rex_b)
4830                                         : ((opcode & 0x7) & 0x3));
4831       break;
4832
4833     case 0xb8:    /* mov R, Iv */
4834     case 0xb9:
4835     case 0xba:
4836     case 0xbb:
4837     case 0xbc:
4838     case 0xbd:
4839     case 0xbe:
4840     case 0xbf:
4841       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
4842       break;
4843
4844     case 0x91:    /* xchg R, EAX */
4845     case 0x92:
4846     case 0x93:
4847     case 0x94:
4848     case 0x95:
4849     case 0x96:
4850     case 0x97:
4851       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4852       I386_RECORD_ARCH_LIST_ADD_REG (opcode & 0x7);
4853       break;
4854
4855     case 0x86:    /* xchg Ev, Gv */
4856     case 0x87:
4857       if ((opcode & 1) == 0)
4858         ir.ot = OT_BYTE;
4859       else
4860         ir.ot = ir.dflag + OT_WORD;
4861       if (i386_record_modrm (&ir))
4862         return -1;
4863       if (ir.mod == 3)
4864         {
4865           ir.rm |= ir.rex_b;
4866           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4867             ir.rm &= 0x3;
4868           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4869         }
4870       else
4871         {
4872           if (i386_record_lea_modrm (&ir))
4873             return -1;
4874         }
4875       ir.reg |= rex_r;
4876       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4877         ir.reg &= 0x3;
4878       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4879       break;
4880
4881     case 0xc4:    /* les Gv */
4882     case 0xc5:    /* lds Gv */
4883       if (ir.regmap[X86_RECORD_R8_REGNUM])
4884         {
4885           ir.addr -= 1;
4886           goto no_support;
4887         }
4888       /* FALLTHROUGH */
4889     case 0x0fb2:    /* lss Gv */
4890     case 0x0fb4:    /* lfs Gv */
4891     case 0x0fb5:    /* lgs Gv */
4892       if (i386_record_modrm (&ir))
4893         return -1;
4894       if (ir.mod == 3)
4895         {
4896           if (opcode > 0xff)
4897             ir.addr -= 3;
4898           else
4899             ir.addr -= 2;
4900           opcode = opcode << 8 | ir.modrm;
4901           goto no_support;
4902         }
4903       switch (opcode)
4904         {
4905         case 0xc4:    /* les Gv */
4906           regnum = X86_RECORD_ES_REGNUM;
4907           break;
4908         case 0xc5:    /* lds Gv */
4909           regnum = X86_RECORD_DS_REGNUM;
4910           break;
4911         case 0x0fb2:  /* lss Gv */
4912           regnum = X86_RECORD_SS_REGNUM;
4913           break;
4914         case 0x0fb4:  /* lfs Gv */
4915           regnum = X86_RECORD_FS_REGNUM;
4916           break;
4917         case 0x0fb5:  /* lgs Gv */
4918           regnum = X86_RECORD_GS_REGNUM;
4919           break;
4920         }
4921       I386_RECORD_ARCH_LIST_ADD_REG (regnum);
4922       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
4923       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4924       break;
4925
4926     case 0xc0:    /* shifts */
4927     case 0xc1:
4928     case 0xd0:
4929     case 0xd1:
4930     case 0xd2:
4931     case 0xd3:
4932       if ((opcode & 1) == 0)
4933         ir.ot = OT_BYTE;
4934       else
4935         ir.ot = ir.dflag + OT_WORD;
4936       if (i386_record_modrm (&ir))
4937         return -1;
4938       if (ir.mod != 3 && (opcode == 0xd2 || opcode == 0xd3))
4939         {
4940           if (i386_record_lea_modrm (&ir))
4941             return -1;
4942         }
4943       else
4944         {
4945           ir.rm |= ir.rex_b;
4946           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4947             ir.rm &= 0x3;
4948           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4949         }
4950       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4951       break;
4952
4953     case 0x0fa4:
4954     case 0x0fa5:
4955     case 0x0fac:
4956     case 0x0fad:
4957       if (i386_record_modrm (&ir))
4958         return -1;
4959       if (ir.mod == 3)
4960         {
4961           if (record_arch_list_add_reg (ir.regcache, ir.rm))
4962             return -1;
4963         }
4964       else
4965         {
4966           if (i386_record_lea_modrm (&ir))
4967             return -1;
4968         }
4969       break;
4970
4971     case 0xd8:    /* Floats.  */
4972     case 0xd9:
4973     case 0xda:
4974     case 0xdb:
4975     case 0xdc:
4976     case 0xdd:
4977     case 0xde:
4978     case 0xdf:
4979       if (i386_record_modrm (&ir))
4980         return -1;
4981       ir.reg |= ((opcode & 7) << 3);
4982       if (ir.mod != 3)
4983         {
4984           /* Memory.  */
4985           uint64_t addr64;
4986
4987           if (i386_record_lea_modrm_addr (&ir, &addr64))
4988             return -1;
4989           switch (ir.reg)
4990             {
4991             case 0x02:
4992             case 0x12:
4993             case 0x22:
4994             case 0x32:
4995               /* For fcom, ficom nothing to do.  */
4996               break;
4997             case 0x03:
4998             case 0x13:
4999             case 0x23:
5000             case 0x33:
5001               /* For fcomp, ficomp pop FPU stack, store all.  */
5002               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5003                 return -1;
5004               break;
5005             case 0x00:
5006             case 0x01:
5007             case 0x04:
5008             case 0x05:
5009             case 0x06:
5010             case 0x07:
5011             case 0x10:
5012             case 0x11:
5013             case 0x14:
5014             case 0x15:
5015             case 0x16:
5016             case 0x17:
5017             case 0x20:
5018             case 0x21:
5019             case 0x24:
5020             case 0x25:
5021             case 0x26:
5022             case 0x27:
5023             case 0x30:
5024             case 0x31:
5025             case 0x34:
5026             case 0x35:
5027             case 0x36:
5028             case 0x37:
5029               /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,
5030                  fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension
5031                  of code,  always affects st(0) register.  */
5032               if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
5033                 return -1;
5034               break;
5035             case 0x08:
5036             case 0x0a:
5037             case 0x0b:
5038             case 0x18:
5039             case 0x19:
5040             case 0x1a:
5041             case 0x1b:
5042             case 0x1d:
5043             case 0x28:
5044             case 0x29:
5045             case 0x2a:
5046             case 0x2b:
5047             case 0x38:
5048             case 0x39:
5049             case 0x3a:
5050             case 0x3b:
5051             case 0x3c:
5052             case 0x3d:
5053               switch (ir.reg & 7)
5054                 {
5055                 case 0:
5056                   /* Handling fld, fild.  */
5057                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5058                     return -1;
5059                   break;
5060                 case 1:
5061                   switch (ir.reg >> 4)
5062                     {
5063                     case 0:
5064                       if (record_arch_list_add_mem (addr64, 4))
5065                         return -1;
5066                       break;
5067                     case 2:
5068                       if (record_arch_list_add_mem (addr64, 8))
5069                         return -1;
5070                       break;
5071                     case 3:
5072                       break;
5073                     default:
5074                       if (record_arch_list_add_mem (addr64, 2))
5075                         return -1;
5076                       break;
5077                     }
5078                   break;
5079                 default:
5080                   switch (ir.reg >> 4)
5081                     {
5082                     case 0:
5083                       if (record_arch_list_add_mem (addr64, 4))
5084                         return -1;
5085                       if (3 == (ir.reg & 7))
5086                         {
5087                           /* For fstp m32fp.  */
5088                           if (i386_record_floats (gdbarch, &ir,
5089                                                   I386_SAVE_FPU_REGS))
5090                             return -1;
5091                         }
5092                       break;
5093                     case 1:
5094                       if (record_arch_list_add_mem (addr64, 4))
5095                         return -1;
5096                       if ((3 == (ir.reg & 7))
5097                           || (5 == (ir.reg & 7))
5098                           || (7 == (ir.reg & 7)))
5099                         {
5100                           /* For fstp insn.  */
5101                           if (i386_record_floats (gdbarch, &ir,
5102                                                   I386_SAVE_FPU_REGS))
5103                             return -1;
5104                         }
5105                       break;
5106                     case 2:
5107                       if (record_arch_list_add_mem (addr64, 8))
5108                         return -1;
5109                       if (3 == (ir.reg & 7))
5110                         {
5111                           /* For fstp m64fp.  */
5112                           if (i386_record_floats (gdbarch, &ir,
5113                                                   I386_SAVE_FPU_REGS))
5114                             return -1;
5115                         }
5116                       break;
5117                     case 3:
5118                       if ((3 <= (ir.reg & 7)) && (6 <= (ir.reg & 7)))
5119                         {
5120                           /* For fistp, fbld, fild, fbstp.  */
5121                           if (i386_record_floats (gdbarch, &ir,
5122                                                   I386_SAVE_FPU_REGS))
5123                             return -1;
5124                         }
5125                       /* Fall through */
5126                     default:
5127                       if (record_arch_list_add_mem (addr64, 2))
5128                         return -1;
5129                       break;
5130                     }
5131                   break;
5132                 }
5133               break;
5134             case 0x0c:
5135               /* Insn fldenv.  */
5136               if (i386_record_floats (gdbarch, &ir,
5137                                       I386_SAVE_FPU_ENV_REG_STACK))
5138                 return -1;
5139               break;
5140             case 0x0d:
5141               /* Insn fldcw.  */
5142               if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep)))
5143                 return -1;
5144               break;
5145             case 0x2c:
5146               /* Insn frstor.  */
5147               if (i386_record_floats (gdbarch, &ir,
5148                                       I386_SAVE_FPU_ENV_REG_STACK))
5149                 return -1;
5150               break;
5151             case 0x0e:
5152               if (ir.dflag)
5153                 {
5154                   if (record_arch_list_add_mem (addr64, 28))
5155                     return -1;
5156                 }
5157               else
5158                 {
5159                   if (record_arch_list_add_mem (addr64, 14))
5160                     return -1;
5161                 }
5162               break;
5163             case 0x0f:
5164             case 0x2f:
5165               if (record_arch_list_add_mem (addr64, 2))
5166                 return -1;
5167               /* Insn fstp, fbstp.  */
5168               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5169                 return -1;
5170               break;
5171             case 0x1f:
5172             case 0x3e:
5173               if (record_arch_list_add_mem (addr64, 10))
5174                 return -1;
5175               break;
5176             case 0x2e:
5177               if (ir.dflag)
5178                 {
5179                   if (record_arch_list_add_mem (addr64, 28))
5180                     return -1;
5181                   addr64 += 28;
5182                 }
5183               else
5184                 {
5185                   if (record_arch_list_add_mem (addr64, 14))
5186                     return -1;
5187                   addr64 += 14;
5188                 }
5189               if (record_arch_list_add_mem (addr64, 80))
5190                 return -1;
5191               /* Insn fsave.  */
5192               if (i386_record_floats (gdbarch, &ir,
5193                                       I386_SAVE_FPU_ENV_REG_STACK))
5194                 return -1;
5195               break;
5196             case 0x3f:
5197               if (record_arch_list_add_mem (addr64, 8))
5198                 return -1;
5199               /* Insn fistp.  */
5200               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5201                 return -1;
5202               break;
5203             default:
5204               ir.addr -= 2;
5205               opcode = opcode << 8 | ir.modrm;
5206               goto no_support;
5207               break;
5208             }
5209         }
5210       /* Opcode is an extension of modR/M byte.  */
5211       else
5212         {
5213           switch (opcode)
5214             {
5215             case 0xd8:
5216               if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
5217                 return -1;
5218               break;
5219             case 0xd9:
5220               if (0x0c == (ir.modrm >> 4))
5221                 {
5222                   if ((ir.modrm & 0x0f) <= 7)
5223                     {
5224                       if (i386_record_floats (gdbarch, &ir,
5225                                               I386_SAVE_FPU_REGS))
5226                         return -1;
5227                     }
5228                   else
5229                     {
5230                       if (i386_record_floats (gdbarch, &ir,
5231                                               I387_ST0_REGNUM (tdep)))
5232                         return -1;
5233                       /* If only st(0) is changing, then we have already
5234                          recorded.  */
5235                       if ((ir.modrm & 0x0f) - 0x08)
5236                         {
5237                           if (i386_record_floats (gdbarch, &ir,
5238                                                   I387_ST0_REGNUM (tdep) +
5239                                                   ((ir.modrm & 0x0f) - 0x08)))
5240                             return -1;
5241                         }
5242                     }
5243                 }
5244               else
5245                 {
5246                   switch (ir.modrm)
5247                     {
5248                     case 0xe0:
5249                     case 0xe1:
5250                     case 0xf0:
5251                     case 0xf5:
5252                     case 0xf8:
5253                     case 0xfa:
5254                     case 0xfc:
5255                     case 0xfe:
5256                     case 0xff:
5257                       if (i386_record_floats (gdbarch, &ir,
5258                                               I387_ST0_REGNUM (tdep)))
5259                         return -1;
5260                       break;
5261                     case 0xf1:
5262                     case 0xf2:
5263                     case 0xf3:
5264                     case 0xf4:
5265                     case 0xf6:
5266                     case 0xf7:
5267                     case 0xe8:
5268                     case 0xe9:
5269                     case 0xea:
5270                     case 0xeb:
5271                     case 0xec:
5272                     case 0xed:
5273                     case 0xee:
5274                     case 0xf9:
5275                     case 0xfb:
5276                       if (i386_record_floats (gdbarch, &ir,
5277                                               I386_SAVE_FPU_REGS))
5278                         return -1;
5279                       break;
5280                     case 0xfd:
5281                       if (i386_record_floats (gdbarch, &ir,
5282                                               I387_ST0_REGNUM (tdep)))
5283                         return -1;
5284                       if (i386_record_floats (gdbarch, &ir,
5285                                               I387_ST0_REGNUM (tdep) + 1))
5286                         return -1;
5287                       break;
5288                     }
5289                 }
5290               break;
5291             case 0xda:
5292               if (0xe9 == ir.modrm)
5293                 {
5294                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5295                     return -1;
5296                 }
5297               else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
5298                 {
5299                   if (i386_record_floats (gdbarch, &ir,
5300                                           I387_ST0_REGNUM (tdep)))
5301                     return -1;
5302                   if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
5303                     {
5304                       if (i386_record_floats (gdbarch, &ir,
5305                                               I387_ST0_REGNUM (tdep) +
5306                                               (ir.modrm & 0x0f)))
5307                         return -1;
5308                     }
5309                   else if ((ir.modrm & 0x0f) - 0x08)
5310                     {
5311                       if (i386_record_floats (gdbarch, &ir,
5312                                               I387_ST0_REGNUM (tdep) +
5313                                               ((ir.modrm & 0x0f) - 0x08)))
5314                         return -1;
5315                     }
5316                 }
5317               break;
5318             case 0xdb:
5319               if (0xe3 == ir.modrm)
5320                 {
5321                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV))
5322                     return -1;
5323                 }
5324               else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
5325                 {
5326                   if (i386_record_floats (gdbarch, &ir,
5327                                           I387_ST0_REGNUM (tdep)))
5328                     return -1;
5329                   if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
5330                     {
5331                       if (i386_record_floats (gdbarch, &ir,
5332                                               I387_ST0_REGNUM (tdep) +
5333                                               (ir.modrm & 0x0f)))
5334                         return -1;
5335                     }
5336                   else if ((ir.modrm & 0x0f) - 0x08)
5337                     {
5338                       if (i386_record_floats (gdbarch, &ir,
5339                                               I387_ST0_REGNUM (tdep) +
5340                                               ((ir.modrm & 0x0f) - 0x08)))
5341                         return -1;
5342                     }
5343                 }
5344               break;
5345             case 0xdc:
5346               if ((0x0c == ir.modrm >> 4)
5347                   || (0x0d == ir.modrm >> 4)
5348                   || (0x0f == ir.modrm >> 4))
5349                 {
5350                   if ((ir.modrm & 0x0f) <= 7)
5351                     {
5352                       if (i386_record_floats (gdbarch, &ir,
5353                                               I387_ST0_REGNUM (tdep) +
5354                                               (ir.modrm & 0x0f)))
5355                         return -1;
5356                     }
5357                   else
5358                     {
5359                       if (i386_record_floats (gdbarch, &ir,
5360                                               I387_ST0_REGNUM (tdep) +
5361                                               ((ir.modrm & 0x0f) - 0x08)))
5362                         return -1;
5363                     }
5364                 }
5365               break;
5366             case 0xdd:
5367               if (0x0c == ir.modrm >> 4)
5368                 {
5369                   if (i386_record_floats (gdbarch, &ir,
5370                                           I387_FTAG_REGNUM (tdep)))
5371                     return -1;
5372                 }
5373               else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
5374                 {
5375                   if ((ir.modrm & 0x0f) <= 7)
5376                     {
5377                       if (i386_record_floats (gdbarch, &ir,
5378                                               I387_ST0_REGNUM (tdep) +
5379                                               (ir.modrm & 0x0f)))
5380                         return -1;
5381                     }
5382                   else
5383                     {
5384                       if (i386_record_floats (gdbarch, &ir,
5385                                               I386_SAVE_FPU_REGS))
5386                         return -1;
5387                     }
5388                 }
5389               break;
5390             case 0xde:
5391               if ((0x0c == ir.modrm >> 4)
5392                   || (0x0e == ir.modrm >> 4)
5393                   || (0x0f == ir.modrm >> 4)
5394                   || (0xd9 == ir.modrm))
5395                 {
5396                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5397                     return -1;
5398                 }
5399               break;
5400             case 0xdf:
5401               if (0xe0 == ir.modrm)
5402                 {
5403                   if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
5404                     return -1;
5405                 }
5406               else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
5407                 {
5408                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5409                     return -1;
5410                 }
5411               break;
5412             }
5413         }
5414       break;
5415       /* string ops */
5416     case 0xa4:    /* movsS */
5417     case 0xa5:
5418     case 0xaa:    /* stosS */
5419     case 0xab:
5420     case 0x6c:    /* insS */
5421     case 0x6d:
5422       regcache_raw_read_unsigned (ir.regcache,
5423                                   ir.regmap[X86_RECORD_RECX_REGNUM],
5424                                   &addr);
5425       if (addr)
5426         {
5427           ULONGEST es, ds;
5428
5429           if ((opcode & 1) == 0)
5430             ir.ot = OT_BYTE;
5431           else
5432             ir.ot = ir.dflag + OT_WORD;
5433           regcache_raw_read_unsigned (ir.regcache,
5434                                       ir.regmap[X86_RECORD_REDI_REGNUM],
5435                                       &addr);
5436
5437           regcache_raw_read_unsigned (ir.regcache,
5438                                       ir.regmap[X86_RECORD_ES_REGNUM],
5439                                       &es);
5440           regcache_raw_read_unsigned (ir.regcache,
5441                                       ir.regmap[X86_RECORD_DS_REGNUM],
5442                                       &ds);
5443           if (ir.aflag && (es != ds))
5444             {
5445               /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */
5446               if (record_memory_query)
5447                 {
5448                   int q;
5449
5450                   target_terminal_ours ();
5451                   q = yquery (_("\
5452 Process record ignores the memory change of instruction at address %s\n\
5453 because it can't get the value of the segment register.\n\
5454 Do you want to stop the program?"),
5455                               paddress (gdbarch, ir.orig_addr));
5456                   target_terminal_inferior ();
5457                   if (q)
5458                     return -1;
5459                 }
5460             }
5461           else
5462             {
5463               if (record_arch_list_add_mem (addr, 1 << ir.ot))
5464                 return -1;
5465             }
5466
5467           if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5468             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5469           if (opcode == 0xa4 || opcode == 0xa5)
5470             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5471           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5472           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5473         }
5474       break;
5475
5476     case 0xa6:    /* cmpsS */
5477     case 0xa7:
5478       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5479       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5480       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5481         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5482       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5483       break;
5484
5485     case 0xac:    /* lodsS */
5486     case 0xad:
5487       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5488       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5489       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5490         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5491       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5492       break;
5493
5494     case 0xae:    /* scasS */
5495     case 0xaf:
5496       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5497       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5498         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5499       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5500       break;
5501
5502     case 0x6e:    /* outsS */
5503     case 0x6f:
5504       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5505       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5506         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5507       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5508       break;
5509
5510     case 0xe4:    /* port I/O */
5511     case 0xe5:
5512     case 0xec:
5513     case 0xed:
5514       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5515       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5516       break;
5517
5518     case 0xe6:
5519     case 0xe7:
5520     case 0xee:
5521     case 0xef:
5522       break;
5523
5524       /* control */
5525     case 0xc2:    /* ret im */
5526     case 0xc3:    /* ret */
5527       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5528       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5529       break;
5530
5531     case 0xca:    /* lret im */
5532     case 0xcb:    /* lret */
5533     case 0xcf:    /* iret */
5534       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
5535       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5536       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5537       break;
5538
5539     case 0xe8:    /* call im */
5540       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
5541         ir.dflag = 2;
5542       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5543         return -1;
5544       break;
5545
5546     case 0x9a:    /* lcall im */
5547       if (ir.regmap[X86_RECORD_R8_REGNUM])
5548         {
5549           ir.addr -= 1;
5550           goto no_support;
5551         }
5552       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
5553       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5554         return -1;
5555       break;
5556
5557     case 0xe9:    /* jmp im */
5558     case 0xea:    /* ljmp im */
5559     case 0xeb:    /* jmp Jb */
5560     case 0x70:    /* jcc Jb */
5561     case 0x71:
5562     case 0x72:
5563     case 0x73:
5564     case 0x74:
5565     case 0x75:
5566     case 0x76:
5567     case 0x77:
5568     case 0x78:
5569     case 0x79:
5570     case 0x7a:
5571     case 0x7b:
5572     case 0x7c:
5573     case 0x7d:
5574     case 0x7e:
5575     case 0x7f:
5576     case 0x0f80:  /* jcc Jv */
5577     case 0x0f81:
5578     case 0x0f82:
5579     case 0x0f83:
5580     case 0x0f84:
5581     case 0x0f85:
5582     case 0x0f86:
5583     case 0x0f87:
5584     case 0x0f88:
5585     case 0x0f89:
5586     case 0x0f8a:
5587     case 0x0f8b:
5588     case 0x0f8c:
5589     case 0x0f8d:
5590     case 0x0f8e:
5591     case 0x0f8f:
5592       break;
5593
5594     case 0x0f90:  /* setcc Gv */
5595     case 0x0f91:
5596     case 0x0f92:
5597     case 0x0f93:
5598     case 0x0f94:
5599     case 0x0f95:
5600     case 0x0f96:
5601     case 0x0f97:
5602     case 0x0f98:
5603     case 0x0f99:
5604     case 0x0f9a:
5605     case 0x0f9b:
5606     case 0x0f9c:
5607     case 0x0f9d:
5608     case 0x0f9e:
5609     case 0x0f9f:
5610       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5611       ir.ot = OT_BYTE;
5612       if (i386_record_modrm (&ir))
5613         return -1;
5614       if (ir.mod == 3)
5615         I386_RECORD_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b)
5616                                                 : (ir.rm & 0x3));
5617       else
5618         {
5619           if (i386_record_lea_modrm (&ir))
5620             return -1;
5621         }
5622       break;
5623
5624     case 0x0f40:    /* cmov Gv, Ev */
5625     case 0x0f41:
5626     case 0x0f42:
5627     case 0x0f43:
5628     case 0x0f44:
5629     case 0x0f45:
5630     case 0x0f46:
5631     case 0x0f47:
5632     case 0x0f48:
5633     case 0x0f49:
5634     case 0x0f4a:
5635     case 0x0f4b:
5636     case 0x0f4c:
5637     case 0x0f4d:
5638     case 0x0f4e:
5639     case 0x0f4f:
5640       if (i386_record_modrm (&ir))
5641         return -1;
5642       ir.reg |= rex_r;
5643       if (ir.dflag == OT_BYTE)
5644         ir.reg &= 0x3;
5645       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
5646       break;
5647
5648       /* flags */
5649     case 0x9c:    /* pushf */
5650       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5651       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
5652         ir.dflag = 2;
5653       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5654         return -1;
5655       break;
5656
5657     case 0x9d:    /* popf */
5658       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5659       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5660       break;
5661
5662     case 0x9e:    /* sahf */
5663       if (ir.regmap[X86_RECORD_R8_REGNUM])
5664         {
5665           ir.addr -= 1;
5666           goto no_support;
5667         }
5668       /* FALLTHROUGH */
5669     case 0xf5:    /* cmc */
5670     case 0xf8:    /* clc */
5671     case 0xf9:    /* stc */
5672     case 0xfc:    /* cld */
5673     case 0xfd:    /* std */
5674       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5675       break;
5676
5677     case 0x9f:    /* lahf */
5678       if (ir.regmap[X86_RECORD_R8_REGNUM])
5679         {
5680           ir.addr -= 1;
5681           goto no_support;
5682         }
5683       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5684       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5685       break;
5686
5687       /* bit operations */
5688     case 0x0fba:    /* bt/bts/btr/btc Gv, im */
5689       ir.ot = ir.dflag + OT_WORD;
5690       if (i386_record_modrm (&ir))
5691         return -1;
5692       if (ir.reg < 4)
5693         {
5694           ir.addr -= 2;
5695           opcode = opcode << 8 | ir.modrm;
5696           goto no_support;
5697         }
5698       if (ir.reg != 4)
5699         {
5700           if (ir.mod == 3)
5701             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5702           else
5703             {
5704               if (i386_record_lea_modrm (&ir))
5705                 return -1;
5706             }
5707         }
5708       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5709       break;
5710
5711     case 0x0fa3:    /* bt Gv, Ev */
5712       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5713       break;
5714
5715     case 0x0fab:    /* bts */
5716     case 0x0fb3:    /* btr */
5717     case 0x0fbb:    /* btc */
5718       ir.ot = ir.dflag + OT_WORD;
5719       if (i386_record_modrm (&ir))
5720         return -1;
5721       if (ir.mod == 3)
5722         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5723       else
5724         {
5725           uint64_t addr64;
5726           if (i386_record_lea_modrm_addr (&ir, &addr64))
5727             return -1;
5728           regcache_raw_read_unsigned (ir.regcache,
5729                                       ir.regmap[ir.reg | rex_r],
5730                                       &addr);
5731           switch (ir.dflag)
5732             {
5733             case 0:
5734               addr64 += ((int16_t) addr >> 4) << 4;
5735               break;
5736             case 1:
5737               addr64 += ((int32_t) addr >> 5) << 5;
5738               break;
5739             case 2:
5740               addr64 += ((int64_t) addr >> 6) << 6;
5741               break;
5742             }
5743           if (record_arch_list_add_mem (addr64, 1 << ir.ot))
5744             return -1;
5745           if (i386_record_lea_modrm (&ir))
5746             return -1;
5747         }
5748       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5749       break;
5750
5751     case 0x0fbc:    /* bsf */
5752     case 0x0fbd:    /* bsr */
5753       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
5754       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5755       break;
5756
5757       /* bcd */
5758     case 0x27:    /* daa */
5759     case 0x2f:    /* das */
5760     case 0x37:    /* aaa */
5761     case 0x3f:    /* aas */
5762     case 0xd4:    /* aam */
5763     case 0xd5:    /* aad */
5764       if (ir.regmap[X86_RECORD_R8_REGNUM])
5765         {
5766           ir.addr -= 1;
5767           goto no_support;
5768         }
5769       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5770       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5771       break;
5772
5773       /* misc */
5774     case 0x90:    /* nop */
5775       if (prefixes & PREFIX_LOCK)
5776         {
5777           ir.addr -= 1;
5778           goto no_support;
5779         }
5780       break;
5781
5782     case 0x9b:    /* fwait */
5783       if (target_read_memory (ir.addr, &opcode8, 1))
5784         {
5785           if (record_debug)
5786             printf_unfiltered (_("Process record: error reading memory at "
5787                                  "addr 0x%s len = 1.\n"),
5788                                paddress (gdbarch, ir.addr));
5789           return -1;
5790         }
5791       opcode = (uint32_t) opcode8;
5792       ir.addr++;
5793       goto reswitch;
5794       break;
5795
5796       /* XXX */
5797     case 0xcc:    /* int3 */
5798       printf_unfiltered (_("Process record does not support instruction "
5799                            "int3.\n"));
5800       ir.addr -= 1;
5801       goto no_support;
5802       break;
5803
5804       /* XXX */
5805     case 0xcd:    /* int */
5806       {
5807         int ret;
5808         uint8_t interrupt;
5809         if (target_read_memory (ir.addr, &interrupt, 1))
5810           {
5811             if (record_debug)
5812               printf_unfiltered (_("Process record: error reading memory "
5813                                    "at addr %s len = 1.\n"),
5814                                  paddress (gdbarch, ir.addr));
5815             return -1;
5816           }
5817         ir.addr++;
5818         if (interrupt != 0x80
5819             || tdep->i386_intx80_record == NULL)
5820           {
5821             printf_unfiltered (_("Process record does not support "
5822                                  "instruction int 0x%02x.\n"),
5823                                interrupt);
5824             ir.addr -= 2;
5825             goto no_support;
5826           }
5827         ret = tdep->i386_intx80_record (ir.regcache);
5828         if (ret)
5829           return ret;
5830       }
5831       break;
5832
5833       /* XXX */
5834     case 0xce:    /* into */
5835       printf_unfiltered (_("Process record does not support "
5836                            "instruction into.\n"));
5837       ir.addr -= 1;
5838       goto no_support;
5839       break;
5840
5841     case 0xfa:    /* cli */
5842     case 0xfb:    /* sti */
5843       break;
5844
5845     case 0x62:    /* bound */
5846       printf_unfiltered (_("Process record does not support "
5847                            "instruction bound.\n"));
5848       ir.addr -= 1;
5849       goto no_support;
5850       break;
5851
5852     case 0x0fc8:    /* bswap reg */
5853     case 0x0fc9:
5854     case 0x0fca:
5855     case 0x0fcb:
5856     case 0x0fcc:
5857     case 0x0fcd:
5858     case 0x0fce:
5859     case 0x0fcf:
5860       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 7) | ir.rex_b);
5861       break;
5862
5863     case 0xd6:    /* salc */
5864       if (ir.regmap[X86_RECORD_R8_REGNUM])
5865         {
5866           ir.addr -= 1;
5867           goto no_support;
5868         }
5869       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5870       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5871       break;
5872
5873     case 0xe0:    /* loopnz */
5874     case 0xe1:    /* loopz */
5875     case 0xe2:    /* loop */
5876     case 0xe3:    /* jecxz */
5877       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5878       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5879       break;
5880
5881     case 0x0f30:    /* wrmsr */
5882       printf_unfiltered (_("Process record does not support "
5883                            "instruction wrmsr.\n"));
5884       ir.addr -= 2;
5885       goto no_support;
5886       break;
5887
5888     case 0x0f32:    /* rdmsr */
5889       printf_unfiltered (_("Process record does not support "
5890                            "instruction rdmsr.\n"));
5891       ir.addr -= 2;
5892       goto no_support;
5893       break;
5894
5895     case 0x0f31:    /* rdtsc */
5896       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5897       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5898       break;
5899
5900     case 0x0f34:    /* sysenter */
5901       {
5902         int ret;
5903         if (ir.regmap[X86_RECORD_R8_REGNUM])
5904           {
5905             ir.addr -= 2;
5906             goto no_support;
5907           }
5908         if (tdep->i386_sysenter_record == NULL)
5909           {
5910             printf_unfiltered (_("Process record does not support "
5911                                  "instruction sysenter.\n"));
5912             ir.addr -= 2;
5913             goto no_support;
5914           }
5915         ret = tdep->i386_sysenter_record (ir.regcache);
5916         if (ret)
5917           return ret;
5918       }
5919       break;
5920
5921     case 0x0f35:    /* sysexit */
5922       printf_unfiltered (_("Process record does not support "
5923                            "instruction sysexit.\n"));
5924       ir.addr -= 2;
5925       goto no_support;
5926       break;
5927
5928     case 0x0f05:    /* syscall */
5929       {
5930         int ret;
5931         if (tdep->i386_syscall_record == NULL)
5932           {
5933             printf_unfiltered (_("Process record does not support "
5934                                  "instruction syscall.\n"));
5935             ir.addr -= 2;
5936             goto no_support;
5937           }
5938         ret = tdep->i386_syscall_record (ir.regcache);
5939         if (ret)
5940           return ret;
5941       }
5942       break;
5943
5944     case 0x0f07:    /* sysret */
5945       printf_unfiltered (_("Process record does not support "
5946                            "instruction sysret.\n"));
5947       ir.addr -= 2;
5948       goto no_support;
5949       break;
5950
5951     case 0x0fa2:    /* cpuid */
5952       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5953       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5954       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5955       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
5956       break;
5957
5958     case 0xf4:    /* hlt */
5959       printf_unfiltered (_("Process record does not support "
5960                            "instruction hlt.\n"));
5961       ir.addr -= 1;
5962       goto no_support;
5963       break;
5964
5965     case 0x0f00:
5966       if (i386_record_modrm (&ir))
5967         return -1;
5968       switch (ir.reg)
5969         {
5970         case 0:  /* sldt */
5971         case 1:  /* str  */
5972           if (ir.mod == 3)
5973             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5974           else
5975             {
5976               ir.ot = OT_WORD;
5977               if (i386_record_lea_modrm (&ir))
5978                 return -1;
5979             }
5980           break;
5981         case 2:  /* lldt */
5982         case 3:  /* ltr */
5983           break;
5984         case 4:  /* verr */
5985         case 5:  /* verw */
5986           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5987           break;
5988         default:
5989           ir.addr -= 3;
5990           opcode = opcode << 8 | ir.modrm;
5991           goto no_support;
5992           break;
5993         }
5994       break;
5995
5996     case 0x0f01:
5997       if (i386_record_modrm (&ir))
5998         return -1;
5999       switch (ir.reg)
6000         {
6001         case 0:  /* sgdt */
6002           {
6003             uint64_t addr64;
6004
6005             if (ir.mod == 3)
6006               {
6007                 ir.addr -= 3;
6008                 opcode = opcode << 8 | ir.modrm;
6009                 goto no_support;
6010               }
6011             if (ir.override >= 0)
6012               {
6013                 if (record_memory_query)
6014                   {
6015                     int q;
6016
6017                     target_terminal_ours ();
6018                     q = yquery (_("\
6019 Process record ignores the memory change of instruction at address %s\n\
6020 because it can't get the value of the segment register.\n\
6021 Do you want to stop the program?"),
6022                                 paddress (gdbarch, ir.orig_addr));
6023                     target_terminal_inferior ();
6024                     if (q)
6025                       return -1;
6026                   }
6027               }
6028             else
6029               {
6030                 if (i386_record_lea_modrm_addr (&ir, &addr64))
6031                   return -1;
6032                 if (record_arch_list_add_mem (addr64, 2))
6033                   return -1;
6034                 addr64 += 2;
6035                 if (ir.regmap[X86_RECORD_R8_REGNUM])
6036                   {
6037                     if (record_arch_list_add_mem (addr64, 8))
6038                       return -1;
6039                   }
6040                 else
6041                   {
6042                     if (record_arch_list_add_mem (addr64, 4))
6043                       return -1;
6044                   }
6045               }
6046           }
6047           break;
6048         case 1:
6049           if (ir.mod == 3)
6050             {
6051               switch (ir.rm)
6052                 {
6053                 case 0:  /* monitor */
6054                   break;
6055                 case 1:  /* mwait */
6056                   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6057                   break;
6058                 default:
6059                   ir.addr -= 3;
6060                   opcode = opcode << 8 | ir.modrm;
6061                   goto no_support;
6062                   break;
6063                 }
6064             }
6065           else
6066             {
6067               /* sidt */
6068               if (ir.override >= 0)
6069                 {
6070                   if (record_memory_query)
6071                     {
6072                       int q;
6073
6074                       target_terminal_ours ();
6075                       q = yquery (_("\
6076 Process record ignores the memory change of instruction at address %s\n\
6077 because it can't get the value of the segment register.\n\
6078 Do you want to stop the program?"),
6079                                   paddress (gdbarch, ir.orig_addr));
6080                       target_terminal_inferior ();
6081                       if (q)
6082                         return -1;
6083                     }
6084                 }
6085               else
6086                 {
6087                   uint64_t addr64;
6088
6089                   if (i386_record_lea_modrm_addr (&ir, &addr64))
6090                     return -1;
6091                   if (record_arch_list_add_mem (addr64, 2))
6092                     return -1;
6093                   addr64 += 2;
6094                   if (ir.regmap[X86_RECORD_R8_REGNUM])
6095                     {
6096                       if (record_arch_list_add_mem (addr64, 8))
6097                         return -1;
6098                     }
6099                   else
6100                     {
6101                       if (record_arch_list_add_mem (addr64, 4))
6102                         return -1;
6103                     }
6104                 }
6105             }
6106           break;
6107         case 2:  /* lgdt */
6108           if (ir.mod == 3)
6109             {
6110               /* xgetbv */
6111               if (ir.rm == 0)
6112                 {
6113                   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6114                   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6115                   break;
6116                 }
6117               /* xsetbv */
6118               else if (ir.rm == 1)
6119                 break;
6120             }
6121         case 3:  /* lidt */
6122           if (ir.mod == 3)
6123             {
6124               ir.addr -= 3;
6125               opcode = opcode << 8 | ir.modrm;
6126               goto no_support;
6127             }
6128           break;
6129         case 4:  /* smsw */
6130           if (ir.mod == 3)
6131             {
6132               if (record_arch_list_add_reg (ir.regcache, ir.rm | ir.rex_b))
6133                 return -1;
6134             }
6135           else
6136             {
6137               ir.ot = OT_WORD;
6138               if (i386_record_lea_modrm (&ir))
6139                 return -1;
6140             }
6141           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6142           break;
6143         case 6:  /* lmsw */
6144           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6145           break;
6146         case 7:  /* invlpg */
6147           if (ir.mod == 3)
6148             {
6149               if (ir.rm == 0 && ir.regmap[X86_RECORD_R8_REGNUM])
6150                 I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
6151               else
6152                 {
6153                   ir.addr -= 3;
6154                   opcode = opcode << 8 | ir.modrm;
6155                   goto no_support;
6156                 }
6157             }
6158           else
6159             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6160           break;
6161         default:
6162           ir.addr -= 3;
6163           opcode = opcode << 8 | ir.modrm;
6164           goto no_support;
6165           break;
6166         }
6167       break;
6168
6169     case 0x0f08:    /* invd */
6170     case 0x0f09:    /* wbinvd */
6171       break;
6172
6173     case 0x63:    /* arpl */
6174       if (i386_record_modrm (&ir))
6175         return -1;
6176       if (ir.mod == 3 || ir.regmap[X86_RECORD_R8_REGNUM])
6177         {
6178           I386_RECORD_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM]
6179                                            ? (ir.reg | rex_r) : ir.rm);
6180         }
6181       else
6182         {
6183           ir.ot = ir.dflag ? OT_LONG : OT_WORD;
6184           if (i386_record_lea_modrm (&ir))
6185             return -1;
6186         }
6187       if (!ir.regmap[X86_RECORD_R8_REGNUM])
6188         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6189       break;
6190
6191     case 0x0f02:    /* lar */
6192     case 0x0f03:    /* lsl */
6193       if (i386_record_modrm (&ir))
6194         return -1;
6195       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
6196       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6197       break;
6198
6199     case 0x0f18:
6200       if (i386_record_modrm (&ir))
6201         return -1;
6202       if (ir.mod == 3 && ir.reg == 3)
6203         {
6204           ir.addr -= 3;
6205           opcode = opcode << 8 | ir.modrm;
6206           goto no_support;
6207         }
6208       break;
6209
6210     case 0x0f19:
6211     case 0x0f1a:
6212     case 0x0f1b:
6213     case 0x0f1c:
6214     case 0x0f1d:
6215     case 0x0f1e:
6216     case 0x0f1f:
6217       /* nop (multi byte) */
6218       break;
6219
6220     case 0x0f20:    /* mov reg, crN */
6221     case 0x0f22:    /* mov crN, reg */
6222       if (i386_record_modrm (&ir))
6223         return -1;
6224       if ((ir.modrm & 0xc0) != 0xc0)
6225         {
6226           ir.addr -= 3;
6227           opcode = opcode << 8 | ir.modrm;
6228           goto no_support;
6229         }
6230       switch (ir.reg)
6231         {
6232         case 0:
6233         case 2:
6234         case 3:
6235         case 4:
6236         case 8:
6237           if (opcode & 2)
6238             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6239           else
6240             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6241           break;
6242         default:
6243           ir.addr -= 3;
6244           opcode = opcode << 8 | ir.modrm;
6245           goto no_support;
6246           break;
6247         }
6248       break;
6249
6250     case 0x0f21:    /* mov reg, drN */
6251     case 0x0f23:    /* mov drN, reg */
6252       if (i386_record_modrm (&ir))
6253         return -1;
6254       if ((ir.modrm & 0xc0) != 0xc0 || ir.reg == 4
6255           || ir.reg == 5 || ir.reg >= 8)
6256         {
6257           ir.addr -= 3;
6258           opcode = opcode << 8 | ir.modrm;
6259           goto no_support;
6260         }
6261       if (opcode & 2)
6262         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6263       else
6264         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6265       break;
6266
6267     case 0x0f06:    /* clts */
6268       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6269       break;
6270
6271     /* MMX 3DNow! SSE SSE2 SSE3 SSSE3 SSE4 */
6272
6273     case 0x0f0d:    /* 3DNow! prefetch */
6274       break;
6275
6276     case 0x0f0e:    /* 3DNow! femms */
6277     case 0x0f77:    /* emms */
6278       if (i386_fpc_regnum_p (gdbarch, I387_FTAG_REGNUM(tdep)))
6279         goto no_support;
6280       record_arch_list_add_reg (ir.regcache, I387_FTAG_REGNUM(tdep));
6281       break;
6282
6283     case 0x0f0f:    /* 3DNow! data */
6284       if (i386_record_modrm (&ir))
6285         return -1;
6286       if (target_read_memory (ir.addr, &opcode8, 1))
6287         {
6288           printf_unfiltered (_("Process record: error reading memory at "
6289                                "addr %s len = 1.\n"),
6290                              paddress (gdbarch, ir.addr));
6291           return -1;
6292         }
6293       ir.addr++;
6294       switch (opcode8)
6295         {
6296         case 0x0c:    /* 3DNow! pi2fw */
6297         case 0x0d:    /* 3DNow! pi2fd */
6298         case 0x1c:    /* 3DNow! pf2iw */
6299         case 0x1d:    /* 3DNow! pf2id */
6300         case 0x8a:    /* 3DNow! pfnacc */
6301         case 0x8e:    /* 3DNow! pfpnacc */
6302         case 0x90:    /* 3DNow! pfcmpge */
6303         case 0x94:    /* 3DNow! pfmin */
6304         case 0x96:    /* 3DNow! pfrcp */
6305         case 0x97:    /* 3DNow! pfrsqrt */
6306         case 0x9a:    /* 3DNow! pfsub */
6307         case 0x9e:    /* 3DNow! pfadd */
6308         case 0xa0:    /* 3DNow! pfcmpgt */
6309         case 0xa4:    /* 3DNow! pfmax */
6310         case 0xa6:    /* 3DNow! pfrcpit1 */
6311         case 0xa7:    /* 3DNow! pfrsqit1 */
6312         case 0xaa:    /* 3DNow! pfsubr */
6313         case 0xae:    /* 3DNow! pfacc */
6314         case 0xb0:    /* 3DNow! pfcmpeq */
6315         case 0xb4:    /* 3DNow! pfmul */
6316         case 0xb6:    /* 3DNow! pfrcpit2 */
6317         case 0xb7:    /* 3DNow! pmulhrw */
6318         case 0xbb:    /* 3DNow! pswapd */
6319         case 0xbf:    /* 3DNow! pavgusb */
6320           if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
6321             goto no_support_3dnow_data;
6322           record_arch_list_add_reg (ir.regcache, ir.reg);
6323           break;
6324
6325         default:
6326 no_support_3dnow_data:
6327           opcode = (opcode << 8) | opcode8;
6328           goto no_support;
6329           break;
6330         }
6331       break;
6332
6333     case 0x0faa:    /* rsm */
6334       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6335       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6336       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
6337       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6338       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
6339       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
6340       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
6341       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
6342       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
6343       break;
6344
6345     case 0x0fae:
6346       if (i386_record_modrm (&ir))
6347         return -1;
6348       switch(ir.reg)
6349         {
6350         case 0:    /* fxsave */
6351           {
6352             uint64_t tmpu64;
6353
6354             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6355             if (i386_record_lea_modrm_addr (&ir, &tmpu64))
6356               return -1;
6357             if (record_arch_list_add_mem (tmpu64, 512))
6358               return -1;
6359           }
6360           break;
6361
6362         case 1:    /* fxrstor */
6363           {
6364             int i;
6365
6366             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6367
6368             for (i = I387_MM0_REGNUM (tdep);
6369                  i386_mmx_regnum_p (gdbarch, i); i++)
6370               record_arch_list_add_reg (ir.regcache, i);
6371
6372             for (i = I387_XMM0_REGNUM (tdep);
6373                  i386_xmm_regnum_p (gdbarch, i); i++)
6374               record_arch_list_add_reg (ir.regcache, i);
6375
6376             if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
6377               record_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
6378
6379             for (i = I387_ST0_REGNUM (tdep);
6380                  i386_fp_regnum_p (gdbarch, i); i++)
6381               record_arch_list_add_reg (ir.regcache, i);
6382
6383             for (i = I387_FCTRL_REGNUM (tdep);
6384                  i386_fpc_regnum_p (gdbarch, i); i++)
6385               record_arch_list_add_reg (ir.regcache, i);
6386           }
6387           break;
6388
6389         case 2:    /* ldmxcsr */
6390           if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
6391             goto no_support;
6392           record_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
6393           break;
6394
6395         case 3:    /* stmxcsr */
6396           ir.ot = OT_LONG;
6397           if (i386_record_lea_modrm (&ir))
6398             return -1;
6399           break;
6400
6401         case 5:    /* lfence */
6402         case 6:    /* mfence */
6403         case 7:    /* sfence clflush */
6404           break;
6405
6406         default:
6407           opcode = (opcode << 8) | ir.modrm;
6408           goto no_support;
6409           break;
6410         }
6411       break;
6412
6413     case 0x0fc3:    /* movnti */
6414       ir.ot = (ir.dflag == 2) ? OT_QUAD : OT_LONG;
6415       if (i386_record_modrm (&ir))
6416         return -1;
6417       if (ir.mod == 3)
6418         goto no_support;
6419       ir.reg |= rex_r;
6420       if (i386_record_lea_modrm (&ir))
6421         return -1;
6422       break;
6423
6424     /* Add prefix to opcode.  */
6425     case 0x0f10:
6426     case 0x0f11:
6427     case 0x0f12:
6428     case 0x0f13:
6429     case 0x0f14:
6430     case 0x0f15:
6431     case 0x0f16:
6432     case 0x0f17:
6433     case 0x0f28:
6434     case 0x0f29:
6435     case 0x0f2a:
6436     case 0x0f2b:
6437     case 0x0f2c:
6438     case 0x0f2d:
6439     case 0x0f2e:
6440     case 0x0f2f:
6441     case 0x0f38:
6442     case 0x0f39:
6443     case 0x0f3a:
6444     case 0x0f50:
6445     case 0x0f51:
6446     case 0x0f52:
6447     case 0x0f53:
6448     case 0x0f54:
6449     case 0x0f55:
6450     case 0x0f56:
6451     case 0x0f57:
6452     case 0x0f58:
6453     case 0x0f59:
6454     case 0x0f5a:
6455     case 0x0f5b:
6456     case 0x0f5c:
6457     case 0x0f5d:
6458     case 0x0f5e:
6459     case 0x0f5f:
6460     case 0x0f60:
6461     case 0x0f61:
6462     case 0x0f62:
6463     case 0x0f63:
6464     case 0x0f64:
6465     case 0x0f65:
6466     case 0x0f66:
6467     case 0x0f67:
6468     case 0x0f68:
6469     case 0x0f69:
6470     case 0x0f6a:
6471     case 0x0f6b:
6472     case 0x0f6c:
6473     case 0x0f6d:
6474     case 0x0f6e:
6475     case 0x0f6f:
6476     case 0x0f70:
6477     case 0x0f71:
6478     case 0x0f72:
6479     case 0x0f73:
6480     case 0x0f74:
6481     case 0x0f75:
6482     case 0x0f76:
6483     case 0x0f7c:
6484     case 0x0f7d:
6485     case 0x0f7e:
6486     case 0x0f7f:
6487     case 0x0fb8:
6488     case 0x0fc2:
6489     case 0x0fc4:
6490     case 0x0fc5:
6491     case 0x0fc6:
6492     case 0x0fd0:
6493     case 0x0fd1:
6494     case 0x0fd2:
6495     case 0x0fd3:
6496     case 0x0fd4:
6497     case 0x0fd5:
6498     case 0x0fd6:
6499     case 0x0fd7:
6500     case 0x0fd8:
6501     case 0x0fd9:
6502     case 0x0fda:
6503     case 0x0fdb:
6504     case 0x0fdc:
6505     case 0x0fdd:
6506     case 0x0fde:
6507     case 0x0fdf:
6508     case 0x0fe0:
6509     case 0x0fe1:
6510     case 0x0fe2:
6511     case 0x0fe3:
6512     case 0x0fe4:
6513     case 0x0fe5:
6514     case 0x0fe6:
6515     case 0x0fe7:
6516     case 0x0fe8:
6517     case 0x0fe9:
6518     case 0x0fea:
6519     case 0x0feb:
6520     case 0x0fec:
6521     case 0x0fed:
6522     case 0x0fee:
6523     case 0x0fef:
6524     case 0x0ff0:
6525     case 0x0ff1:
6526     case 0x0ff2:
6527     case 0x0ff3:
6528     case 0x0ff4:
6529     case 0x0ff5:
6530     case 0x0ff6:
6531     case 0x0ff7:
6532     case 0x0ff8:
6533     case 0x0ff9:
6534     case 0x0ffa:
6535     case 0x0ffb:
6536     case 0x0ffc:
6537     case 0x0ffd:
6538     case 0x0ffe:
6539       switch (prefixes)
6540         {
6541         case PREFIX_REPNZ:
6542           opcode |= 0xf20000;
6543           break;
6544         case PREFIX_DATA:
6545           opcode |= 0x660000;
6546           break;
6547         case PREFIX_REPZ:
6548           opcode |= 0xf30000;
6549           break;
6550         }
6551 reswitch_prefix_add:
6552       switch (opcode)
6553         {
6554         case 0x0f38:
6555         case 0x660f38:
6556         case 0xf20f38:
6557         case 0x0f3a:
6558         case 0x660f3a:
6559           if (target_read_memory (ir.addr, &opcode8, 1))
6560             {
6561               printf_unfiltered (_("Process record: error reading memory at "
6562                                    "addr %s len = 1.\n"),
6563                                  paddress (gdbarch, ir.addr));
6564               return -1;
6565             }
6566           ir.addr++;
6567           opcode = (uint32_t) opcode8 | opcode << 8;
6568           goto reswitch_prefix_add;
6569           break;
6570
6571         case 0x0f10:        /* movups */
6572         case 0x660f10:      /* movupd */
6573         case 0xf30f10:      /* movss */
6574         case 0xf20f10:      /* movsd */
6575         case 0x0f12:        /* movlps */
6576         case 0x660f12:      /* movlpd */
6577         case 0xf30f12:      /* movsldup */
6578         case 0xf20f12:      /* movddup */
6579         case 0x0f14:        /* unpcklps */
6580         case 0x660f14:      /* unpcklpd */
6581         case 0x0f15:        /* unpckhps */
6582         case 0x660f15:      /* unpckhpd */
6583         case 0x0f16:        /* movhps */
6584         case 0x660f16:      /* movhpd */
6585         case 0xf30f16:      /* movshdup */
6586         case 0x0f28:        /* movaps */
6587         case 0x660f28:      /* movapd */
6588         case 0x0f2a:        /* cvtpi2ps */
6589         case 0x660f2a:      /* cvtpi2pd */
6590         case 0xf30f2a:      /* cvtsi2ss */
6591         case 0xf20f2a:      /* cvtsi2sd */
6592         case 0x0f2c:        /* cvttps2pi */
6593         case 0x660f2c:      /* cvttpd2pi */
6594         case 0x0f2d:        /* cvtps2pi */
6595         case 0x660f2d:      /* cvtpd2pi */
6596         case 0x660f3800:    /* pshufb */
6597         case 0x660f3801:    /* phaddw */
6598         case 0x660f3802:    /* phaddd */
6599         case 0x660f3803:    /* phaddsw */
6600         case 0x660f3804:    /* pmaddubsw */
6601         case 0x660f3805:    /* phsubw */
6602         case 0x660f3806:    /* phsubd */
6603         case 0x660f3807:    /* phsubsw */
6604         case 0x660f3808:    /* psignb */
6605         case 0x660f3809:    /* psignw */
6606         case 0x660f380a:    /* psignd */
6607         case 0x660f380b:    /* pmulhrsw */
6608         case 0x660f3810:    /* pblendvb */
6609         case 0x660f3814:    /* blendvps */
6610         case 0x660f3815:    /* blendvpd */
6611         case 0x660f381c:    /* pabsb */
6612         case 0x660f381d:    /* pabsw */
6613         case 0x660f381e:    /* pabsd */
6614         case 0x660f3820:    /* pmovsxbw */
6615         case 0x660f3821:    /* pmovsxbd */
6616         case 0x660f3822:    /* pmovsxbq */
6617         case 0x660f3823:    /* pmovsxwd */
6618         case 0x660f3824:    /* pmovsxwq */
6619         case 0x660f3825:    /* pmovsxdq */
6620         case 0x660f3828:    /* pmuldq */
6621         case 0x660f3829:    /* pcmpeqq */
6622         case 0x660f382a:    /* movntdqa */
6623         case 0x660f3a08:    /* roundps */
6624         case 0x660f3a09:    /* roundpd */
6625         case 0x660f3a0a:    /* roundss */
6626         case 0x660f3a0b:    /* roundsd */
6627         case 0x660f3a0c:    /* blendps */
6628         case 0x660f3a0d:    /* blendpd */
6629         case 0x660f3a0e:    /* pblendw */
6630         case 0x660f3a0f:    /* palignr */
6631         case 0x660f3a20:    /* pinsrb */
6632         case 0x660f3a21:    /* insertps */
6633         case 0x660f3a22:    /* pinsrd pinsrq */
6634         case 0x660f3a40:    /* dpps */
6635         case 0x660f3a41:    /* dppd */
6636         case 0x660f3a42:    /* mpsadbw */
6637         case 0x660f3a60:    /* pcmpestrm */
6638         case 0x660f3a61:    /* pcmpestri */
6639         case 0x660f3a62:    /* pcmpistrm */
6640         case 0x660f3a63:    /* pcmpistri */
6641         case 0x0f51:        /* sqrtps */
6642         case 0x660f51:      /* sqrtpd */
6643         case 0xf20f51:      /* sqrtsd */
6644         case 0xf30f51:      /* sqrtss */
6645         case 0x0f52:        /* rsqrtps */
6646         case 0xf30f52:      /* rsqrtss */
6647         case 0x0f53:        /* rcpps */
6648         case 0xf30f53:      /* rcpss */
6649         case 0x0f54:        /* andps */
6650         case 0x660f54:      /* andpd */
6651         case 0x0f55:        /* andnps */
6652         case 0x660f55:      /* andnpd */
6653         case 0x0f56:        /* orps */
6654         case 0x660f56:      /* orpd */
6655         case 0x0f57:        /* xorps */
6656         case 0x660f57:      /* xorpd */
6657         case 0x0f58:        /* addps */
6658         case 0x660f58:      /* addpd */
6659         case 0xf20f58:      /* addsd */
6660         case 0xf30f58:      /* addss */
6661         case 0x0f59:        /* mulps */
6662         case 0x660f59:      /* mulpd */
6663         case 0xf20f59:      /* mulsd */
6664         case 0xf30f59:      /* mulss */
6665         case 0x0f5a:        /* cvtps2pd */
6666         case 0x660f5a:      /* cvtpd2ps */
6667         case 0xf20f5a:      /* cvtsd2ss */
6668         case 0xf30f5a:      /* cvtss2sd */
6669         case 0x0f5b:        /* cvtdq2ps */
6670         case 0x660f5b:      /* cvtps2dq */
6671         case 0xf30f5b:      /* cvttps2dq */
6672         case 0x0f5c:        /* subps */
6673         case 0x660f5c:      /* subpd */
6674         case 0xf20f5c:      /* subsd */
6675         case 0xf30f5c:      /* subss */
6676         case 0x0f5d:        /* minps */
6677         case 0x660f5d:      /* minpd */
6678         case 0xf20f5d:      /* minsd */
6679         case 0xf30f5d:      /* minss */
6680         case 0x0f5e:        /* divps */
6681         case 0x660f5e:      /* divpd */
6682         case 0xf20f5e:      /* divsd */
6683         case 0xf30f5e:      /* divss */
6684         case 0x0f5f:        /* maxps */
6685         case 0x660f5f:      /* maxpd */
6686         case 0xf20f5f:      /* maxsd */
6687         case 0xf30f5f:      /* maxss */
6688         case 0x660f60:      /* punpcklbw */
6689         case 0x660f61:      /* punpcklwd */
6690         case 0x660f62:      /* punpckldq */
6691         case 0x660f63:      /* packsswb */
6692         case 0x660f64:      /* pcmpgtb */
6693         case 0x660f65:      /* pcmpgtw */
6694         case 0x660f66:      /* pcmpgtd */
6695         case 0x660f67:      /* packuswb */
6696         case 0x660f68:      /* punpckhbw */
6697         case 0x660f69:      /* punpckhwd */
6698         case 0x660f6a:      /* punpckhdq */
6699         case 0x660f6b:      /* packssdw */
6700         case 0x660f6c:      /* punpcklqdq */
6701         case 0x660f6d:      /* punpckhqdq */
6702         case 0x660f6e:      /* movd */
6703         case 0x660f6f:      /* movdqa */
6704         case 0xf30f6f:      /* movdqu */
6705         case 0x660f70:      /* pshufd */
6706         case 0xf20f70:      /* pshuflw */
6707         case 0xf30f70:      /* pshufhw */
6708         case 0x660f74:      /* pcmpeqb */
6709         case 0x660f75:      /* pcmpeqw */
6710         case 0x660f76:      /* pcmpeqd */
6711         case 0x660f7c:      /* haddpd */
6712         case 0xf20f7c:      /* haddps */
6713         case 0x660f7d:      /* hsubpd */
6714         case 0xf20f7d:      /* hsubps */
6715         case 0xf30f7e:      /* movq */
6716         case 0x0fc2:        /* cmpps */
6717         case 0x660fc2:      /* cmppd */
6718         case 0xf20fc2:      /* cmpsd */
6719         case 0xf30fc2:      /* cmpss */
6720         case 0x660fc4:      /* pinsrw */
6721         case 0x0fc6:        /* shufps */
6722         case 0x660fc6:      /* shufpd */
6723         case 0x660fd0:      /* addsubpd */
6724         case 0xf20fd0:      /* addsubps */
6725         case 0x660fd1:      /* psrlw */
6726         case 0x660fd2:      /* psrld */
6727         case 0x660fd3:      /* psrlq */
6728         case 0x660fd4:      /* paddq */
6729         case 0x660fd5:      /* pmullw */
6730         case 0xf30fd6:      /* movq2dq */
6731         case 0x660fd8:      /* psubusb */
6732         case 0x660fd9:      /* psubusw */
6733         case 0x660fda:      /* pminub */
6734         case 0x660fdb:      /* pand */
6735         case 0x660fdc:      /* paddusb */
6736         case 0x660fdd:      /* paddusw */
6737         case 0x660fde:      /* pmaxub */
6738         case 0x660fdf:      /* pandn */
6739         case 0x660fe0:      /* pavgb */
6740         case 0x660fe1:      /* psraw */
6741         case 0x660fe2:      /* psrad */
6742         case 0x660fe3:      /* pavgw */
6743         case 0x660fe4:      /* pmulhuw */
6744         case 0x660fe5:      /* pmulhw */
6745         case 0x660fe6:      /* cvttpd2dq */
6746         case 0xf20fe6:      /* cvtpd2dq */
6747         case 0xf30fe6:      /* cvtdq2pd */
6748         case 0x660fe8:      /* psubsb */
6749         case 0x660fe9:      /* psubsw */
6750         case 0x660fea:      /* pminsw */
6751         case 0x660feb:      /* por */
6752         case 0x660fec:      /* paddsb */
6753         case 0x660fed:      /* paddsw */
6754         case 0x660fee:      /* pmaxsw */
6755         case 0x660fef:      /* pxor */
6756         case 0xf20ff0:      /* lddqu */
6757         case 0x660ff1:      /* psllw */
6758         case 0x660ff2:      /* pslld */
6759         case 0x660ff3:      /* psllq */
6760         case 0x660ff4:      /* pmuludq */
6761         case 0x660ff5:      /* pmaddwd */
6762         case 0x660ff6:      /* psadbw */
6763         case 0x660ff8:      /* psubb */
6764         case 0x660ff9:      /* psubw */
6765         case 0x660ffa:      /* psubd */
6766         case 0x660ffb:      /* psubq */
6767         case 0x660ffc:      /* paddb */
6768         case 0x660ffd:      /* paddw */
6769         case 0x660ffe:      /* paddd */
6770           if (i386_record_modrm (&ir))
6771             return -1;
6772           ir.reg |= rex_r;
6773           if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg))
6774             goto no_support;
6775           record_arch_list_add_reg (ir.regcache,
6776                                     I387_XMM0_REGNUM (tdep) + ir.reg);
6777           if ((opcode & 0xfffffffc) == 0x660f3a60)
6778             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6779           break;
6780
6781         case 0x0f11:        /* movups */
6782         case 0x660f11:      /* movupd */
6783         case 0xf30f11:      /* movss */
6784         case 0xf20f11:      /* movsd */
6785         case 0x0f13:        /* movlps */
6786         case 0x660f13:      /* movlpd */
6787         case 0x0f17:        /* movhps */
6788         case 0x660f17:      /* movhpd */
6789         case 0x0f29:        /* movaps */
6790         case 0x660f29:      /* movapd */
6791         case 0x660f3a14:    /* pextrb */
6792         case 0x660f3a15:    /* pextrw */
6793         case 0x660f3a16:    /* pextrd pextrq */
6794         case 0x660f3a17:    /* extractps */
6795         case 0x660f7f:      /* movdqa */
6796         case 0xf30f7f:      /* movdqu */
6797           if (i386_record_modrm (&ir))
6798             return -1;
6799           if (ir.mod == 3)
6800             {
6801               if (opcode == 0x0f13 || opcode == 0x660f13
6802                   || opcode == 0x0f17 || opcode == 0x660f17)
6803                 goto no_support;
6804               ir.rm |= ir.rex_b;
6805               if (!i386_xmm_regnum_p (gdbarch,
6806                                       I387_XMM0_REGNUM (tdep) + ir.rm))
6807                 goto no_support;
6808               record_arch_list_add_reg (ir.regcache,
6809                                         I387_XMM0_REGNUM (tdep) + ir.rm);
6810             }
6811           else
6812             {
6813               switch (opcode)
6814                 {
6815                   case 0x660f3a14:
6816                     ir.ot = OT_BYTE;
6817                     break;
6818                   case 0x660f3a15:
6819                     ir.ot = OT_WORD;
6820                     break;
6821                   case 0x660f3a16:
6822                     ir.ot = OT_LONG;
6823                     break;
6824                   case 0x660f3a17:
6825                     ir.ot = OT_QUAD;
6826                     break;
6827                   default:
6828                     ir.ot = OT_DQUAD;
6829                     break;
6830                 }
6831               if (i386_record_lea_modrm (&ir))
6832                 return -1;
6833             }
6834           break;
6835
6836         case 0x0f2b:      /* movntps */
6837         case 0x660f2b:    /* movntpd */
6838         case 0x0fe7:      /* movntq */
6839         case 0x660fe7:    /* movntdq */
6840           if (ir.mod == 3)
6841             goto no_support;
6842           if (opcode == 0x0fe7)
6843             ir.ot = OT_QUAD;
6844           else
6845             ir.ot = OT_DQUAD;
6846           if (i386_record_lea_modrm (&ir))
6847             return -1;
6848           break;
6849
6850         case 0xf30f2c:      /* cvttss2si */
6851         case 0xf20f2c:      /* cvttsd2si */
6852         case 0xf30f2d:      /* cvtss2si */
6853         case 0xf20f2d:      /* cvtsd2si */
6854         case 0xf20f38f0:    /* crc32 */
6855         case 0xf20f38f1:    /* crc32 */
6856         case 0x0f50:        /* movmskps */
6857         case 0x660f50:      /* movmskpd */
6858         case 0x0fc5:        /* pextrw */
6859         case 0x660fc5:      /* pextrw */
6860         case 0x0fd7:        /* pmovmskb */
6861         case 0x660fd7:      /* pmovmskb */
6862           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
6863           break;
6864
6865         case 0x0f3800:    /* pshufb */
6866         case 0x0f3801:    /* phaddw */
6867         case 0x0f3802:    /* phaddd */
6868         case 0x0f3803:    /* phaddsw */
6869         case 0x0f3804:    /* pmaddubsw */
6870         case 0x0f3805:    /* phsubw */
6871         case 0x0f3806:    /* phsubd */
6872         case 0x0f3807:    /* phsubsw */
6873         case 0x0f3808:    /* psignb */
6874         case 0x0f3809:    /* psignw */
6875         case 0x0f380a:    /* psignd */
6876         case 0x0f380b:    /* pmulhrsw */
6877         case 0x0f381c:    /* pabsb */
6878         case 0x0f381d:    /* pabsw */
6879         case 0x0f381e:    /* pabsd */
6880         case 0x0f382b:    /* packusdw */
6881         case 0x0f3830:    /* pmovzxbw */
6882         case 0x0f3831:    /* pmovzxbd */
6883         case 0x0f3832:    /* pmovzxbq */
6884         case 0x0f3833:    /* pmovzxwd */
6885         case 0x0f3834:    /* pmovzxwq */
6886         case 0x0f3835:    /* pmovzxdq */
6887         case 0x0f3837:    /* pcmpgtq */
6888         case 0x0f3838:    /* pminsb */
6889         case 0x0f3839:    /* pminsd */
6890         case 0x0f383a:    /* pminuw */
6891         case 0x0f383b:    /* pminud */
6892         case 0x0f383c:    /* pmaxsb */
6893         case 0x0f383d:    /* pmaxsd */
6894         case 0x0f383e:    /* pmaxuw */
6895         case 0x0f383f:    /* pmaxud */
6896         case 0x0f3840:    /* pmulld */
6897         case 0x0f3841:    /* phminposuw */
6898         case 0x0f3a0f:    /* palignr */
6899         case 0x0f60:      /* punpcklbw */
6900         case 0x0f61:      /* punpcklwd */
6901         case 0x0f62:      /* punpckldq */
6902         case 0x0f63:      /* packsswb */
6903         case 0x0f64:      /* pcmpgtb */
6904         case 0x0f65:      /* pcmpgtw */
6905         case 0x0f66:      /* pcmpgtd */
6906         case 0x0f67:      /* packuswb */
6907         case 0x0f68:      /* punpckhbw */
6908         case 0x0f69:      /* punpckhwd */
6909         case 0x0f6a:      /* punpckhdq */
6910         case 0x0f6b:      /* packssdw */
6911         case 0x0f6e:      /* movd */
6912         case 0x0f6f:      /* movq */
6913         case 0x0f70:      /* pshufw */
6914         case 0x0f74:      /* pcmpeqb */
6915         case 0x0f75:      /* pcmpeqw */
6916         case 0x0f76:      /* pcmpeqd */
6917         case 0x0fc4:      /* pinsrw */
6918         case 0x0fd1:      /* psrlw */
6919         case 0x0fd2:      /* psrld */
6920         case 0x0fd3:      /* psrlq */
6921         case 0x0fd4:      /* paddq */
6922         case 0x0fd5:      /* pmullw */
6923         case 0xf20fd6:    /* movdq2q */
6924         case 0x0fd8:      /* psubusb */
6925         case 0x0fd9:      /* psubusw */
6926         case 0x0fda:      /* pminub */
6927         case 0x0fdb:      /* pand */
6928         case 0x0fdc:      /* paddusb */
6929         case 0x0fdd:      /* paddusw */
6930         case 0x0fde:      /* pmaxub */
6931         case 0x0fdf:      /* pandn */
6932         case 0x0fe0:      /* pavgb */
6933         case 0x0fe1:      /* psraw */
6934         case 0x0fe2:      /* psrad */
6935         case 0x0fe3:      /* pavgw */
6936         case 0x0fe4:      /* pmulhuw */
6937         case 0x0fe5:      /* pmulhw */
6938         case 0x0fe8:      /* psubsb */
6939         case 0x0fe9:      /* psubsw */
6940         case 0x0fea:      /* pminsw */
6941         case 0x0feb:      /* por */
6942         case 0x0fec:      /* paddsb */
6943         case 0x0fed:      /* paddsw */
6944         case 0x0fee:      /* pmaxsw */
6945         case 0x0fef:      /* pxor */
6946         case 0x0ff1:      /* psllw */
6947         case 0x0ff2:      /* pslld */
6948         case 0x0ff3:      /* psllq */
6949         case 0x0ff4:      /* pmuludq */
6950         case 0x0ff5:      /* pmaddwd */
6951         case 0x0ff6:      /* psadbw */
6952         case 0x0ff8:      /* psubb */
6953         case 0x0ff9:      /* psubw */
6954         case 0x0ffa:      /* psubd */
6955         case 0x0ffb:      /* psubq */
6956         case 0x0ffc:      /* paddb */
6957         case 0x0ffd:      /* paddw */
6958         case 0x0ffe:      /* paddd */
6959           if (i386_record_modrm (&ir))
6960             return -1;
6961           if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
6962             goto no_support;
6963           record_arch_list_add_reg (ir.regcache,
6964                                     I387_MM0_REGNUM (tdep) + ir.reg);
6965           break;
6966
6967         case 0x0f71:    /* psllw */
6968         case 0x0f72:    /* pslld */
6969         case 0x0f73:    /* psllq */
6970           if (i386_record_modrm (&ir))
6971             return -1;
6972           if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
6973             goto no_support;
6974           record_arch_list_add_reg (ir.regcache,
6975                                     I387_MM0_REGNUM (tdep) + ir.rm);
6976           break;
6977
6978         case 0x660f71:    /* psllw */
6979         case 0x660f72:    /* pslld */
6980         case 0x660f73:    /* psllq */
6981           if (i386_record_modrm (&ir))
6982             return -1;
6983           ir.rm |= ir.rex_b;
6984           if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm))
6985             goto no_support;
6986           record_arch_list_add_reg (ir.regcache,
6987                                     I387_XMM0_REGNUM (tdep) + ir.rm);
6988           break;
6989
6990         case 0x0f7e:      /* movd */
6991         case 0x660f7e:    /* movd */
6992           if (i386_record_modrm (&ir))
6993             return -1;
6994           if (ir.mod == 3)
6995             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6996           else
6997             {
6998               if (ir.dflag == 2)
6999                 ir.ot = OT_QUAD;
7000               else
7001                 ir.ot = OT_LONG;
7002               if (i386_record_lea_modrm (&ir))
7003                 return -1;
7004             }
7005           break;
7006
7007         case 0x0f7f:    /* movq */
7008           if (i386_record_modrm (&ir))
7009             return -1;
7010           if (ir.mod == 3)
7011             {
7012               if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
7013                 goto no_support;
7014               record_arch_list_add_reg (ir.regcache,
7015                                         I387_MM0_REGNUM (tdep) + ir.rm);
7016             }
7017           else
7018             {
7019               ir.ot = OT_QUAD;
7020               if (i386_record_lea_modrm (&ir))
7021                 return -1;
7022             }
7023           break;
7024
7025         case 0xf30fb8:    /* popcnt */
7026           if (i386_record_modrm (&ir))
7027             return -1;
7028           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
7029           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
7030           break;
7031
7032         case 0x660fd6:    /* movq */
7033           if (i386_record_modrm (&ir))
7034             return -1;
7035           if (ir.mod == 3)
7036             {
7037               ir.rm |= ir.rex_b;
7038               if (!i386_xmm_regnum_p (gdbarch,
7039                                       I387_XMM0_REGNUM (tdep) + ir.rm))
7040                 goto no_support;
7041               record_arch_list_add_reg (ir.regcache,
7042                                         I387_XMM0_REGNUM (tdep) + ir.rm);
7043             }
7044           else
7045             {
7046               ir.ot = OT_QUAD;
7047               if (i386_record_lea_modrm (&ir))
7048                 return -1;
7049             }
7050           break;
7051
7052         case 0x660f3817:    /* ptest */
7053         case 0x0f2e:        /* ucomiss */
7054         case 0x660f2e:      /* ucomisd */
7055         case 0x0f2f:        /* comiss */
7056         case 0x660f2f:      /* comisd */
7057           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
7058           break;
7059
7060         case 0x0ff7:    /* maskmovq */
7061           regcache_raw_read_unsigned (ir.regcache,
7062                                       ir.regmap[X86_RECORD_REDI_REGNUM],
7063                                       &addr);
7064           if (record_arch_list_add_mem (addr, 64))
7065             return -1;
7066           break;
7067
7068         case 0x660ff7:    /* maskmovdqu */
7069           regcache_raw_read_unsigned (ir.regcache,
7070                                       ir.regmap[X86_RECORD_REDI_REGNUM],
7071                                       &addr);
7072           if (record_arch_list_add_mem (addr, 128))
7073             return -1;
7074           break;
7075
7076         default:
7077           goto no_support;
7078           break;
7079         }
7080       break;
7081
7082     default:
7083       goto no_support;
7084       break;
7085     }
7086
7087   /* In the future, maybe still need to deal with need_dasm.  */
7088   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REIP_REGNUM);
7089   if (record_arch_list_add_end ())
7090     return -1;
7091
7092   return 0;
7093
7094  no_support:
7095   printf_unfiltered (_("Process record does not support instruction 0x%02x "
7096                        "at address %s.\n"),
7097                      (unsigned int) (opcode),
7098                      paddress (gdbarch, ir.orig_addr));
7099   return -1;
7100 }
7101
7102 static const int i386_record_regmap[] =
7103 {
7104   I386_EAX_REGNUM, I386_ECX_REGNUM, I386_EDX_REGNUM, I386_EBX_REGNUM,
7105   I386_ESP_REGNUM, I386_EBP_REGNUM, I386_ESI_REGNUM, I386_EDI_REGNUM,
7106   0, 0, 0, 0, 0, 0, 0, 0,
7107   I386_EIP_REGNUM, I386_EFLAGS_REGNUM, I386_CS_REGNUM, I386_SS_REGNUM,
7108   I386_DS_REGNUM, I386_ES_REGNUM, I386_FS_REGNUM, I386_GS_REGNUM
7109 };
7110
7111 /* Check that the given address appears suitable for a fast
7112    tracepoint, which on x86 means that we need an instruction of at
7113    least 5 bytes, so that we can overwrite it with a 4-byte-offset
7114    jump and not have to worry about program jumps to an address in the
7115    middle of the tracepoint jump.  Returns 1 if OK, and writes a size
7116    of instruction to replace, and 0 if not, plus an explanatory
7117    string.  */
7118
7119 static int
7120 i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
7121                                CORE_ADDR addr, int *isize, char **msg)
7122 {
7123   int len, jumplen;
7124   static struct ui_file *gdb_null = NULL;
7125
7126   /* This is based on the target agent using a 4-byte relative jump.
7127      Alternate future possibilities include 8-byte offset for x86-84,
7128      or 3-byte jumps if the program has trampoline space close by.  */
7129   jumplen = 5;
7130
7131   /* Dummy file descriptor for the disassembler.  */
7132   if (!gdb_null)
7133     gdb_null = ui_file_new ();
7134
7135   /* Check for fit.  */
7136   len = gdb_print_insn (gdbarch, addr, gdb_null, NULL);
7137   if (len < jumplen)
7138     {
7139       /* Return a bit of target-specific detail to add to the caller's
7140          generic failure message.  */
7141       if (msg)
7142         *msg = xstrprintf (_("; instruction is only %d bytes long, "
7143                              "need at least %d bytes for the jump"),
7144                            len, jumplen);
7145       return 0;
7146     }
7147
7148   if (isize)
7149     *isize = len;
7150   if (msg)
7151     *msg = NULL;
7152   return 1;
7153 }
7154
7155 static int
7156 i386_validate_tdesc_p (struct gdbarch_tdep *tdep,
7157                        struct tdesc_arch_data *tdesc_data)
7158 {
7159   const struct target_desc *tdesc = tdep->tdesc;
7160   const struct tdesc_feature *feature_core;
7161   const struct tdesc_feature *feature_sse, *feature_avx;
7162   int i, num_regs, valid_p;
7163
7164   if (! tdesc_has_registers (tdesc))
7165     return 0;
7166
7167   /* Get core registers.  */
7168   feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
7169   if (feature_core == NULL)
7170     return 0;
7171
7172   /* Get SSE registers.  */
7173   feature_sse = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.sse");
7174
7175   /* Try AVX registers.  */
7176   feature_avx = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx");
7177
7178   valid_p = 1;
7179
7180   /* The XCR0 bits.  */
7181   if (feature_avx)
7182     {
7183       /* AVX register description requires SSE register description.  */
7184       if (!feature_sse)
7185         return 0;
7186
7187       tdep->xcr0 = I386_XSTATE_AVX_MASK;
7188
7189       /* It may have been set by OSABI initialization function.  */
7190       if (tdep->num_ymm_regs == 0)
7191         {
7192           tdep->ymmh_register_names = i386_ymmh_names;
7193           tdep->num_ymm_regs = 8;
7194           tdep->ymm0h_regnum = I386_YMM0H_REGNUM;
7195         }
7196
7197       for (i = 0; i < tdep->num_ymm_regs; i++)
7198         valid_p &= tdesc_numbered_register (feature_avx, tdesc_data,
7199                                             tdep->ymm0h_regnum + i,
7200                                             tdep->ymmh_register_names[i]);
7201     }
7202   else if (feature_sse)
7203     tdep->xcr0 = I386_XSTATE_SSE_MASK;
7204   else
7205     {
7206       tdep->xcr0 = I386_XSTATE_X87_MASK;
7207       tdep->num_xmm_regs = 0;
7208     }
7209
7210   num_regs = tdep->num_core_regs;
7211   for (i = 0; i < num_regs; i++)
7212     valid_p &= tdesc_numbered_register (feature_core, tdesc_data, i,
7213                                         tdep->register_names[i]);
7214
7215   if (feature_sse)
7216     {
7217       /* Need to include %mxcsr, so add one.  */
7218       num_regs += tdep->num_xmm_regs + 1;
7219       for (; i < num_regs; i++)
7220         valid_p &= tdesc_numbered_register (feature_sse, tdesc_data, i,
7221                                             tdep->register_names[i]);
7222     }
7223
7224   return valid_p;
7225 }
7226
7227 \f
7228 static struct gdbarch *
7229 i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
7230 {
7231   struct gdbarch_tdep *tdep;
7232   struct gdbarch *gdbarch;
7233   struct tdesc_arch_data *tdesc_data;
7234   const struct target_desc *tdesc;
7235   int mm0_regnum;
7236   int ymm0_regnum;
7237
7238   /* If there is already a candidate, use it.  */
7239   arches = gdbarch_list_lookup_by_info (arches, &info);
7240   if (arches != NULL)
7241     return arches->gdbarch;
7242
7243   /* Allocate space for the new architecture.  */
7244   tdep = XCALLOC (1, struct gdbarch_tdep);
7245   gdbarch = gdbarch_alloc (&info, tdep);
7246
7247   /* General-purpose registers.  */
7248   tdep->gregset = NULL;
7249   tdep->gregset_reg_offset = NULL;
7250   tdep->gregset_num_regs = I386_NUM_GREGS;
7251   tdep->sizeof_gregset = 0;
7252
7253   /* Floating-point registers.  */
7254   tdep->fpregset = NULL;
7255   tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
7256
7257   tdep->xstateregset = NULL;
7258
7259   /* The default settings include the FPU registers, the MMX registers
7260      and the SSE registers.  This can be overridden for a specific ABI
7261      by adjusting the members `st0_regnum', `mm0_regnum' and
7262      `num_xmm_regs' of `struct gdbarch_tdep', otherwise the registers
7263      will show up in the output of "info all-registers".  */
7264
7265   tdep->st0_regnum = I386_ST0_REGNUM;
7266
7267   /* I386_NUM_XREGS includes %mxcsr, so substract one.  */
7268   tdep->num_xmm_regs = I386_NUM_XREGS - 1;
7269
7270   tdep->jb_pc_offset = -1;
7271   tdep->struct_return = pcc_struct_return;
7272   tdep->sigtramp_start = 0;
7273   tdep->sigtramp_end = 0;
7274   tdep->sigtramp_p = i386_sigtramp_p;
7275   tdep->sigcontext_addr = NULL;
7276   tdep->sc_reg_offset = NULL;
7277   tdep->sc_pc_offset = -1;
7278   tdep->sc_sp_offset = -1;
7279
7280   tdep->xsave_xcr0_offset = -1;
7281
7282   tdep->record_regmap = i386_record_regmap;
7283
7284   /* The format used for `long double' on almost all i386 targets is
7285      the i387 extended floating-point format.  In fact, of all targets
7286      in the GCC 2.95 tree, only OSF/1 does it different, and insists
7287      on having a `long double' that's not `long' at all.  */
7288   set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
7289
7290   /* Although the i387 extended floating-point has only 80 significant
7291      bits, a `long double' actually takes up 96, probably to enforce
7292      alignment.  */
7293   set_gdbarch_long_double_bit (gdbarch, 96);
7294
7295   /* Register numbers of various important registers.  */
7296   set_gdbarch_sp_regnum (gdbarch, I386_ESP_REGNUM); /* %esp */
7297   set_gdbarch_pc_regnum (gdbarch, I386_EIP_REGNUM); /* %eip */
7298   set_gdbarch_ps_regnum (gdbarch, I386_EFLAGS_REGNUM); /* %eflags */
7299   set_gdbarch_fp0_regnum (gdbarch, I386_ST0_REGNUM); /* %st(0) */
7300
7301   /* NOTE: kettenis/20040418: GCC does have two possible register
7302      numbering schemes on the i386: dbx and SVR4.  These schemes
7303      differ in how they number %ebp, %esp, %eflags, and the
7304      floating-point registers, and are implemented by the arrays
7305      dbx_register_map[] and svr4_dbx_register_map in
7306      gcc/config/i386.c.  GCC also defines a third numbering scheme in
7307      gcc/config/i386.c, which it designates as the "default" register
7308      map used in 64bit mode.  This last register numbering scheme is
7309      implemented in dbx64_register_map, and is used for AMD64; see
7310      amd64-tdep.c.
7311
7312      Currently, each GCC i386 target always uses the same register
7313      numbering scheme across all its supported debugging formats
7314      i.e. SDB (COFF), stabs and DWARF 2.  This is because
7315      gcc/sdbout.c, gcc/dbxout.c and gcc/dwarf2out.c all use the
7316      DBX_REGISTER_NUMBER macro which is defined by each target's
7317      respective config header in a manner independent of the requested
7318      output debugging format.
7319
7320      This does not match the arrangement below, which presumes that
7321      the SDB and stabs numbering schemes differ from the DWARF and
7322      DWARF 2 ones.  The reason for this arrangement is that it is
7323      likely to get the numbering scheme for the target's
7324      default/native debug format right.  For targets where GCC is the
7325      native compiler (FreeBSD, NetBSD, OpenBSD, GNU/Linux) or for
7326      targets where the native toolchain uses a different numbering
7327      scheme for a particular debug format (stabs-in-ELF on Solaris)
7328      the defaults below will have to be overridden, like
7329      i386_elf_init_abi() does.  */
7330
7331   /* Use the dbx register numbering scheme for stabs and COFF.  */
7332   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
7333   set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
7334
7335   /* Use the SVR4 register numbering scheme for DWARF 2.  */
7336   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
7337
7338   /* We don't set gdbarch_stab_reg_to_regnum, since ECOFF doesn't seem to
7339      be in use on any of the supported i386 targets.  */
7340
7341   set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
7342
7343   set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
7344
7345   /* Call dummy code.  */
7346   set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
7347   set_gdbarch_frame_align (gdbarch, i386_frame_align);
7348
7349   set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
7350   set_gdbarch_register_to_value (gdbarch,  i386_register_to_value);
7351   set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
7352
7353   set_gdbarch_return_value (gdbarch, i386_return_value);
7354
7355   set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
7356
7357   /* Stack grows downward.  */
7358   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
7359
7360   set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
7361   set_gdbarch_decr_pc_after_break (gdbarch, 1);
7362   set_gdbarch_max_insn_length (gdbarch, I386_MAX_INSN_LEN);
7363
7364   set_gdbarch_frame_args_skip (gdbarch, 8);
7365
7366   set_gdbarch_print_insn (gdbarch, i386_print_insn);
7367
7368   set_gdbarch_dummy_id (gdbarch, i386_dummy_id);
7369
7370   set_gdbarch_unwind_pc (gdbarch, i386_unwind_pc);
7371
7372   /* Add the i386 register groups.  */
7373   i386_add_reggroups (gdbarch);
7374   tdep->register_reggroup_p = i386_register_reggroup_p;
7375
7376   /* Helper for function argument information.  */
7377   set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
7378
7379   /* Hook the function epilogue frame unwinder.  This unwinder is
7380      appended to the list first, so that it supercedes the DWARF
7381      unwinder in function epilogues (where the DWARF unwinder
7382      currently fails).  */
7383   frame_unwind_append_unwinder (gdbarch, &i386_epilogue_frame_unwind);
7384
7385   /* Hook in the DWARF CFI frame unwinder.  This unwinder is appended
7386      to the list before the prologue-based unwinders, so that DWARF
7387      CFI info will be used if it is available.  */
7388   dwarf2_append_unwinders (gdbarch);
7389
7390   frame_base_set_default (gdbarch, &i386_frame_base);
7391
7392   /* Pseudo registers may be changed by amd64_init_abi.  */
7393   set_gdbarch_pseudo_register_read_value (gdbarch,
7394                                           i386_pseudo_register_read_value);
7395   set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
7396
7397   set_tdesc_pseudo_register_type (gdbarch, i386_pseudo_register_type);
7398   set_tdesc_pseudo_register_name (gdbarch, i386_pseudo_register_name);
7399
7400   /* Override the normal target description method to make the AVX
7401      upper halves anonymous.  */
7402   set_gdbarch_register_name (gdbarch, i386_register_name);
7403
7404   /* Even though the default ABI only includes general-purpose registers,
7405      floating-point registers and the SSE registers, we have to leave a
7406      gap for the upper AVX registers.  */
7407   set_gdbarch_num_regs (gdbarch, I386_AVX_NUM_REGS);
7408
7409   /* Get the x86 target description from INFO.  */
7410   tdesc = info.target_desc;
7411   if (! tdesc_has_registers (tdesc))
7412     tdesc = tdesc_i386;
7413   tdep->tdesc = tdesc;
7414
7415   tdep->num_core_regs = I386_NUM_GREGS + I387_NUM_REGS;
7416   tdep->register_names = i386_register_names;
7417
7418   /* No upper YMM registers.  */
7419   tdep->ymmh_register_names = NULL;
7420   tdep->ymm0h_regnum = -1;
7421
7422   tdep->num_byte_regs = 8;
7423   tdep->num_word_regs = 8;
7424   tdep->num_dword_regs = 0;
7425   tdep->num_mmx_regs = 8;
7426   tdep->num_ymm_regs = 0;
7427
7428   tdesc_data = tdesc_data_alloc ();
7429
7430   set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction);
7431
7432   set_gdbarch_gen_return_address (gdbarch, i386_gen_return_address);
7433
7434   /* Hook in ABI-specific overrides, if they have been registered.  */
7435   info.tdep_info = (void *) tdesc_data;
7436   gdbarch_init_osabi (info, gdbarch);
7437
7438   if (!i386_validate_tdesc_p (tdep, tdesc_data))
7439     {
7440       tdesc_data_cleanup (tdesc_data);
7441       xfree (tdep);
7442       gdbarch_free (gdbarch);
7443       return NULL;
7444     }
7445
7446   /* Wire in pseudo registers.  Number of pseudo registers may be
7447      changed.  */
7448   set_gdbarch_num_pseudo_regs (gdbarch, (tdep->num_byte_regs
7449                                          + tdep->num_word_regs
7450                                          + tdep->num_dword_regs
7451                                          + tdep->num_mmx_regs
7452                                          + tdep->num_ymm_regs));
7453
7454   /* Target description may be changed.  */
7455   tdesc = tdep->tdesc;
7456
7457   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
7458
7459   /* Override gdbarch_register_reggroup_p set in tdesc_use_registers.  */
7460   set_gdbarch_register_reggroup_p (gdbarch, tdep->register_reggroup_p);
7461
7462   /* Make %al the first pseudo-register.  */
7463   tdep->al_regnum = gdbarch_num_regs (gdbarch);
7464   tdep->ax_regnum = tdep->al_regnum + tdep->num_byte_regs;
7465
7466   ymm0_regnum = tdep->ax_regnum + tdep->num_word_regs;
7467   if (tdep->num_dword_regs)
7468     {
7469       /* Support dword pseudo-register if it hasn't been disabled.  */
7470       tdep->eax_regnum = ymm0_regnum;
7471       ymm0_regnum += tdep->num_dword_regs;
7472     }
7473   else
7474     tdep->eax_regnum = -1;
7475
7476   mm0_regnum = ymm0_regnum;
7477   if (tdep->num_ymm_regs)
7478     {
7479       /* Support YMM pseudo-register if it is available.  */
7480       tdep->ymm0_regnum = ymm0_regnum;
7481       mm0_regnum += tdep->num_ymm_regs;
7482     }
7483   else
7484     tdep->ymm0_regnum = -1;
7485
7486   if (tdep->num_mmx_regs != 0)
7487     {
7488       /* Support MMX pseudo-register if MMX hasn't been disabled.  */
7489       tdep->mm0_regnum = mm0_regnum;
7490     }
7491   else
7492     tdep->mm0_regnum = -1;
7493
7494   /* Hook in the legacy prologue-based unwinders last (fallback).  */
7495   frame_unwind_append_unwinder (gdbarch, &i386_stack_tramp_frame_unwind);
7496   frame_unwind_append_unwinder (gdbarch, &i386_sigtramp_frame_unwind);
7497   frame_unwind_append_unwinder (gdbarch, &i386_frame_unwind);
7498
7499   /* If we have a register mapping, enable the generic core file
7500      support, unless it has already been enabled.  */
7501   if (tdep->gregset_reg_offset
7502       && !gdbarch_regset_from_core_section_p (gdbarch))
7503     set_gdbarch_regset_from_core_section (gdbarch,
7504                                           i386_regset_from_core_section);
7505
7506   set_gdbarch_skip_permanent_breakpoint (gdbarch,
7507                                          i386_skip_permanent_breakpoint);
7508
7509   set_gdbarch_fast_tracepoint_valid_at (gdbarch,
7510                                         i386_fast_tracepoint_valid_at);
7511
7512   return gdbarch;
7513 }
7514
7515 static enum gdb_osabi
7516 i386_coff_osabi_sniffer (bfd *abfd)
7517 {
7518   if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
7519       || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
7520     return GDB_OSABI_GO32;
7521
7522   return GDB_OSABI_UNKNOWN;
7523 }
7524 \f
7525
7526 /* Provide a prototype to silence -Wmissing-prototypes.  */
7527 void _initialize_i386_tdep (void);
7528
7529 void
7530 _initialize_i386_tdep (void)
7531 {
7532   register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
7533
7534   /* Add the variable that controls the disassembly flavor.  */
7535   add_setshow_enum_cmd ("disassembly-flavor", no_class, valid_flavors,
7536                         &disassembly_flavor, _("\
7537 Set the disassembly flavor."), _("\
7538 Show the disassembly flavor."), _("\
7539 The valid values are \"att\" and \"intel\", and the default value is \"att\"."),
7540                         NULL,
7541                         NULL, /* FIXME: i18n: */
7542                         &setlist, &showlist);
7543
7544   /* Add the variable that controls the convention for returning
7545      structs.  */
7546   add_setshow_enum_cmd ("struct-convention", no_class, valid_conventions,
7547                         &struct_convention, _("\
7548 Set the convention for returning small structs."), _("\
7549 Show the convention for returning small structs."), _("\
7550 Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n\
7551 is \"default\"."),
7552                         NULL,
7553                         NULL, /* FIXME: i18n: */
7554                         &setlist, &showlist);
7555
7556   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
7557                                   i386_coff_osabi_sniffer);
7558
7559   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
7560                           i386_svr4_init_abi);
7561   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
7562                           i386_go32_init_abi);
7563
7564   /* Initialize the i386-specific register groups.  */
7565   i386_init_reggroups ();
7566
7567   /* Initialize the standard target descriptions.  */
7568   initialize_tdesc_i386 ();
7569   initialize_tdesc_i386_mmx ();
7570   initialize_tdesc_i386_avx ();
7571
7572   /* Tell remote stub that we support XML target description.  */
7573   register_remote_support_xml ("i386");
7574 }