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