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