xref: /dragonfly/contrib/gdb-7/gdb/i386-tdep.c (revision d22a69a4)
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 
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 
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 
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 
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 
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       && (cache->saved_sp != 0 || cache->saved_sp_reg != -1))
1803     {
1804       /* If the SP has been saved, but we don't know where, then this
1805 	 means that SAVED_SP_REG register was found unavailable back
1806 	 when we built the cache.  */
1807       if (cache->saved_sp == 0)
1808 	return frame_unwind_got_register (this_frame, regnum,
1809 					  cache->saved_sp_reg);
1810       else
1811 	return frame_unwind_got_constant (this_frame, regnum,
1812 					  cache->saved_sp);
1813     }
1814 
1815   if (regnum < I386_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
1816     return frame_unwind_got_memory (this_frame, regnum,
1817 				    cache->saved_regs[regnum]);
1818 
1819   return frame_unwind_got_register (this_frame, regnum, regnum);
1820 }
1821 
1822 static const struct frame_unwind i386_frame_unwind =
1823 {
1824   NORMAL_FRAME,
1825   i386_frame_unwind_stop_reason,
1826   i386_frame_this_id,
1827   i386_frame_prev_register,
1828   NULL,
1829   default_frame_sniffer
1830 };
1831 
1832 /* Normal frames, but in a function epilogue.  */
1833 
1834 /* The epilogue is defined here as the 'ret' instruction, which will
1835    follow any instruction such as 'leave' or 'pop %ebp' that destroys
1836    the function's stack frame.  */
1837 
1838 static int
1839 i386_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1840 {
1841   gdb_byte insn;
1842 
1843   if (target_read_memory (pc, &insn, 1))
1844     return 0;	/* Can't read memory at pc.  */
1845 
1846   if (insn != 0xc3)	/* 'ret' instruction.  */
1847     return 0;
1848 
1849   return 1;
1850 }
1851 
1852 static int
1853 i386_epilogue_frame_sniffer (const struct frame_unwind *self,
1854 			     struct frame_info *this_frame,
1855 			     void **this_prologue_cache)
1856 {
1857   if (frame_relative_level (this_frame) == 0)
1858     return i386_in_function_epilogue_p (get_frame_arch (this_frame),
1859 					get_frame_pc (this_frame));
1860   else
1861     return 0;
1862 }
1863 
1864 static struct i386_frame_cache *
1865 i386_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
1866 {
1867   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1868   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1869   volatile struct gdb_exception ex;
1870   struct i386_frame_cache *cache;
1871   gdb_byte buf[4];
1872 
1873   if (*this_cache)
1874     return *this_cache;
1875 
1876   cache = i386_alloc_frame_cache ();
1877   *this_cache = cache;
1878 
1879   TRY_CATCH (ex, RETURN_MASK_ERROR)
1880     {
1881       /* Cache base will be %esp plus cache->sp_offset (-4).  */
1882       get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1883       cache->base = extract_unsigned_integer (buf, 4,
1884 					      byte_order) + cache->sp_offset;
1885 
1886       /* Cache pc will be the frame func.  */
1887       cache->pc = get_frame_pc (this_frame);
1888 
1889       /* The saved %esp will be at cache->base plus 8.  */
1890       cache->saved_sp = cache->base + 8;
1891 
1892       /* The saved %eip will be at cache->base plus 4.  */
1893       cache->saved_regs[I386_EIP_REGNUM] = cache->base + 4;
1894 
1895       cache->base_p = 1;
1896     }
1897   if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
1898     throw_exception (ex);
1899 
1900   return cache;
1901 }
1902 
1903 static enum unwind_stop_reason
1904 i386_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
1905 					void **this_cache)
1906 {
1907   struct i386_frame_cache *cache
1908     = i386_epilogue_frame_cache (this_frame, this_cache);
1909 
1910   if (!cache->base_p)
1911     return UNWIND_UNAVAILABLE;
1912 
1913   return UNWIND_NO_REASON;
1914 }
1915 
1916 static void
1917 i386_epilogue_frame_this_id (struct frame_info *this_frame,
1918 			     void **this_cache,
1919 			     struct frame_id *this_id)
1920 {
1921   struct i386_frame_cache *cache = i386_epilogue_frame_cache (this_frame,
1922 							      this_cache);
1923 
1924   if (!cache->base_p)
1925     return;
1926 
1927   (*this_id) = frame_id_build (cache->base + 8, cache->pc);
1928 }
1929 
1930 static const struct frame_unwind i386_epilogue_frame_unwind =
1931 {
1932   NORMAL_FRAME,
1933   i386_epilogue_frame_unwind_stop_reason,
1934   i386_epilogue_frame_this_id,
1935   i386_frame_prev_register,
1936   NULL,
1937   i386_epilogue_frame_sniffer
1938 };
1939 
1940 
1941 /* Signal trampolines.  */
1942 
1943 static struct i386_frame_cache *
1944 i386_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
1945 {
1946   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1947   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1948   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1949   volatile struct gdb_exception ex;
1950   struct i386_frame_cache *cache;
1951   CORE_ADDR addr;
1952   gdb_byte buf[4];
1953 
1954   if (*this_cache)
1955     return *this_cache;
1956 
1957   cache = i386_alloc_frame_cache ();
1958 
1959   TRY_CATCH (ex, RETURN_MASK_ERROR)
1960     {
1961       get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1962       cache->base = extract_unsigned_integer (buf, 4, byte_order) - 4;
1963 
1964       addr = tdep->sigcontext_addr (this_frame);
1965       if (tdep->sc_reg_offset)
1966 	{
1967 	  int i;
1968 
1969 	  gdb_assert (tdep->sc_num_regs <= I386_NUM_SAVED_REGS);
1970 
1971 	  for (i = 0; i < tdep->sc_num_regs; i++)
1972 	    if (tdep->sc_reg_offset[i] != -1)
1973 	      cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
1974 	}
1975       else
1976 	{
1977 	  cache->saved_regs[I386_EIP_REGNUM] = addr + tdep->sc_pc_offset;
1978 	  cache->saved_regs[I386_ESP_REGNUM] = addr + tdep->sc_sp_offset;
1979 	}
1980 
1981       cache->base_p = 1;
1982     }
1983   if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
1984     throw_exception (ex);
1985 
1986   *this_cache = cache;
1987   return cache;
1988 }
1989 
1990 static enum unwind_stop_reason
1991 i386_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
1992 					void **this_cache)
1993 {
1994   struct i386_frame_cache *cache =
1995     i386_sigtramp_frame_cache (this_frame, this_cache);
1996 
1997   if (!cache->base_p)
1998     return UNWIND_UNAVAILABLE;
1999 
2000   return UNWIND_NO_REASON;
2001 }
2002 
2003 static void
2004 i386_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
2005 			     struct frame_id *this_id)
2006 {
2007   struct i386_frame_cache *cache =
2008     i386_sigtramp_frame_cache (this_frame, this_cache);
2009 
2010   if (!cache->base_p)
2011     return;
2012 
2013   /* See the end of i386_push_dummy_call.  */
2014   (*this_id) = frame_id_build (cache->base + 8, get_frame_pc (this_frame));
2015 }
2016 
2017 static struct value *
2018 i386_sigtramp_frame_prev_register (struct frame_info *this_frame,
2019 				   void **this_cache, int regnum)
2020 {
2021   /* Make sure we've initialized the cache.  */
2022   i386_sigtramp_frame_cache (this_frame, this_cache);
2023 
2024   return i386_frame_prev_register (this_frame, this_cache, regnum);
2025 }
2026 
2027 static int
2028 i386_sigtramp_frame_sniffer (const struct frame_unwind *self,
2029 			     struct frame_info *this_frame,
2030 			     void **this_prologue_cache)
2031 {
2032   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2033 
2034   /* We shouldn't even bother if we don't have a sigcontext_addr
2035      handler.  */
2036   if (tdep->sigcontext_addr == NULL)
2037     return 0;
2038 
2039   if (tdep->sigtramp_p != NULL)
2040     {
2041       if (tdep->sigtramp_p (this_frame))
2042 	return 1;
2043     }
2044 
2045   if (tdep->sigtramp_start != 0)
2046     {
2047       CORE_ADDR pc = get_frame_pc (this_frame);
2048 
2049       gdb_assert (tdep->sigtramp_end != 0);
2050       if (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end)
2051 	return 1;
2052     }
2053 
2054   return 0;
2055 }
2056 
2057 static const struct frame_unwind i386_sigtramp_frame_unwind =
2058 {
2059   SIGTRAMP_FRAME,
2060   i386_sigtramp_frame_unwind_stop_reason,
2061   i386_sigtramp_frame_this_id,
2062   i386_sigtramp_frame_prev_register,
2063   NULL,
2064   i386_sigtramp_frame_sniffer
2065 };
2066 
2067 
2068 static CORE_ADDR
2069 i386_frame_base_address (struct frame_info *this_frame, void **this_cache)
2070 {
2071   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
2072 
2073   return cache->base;
2074 }
2075 
2076 static const struct frame_base i386_frame_base =
2077 {
2078   &i386_frame_unwind,
2079   i386_frame_base_address,
2080   i386_frame_base_address,
2081   i386_frame_base_address
2082 };
2083 
2084 static struct frame_id
2085 i386_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2086 {
2087   CORE_ADDR fp;
2088 
2089   fp = get_frame_register_unsigned (this_frame, I386_EBP_REGNUM);
2090 
2091   /* See the end of i386_push_dummy_call.  */
2092   return frame_id_build (fp + 8, get_frame_pc (this_frame));
2093 }
2094 
2095 
2096 /* Figure out where the longjmp will land.  Slurp the args out of the
2097    stack.  We expect the first arg to be a pointer to the jmp_buf
2098    structure from which we extract the address that we will land at.
2099    This address is copied into PC.  This routine returns non-zero on
2100    success.  */
2101 
2102 static int
2103 i386_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
2104 {
2105   gdb_byte buf[4];
2106   CORE_ADDR sp, jb_addr;
2107   struct gdbarch *gdbarch = get_frame_arch (frame);
2108   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2109   int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
2110 
2111   /* If JB_PC_OFFSET is -1, we have no way to find out where the
2112      longjmp will land.  */
2113   if (jb_pc_offset == -1)
2114     return 0;
2115 
2116   get_frame_register (frame, I386_ESP_REGNUM, buf);
2117   sp = extract_unsigned_integer (buf, 4, byte_order);
2118   if (target_read_memory (sp + 4, buf, 4))
2119     return 0;
2120 
2121   jb_addr = extract_unsigned_integer (buf, 4, byte_order);
2122   if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
2123     return 0;
2124 
2125   *pc = extract_unsigned_integer (buf, 4, byte_order);
2126   return 1;
2127 }
2128 
2129 
2130 /* Check whether TYPE must be 16-byte-aligned when passed as a
2131    function argument.  16-byte vectors, _Decimal128 and structures or
2132    unions containing such types must be 16-byte-aligned; other
2133    arguments are 4-byte-aligned.  */
2134 
2135 static int
2136 i386_16_byte_align_p (struct type *type)
2137 {
2138   type = check_typedef (type);
2139   if ((TYPE_CODE (type) == TYPE_CODE_DECFLOAT
2140        || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)))
2141       && TYPE_LENGTH (type) == 16)
2142     return 1;
2143   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2144     return i386_16_byte_align_p (TYPE_TARGET_TYPE (type));
2145   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
2146       || TYPE_CODE (type) == TYPE_CODE_UNION)
2147     {
2148       int i;
2149       for (i = 0; i < TYPE_NFIELDS (type); i++)
2150 	{
2151 	  if (i386_16_byte_align_p (TYPE_FIELD_TYPE (type, i)))
2152 	    return 1;
2153 	}
2154     }
2155   return 0;
2156 }
2157 
2158 static CORE_ADDR
2159 i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2160 		      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
2161 		      struct value **args, CORE_ADDR sp, int struct_return,
2162 		      CORE_ADDR struct_addr)
2163 {
2164   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2165   gdb_byte buf[4];
2166   int i;
2167   int write_pass;
2168   int args_space = 0;
2169 
2170   /* Determine the total space required for arguments and struct
2171      return address in a first pass (allowing for 16-byte-aligned
2172      arguments), then push arguments in a second pass.  */
2173 
2174   for (write_pass = 0; write_pass < 2; write_pass++)
2175     {
2176       int args_space_used = 0;
2177       int have_16_byte_aligned_arg = 0;
2178 
2179       if (struct_return)
2180 	{
2181 	  if (write_pass)
2182 	    {
2183 	      /* Push value address.  */
2184 	      store_unsigned_integer (buf, 4, byte_order, struct_addr);
2185 	      write_memory (sp, buf, 4);
2186 	      args_space_used += 4;
2187 	    }
2188 	  else
2189 	    args_space += 4;
2190 	}
2191 
2192       for (i = 0; i < nargs; i++)
2193 	{
2194 	  int len = TYPE_LENGTH (value_enclosing_type (args[i]));
2195 
2196 	  if (write_pass)
2197 	    {
2198 	      if (i386_16_byte_align_p (value_enclosing_type (args[i])))
2199 		args_space_used = align_up (args_space_used, 16);
2200 
2201 	      write_memory (sp + args_space_used,
2202 			    value_contents_all (args[i]), len);
2203 	      /* The System V ABI says that:
2204 
2205 	      "An argument's size is increased, if necessary, to make it a
2206 	      multiple of [32-bit] words.  This may require tail padding,
2207 	      depending on the size of the argument."
2208 
2209 	      This makes sure the stack stays word-aligned.  */
2210 	      args_space_used += align_up (len, 4);
2211 	    }
2212 	  else
2213 	    {
2214 	      if (i386_16_byte_align_p (value_enclosing_type (args[i])))
2215 		{
2216 		  args_space = align_up (args_space, 16);
2217 		  have_16_byte_aligned_arg = 1;
2218 		}
2219 	      args_space += align_up (len, 4);
2220 	    }
2221 	}
2222 
2223       if (!write_pass)
2224 	{
2225 	  if (have_16_byte_aligned_arg)
2226 	    args_space = align_up (args_space, 16);
2227 	  sp -= args_space;
2228 	}
2229     }
2230 
2231   /* Store return address.  */
2232   sp -= 4;
2233   store_unsigned_integer (buf, 4, byte_order, bp_addr);
2234   write_memory (sp, buf, 4);
2235 
2236   /* Finally, update the stack pointer...  */
2237   store_unsigned_integer (buf, 4, byte_order, sp);
2238   regcache_cooked_write (regcache, I386_ESP_REGNUM, buf);
2239 
2240   /* ...and fake a frame pointer.  */
2241   regcache_cooked_write (regcache, I386_EBP_REGNUM, buf);
2242 
2243   /* MarkK wrote: This "+ 8" is all over the place:
2244      (i386_frame_this_id, i386_sigtramp_frame_this_id,
2245      i386_dummy_id).  It's there, since all frame unwinders for
2246      a given target have to agree (within a certain margin) on the
2247      definition of the stack address of a frame.  Otherwise frame id
2248      comparison might not work correctly.  Since DWARF2/GCC uses the
2249      stack address *before* the function call as a frame's CFA.  On
2250      the i386, when %ebp is used as a frame pointer, the offset
2251      between the contents %ebp and the CFA as defined by GCC.  */
2252   return sp + 8;
2253 }
2254 
2255 /* These registers are used for returning integers (and on some
2256    targets also for returning `struct' and `union' values when their
2257    size and alignment match an integer type).  */
2258 #define LOW_RETURN_REGNUM	I386_EAX_REGNUM /* %eax */
2259 #define HIGH_RETURN_REGNUM	I386_EDX_REGNUM /* %edx */
2260 
2261 /* Read, for architecture GDBARCH, a function return value of TYPE
2262    from REGCACHE, and copy that into VALBUF.  */
2263 
2264 static void
2265 i386_extract_return_value (struct gdbarch *gdbarch, struct type *type,
2266 			   struct regcache *regcache, gdb_byte *valbuf)
2267 {
2268   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2269   int len = TYPE_LENGTH (type);
2270   gdb_byte buf[I386_MAX_REGISTER_SIZE];
2271 
2272   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2273     {
2274       if (tdep->st0_regnum < 0)
2275 	{
2276 	  warning (_("Cannot find floating-point return value."));
2277 	  memset (valbuf, 0, len);
2278 	  return;
2279 	}
2280 
2281       /* Floating-point return values can be found in %st(0).  Convert
2282 	 its contents to the desired type.  This is probably not
2283 	 exactly how it would happen on the target itself, but it is
2284 	 the best we can do.  */
2285       regcache_raw_read (regcache, I386_ST0_REGNUM, buf);
2286       convert_typed_floating (buf, i387_ext_type (gdbarch), valbuf, type);
2287     }
2288   else
2289     {
2290       int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
2291       int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
2292 
2293       if (len <= low_size)
2294 	{
2295 	  regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
2296 	  memcpy (valbuf, buf, len);
2297 	}
2298       else if (len <= (low_size + high_size))
2299 	{
2300 	  regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
2301 	  memcpy (valbuf, buf, low_size);
2302 	  regcache_raw_read (regcache, HIGH_RETURN_REGNUM, buf);
2303 	  memcpy (valbuf + low_size, buf, len - low_size);
2304 	}
2305       else
2306 	internal_error (__FILE__, __LINE__,
2307 			_("Cannot extract return value of %d bytes long."),
2308 			len);
2309     }
2310 }
2311 
2312 /* Write, for architecture GDBARCH, a function return value of TYPE
2313    from VALBUF into REGCACHE.  */
2314 
2315 static void
2316 i386_store_return_value (struct gdbarch *gdbarch, struct type *type,
2317 			 struct regcache *regcache, const gdb_byte *valbuf)
2318 {
2319   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2320   int len = TYPE_LENGTH (type);
2321 
2322   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2323     {
2324       ULONGEST fstat;
2325       gdb_byte buf[I386_MAX_REGISTER_SIZE];
2326 
2327       if (tdep->st0_regnum < 0)
2328 	{
2329 	  warning (_("Cannot set floating-point return value."));
2330 	  return;
2331 	}
2332 
2333       /* Returning floating-point values is a bit tricky.  Apart from
2334          storing the return value in %st(0), we have to simulate the
2335          state of the FPU at function return point.  */
2336 
2337       /* Convert the value found in VALBUF to the extended
2338 	 floating-point format used by the FPU.  This is probably
2339 	 not exactly how it would happen on the target itself, but
2340 	 it is the best we can do.  */
2341       convert_typed_floating (valbuf, type, buf, i387_ext_type (gdbarch));
2342       regcache_raw_write (regcache, I386_ST0_REGNUM, buf);
2343 
2344       /* Set the top of the floating-point register stack to 7.  The
2345          actual value doesn't really matter, but 7 is what a normal
2346          function return would end up with if the program started out
2347          with a freshly initialized FPU.  */
2348       regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2349       fstat |= (7 << 11);
2350       regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM (tdep), fstat);
2351 
2352       /* Mark %st(1) through %st(7) as empty.  Since we set the top of
2353          the floating-point register stack to 7, the appropriate value
2354          for the tag word is 0x3fff.  */
2355       regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM (tdep), 0x3fff);
2356     }
2357   else
2358     {
2359       int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
2360       int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
2361 
2362       if (len <= low_size)
2363 	regcache_raw_write_part (regcache, LOW_RETURN_REGNUM, 0, len, valbuf);
2364       else if (len <= (low_size + high_size))
2365 	{
2366 	  regcache_raw_write (regcache, LOW_RETURN_REGNUM, valbuf);
2367 	  regcache_raw_write_part (regcache, HIGH_RETURN_REGNUM, 0,
2368 				   len - low_size, valbuf + low_size);
2369 	}
2370       else
2371 	internal_error (__FILE__, __LINE__,
2372 			_("Cannot store return value of %d bytes long."), len);
2373     }
2374 }
2375 
2376 
2377 /* This is the variable that is set with "set struct-convention", and
2378    its legitimate values.  */
2379 static const char default_struct_convention[] = "default";
2380 static const char pcc_struct_convention[] = "pcc";
2381 static const char reg_struct_convention[] = "reg";
2382 static const char *valid_conventions[] =
2383 {
2384   default_struct_convention,
2385   pcc_struct_convention,
2386   reg_struct_convention,
2387   NULL
2388 };
2389 static const char *struct_convention = default_struct_convention;
2390 
2391 /* Return non-zero if TYPE, which is assumed to be a structure,
2392    a union type, or an array type, should be returned in registers
2393    for architecture GDBARCH.  */
2394 
2395 static int
2396 i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
2397 {
2398   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2399   enum type_code code = TYPE_CODE (type);
2400   int len = TYPE_LENGTH (type);
2401 
2402   gdb_assert (code == TYPE_CODE_STRUCT
2403               || code == TYPE_CODE_UNION
2404               || code == TYPE_CODE_ARRAY);
2405 
2406   if (struct_convention == pcc_struct_convention
2407       || (struct_convention == default_struct_convention
2408 	  && tdep->struct_return == pcc_struct_return))
2409     return 0;
2410 
2411   /* Structures consisting of a single `float', `double' or 'long
2412      double' member are returned in %st(0).  */
2413   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2414     {
2415       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2416       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2417 	return (len == 4 || len == 8 || len == 12);
2418     }
2419 
2420   return (len == 1 || len == 2 || len == 4 || len == 8);
2421 }
2422 
2423 /* Determine, for architecture GDBARCH, how a return value of TYPE
2424    should be returned.  If it is supposed to be returned in registers,
2425    and READBUF is non-zero, read the appropriate value from REGCACHE,
2426    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
2427    from WRITEBUF into REGCACHE.  */
2428 
2429 static enum return_value_convention
2430 i386_return_value (struct gdbarch *gdbarch, struct type *func_type,
2431 		   struct type *type, struct regcache *regcache,
2432 		   gdb_byte *readbuf, const gdb_byte *writebuf)
2433 {
2434   enum type_code code = TYPE_CODE (type);
2435 
2436   if (((code == TYPE_CODE_STRUCT
2437 	|| code == TYPE_CODE_UNION
2438 	|| code == TYPE_CODE_ARRAY)
2439        && !i386_reg_struct_return_p (gdbarch, type))
2440       /* 128-bit decimal float uses the struct return convention.  */
2441       || (code == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 16))
2442     {
2443       /* The System V ABI says that:
2444 
2445 	 "A function that returns a structure or union also sets %eax
2446 	 to the value of the original address of the caller's area
2447 	 before it returns.  Thus when the caller receives control
2448 	 again, the address of the returned object resides in register
2449 	 %eax and can be used to access the object."
2450 
2451 	 So the ABI guarantees that we can always find the return
2452 	 value just after the function has returned.  */
2453 
2454       /* Note that the ABI doesn't mention functions returning arrays,
2455          which is something possible in certain languages such as Ada.
2456          In this case, the value is returned as if it was wrapped in
2457          a record, so the convention applied to records also applies
2458          to arrays.  */
2459 
2460       if (readbuf)
2461 	{
2462 	  ULONGEST addr;
2463 
2464 	  regcache_raw_read_unsigned (regcache, I386_EAX_REGNUM, &addr);
2465 	  read_memory (addr, readbuf, TYPE_LENGTH (type));
2466 	}
2467 
2468       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
2469     }
2470 
2471   /* This special case is for structures consisting of a single
2472      `float', `double' or 'long double' member.  These structures are
2473      returned in %st(0).  For these structures, we call ourselves
2474      recursively, changing TYPE into the type of the first member of
2475      the structure.  Since that should work for all structures that
2476      have only one member, we don't bother to check the member's type
2477      here.  */
2478   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2479     {
2480       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2481       return i386_return_value (gdbarch, func_type, type, regcache,
2482 				readbuf, writebuf);
2483     }
2484 
2485   if (readbuf)
2486     i386_extract_return_value (gdbarch, type, regcache, readbuf);
2487   if (writebuf)
2488     i386_store_return_value (gdbarch, type, regcache, writebuf);
2489 
2490   return RETURN_VALUE_REGISTER_CONVENTION;
2491 }
2492 
2493 
2494 struct type *
2495 i387_ext_type (struct gdbarch *gdbarch)
2496 {
2497   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2498 
2499   if (!tdep->i387_ext_type)
2500     {
2501       tdep->i387_ext_type = tdesc_find_type (gdbarch, "i387_ext");
2502       gdb_assert (tdep->i387_ext_type != NULL);
2503     }
2504 
2505   return tdep->i387_ext_type;
2506 }
2507 
2508 /* Construct vector type for pseudo YMM registers.  We can't use
2509    tdesc_find_type since YMM isn't described in target description.  */
2510 
2511 static struct type *
2512 i386_ymm_type (struct gdbarch *gdbarch)
2513 {
2514   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2515 
2516   if (!tdep->i386_ymm_type)
2517     {
2518       const struct builtin_type *bt = builtin_type (gdbarch);
2519 
2520       /* The type we're building is this: */
2521 #if 0
2522       union __gdb_builtin_type_vec256i
2523       {
2524         int128_t uint128[2];
2525         int64_t v2_int64[4];
2526         int32_t v4_int32[8];
2527         int16_t v8_int16[16];
2528         int8_t v16_int8[32];
2529         double v2_double[4];
2530         float v4_float[8];
2531       };
2532 #endif
2533 
2534       struct type *t;
2535 
2536       t = arch_composite_type (gdbarch,
2537 			       "__gdb_builtin_type_vec256i", TYPE_CODE_UNION);
2538       append_composite_type_field (t, "v8_float",
2539 				   init_vector_type (bt->builtin_float, 8));
2540       append_composite_type_field (t, "v4_double",
2541 				   init_vector_type (bt->builtin_double, 4));
2542       append_composite_type_field (t, "v32_int8",
2543 				   init_vector_type (bt->builtin_int8, 32));
2544       append_composite_type_field (t, "v16_int16",
2545 				   init_vector_type (bt->builtin_int16, 16));
2546       append_composite_type_field (t, "v8_int32",
2547 				   init_vector_type (bt->builtin_int32, 8));
2548       append_composite_type_field (t, "v4_int64",
2549 				   init_vector_type (bt->builtin_int64, 4));
2550       append_composite_type_field (t, "v2_int128",
2551 				   init_vector_type (bt->builtin_int128, 2));
2552 
2553       TYPE_VECTOR (t) = 1;
2554       TYPE_NAME (t) = "builtin_type_vec256i";
2555       tdep->i386_ymm_type = t;
2556     }
2557 
2558   return tdep->i386_ymm_type;
2559 }
2560 
2561 /* Construct vector type for MMX registers.  */
2562 static struct type *
2563 i386_mmx_type (struct gdbarch *gdbarch)
2564 {
2565   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2566 
2567   if (!tdep->i386_mmx_type)
2568     {
2569       const struct builtin_type *bt = builtin_type (gdbarch);
2570 
2571       /* The type we're building is this: */
2572 #if 0
2573       union __gdb_builtin_type_vec64i
2574       {
2575         int64_t uint64;
2576         int32_t v2_int32[2];
2577         int16_t v4_int16[4];
2578         int8_t v8_int8[8];
2579       };
2580 #endif
2581 
2582       struct type *t;
2583 
2584       t = arch_composite_type (gdbarch,
2585 			       "__gdb_builtin_type_vec64i", TYPE_CODE_UNION);
2586 
2587       append_composite_type_field (t, "uint64", bt->builtin_int64);
2588       append_composite_type_field (t, "v2_int32",
2589 				   init_vector_type (bt->builtin_int32, 2));
2590       append_composite_type_field (t, "v4_int16",
2591 				   init_vector_type (bt->builtin_int16, 4));
2592       append_composite_type_field (t, "v8_int8",
2593 				   init_vector_type (bt->builtin_int8, 8));
2594 
2595       TYPE_VECTOR (t) = 1;
2596       TYPE_NAME (t) = "builtin_type_vec64i";
2597       tdep->i386_mmx_type = t;
2598     }
2599 
2600   return tdep->i386_mmx_type;
2601 }
2602 
2603 /* Return the GDB type object for the "standard" data type of data in
2604    register REGNUM.  */
2605 
2606 static struct type *
2607 i386_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2608 {
2609   if (i386_mmx_regnum_p (gdbarch, regnum))
2610     return i386_mmx_type (gdbarch);
2611   else if (i386_ymm_regnum_p (gdbarch, regnum))
2612     return i386_ymm_type (gdbarch);
2613   else
2614     {
2615       const struct builtin_type *bt = builtin_type (gdbarch);
2616       if (i386_byte_regnum_p (gdbarch, regnum))
2617 	return bt->builtin_int8;
2618       else if (i386_word_regnum_p (gdbarch, regnum))
2619 	return bt->builtin_int16;
2620       else if (i386_dword_regnum_p (gdbarch, regnum))
2621 	return bt->builtin_int32;
2622     }
2623 
2624   internal_error (__FILE__, __LINE__, _("invalid regnum"));
2625 }
2626 
2627 /* Map a cooked register onto a raw register or memory.  For the i386,
2628    the MMX registers need to be mapped onto floating point registers.  */
2629 
2630 static int
2631 i386_mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
2632 {
2633   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
2634   int mmxreg, fpreg;
2635   ULONGEST fstat;
2636   int tos;
2637 
2638   mmxreg = regnum - tdep->mm0_regnum;
2639   regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2640   tos = (fstat >> 11) & 0x7;
2641   fpreg = (mmxreg + tos) % 8;
2642 
2643   return (I387_ST0_REGNUM (tdep) + fpreg);
2644 }
2645 
2646 enum register_status
2647 i386_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2648 			   int regnum, gdb_byte *buf)
2649 {
2650   gdb_byte raw_buf[MAX_REGISTER_SIZE];
2651   enum register_status status;
2652 
2653   if (i386_mmx_regnum_p (gdbarch, regnum))
2654     {
2655       int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2656 
2657       /* Extract (always little endian).  */
2658       status = regcache_raw_read (regcache, fpnum, raw_buf);
2659       if (status != REG_VALID)
2660 	return status;
2661       memcpy (buf, raw_buf, register_size (gdbarch, regnum));
2662     }
2663   else
2664     {
2665       struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2666 
2667       if (i386_ymm_regnum_p (gdbarch, regnum))
2668 	{
2669 	  regnum -= tdep->ymm0_regnum;
2670 
2671 	  /* Extract (always little endian).  Read lower 128bits.  */
2672 	  status = regcache_raw_read (regcache,
2673 				      I387_XMM0_REGNUM (tdep) + regnum,
2674 				      raw_buf);
2675 	  if (status != REG_VALID)
2676 	    return status;
2677 	  memcpy (buf, raw_buf, 16);
2678 	  /* Read upper 128bits.  */
2679 	  status = regcache_raw_read (regcache,
2680 				      tdep->ymm0h_regnum + regnum,
2681 				      raw_buf);
2682 	  if (status != REG_VALID)
2683 	    return status;
2684 	  memcpy (buf + 16, raw_buf, 16);
2685 	}
2686       else if (i386_word_regnum_p (gdbarch, regnum))
2687 	{
2688 	  int gpnum = regnum - tdep->ax_regnum;
2689 
2690 	  /* Extract (always little endian).  */
2691 	  status = regcache_raw_read (regcache, gpnum, raw_buf);
2692 	  if (status != REG_VALID)
2693 	    return status;
2694 	  memcpy (buf, raw_buf, 2);
2695 	}
2696       else if (i386_byte_regnum_p (gdbarch, regnum))
2697 	{
2698 	  /* Check byte pseudo registers last since this function will
2699 	     be called from amd64_pseudo_register_read, which handles
2700 	     byte pseudo registers differently.  */
2701 	  int gpnum = regnum - tdep->al_regnum;
2702 
2703 	  /* Extract (always little endian).  We read both lower and
2704 	     upper registers.  */
2705 	  status = regcache_raw_read (regcache, gpnum % 4, raw_buf);
2706 	  if (status != REG_VALID)
2707 	    return status;
2708 	  if (gpnum >= 4)
2709 	    memcpy (buf, raw_buf + 1, 1);
2710 	  else
2711 	    memcpy (buf, raw_buf, 1);
2712 	}
2713       else
2714 	internal_error (__FILE__, __LINE__, _("invalid regnum"));
2715     }
2716 
2717   return REG_VALID;
2718 }
2719 
2720 void
2721 i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2722 			    int regnum, const gdb_byte *buf)
2723 {
2724   gdb_byte raw_buf[MAX_REGISTER_SIZE];
2725 
2726   if (i386_mmx_regnum_p (gdbarch, regnum))
2727     {
2728       int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2729 
2730       /* Read ...  */
2731       regcache_raw_read (regcache, fpnum, raw_buf);
2732       /* ... Modify ... (always little endian).  */
2733       memcpy (raw_buf, buf, register_size (gdbarch, regnum));
2734       /* ... Write.  */
2735       regcache_raw_write (regcache, fpnum, raw_buf);
2736     }
2737   else
2738     {
2739       struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2740 
2741       if (i386_ymm_regnum_p (gdbarch, regnum))
2742 	{
2743 	  regnum -= tdep->ymm0_regnum;
2744 
2745 	  /* ... Write lower 128bits.  */
2746 	  regcache_raw_write (regcache,
2747 			     I387_XMM0_REGNUM (tdep) + regnum,
2748 			     buf);
2749 	  /* ... Write upper 128bits.  */
2750 	  regcache_raw_write (regcache,
2751 			     tdep->ymm0h_regnum + regnum,
2752 			     buf + 16);
2753 	}
2754       else if (i386_word_regnum_p (gdbarch, regnum))
2755 	{
2756 	  int gpnum = regnum - tdep->ax_regnum;
2757 
2758 	  /* Read ...  */
2759 	  regcache_raw_read (regcache, gpnum, raw_buf);
2760 	  /* ... Modify ... (always little endian).  */
2761 	  memcpy (raw_buf, buf, 2);
2762 	  /* ... Write.  */
2763 	  regcache_raw_write (regcache, gpnum, raw_buf);
2764 	}
2765       else if (i386_byte_regnum_p (gdbarch, regnum))
2766 	{
2767 	  /* Check byte pseudo registers last since this function will
2768 	     be called from amd64_pseudo_register_read, which handles
2769 	     byte pseudo registers differently.  */
2770 	  int gpnum = regnum - tdep->al_regnum;
2771 
2772 	  /* Read ...  We read both lower and upper registers.  */
2773 	  regcache_raw_read (regcache, gpnum % 4, raw_buf);
2774 	  /* ... Modify ... (always little endian).  */
2775 	  if (gpnum >= 4)
2776 	    memcpy (raw_buf + 1, buf, 1);
2777 	  else
2778 	    memcpy (raw_buf, buf, 1);
2779 	  /* ... Write.  */
2780 	  regcache_raw_write (regcache, gpnum % 4, raw_buf);
2781 	}
2782       else
2783 	internal_error (__FILE__, __LINE__, _("invalid regnum"));
2784     }
2785 }
2786 
2787 
2788 /* Return the register number of the register allocated by GCC after
2789    REGNUM, or -1 if there is no such register.  */
2790 
2791 static int
2792 i386_next_regnum (int regnum)
2793 {
2794   /* GCC allocates the registers in the order:
2795 
2796      %eax, %edx, %ecx, %ebx, %esi, %edi, %ebp, %esp, ...
2797 
2798      Since storing a variable in %esp doesn't make any sense we return
2799      -1 for %ebp and for %esp itself.  */
2800   static int next_regnum[] =
2801   {
2802     I386_EDX_REGNUM,		/* Slot for %eax.  */
2803     I386_EBX_REGNUM,		/* Slot for %ecx.  */
2804     I386_ECX_REGNUM,		/* Slot for %edx.  */
2805     I386_ESI_REGNUM,		/* Slot for %ebx.  */
2806     -1, -1,			/* Slots for %esp and %ebp.  */
2807     I386_EDI_REGNUM,		/* Slot for %esi.  */
2808     I386_EBP_REGNUM		/* Slot for %edi.  */
2809   };
2810 
2811   if (regnum >= 0 && regnum < sizeof (next_regnum) / sizeof (next_regnum[0]))
2812     return next_regnum[regnum];
2813 
2814   return -1;
2815 }
2816 
2817 /* Return nonzero if a value of type TYPE stored in register REGNUM
2818    needs any special handling.  */
2819 
2820 static int
2821 i386_convert_register_p (struct gdbarch *gdbarch,
2822 			 int regnum, struct type *type)
2823 {
2824   int len = TYPE_LENGTH (type);
2825 
2826   /* Values may be spread across multiple registers.  Most debugging
2827      formats aren't expressive enough to specify the locations, so
2828      some heuristics is involved.  Right now we only handle types that
2829      have a length that is a multiple of the word size, since GCC
2830      doesn't seem to put any other types into registers.  */
2831   if (len > 4 && len % 4 == 0)
2832     {
2833       int last_regnum = regnum;
2834 
2835       while (len > 4)
2836 	{
2837 	  last_regnum = i386_next_regnum (last_regnum);
2838 	  len -= 4;
2839 	}
2840 
2841       if (last_regnum != -1)
2842 	return 1;
2843     }
2844 
2845   return i387_convert_register_p (gdbarch, regnum, type);
2846 }
2847 
2848 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
2849    return its contents in TO.  */
2850 
2851 static int
2852 i386_register_to_value (struct frame_info *frame, int regnum,
2853 			struct type *type, gdb_byte *to,
2854 			int *optimizedp, int *unavailablep)
2855 {
2856   struct gdbarch *gdbarch = get_frame_arch (frame);
2857   int len = TYPE_LENGTH (type);
2858 
2859   if (i386_fp_regnum_p (gdbarch, regnum))
2860     return i387_register_to_value (frame, regnum, type, to,
2861 				   optimizedp, unavailablep);
2862 
2863   /* Read a value spread across multiple registers.  */
2864 
2865   gdb_assert (len > 4 && len % 4 == 0);
2866 
2867   while (len > 0)
2868     {
2869       gdb_assert (regnum != -1);
2870       gdb_assert (register_size (gdbarch, regnum) == 4);
2871 
2872       if (!get_frame_register_bytes (frame, regnum, 0,
2873 				     register_size (gdbarch, regnum),
2874 				     to, optimizedp, unavailablep))
2875 	return 0;
2876 
2877       regnum = i386_next_regnum (regnum);
2878       len -= 4;
2879       to += 4;
2880     }
2881 
2882   *optimizedp = *unavailablep = 0;
2883   return 1;
2884 }
2885 
2886 /* Write the contents FROM of a value of type TYPE into register
2887    REGNUM in frame FRAME.  */
2888 
2889 static void
2890 i386_value_to_register (struct frame_info *frame, int regnum,
2891 			struct type *type, const gdb_byte *from)
2892 {
2893   int len = TYPE_LENGTH (type);
2894 
2895   if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
2896     {
2897       i387_value_to_register (frame, regnum, type, from);
2898       return;
2899     }
2900 
2901   /* Write a value spread across multiple registers.  */
2902 
2903   gdb_assert (len > 4 && len % 4 == 0);
2904 
2905   while (len > 0)
2906     {
2907       gdb_assert (regnum != -1);
2908       gdb_assert (register_size (get_frame_arch (frame), regnum) == 4);
2909 
2910       put_frame_register (frame, regnum, from);
2911       regnum = i386_next_regnum (regnum);
2912       len -= 4;
2913       from += 4;
2914     }
2915 }
2916 
2917 /* Supply register REGNUM from the buffer specified by GREGS and LEN
2918    in the general-purpose register set REGSET to register cache
2919    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
2920 
2921 void
2922 i386_supply_gregset (const struct regset *regset, struct regcache *regcache,
2923 		     int regnum, const void *gregs, size_t len)
2924 {
2925   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2926   const gdb_byte *regs = gregs;
2927   int i;
2928 
2929   gdb_assert (len == tdep->sizeof_gregset);
2930 
2931   for (i = 0; i < tdep->gregset_num_regs; i++)
2932     {
2933       if ((regnum == i || regnum == -1)
2934 	  && tdep->gregset_reg_offset[i] != -1)
2935 	regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
2936     }
2937 }
2938 
2939 /* Collect register REGNUM from the register cache REGCACHE and store
2940    it in the buffer specified by GREGS and LEN as described by the
2941    general-purpose register set REGSET.  If REGNUM is -1, do this for
2942    all registers in REGSET.  */
2943 
2944 void
2945 i386_collect_gregset (const struct regset *regset,
2946 		      const struct regcache *regcache,
2947 		      int regnum, void *gregs, size_t len)
2948 {
2949   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2950   gdb_byte *regs = gregs;
2951   int i;
2952 
2953   gdb_assert (len == tdep->sizeof_gregset);
2954 
2955   for (i = 0; i < tdep->gregset_num_regs; i++)
2956     {
2957       if ((regnum == i || regnum == -1)
2958 	  && tdep->gregset_reg_offset[i] != -1)
2959 	regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]);
2960     }
2961 }
2962 
2963 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
2964    in the floating-point register set REGSET to register cache
2965    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
2966 
2967 static void
2968 i386_supply_fpregset (const struct regset *regset, struct regcache *regcache,
2969 		      int regnum, const void *fpregs, size_t len)
2970 {
2971   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2972 
2973   if (len == I387_SIZEOF_FXSAVE)
2974     {
2975       i387_supply_fxsave (regcache, regnum, fpregs);
2976       return;
2977     }
2978 
2979   gdb_assert (len == tdep->sizeof_fpregset);
2980   i387_supply_fsave (regcache, regnum, fpregs);
2981 }
2982 
2983 /* Collect register REGNUM from the register cache REGCACHE and store
2984    it in the buffer specified by FPREGS and LEN as described by the
2985    floating-point register set REGSET.  If REGNUM is -1, do this for
2986    all registers in REGSET.  */
2987 
2988 static void
2989 i386_collect_fpregset (const struct regset *regset,
2990 		       const struct regcache *regcache,
2991 		       int regnum, void *fpregs, size_t len)
2992 {
2993   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2994 
2995   if (len == I387_SIZEOF_FXSAVE)
2996     {
2997       i387_collect_fxsave (regcache, regnum, fpregs);
2998       return;
2999     }
3000 
3001   gdb_assert (len == tdep->sizeof_fpregset);
3002   i387_collect_fsave (regcache, regnum, fpregs);
3003 }
3004 
3005 /* Similar to i386_supply_fpregset, but use XSAVE extended state.  */
3006 
3007 static void
3008 i386_supply_xstateregset (const struct regset *regset,
3009 			  struct regcache *regcache, int regnum,
3010 			  const void *xstateregs, size_t len)
3011 {
3012   i387_supply_xsave (regcache, regnum, xstateregs);
3013 }
3014 
3015 /* Similar to i386_collect_fpregset , but use XSAVE extended state.  */
3016 
3017 static void
3018 i386_collect_xstateregset (const struct regset *regset,
3019 			   const struct regcache *regcache,
3020 			   int regnum, void *xstateregs, size_t len)
3021 {
3022   i387_collect_xsave (regcache, regnum, xstateregs, 1);
3023 }
3024 
3025 /* Return the appropriate register set for the core section identified
3026    by SECT_NAME and SECT_SIZE.  */
3027 
3028 const struct regset *
3029 i386_regset_from_core_section (struct gdbarch *gdbarch,
3030 			       const char *sect_name, size_t sect_size)
3031 {
3032   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3033 
3034   if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
3035     {
3036       if (tdep->gregset == NULL)
3037 	tdep->gregset = regset_alloc (gdbarch, i386_supply_gregset,
3038 				      i386_collect_gregset);
3039       return tdep->gregset;
3040     }
3041 
3042   if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
3043       || (strcmp (sect_name, ".reg-xfp") == 0
3044 	  && sect_size == I387_SIZEOF_FXSAVE))
3045     {
3046       if (tdep->fpregset == NULL)
3047 	tdep->fpregset = regset_alloc (gdbarch, i386_supply_fpregset,
3048 				       i386_collect_fpregset);
3049       return tdep->fpregset;
3050     }
3051 
3052   if (strcmp (sect_name, ".reg-xstate") == 0)
3053     {
3054       if (tdep->xstateregset == NULL)
3055 	tdep->xstateregset = regset_alloc (gdbarch,
3056 					   i386_supply_xstateregset,
3057 					   i386_collect_xstateregset);
3058 
3059       return tdep->xstateregset;
3060     }
3061 
3062   return NULL;
3063 }
3064 
3065 
3066 /* Stuff for WIN32 PE style DLL's but is pretty generic really.  */
3067 
3068 CORE_ADDR
3069 i386_pe_skip_trampoline_code (struct frame_info *frame,
3070 			      CORE_ADDR pc, char *name)
3071 {
3072   struct gdbarch *gdbarch = get_frame_arch (frame);
3073   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3074 
3075   /* jmp *(dest) */
3076   if (pc && read_memory_unsigned_integer (pc, 2, byte_order) == 0x25ff)
3077     {
3078       unsigned long indirect =
3079 	read_memory_unsigned_integer (pc + 2, 4, byte_order);
3080       struct minimal_symbol *indsym =
3081 	indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
3082       char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
3083 
3084       if (symname)
3085 	{
3086 	  if (strncmp (symname, "__imp_", 6) == 0
3087 	      || strncmp (symname, "_imp_", 5) == 0)
3088 	    return name ? 1 :
3089 		   read_memory_unsigned_integer (indirect, 4, byte_order);
3090 	}
3091     }
3092   return 0;			/* Not a trampoline.  */
3093 }
3094 
3095 
3096 /* Return whether the THIS_FRAME corresponds to a sigtramp
3097    routine.  */
3098 
3099 int
3100 i386_sigtramp_p (struct frame_info *this_frame)
3101 {
3102   CORE_ADDR pc = get_frame_pc (this_frame);
3103   char *name;
3104 
3105   find_pc_partial_function (pc, &name, NULL, NULL);
3106   return (name && strcmp ("_sigtramp", name) == 0);
3107 }
3108 
3109 
3110 /* We have two flavours of disassembly.  The machinery on this page
3111    deals with switching between those.  */
3112 
3113 static int
3114 i386_print_insn (bfd_vma pc, struct disassemble_info *info)
3115 {
3116   gdb_assert (disassembly_flavor == att_flavor
3117 	      || disassembly_flavor == intel_flavor);
3118 
3119   /* FIXME: kettenis/20020915: Until disassembler_options is properly
3120      constified, cast to prevent a compiler warning.  */
3121   info->disassembler_options = (char *) disassembly_flavor;
3122 
3123   return print_insn_i386 (pc, info);
3124 }
3125 
3126 
3127 /* There are a few i386 architecture variants that differ only
3128    slightly from the generic i386 target.  For now, we don't give them
3129    their own source file, but include them here.  As a consequence,
3130    they'll always be included.  */
3131 
3132 /* System V Release 4 (SVR4).  */
3133 
3134 /* Return whether THIS_FRAME corresponds to a SVR4 sigtramp
3135    routine.  */
3136 
3137 static int
3138 i386_svr4_sigtramp_p (struct frame_info *this_frame)
3139 {
3140   CORE_ADDR pc = get_frame_pc (this_frame);
3141   char *name;
3142 
3143   /* UnixWare uses _sigacthandler.  The origin of the other symbols is
3144      currently unknown.  */
3145   find_pc_partial_function (pc, &name, NULL, NULL);
3146   return (name && (strcmp ("_sigreturn", name) == 0
3147 		   || strcmp ("_sigacthandler", name) == 0
3148 		   || strcmp ("sigvechandler", name) == 0));
3149 }
3150 
3151 /* Assuming THIS_FRAME is for a SVR4 sigtramp routine, return the
3152    address of the associated sigcontext (ucontext) structure.  */
3153 
3154 static CORE_ADDR
3155 i386_svr4_sigcontext_addr (struct frame_info *this_frame)
3156 {
3157   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3158   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3159   gdb_byte buf[4];
3160   CORE_ADDR sp;
3161 
3162   get_frame_register (this_frame, I386_ESP_REGNUM, buf);
3163   sp = extract_unsigned_integer (buf, 4, byte_order);
3164 
3165   return read_memory_unsigned_integer (sp + 8, 4, byte_order);
3166 }
3167 
3168 
3169 /* Generic ELF.  */
3170 
3171 void
3172 i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3173 {
3174   /* We typically use stabs-in-ELF with the SVR4 register numbering.  */
3175   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3176 }
3177 
3178 /* System V Release 4 (SVR4).  */
3179 
3180 void
3181 i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3182 {
3183   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3184 
3185   /* System V Release 4 uses ELF.  */
3186   i386_elf_init_abi (info, gdbarch);
3187 
3188   /* System V Release 4 has shared libraries.  */
3189   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
3190 
3191   tdep->sigtramp_p = i386_svr4_sigtramp_p;
3192   tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
3193   tdep->sc_pc_offset = 36 + 14 * 4;
3194   tdep->sc_sp_offset = 36 + 17 * 4;
3195 
3196   tdep->jb_pc_offset = 20;
3197 }
3198 
3199 /* DJGPP.  */
3200 
3201 static void
3202 i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3203 {
3204   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3205 
3206   /* DJGPP doesn't have any special frames for signal handlers.  */
3207   tdep->sigtramp_p = NULL;
3208 
3209   tdep->jb_pc_offset = 36;
3210 
3211   /* DJGPP does not support the SSE registers.  */
3212   if (! tdesc_has_registers (info.target_desc))
3213     tdep->tdesc = tdesc_i386_mmx;
3214 
3215   /* Native compiler is GCC, which uses the SVR4 register numbering
3216      even in COFF and STABS.  See the comment in i386_gdbarch_init,
3217      before the calls to set_gdbarch_stab_reg_to_regnum and
3218      set_gdbarch_sdb_reg_to_regnum.  */
3219   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3220   set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3221 
3222   set_gdbarch_has_dos_based_file_system (gdbarch, 1);
3223 }
3224 
3225 
3226 /* i386 register groups.  In addition to the normal groups, add "mmx"
3227    and "sse".  */
3228 
3229 static struct reggroup *i386_sse_reggroup;
3230 static struct reggroup *i386_mmx_reggroup;
3231 
3232 static void
3233 i386_init_reggroups (void)
3234 {
3235   i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
3236   i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
3237 }
3238 
3239 static void
3240 i386_add_reggroups (struct gdbarch *gdbarch)
3241 {
3242   reggroup_add (gdbarch, i386_sse_reggroup);
3243   reggroup_add (gdbarch, i386_mmx_reggroup);
3244   reggroup_add (gdbarch, general_reggroup);
3245   reggroup_add (gdbarch, float_reggroup);
3246   reggroup_add (gdbarch, all_reggroup);
3247   reggroup_add (gdbarch, save_reggroup);
3248   reggroup_add (gdbarch, restore_reggroup);
3249   reggroup_add (gdbarch, vector_reggroup);
3250   reggroup_add (gdbarch, system_reggroup);
3251 }
3252 
3253 int
3254 i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
3255 			  struct reggroup *group)
3256 {
3257   const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3258   int fp_regnum_p, mmx_regnum_p, xmm_regnum_p, mxcsr_regnum_p,
3259       ymm_regnum_p, ymmh_regnum_p;
3260 
3261   /* Don't include pseudo registers, except for MMX, in any register
3262      groups.  */
3263   if (i386_byte_regnum_p (gdbarch, regnum))
3264     return 0;
3265 
3266   if (i386_word_regnum_p (gdbarch, regnum))
3267     return 0;
3268 
3269   if (i386_dword_regnum_p (gdbarch, regnum))
3270     return 0;
3271 
3272   mmx_regnum_p = i386_mmx_regnum_p (gdbarch, regnum);
3273   if (group == i386_mmx_reggroup)
3274     return mmx_regnum_p;
3275 
3276   xmm_regnum_p = i386_xmm_regnum_p (gdbarch, regnum);
3277   mxcsr_regnum_p = i386_mxcsr_regnum_p (gdbarch, regnum);
3278   if (group == i386_sse_reggroup)
3279     return xmm_regnum_p || mxcsr_regnum_p;
3280 
3281   ymm_regnum_p = i386_ymm_regnum_p (gdbarch, regnum);
3282   if (group == vector_reggroup)
3283     return (mmx_regnum_p
3284 	    || ymm_regnum_p
3285 	    || mxcsr_regnum_p
3286 	    || (xmm_regnum_p
3287 		&& ((tdep->xcr0 & I386_XSTATE_AVX_MASK)
3288 		    == I386_XSTATE_SSE_MASK)));
3289 
3290   fp_regnum_p = (i386_fp_regnum_p (gdbarch, regnum)
3291 		 || i386_fpc_regnum_p (gdbarch, regnum));
3292   if (group == float_reggroup)
3293     return fp_regnum_p;
3294 
3295   /* For "info reg all", don't include upper YMM registers nor XMM
3296      registers when AVX is supported.  */
3297   ymmh_regnum_p = i386_ymmh_regnum_p (gdbarch, regnum);
3298   if (group == all_reggroup
3299       && ((xmm_regnum_p
3300 	   && (tdep->xcr0 & I386_XSTATE_AVX))
3301 	  || ymmh_regnum_p))
3302     return 0;
3303 
3304   if (group == general_reggroup)
3305     return (!fp_regnum_p
3306 	    && !mmx_regnum_p
3307 	    && !mxcsr_regnum_p
3308 	    && !xmm_regnum_p
3309 	    && !ymm_regnum_p
3310 	    && !ymmh_regnum_p);
3311 
3312   return default_register_reggroup_p (gdbarch, regnum, group);
3313 }
3314 
3315 
3316 /* Get the ARGIth function argument for the current function.  */
3317 
3318 static CORE_ADDR
3319 i386_fetch_pointer_argument (struct frame_info *frame, int argi,
3320 			     struct type *type)
3321 {
3322   struct gdbarch *gdbarch = get_frame_arch (frame);
3323   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3324   CORE_ADDR sp = get_frame_register_unsigned  (frame, I386_ESP_REGNUM);
3325   return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4, byte_order);
3326 }
3327 
3328 static void
3329 i386_skip_permanent_breakpoint (struct regcache *regcache)
3330 {
3331   CORE_ADDR current_pc = regcache_read_pc (regcache);
3332 
3333  /* On i386, breakpoint is exactly 1 byte long, so we just
3334     adjust the PC in the regcache.  */
3335   current_pc += 1;
3336   regcache_write_pc (regcache, current_pc);
3337 }
3338 
3339 
3340 #define PREFIX_REPZ	0x01
3341 #define PREFIX_REPNZ	0x02
3342 #define PREFIX_LOCK	0x04
3343 #define PREFIX_DATA	0x08
3344 #define PREFIX_ADDR	0x10
3345 
3346 /* operand size */
3347 enum
3348 {
3349   OT_BYTE = 0,
3350   OT_WORD,
3351   OT_LONG,
3352   OT_QUAD,
3353   OT_DQUAD,
3354 };
3355 
3356 /* i386 arith/logic operations */
3357 enum
3358 {
3359   OP_ADDL,
3360   OP_ORL,
3361   OP_ADCL,
3362   OP_SBBL,
3363   OP_ANDL,
3364   OP_SUBL,
3365   OP_XORL,
3366   OP_CMPL,
3367 };
3368 
3369 struct i386_record_s
3370 {
3371   struct gdbarch *gdbarch;
3372   struct regcache *regcache;
3373   CORE_ADDR orig_addr;
3374   CORE_ADDR addr;
3375   int aflag;
3376   int dflag;
3377   int override;
3378   uint8_t modrm;
3379   uint8_t mod, reg, rm;
3380   int ot;
3381   uint8_t rex_x;
3382   uint8_t rex_b;
3383   int rip_offset;
3384   int popl_esp_hack;
3385   const int *regmap;
3386 };
3387 
3388 /* Parse "modrm" part in current memory address that irp->addr point to
3389    Return -1 if something wrong.  */
3390 
3391 static int
3392 i386_record_modrm (struct i386_record_s *irp)
3393 {
3394   struct gdbarch *gdbarch = irp->gdbarch;
3395 
3396   if (target_read_memory (irp->addr, &irp->modrm, 1))
3397     {
3398       if (record_debug)
3399 	printf_unfiltered (_("Process record: error reading memory at "
3400 			     "addr %s len = 1.\n"),
3401 			   paddress (gdbarch, irp->addr));
3402       return -1;
3403     }
3404   irp->addr++;
3405   irp->mod = (irp->modrm >> 6) & 3;
3406   irp->reg = (irp->modrm >> 3) & 7;
3407   irp->rm = irp->modrm & 7;
3408 
3409   return 0;
3410 }
3411 
3412 /* Get the memory address that current instruction  write to and set it to
3413    the argument "addr".
3414    Return -1 if something wrong.  */
3415 
3416 static int
3417 i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr)
3418 {
3419   struct gdbarch *gdbarch = irp->gdbarch;
3420   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3421   gdb_byte buf[4];
3422   ULONGEST offset64;
3423 
3424   *addr = 0;
3425   if (irp->aflag)
3426     {
3427       /* 32 bits */
3428       int havesib = 0;
3429       uint8_t scale = 0;
3430       uint8_t byte;
3431       uint8_t index = 0;
3432       uint8_t base = irp->rm;
3433 
3434       if (base == 4)
3435 	{
3436 	  havesib = 1;
3437 	  if (target_read_memory (irp->addr, &byte, 1))
3438 	    {
3439 	      if (record_debug)
3440 		printf_unfiltered (_("Process record: error reading memory "
3441 				     "at addr %s len = 1.\n"),
3442 				   paddress (gdbarch, irp->addr));
3443 	      return -1;
3444 	    }
3445 	  irp->addr++;
3446 	  scale = (byte >> 6) & 3;
3447 	  index = ((byte >> 3) & 7) | irp->rex_x;
3448 	  base = (byte & 7);
3449 	}
3450       base |= irp->rex_b;
3451 
3452       switch (irp->mod)
3453 	{
3454 	case 0:
3455 	  if ((base & 7) == 5)
3456 	    {
3457 	      base = 0xff;
3458 	      if (target_read_memory (irp->addr, buf, 4))
3459 		{
3460 		  if (record_debug)
3461 		    printf_unfiltered (_("Process record: error reading "
3462 				         "memory at addr %s len = 4.\n"),
3463 				       paddress (gdbarch, irp->addr));
3464 		  return -1;
3465 		}
3466 	      irp->addr += 4;
3467 	      *addr = extract_signed_integer (buf, 4, byte_order);
3468 	      if (irp->regmap[X86_RECORD_R8_REGNUM] && !havesib)
3469 		*addr += irp->addr + irp->rip_offset;
3470 	    }
3471 	  break;
3472 	case 1:
3473 	  if (target_read_memory (irp->addr, buf, 1))
3474 	    {
3475 	      if (record_debug)
3476 		printf_unfiltered (_("Process record: error reading memory "
3477 				     "at addr %s len = 1.\n"),
3478 				   paddress (gdbarch, irp->addr));
3479 	      return -1;
3480 	    }
3481 	  irp->addr++;
3482 	  *addr = (int8_t) buf[0];
3483 	  break;
3484 	case 2:
3485 	  if (target_read_memory (irp->addr, buf, 4))
3486 	    {
3487 	      if (record_debug)
3488 		printf_unfiltered (_("Process record: error reading memory "
3489 				     "at addr %s len = 4.\n"),
3490 				   paddress (gdbarch, irp->addr));
3491 	      return -1;
3492 	    }
3493 	  *addr = extract_signed_integer (buf, 4, byte_order);
3494 	  irp->addr += 4;
3495 	  break;
3496 	}
3497 
3498       offset64 = 0;
3499       if (base != 0xff)
3500         {
3501 	  if (base == 4 && irp->popl_esp_hack)
3502 	    *addr += irp->popl_esp_hack;
3503 	  regcache_raw_read_unsigned (irp->regcache, irp->regmap[base],
3504                                       &offset64);
3505 	}
3506       if (irp->aflag == 2)
3507         {
3508 	  *addr += offset64;
3509         }
3510       else
3511         *addr = (uint32_t) (offset64 + *addr);
3512 
3513       if (havesib && (index != 4 || scale != 0))
3514 	{
3515 	  regcache_raw_read_unsigned (irp->regcache, irp->regmap[index],
3516                                       &offset64);
3517 	  if (irp->aflag == 2)
3518 	    *addr += offset64 << scale;
3519 	  else
3520 	    *addr = (uint32_t) (*addr + (offset64 << scale));
3521 	}
3522     }
3523   else
3524     {
3525       /* 16 bits */
3526       switch (irp->mod)
3527 	{
3528 	case 0:
3529 	  if (irp->rm == 6)
3530 	    {
3531 	      if (target_read_memory (irp->addr, buf, 2))
3532 		{
3533 		  if (record_debug)
3534 		    printf_unfiltered (_("Process record: error reading "
3535 					 "memory at addr %s len = 2.\n"),
3536 				       paddress (gdbarch, irp->addr));
3537 		  return -1;
3538 		}
3539 	      irp->addr += 2;
3540 	      *addr = extract_signed_integer (buf, 2, byte_order);
3541 	      irp->rm = 0;
3542 	      goto no_rm;
3543 	    }
3544 	  break;
3545 	case 1:
3546 	  if (target_read_memory (irp->addr, buf, 1))
3547 	    {
3548 	      if (record_debug)
3549 		printf_unfiltered (_("Process record: error reading memory "
3550 				     "at addr %s len = 1.\n"),
3551 				   paddress (gdbarch, irp->addr));
3552 	      return -1;
3553 	    }
3554 	  irp->addr++;
3555 	  *addr = (int8_t) buf[0];
3556 	  break;
3557 	case 2:
3558 	  if (target_read_memory (irp->addr, buf, 2))
3559 	    {
3560 	      if (record_debug)
3561 		printf_unfiltered (_("Process record: error reading memory "
3562 				     "at addr %s len = 2.\n"),
3563 				   paddress (gdbarch, irp->addr));
3564 	      return -1;
3565 	    }
3566 	  irp->addr += 2;
3567 	  *addr = extract_signed_integer (buf, 2, byte_order);
3568 	  break;
3569 	}
3570 
3571       switch (irp->rm)
3572 	{
3573 	case 0:
3574 	  regcache_raw_read_unsigned (irp->regcache,
3575 				      irp->regmap[X86_RECORD_REBX_REGNUM],
3576                                       &offset64);
3577 	  *addr = (uint32_t) (*addr + offset64);
3578 	  regcache_raw_read_unsigned (irp->regcache,
3579 				      irp->regmap[X86_RECORD_RESI_REGNUM],
3580                                       &offset64);
3581 	  *addr = (uint32_t) (*addr + offset64);
3582 	  break;
3583 	case 1:
3584 	  regcache_raw_read_unsigned (irp->regcache,
3585 				      irp->regmap[X86_RECORD_REBX_REGNUM],
3586                                       &offset64);
3587 	  *addr = (uint32_t) (*addr + offset64);
3588 	  regcache_raw_read_unsigned (irp->regcache,
3589 				      irp->regmap[X86_RECORD_REDI_REGNUM],
3590                                       &offset64);
3591 	  *addr = (uint32_t) (*addr + offset64);
3592 	  break;
3593 	case 2:
3594 	  regcache_raw_read_unsigned (irp->regcache,
3595 				      irp->regmap[X86_RECORD_REBP_REGNUM],
3596                                       &offset64);
3597 	  *addr = (uint32_t) (*addr + offset64);
3598 	  regcache_raw_read_unsigned (irp->regcache,
3599 				      irp->regmap[X86_RECORD_RESI_REGNUM],
3600                                       &offset64);
3601 	  *addr = (uint32_t) (*addr + offset64);
3602 	  break;
3603 	case 3:
3604 	  regcache_raw_read_unsigned (irp->regcache,
3605 				      irp->regmap[X86_RECORD_REBP_REGNUM],
3606                                       &offset64);
3607 	  *addr = (uint32_t) (*addr + offset64);
3608 	  regcache_raw_read_unsigned (irp->regcache,
3609 				      irp->regmap[X86_RECORD_REDI_REGNUM],
3610                                       &offset64);
3611 	  *addr = (uint32_t) (*addr + offset64);
3612 	  break;
3613 	case 4:
3614 	  regcache_raw_read_unsigned (irp->regcache,
3615 				      irp->regmap[X86_RECORD_RESI_REGNUM],
3616                                       &offset64);
3617 	  *addr = (uint32_t) (*addr + offset64);
3618 	  break;
3619 	case 5:
3620 	  regcache_raw_read_unsigned (irp->regcache,
3621 				      irp->regmap[X86_RECORD_REDI_REGNUM],
3622                                       &offset64);
3623 	  *addr = (uint32_t) (*addr + offset64);
3624 	  break;
3625 	case 6:
3626 	  regcache_raw_read_unsigned (irp->regcache,
3627 				      irp->regmap[X86_RECORD_REBP_REGNUM],
3628                                       &offset64);
3629 	  *addr = (uint32_t) (*addr + offset64);
3630 	  break;
3631 	case 7:
3632 	  regcache_raw_read_unsigned (irp->regcache,
3633 				      irp->regmap[X86_RECORD_REBX_REGNUM],
3634                                       &offset64);
3635 	  *addr = (uint32_t) (*addr + offset64);
3636 	  break;
3637 	}
3638       *addr &= 0xffff;
3639     }
3640 
3641  no_rm:
3642   return 0;
3643 }
3644 
3645 /* Record the value of the memory that willbe changed in current instruction
3646    to "record_arch_list".
3647    Return -1 if something wrong.  */
3648 
3649 static int
3650 i386_record_lea_modrm (struct i386_record_s *irp)
3651 {
3652   struct gdbarch *gdbarch = irp->gdbarch;
3653   uint64_t addr;
3654 
3655   if (irp->override >= 0)
3656     {
3657       if (record_memory_query)
3658         {
3659 	  int q;
3660 
3661           target_terminal_ours ();
3662           q = yquery (_("\
3663 Process record ignores the memory change of instruction at address %s\n\
3664 because it can't get the value of the segment register.\n\
3665 Do you want to stop the program?"),
3666                       paddress (gdbarch, irp->orig_addr));
3667             target_terminal_inferior ();
3668             if (q)
3669               return -1;
3670         }
3671 
3672       return 0;
3673     }
3674 
3675   if (i386_record_lea_modrm_addr (irp, &addr))
3676     return -1;
3677 
3678   if (record_arch_list_add_mem (addr, 1 << irp->ot))
3679     return -1;
3680 
3681   return 0;
3682 }
3683 
3684 /* Record the push operation to "record_arch_list".
3685    Return -1 if something wrong.  */
3686 
3687 static int
3688 i386_record_push (struct i386_record_s *irp, int size)
3689 {
3690   ULONGEST addr;
3691 
3692   if (record_arch_list_add_reg (irp->regcache,
3693 				irp->regmap[X86_RECORD_RESP_REGNUM]))
3694     return -1;
3695   regcache_raw_read_unsigned (irp->regcache,
3696 			      irp->regmap[X86_RECORD_RESP_REGNUM],
3697 			      &addr);
3698   if (record_arch_list_add_mem ((CORE_ADDR) addr - size, size))
3699     return -1;
3700 
3701   return 0;
3702 }
3703 
3704 
3705 /* Defines contents to record.  */
3706 #define I386_SAVE_FPU_REGS              0xfffd
3707 #define I386_SAVE_FPU_ENV               0xfffe
3708 #define I386_SAVE_FPU_ENV_REG_STACK     0xffff
3709 
3710 /* Record the value of floating point registers which will be changed
3711    by the current instruction to "record_arch_list".  Return -1 if
3712    something is wrong.  */
3713 
3714 static int i386_record_floats (struct gdbarch *gdbarch,
3715                                struct i386_record_s *ir,
3716                                uint32_t iregnum)
3717 {
3718   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3719   int i;
3720 
3721   /* Oza: Because of floating point insn push/pop of fpu stack is going to
3722      happen.  Currently we store st0-st7 registers, but we need not store all
3723      registers all the time, in future we use ftag register and record only
3724      those who are not marked as an empty.  */
3725 
3726   if (I386_SAVE_FPU_REGS == iregnum)
3727     {
3728       for (i = I387_ST0_REGNUM (tdep); i <= I387_ST0_REGNUM (tdep) + 7; i++)
3729         {
3730           if (record_arch_list_add_reg (ir->regcache, i))
3731             return -1;
3732         }
3733     }
3734   else if (I386_SAVE_FPU_ENV == iregnum)
3735     {
3736       for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3737 	      {
3738 	      if (record_arch_list_add_reg (ir->regcache, i))
3739 	        return -1;
3740 	      }
3741     }
3742   else if (I386_SAVE_FPU_ENV_REG_STACK == iregnum)
3743     {
3744       for (i = I387_ST0_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3745       {
3746         if (record_arch_list_add_reg (ir->regcache, i))
3747           return -1;
3748       }
3749     }
3750   else if ((iregnum >= I387_ST0_REGNUM (tdep)) &&
3751            (iregnum <= I387_FOP_REGNUM (tdep)))
3752     {
3753       if (record_arch_list_add_reg (ir->regcache,iregnum))
3754         return -1;
3755     }
3756   else
3757     {
3758       /* Parameter error.  */
3759       return -1;
3760     }
3761   if(I386_SAVE_FPU_ENV != iregnum)
3762     {
3763     for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3764       {
3765       if (record_arch_list_add_reg (ir->regcache, i))
3766         return -1;
3767       }
3768     }
3769   return 0;
3770 }
3771 
3772 /* Parse the current instruction and record the values of the registers and
3773    memory that will be changed in current instruction to "record_arch_list".
3774    Return -1 if something wrong.  */
3775 
3776 #define I386_RECORD_ARCH_LIST_ADD_REG(regnum) \
3777     record_arch_list_add_reg (ir.regcache, ir.regmap[(regnum)])
3778 
3779 int
3780 i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
3781 		     CORE_ADDR input_addr)
3782 {
3783   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3784   int prefixes = 0;
3785   int regnum = 0;
3786   uint32_t opcode;
3787   uint8_t  opcode8;
3788   ULONGEST addr;
3789   gdb_byte buf[MAX_REGISTER_SIZE];
3790   struct i386_record_s ir;
3791   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3792   int rex = 0;
3793   uint8_t rex_w = -1;
3794   uint8_t rex_r = 0;
3795 
3796   memset (&ir, 0, sizeof (struct i386_record_s));
3797   ir.regcache = regcache;
3798   ir.addr = input_addr;
3799   ir.orig_addr = input_addr;
3800   ir.aflag = 1;
3801   ir.dflag = 1;
3802   ir.override = -1;
3803   ir.popl_esp_hack = 0;
3804   ir.regmap = tdep->record_regmap;
3805   ir.gdbarch = gdbarch;
3806 
3807   if (record_debug > 1)
3808     fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
3809 			            "addr = %s\n",
3810 			paddress (gdbarch, ir.addr));
3811 
3812   /* prefixes */
3813   while (1)
3814     {
3815       if (target_read_memory (ir.addr, &opcode8, 1))
3816 	{
3817 	  if (record_debug)
3818 	    printf_unfiltered (_("Process record: error reading memory at "
3819 				 "addr %s len = 1.\n"),
3820 			       paddress (gdbarch, ir.addr));
3821 	  return -1;
3822 	}
3823       ir.addr++;
3824       switch (opcode8)	/* Instruction prefixes */
3825 	{
3826 	case REPE_PREFIX_OPCODE:
3827 	  prefixes |= PREFIX_REPZ;
3828 	  break;
3829 	case REPNE_PREFIX_OPCODE:
3830 	  prefixes |= PREFIX_REPNZ;
3831 	  break;
3832 	case LOCK_PREFIX_OPCODE:
3833 	  prefixes |= PREFIX_LOCK;
3834 	  break;
3835 	case CS_PREFIX_OPCODE:
3836 	  ir.override = X86_RECORD_CS_REGNUM;
3837 	  break;
3838 	case SS_PREFIX_OPCODE:
3839 	  ir.override = X86_RECORD_SS_REGNUM;
3840 	  break;
3841 	case DS_PREFIX_OPCODE:
3842 	  ir.override = X86_RECORD_DS_REGNUM;
3843 	  break;
3844 	case ES_PREFIX_OPCODE:
3845 	  ir.override = X86_RECORD_ES_REGNUM;
3846 	  break;
3847 	case FS_PREFIX_OPCODE:
3848 	  ir.override = X86_RECORD_FS_REGNUM;
3849 	  break;
3850 	case GS_PREFIX_OPCODE:
3851 	  ir.override = X86_RECORD_GS_REGNUM;
3852 	  break;
3853 	case DATA_PREFIX_OPCODE:
3854 	  prefixes |= PREFIX_DATA;
3855 	  break;
3856 	case ADDR_PREFIX_OPCODE:
3857 	  prefixes |= PREFIX_ADDR;
3858 	  break;
3859         case 0x40:	/* i386 inc %eax */
3860         case 0x41:	/* i386 inc %ecx */
3861         case 0x42:	/* i386 inc %edx */
3862         case 0x43:	/* i386 inc %ebx */
3863         case 0x44:	/* i386 inc %esp */
3864         case 0x45:	/* i386 inc %ebp */
3865         case 0x46:	/* i386 inc %esi */
3866         case 0x47:	/* i386 inc %edi */
3867         case 0x48:	/* i386 dec %eax */
3868         case 0x49:	/* i386 dec %ecx */
3869         case 0x4a:	/* i386 dec %edx */
3870         case 0x4b:	/* i386 dec %ebx */
3871         case 0x4c:	/* i386 dec %esp */
3872         case 0x4d:	/* i386 dec %ebp */
3873         case 0x4e:	/* i386 dec %esi */
3874         case 0x4f:	/* i386 dec %edi */
3875           if (ir.regmap[X86_RECORD_R8_REGNUM])	/* 64 bit target */
3876             {
3877                /* REX */
3878                rex = 1;
3879                rex_w = (opcode8 >> 3) & 1;
3880                rex_r = (opcode8 & 0x4) << 1;
3881                ir.rex_x = (opcode8 & 0x2) << 2;
3882                ir.rex_b = (opcode8 & 0x1) << 3;
3883             }
3884 	  else					/* 32 bit target */
3885 	    goto out_prefixes;
3886           break;
3887 	default:
3888 	  goto out_prefixes;
3889 	  break;
3890 	}
3891     }
3892  out_prefixes:
3893   if (ir.regmap[X86_RECORD_R8_REGNUM] && rex_w == 1)
3894     {
3895       ir.dflag = 2;
3896     }
3897   else
3898     {
3899       if (prefixes & PREFIX_DATA)
3900         ir.dflag ^= 1;
3901     }
3902   if (prefixes & PREFIX_ADDR)
3903     ir.aflag ^= 1;
3904   else if (ir.regmap[X86_RECORD_R8_REGNUM])
3905     ir.aflag = 2;
3906 
3907   /* Now check op code.  */
3908   opcode = (uint32_t) opcode8;
3909  reswitch:
3910   switch (opcode)
3911     {
3912     case 0x0f:
3913       if (target_read_memory (ir.addr, &opcode8, 1))
3914 	{
3915 	  if (record_debug)
3916 	    printf_unfiltered (_("Process record: error reading memory at "
3917 				 "addr %s len = 1.\n"),
3918 			       paddress (gdbarch, ir.addr));
3919 	  return -1;
3920 	}
3921       ir.addr++;
3922       opcode = (uint32_t) opcode8 | 0x0f00;
3923       goto reswitch;
3924       break;
3925 
3926     case 0x00:    /* arith & logic */
3927     case 0x01:
3928     case 0x02:
3929     case 0x03:
3930     case 0x04:
3931     case 0x05:
3932     case 0x08:
3933     case 0x09:
3934     case 0x0a:
3935     case 0x0b:
3936     case 0x0c:
3937     case 0x0d:
3938     case 0x10:
3939     case 0x11:
3940     case 0x12:
3941     case 0x13:
3942     case 0x14:
3943     case 0x15:
3944     case 0x18:
3945     case 0x19:
3946     case 0x1a:
3947     case 0x1b:
3948     case 0x1c:
3949     case 0x1d:
3950     case 0x20:
3951     case 0x21:
3952     case 0x22:
3953     case 0x23:
3954     case 0x24:
3955     case 0x25:
3956     case 0x28:
3957     case 0x29:
3958     case 0x2a:
3959     case 0x2b:
3960     case 0x2c:
3961     case 0x2d:
3962     case 0x30:
3963     case 0x31:
3964     case 0x32:
3965     case 0x33:
3966     case 0x34:
3967     case 0x35:
3968     case 0x38:
3969     case 0x39:
3970     case 0x3a:
3971     case 0x3b:
3972     case 0x3c:
3973     case 0x3d:
3974       if (((opcode >> 3) & 7) != OP_CMPL)
3975 	{
3976 	  if ((opcode & 1) == 0)
3977 	    ir.ot = OT_BYTE;
3978 	  else
3979 	    ir.ot = ir.dflag + OT_WORD;
3980 
3981 	  switch ((opcode >> 1) & 3)
3982 	    {
3983 	    case 0:    /* OP Ev, Gv */
3984 	      if (i386_record_modrm (&ir))
3985 		return -1;
3986 	      if (ir.mod != 3)
3987 		{
3988 		  if (i386_record_lea_modrm (&ir))
3989 		    return -1;
3990 		}
3991 	      else
3992 		{
3993                   ir.rm |= ir.rex_b;
3994 		  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3995 		    ir.rm &= 0x3;
3996 		  I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3997 		}
3998 	      break;
3999 	    case 1:    /* OP Gv, Ev */
4000 	      if (i386_record_modrm (&ir))
4001 		return -1;
4002               ir.reg |= rex_r;
4003 	      if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4004 		ir.reg &= 0x3;
4005 	      I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4006 	      break;
4007 	    case 2:    /* OP A, Iv */
4008 	      I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4009 	      break;
4010 	    }
4011 	}
4012       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4013       break;
4014 
4015     case 0x80:    /* GRP1 */
4016     case 0x81:
4017     case 0x82:
4018     case 0x83:
4019       if (i386_record_modrm (&ir))
4020 	return -1;
4021 
4022       if (ir.reg != OP_CMPL)
4023 	{
4024 	  if ((opcode & 1) == 0)
4025 	    ir.ot = OT_BYTE;
4026 	  else
4027 	    ir.ot = ir.dflag + OT_WORD;
4028 
4029 	  if (ir.mod != 3)
4030 	    {
4031               if (opcode == 0x83)
4032                 ir.rip_offset = 1;
4033               else
4034                 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4035 	      if (i386_record_lea_modrm (&ir))
4036 		return -1;
4037 	    }
4038 	  else
4039 	    I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4040 	}
4041       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4042       break;
4043 
4044     case 0x40:      /* inc */
4045     case 0x41:
4046     case 0x42:
4047     case 0x43:
4048     case 0x44:
4049     case 0x45:
4050     case 0x46:
4051     case 0x47:
4052 
4053     case 0x48:      /* dec */
4054     case 0x49:
4055     case 0x4a:
4056     case 0x4b:
4057     case 0x4c:
4058     case 0x4d:
4059     case 0x4e:
4060     case 0x4f:
4061 
4062       I386_RECORD_ARCH_LIST_ADD_REG (opcode & 7);
4063       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4064       break;
4065 
4066     case 0xf6:    /* GRP3 */
4067     case 0xf7:
4068       if ((opcode & 1) == 0)
4069 	ir.ot = OT_BYTE;
4070       else
4071 	ir.ot = ir.dflag + OT_WORD;
4072       if (i386_record_modrm (&ir))
4073 	return -1;
4074 
4075       if (ir.mod != 3 && ir.reg == 0)
4076         ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4077 
4078       switch (ir.reg)
4079 	{
4080 	case 0:    /* test */
4081 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4082 	  break;
4083 	case 2:    /* not */
4084 	case 3:    /* neg */
4085 	  if (ir.mod != 3)
4086 	    {
4087 	      if (i386_record_lea_modrm (&ir))
4088 		return -1;
4089 	    }
4090 	  else
4091 	    {
4092               ir.rm |= ir.rex_b;
4093 	      if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4094 		ir.rm &= 0x3;
4095 	      I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4096 	    }
4097 	  if (ir.reg == 3)  /* neg */
4098 	    I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4099 	  break;
4100 	case 4:    /* mul  */
4101 	case 5:    /* imul */
4102 	case 6:    /* div  */
4103 	case 7:    /* idiv */
4104 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4105 	  if (ir.ot != OT_BYTE)
4106 	    I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4107 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4108 	  break;
4109 	default:
4110 	  ir.addr -= 2;
4111 	  opcode = opcode << 8 | ir.modrm;
4112 	  goto no_support;
4113 	  break;
4114 	}
4115       break;
4116 
4117     case 0xfe:    /* GRP4 */
4118     case 0xff:    /* GRP5 */
4119       if (i386_record_modrm (&ir))
4120 	return -1;
4121       if (ir.reg >= 2 && opcode == 0xfe)
4122 	{
4123 	  ir.addr -= 2;
4124 	  opcode = opcode << 8 | ir.modrm;
4125 	  goto no_support;
4126 	}
4127       switch (ir.reg)
4128 	{
4129 	case 0:    /* inc */
4130 	case 1:    /* dec */
4131           if ((opcode & 1) == 0)
4132 	    ir.ot = OT_BYTE;
4133           else
4134 	    ir.ot = ir.dflag + OT_WORD;
4135 	  if (ir.mod != 3)
4136 	    {
4137 	      if (i386_record_lea_modrm (&ir))
4138 		return -1;
4139 	    }
4140 	  else
4141 	    {
4142 	      ir.rm |= ir.rex_b;
4143 	      if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4144 		ir.rm &= 0x3;
4145 	      I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4146 	    }
4147 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4148 	  break;
4149 	case 2:    /* call */
4150           if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4151             ir.dflag = 2;
4152 	  if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4153 	    return -1;
4154 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4155 	  break;
4156 	case 3:    /* lcall */
4157 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
4158 	  if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4159 	    return -1;
4160 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4161 	  break;
4162 	case 4:    /* jmp  */
4163 	case 5:    /* ljmp */
4164 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4165 	  break;
4166 	case 6:    /* push */
4167           if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4168             ir.dflag = 2;
4169 	  if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4170 	    return -1;
4171 	  break;
4172 	default:
4173 	  ir.addr -= 2;
4174 	  opcode = opcode << 8 | ir.modrm;
4175 	  goto no_support;
4176 	  break;
4177 	}
4178       break;
4179 
4180     case 0x84:    /* test */
4181     case 0x85:
4182     case 0xa8:
4183     case 0xa9:
4184       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4185       break;
4186 
4187     case 0x98:    /* CWDE/CBW */
4188       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4189       break;
4190 
4191     case 0x99:    /* CDQ/CWD */
4192       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4193       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4194       break;
4195 
4196     case 0x0faf:  /* imul */
4197     case 0x69:
4198     case 0x6b:
4199       ir.ot = ir.dflag + OT_WORD;
4200       if (i386_record_modrm (&ir))
4201 	return -1;
4202       if (opcode == 0x69)
4203         ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4204       else if (opcode == 0x6b)
4205         ir.rip_offset = 1;
4206       ir.reg |= rex_r;
4207       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4208 	ir.reg &= 0x3;
4209       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4210       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4211       break;
4212 
4213     case 0x0fc0:  /* xadd */
4214     case 0x0fc1:
4215       if ((opcode & 1) == 0)
4216 	ir.ot = OT_BYTE;
4217       else
4218 	ir.ot = ir.dflag + OT_WORD;
4219       if (i386_record_modrm (&ir))
4220 	return -1;
4221       ir.reg |= rex_r;
4222       if (ir.mod == 3)
4223 	{
4224 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4225 	    ir.reg &= 0x3;
4226 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4227 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4228 	    ir.rm &= 0x3;
4229 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4230 	}
4231       else
4232 	{
4233 	  if (i386_record_lea_modrm (&ir))
4234 	    return -1;
4235 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4236 	    ir.reg &= 0x3;
4237 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4238 	}
4239       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4240       break;
4241 
4242     case 0x0fb0:  /* cmpxchg */
4243     case 0x0fb1:
4244       if ((opcode & 1) == 0)
4245 	ir.ot = OT_BYTE;
4246       else
4247 	ir.ot = ir.dflag + OT_WORD;
4248       if (i386_record_modrm (&ir))
4249 	return -1;
4250       if (ir.mod == 3)
4251 	{
4252           ir.reg |= rex_r;
4253 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4254 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4255 	    ir.reg &= 0x3;
4256 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4257 	}
4258       else
4259 	{
4260 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4261 	  if (i386_record_lea_modrm (&ir))
4262 	    return -1;
4263 	}
4264       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4265       break;
4266 
4267     case 0x0fc7:    /* cmpxchg8b */
4268       if (i386_record_modrm (&ir))
4269 	return -1;
4270       if (ir.mod == 3)
4271 	{
4272 	  ir.addr -= 2;
4273 	  opcode = opcode << 8 | ir.modrm;
4274 	  goto no_support;
4275 	}
4276       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4277       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4278       if (i386_record_lea_modrm (&ir))
4279 	return -1;
4280       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4281       break;
4282 
4283     case 0x50:    /* push */
4284     case 0x51:
4285     case 0x52:
4286     case 0x53:
4287     case 0x54:
4288     case 0x55:
4289     case 0x56:
4290     case 0x57:
4291     case 0x68:
4292     case 0x6a:
4293       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4294         ir.dflag = 2;
4295       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4296 	return -1;
4297       break;
4298 
4299     case 0x06:    /* push es */
4300     case 0x0e:    /* push cs */
4301     case 0x16:    /* push ss */
4302     case 0x1e:    /* push ds */
4303       if (ir.regmap[X86_RECORD_R8_REGNUM])
4304         {
4305 	  ir.addr -= 1;
4306 	  goto no_support;
4307 	}
4308       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4309 	return -1;
4310       break;
4311 
4312     case 0x0fa0:    /* push fs */
4313     case 0x0fa8:    /* push gs */
4314       if (ir.regmap[X86_RECORD_R8_REGNUM])
4315         {
4316 	  ir.addr -= 2;
4317 	  goto no_support;
4318 	}
4319       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4320 	return -1;
4321       break;
4322 
4323     case 0x60:    /* pusha */
4324       if (ir.regmap[X86_RECORD_R8_REGNUM])
4325         {
4326 	  ir.addr -= 1;
4327 	  goto no_support;
4328 	}
4329       if (i386_record_push (&ir, 1 << (ir.dflag + 4)))
4330 	return -1;
4331       break;
4332 
4333     case 0x58:    /* pop */
4334     case 0x59:
4335     case 0x5a:
4336     case 0x5b:
4337     case 0x5c:
4338     case 0x5d:
4339     case 0x5e:
4340     case 0x5f:
4341       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4342       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
4343       break;
4344 
4345     case 0x61:    /* popa */
4346       if (ir.regmap[X86_RECORD_R8_REGNUM])
4347         {
4348 	  ir.addr -= 1;
4349 	  goto no_support;
4350 	}
4351       for (regnum = X86_RECORD_REAX_REGNUM;
4352 	   regnum <= X86_RECORD_REDI_REGNUM;
4353 	   regnum++)
4354 	I386_RECORD_ARCH_LIST_ADD_REG (regnum);
4355       break;
4356 
4357     case 0x8f:    /* pop */
4358       if (ir.regmap[X86_RECORD_R8_REGNUM])
4359 	ir.ot = ir.dflag ? OT_QUAD : OT_WORD;
4360       else
4361         ir.ot = ir.dflag + OT_WORD;
4362       if (i386_record_modrm (&ir))
4363 	return -1;
4364       if (ir.mod == 3)
4365 	I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4366       else
4367 	{
4368           ir.popl_esp_hack = 1 << ir.ot;
4369 	  if (i386_record_lea_modrm (&ir))
4370 	    return -1;
4371 	}
4372       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4373       break;
4374 
4375     case 0xc8:    /* enter */
4376       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
4377       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4378         ir.dflag = 2;
4379       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4380 	return -1;
4381       break;
4382 
4383     case 0xc9:    /* leave */
4384       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4385       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
4386       break;
4387 
4388     case 0x07:    /* pop es */
4389       if (ir.regmap[X86_RECORD_R8_REGNUM])
4390         {
4391 	  ir.addr -= 1;
4392 	  goto no_support;
4393 	}
4394       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4395       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_ES_REGNUM);
4396       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4397       break;
4398 
4399     case 0x17:    /* pop ss */
4400       if (ir.regmap[X86_RECORD_R8_REGNUM])
4401         {
4402 	  ir.addr -= 1;
4403 	  goto no_support;
4404 	}
4405       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4406       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_SS_REGNUM);
4407       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4408       break;
4409 
4410     case 0x1f:    /* pop ds */
4411       if (ir.regmap[X86_RECORD_R8_REGNUM])
4412         {
4413 	  ir.addr -= 1;
4414 	  goto no_support;
4415 	}
4416       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4417       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_DS_REGNUM);
4418       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4419       break;
4420 
4421     case 0x0fa1:    /* pop fs */
4422       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4423       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_FS_REGNUM);
4424       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4425       break;
4426 
4427     case 0x0fa9:    /* pop gs */
4428       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4429       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
4430       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4431       break;
4432 
4433     case 0x88:    /* mov */
4434     case 0x89:
4435     case 0xc6:
4436     case 0xc7:
4437       if ((opcode & 1) == 0)
4438 	ir.ot = OT_BYTE;
4439       else
4440 	ir.ot = ir.dflag + OT_WORD;
4441 
4442       if (i386_record_modrm (&ir))
4443 	return -1;
4444 
4445       if (ir.mod != 3)
4446 	{
4447           if (opcode == 0xc6 || opcode == 0xc7)
4448 	    ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4449 	  if (i386_record_lea_modrm (&ir))
4450 	    return -1;
4451 	}
4452       else
4453 	{
4454           if (opcode == 0xc6 || opcode == 0xc7)
4455 	    ir.rm |= ir.rex_b;
4456 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4457 	    ir.rm &= 0x3;
4458 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4459 	}
4460       break;
4461 
4462     case 0x8a:    /* mov */
4463     case 0x8b:
4464       if ((opcode & 1) == 0)
4465 	ir.ot = OT_BYTE;
4466       else
4467 	ir.ot = ir.dflag + OT_WORD;
4468       if (i386_record_modrm (&ir))
4469 	return -1;
4470       ir.reg |= rex_r;
4471       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4472 	ir.reg &= 0x3;
4473       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4474       break;
4475 
4476     case 0x8c:    /* mov seg */
4477       if (i386_record_modrm (&ir))
4478 	return -1;
4479       if (ir.reg > 5)
4480 	{
4481 	  ir.addr -= 2;
4482 	  opcode = opcode << 8 | ir.modrm;
4483 	  goto no_support;
4484 	}
4485 
4486       if (ir.mod == 3)
4487 	I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4488       else
4489 	{
4490 	  ir.ot = OT_WORD;
4491 	  if (i386_record_lea_modrm (&ir))
4492 	    return -1;
4493 	}
4494       break;
4495 
4496     case 0x8e:    /* mov seg */
4497       if (i386_record_modrm (&ir))
4498 	return -1;
4499       switch (ir.reg)
4500 	{
4501 	case 0:
4502 	  regnum = X86_RECORD_ES_REGNUM;
4503 	  break;
4504 	case 2:
4505 	  regnum = X86_RECORD_SS_REGNUM;
4506 	  break;
4507 	case 3:
4508 	  regnum = X86_RECORD_DS_REGNUM;
4509 	  break;
4510 	case 4:
4511 	  regnum = X86_RECORD_FS_REGNUM;
4512 	  break;
4513 	case 5:
4514 	  regnum = X86_RECORD_GS_REGNUM;
4515 	  break;
4516 	default:
4517 	  ir.addr -= 2;
4518 	  opcode = opcode << 8 | ir.modrm;
4519 	  goto no_support;
4520 	  break;
4521 	}
4522       I386_RECORD_ARCH_LIST_ADD_REG (regnum);
4523       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4524       break;
4525 
4526     case 0x0fb6:    /* movzbS */
4527     case 0x0fb7:    /* movzwS */
4528     case 0x0fbe:    /* movsbS */
4529     case 0x0fbf:    /* movswS */
4530       if (i386_record_modrm (&ir))
4531 	return -1;
4532       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
4533       break;
4534 
4535     case 0x8d:      /* lea */
4536       if (i386_record_modrm (&ir))
4537 	return -1;
4538       if (ir.mod == 3)
4539 	{
4540 	  ir.addr -= 2;
4541 	  opcode = opcode << 8 | ir.modrm;
4542 	  goto no_support;
4543 	}
4544       ir.ot = ir.dflag;
4545       ir.reg |= rex_r;
4546       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4547 	ir.reg &= 0x3;
4548       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4549       break;
4550 
4551     case 0xa0:    /* mov EAX */
4552     case 0xa1:
4553 
4554     case 0xd7:    /* xlat */
4555       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4556       break;
4557 
4558     case 0xa2:    /* mov EAX */
4559     case 0xa3:
4560       if (ir.override >= 0)
4561         {
4562           if (record_memory_query)
4563             {
4564 	      int q;
4565 
4566               target_terminal_ours ();
4567               q = yquery (_("\
4568 Process record ignores the memory change of instruction at address %s\n\
4569 because it can't get the value of the segment register.\n\
4570 Do you want to stop the program?"),
4571                           paddress (gdbarch, ir.orig_addr));
4572               target_terminal_inferior ();
4573               if (q)
4574                 return -1;
4575             }
4576 	}
4577       else
4578 	{
4579           if ((opcode & 1) == 0)
4580 	    ir.ot = OT_BYTE;
4581 	  else
4582 	    ir.ot = ir.dflag + OT_WORD;
4583 	  if (ir.aflag == 2)
4584 	    {
4585               if (target_read_memory (ir.addr, buf, 8))
4586 		{
4587 	          if (record_debug)
4588 		    printf_unfiltered (_("Process record: error reading "
4589 	                    		 "memory at addr 0x%s len = 8.\n"),
4590 				       paddress (gdbarch, ir.addr));
4591 		  return -1;
4592 		}
4593 	      ir.addr += 8;
4594 	      addr = extract_unsigned_integer (buf, 8, byte_order);
4595 	    }
4596           else if (ir.aflag)
4597 	    {
4598               if (target_read_memory (ir.addr, buf, 4))
4599 		{
4600 	          if (record_debug)
4601 		    printf_unfiltered (_("Process record: error reading "
4602 	                    		 "memory at addr 0x%s len = 4.\n"),
4603 				       paddress (gdbarch, ir.addr));
4604 		  return -1;
4605 		}
4606 	      ir.addr += 4;
4607               addr = extract_unsigned_integer (buf, 4, byte_order);
4608 	    }
4609           else
4610 	    {
4611               if (target_read_memory (ir.addr, buf, 2))
4612 		{
4613 	          if (record_debug)
4614 		    printf_unfiltered (_("Process record: error reading "
4615 	                    		 "memory at addr 0x%s len = 2.\n"),
4616 				       paddress (gdbarch, ir.addr));
4617 		  return -1;
4618 		}
4619 	      ir.addr += 2;
4620               addr = extract_unsigned_integer (buf, 2, byte_order);
4621 	    }
4622 	  if (record_arch_list_add_mem (addr, 1 << ir.ot))
4623 	    return -1;
4624         }
4625       break;
4626 
4627     case 0xb0:    /* mov R, Ib */
4628     case 0xb1:
4629     case 0xb2:
4630     case 0xb3:
4631     case 0xb4:
4632     case 0xb5:
4633     case 0xb6:
4634     case 0xb7:
4635       I386_RECORD_ARCH_LIST_ADD_REG ((ir.regmap[X86_RECORD_R8_REGNUM])
4636                                         ? ((opcode & 0x7) | ir.rex_b)
4637 					: ((opcode & 0x7) & 0x3));
4638       break;
4639 
4640     case 0xb8:    /* mov R, Iv */
4641     case 0xb9:
4642     case 0xba:
4643     case 0xbb:
4644     case 0xbc:
4645     case 0xbd:
4646     case 0xbe:
4647     case 0xbf:
4648       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
4649       break;
4650 
4651     case 0x91:    /* xchg R, EAX */
4652     case 0x92:
4653     case 0x93:
4654     case 0x94:
4655     case 0x95:
4656     case 0x96:
4657     case 0x97:
4658       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4659       I386_RECORD_ARCH_LIST_ADD_REG (opcode & 0x7);
4660       break;
4661 
4662     case 0x86:    /* xchg Ev, Gv */
4663     case 0x87:
4664       if ((opcode & 1) == 0)
4665 	ir.ot = OT_BYTE;
4666       else
4667 	ir.ot = ir.dflag + OT_WORD;
4668       if (i386_record_modrm (&ir))
4669 	return -1;
4670       if (ir.mod == 3)
4671 	{
4672 	  ir.rm |= ir.rex_b;
4673 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4674 	    ir.rm &= 0x3;
4675 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4676 	}
4677       else
4678 	{
4679 	  if (i386_record_lea_modrm (&ir))
4680 	    return -1;
4681 	}
4682       ir.reg |= rex_r;
4683       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4684 	ir.reg &= 0x3;
4685       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4686       break;
4687 
4688     case 0xc4:    /* les Gv */
4689     case 0xc5:    /* lds Gv */
4690       if (ir.regmap[X86_RECORD_R8_REGNUM])
4691         {
4692 	  ir.addr -= 1;
4693 	  goto no_support;
4694 	}
4695       /* FALLTHROUGH */
4696     case 0x0fb2:    /* lss Gv */
4697     case 0x0fb4:    /* lfs Gv */
4698     case 0x0fb5:    /* lgs Gv */
4699       if (i386_record_modrm (&ir))
4700 	return -1;
4701       if (ir.mod == 3)
4702 	{
4703 	  if (opcode > 0xff)
4704 	    ir.addr -= 3;
4705 	  else
4706 	    ir.addr -= 2;
4707 	  opcode = opcode << 8 | ir.modrm;
4708 	  goto no_support;
4709 	}
4710       switch (opcode)
4711 	{
4712 	case 0xc4:    /* les Gv */
4713 	  regnum = X86_RECORD_ES_REGNUM;
4714 	  break;
4715 	case 0xc5:    /* lds Gv */
4716 	  regnum = X86_RECORD_DS_REGNUM;
4717 	  break;
4718 	case 0x0fb2:  /* lss Gv */
4719 	  regnum = X86_RECORD_SS_REGNUM;
4720 	  break;
4721 	case 0x0fb4:  /* lfs Gv */
4722 	  regnum = X86_RECORD_FS_REGNUM;
4723 	  break;
4724 	case 0x0fb5:  /* lgs Gv */
4725 	  regnum = X86_RECORD_GS_REGNUM;
4726 	  break;
4727 	}
4728       I386_RECORD_ARCH_LIST_ADD_REG (regnum);
4729       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
4730       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4731       break;
4732 
4733     case 0xc0:    /* shifts */
4734     case 0xc1:
4735     case 0xd0:
4736     case 0xd1:
4737     case 0xd2:
4738     case 0xd3:
4739       if ((opcode & 1) == 0)
4740 	ir.ot = OT_BYTE;
4741       else
4742 	ir.ot = ir.dflag + OT_WORD;
4743       if (i386_record_modrm (&ir))
4744 	return -1;
4745       if (ir.mod != 3 && (opcode == 0xd2 || opcode == 0xd3))
4746 	{
4747 	  if (i386_record_lea_modrm (&ir))
4748 	    return -1;
4749 	}
4750       else
4751 	{
4752 	  ir.rm |= ir.rex_b;
4753 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4754 	    ir.rm &= 0x3;
4755 	  I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4756 	}
4757       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4758       break;
4759 
4760     case 0x0fa4:
4761     case 0x0fa5:
4762     case 0x0fac:
4763     case 0x0fad:
4764       if (i386_record_modrm (&ir))
4765 	return -1;
4766       if (ir.mod == 3)
4767 	{
4768 	  if (record_arch_list_add_reg (ir.regcache, ir.rm))
4769 	    return -1;
4770 	}
4771       else
4772 	{
4773 	  if (i386_record_lea_modrm (&ir))
4774 	    return -1;
4775 	}
4776       break;
4777 
4778     case 0xd8:    /* Floats.  */
4779     case 0xd9:
4780     case 0xda:
4781     case 0xdb:
4782     case 0xdc:
4783     case 0xdd:
4784     case 0xde:
4785     case 0xdf:
4786       if (i386_record_modrm (&ir))
4787 	return -1;
4788       ir.reg |= ((opcode & 7) << 3);
4789       if (ir.mod != 3)
4790 	{
4791 	  /* Memory.  */
4792 	  uint64_t addr64;
4793 
4794 	  if (i386_record_lea_modrm_addr (&ir, &addr64))
4795 	    return -1;
4796 	  switch (ir.reg)
4797 	    {
4798 	    case 0x02:
4799             case 0x12:
4800             case 0x22:
4801             case 0x32:
4802 	      /* For fcom, ficom nothing to do.  */
4803               break;
4804 	    case 0x03:
4805             case 0x13:
4806             case 0x23:
4807             case 0x33:
4808 	      /* For fcomp, ficomp pop FPU stack, store all.  */
4809               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4810                 return -1;
4811               break;
4812             case 0x00:
4813             case 0x01:
4814 	    case 0x04:
4815 	    case 0x05:
4816 	    case 0x06:
4817 	    case 0x07:
4818 	    case 0x10:
4819 	    case 0x11:
4820 	    case 0x14:
4821 	    case 0x15:
4822 	    case 0x16:
4823 	    case 0x17:
4824 	    case 0x20:
4825 	    case 0x21:
4826 	    case 0x24:
4827 	    case 0x25:
4828 	    case 0x26:
4829 	    case 0x27:
4830 	    case 0x30:
4831 	    case 0x31:
4832 	    case 0x34:
4833 	    case 0x35:
4834 	    case 0x36:
4835 	    case 0x37:
4836               /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,
4837                  fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension
4838                  of code,  always affects st(0) register.  */
4839               if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
4840                 return -1;
4841 	      break;
4842 	    case 0x08:
4843 	    case 0x0a:
4844 	    case 0x0b:
4845 	    case 0x18:
4846 	    case 0x19:
4847 	    case 0x1a:
4848 	    case 0x1b:
4849             case 0x1d:
4850 	    case 0x28:
4851 	    case 0x29:
4852 	    case 0x2a:
4853 	    case 0x2b:
4854 	    case 0x38:
4855 	    case 0x39:
4856 	    case 0x3a:
4857 	    case 0x3b:
4858             case 0x3c:
4859             case 0x3d:
4860 	      switch (ir.reg & 7)
4861 		{
4862 		case 0:
4863 		  /* Handling fld, fild.  */
4864 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4865 		    return -1;
4866 		  break;
4867 		case 1:
4868 		  switch (ir.reg >> 4)
4869 		    {
4870 		    case 0:
4871 		      if (record_arch_list_add_mem (addr64, 4))
4872 			return -1;
4873 		      break;
4874 		    case 2:
4875 		      if (record_arch_list_add_mem (addr64, 8))
4876 			return -1;
4877 		      break;
4878 		    case 3:
4879 		      break;
4880 		    default:
4881 		      if (record_arch_list_add_mem (addr64, 2))
4882 			return -1;
4883 		      break;
4884 		    }
4885 		  break;
4886 		default:
4887 		  switch (ir.reg >> 4)
4888 		    {
4889 		    case 0:
4890 		      if (record_arch_list_add_mem (addr64, 4))
4891 			return -1;
4892 		      if (3 == (ir.reg & 7))
4893 			{
4894 			  /* For fstp m32fp.  */
4895 			  if (i386_record_floats (gdbarch, &ir,
4896 						  I386_SAVE_FPU_REGS))
4897 			    return -1;
4898 			}
4899 		      break;
4900 		    case 1:
4901 		      if (record_arch_list_add_mem (addr64, 4))
4902 			return -1;
4903 		      if ((3 == (ir.reg & 7))
4904 			  || (5 == (ir.reg & 7))
4905 			  || (7 == (ir.reg & 7)))
4906 			{
4907 			  /* For fstp insn.  */
4908 			  if (i386_record_floats (gdbarch, &ir,
4909 						  I386_SAVE_FPU_REGS))
4910 			    return -1;
4911 			}
4912 		      break;
4913 		    case 2:
4914 		      if (record_arch_list_add_mem (addr64, 8))
4915 			return -1;
4916 		      if (3 == (ir.reg & 7))
4917 			{
4918 			  /* For fstp m64fp.  */
4919 			  if (i386_record_floats (gdbarch, &ir,
4920 						  I386_SAVE_FPU_REGS))
4921 			    return -1;
4922 			}
4923 		      break;
4924 		    case 3:
4925 		      if ((3 <= (ir.reg & 7)) && (6 <= (ir.reg & 7)))
4926 			{
4927 			  /* For fistp, fbld, fild, fbstp.  */
4928 			  if (i386_record_floats (gdbarch, &ir,
4929 						  I386_SAVE_FPU_REGS))
4930 			    return -1;
4931 			}
4932 		      /* Fall through */
4933 		    default:
4934 		      if (record_arch_list_add_mem (addr64, 2))
4935 			return -1;
4936 		      break;
4937 		    }
4938 		  break;
4939 		}
4940 	      break;
4941 	    case 0x0c:
4942               /* Insn fldenv.  */
4943               if (i386_record_floats (gdbarch, &ir,
4944                                       I386_SAVE_FPU_ENV_REG_STACK))
4945                 return -1;
4946               break;
4947 	    case 0x0d:
4948               /* Insn fldcw.  */
4949               if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep)))
4950                 return -1;
4951               break;
4952 	    case 0x2c:
4953               /* Insn frstor.  */
4954               if (i386_record_floats (gdbarch, &ir,
4955                                       I386_SAVE_FPU_ENV_REG_STACK))
4956                 return -1;
4957 	      break;
4958 	    case 0x0e:
4959 	      if (ir.dflag)
4960 		{
4961 		  if (record_arch_list_add_mem (addr64, 28))
4962 		    return -1;
4963 		}
4964 	      else
4965 		{
4966 		  if (record_arch_list_add_mem (addr64, 14))
4967 		    return -1;
4968 		}
4969 	      break;
4970 	    case 0x0f:
4971 	    case 0x2f:
4972 	      if (record_arch_list_add_mem (addr64, 2))
4973 		return -1;
4974               /* Insn fstp, fbstp.  */
4975               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4976                 return -1;
4977 	      break;
4978 	    case 0x1f:
4979 	    case 0x3e:
4980 	      if (record_arch_list_add_mem (addr64, 10))
4981 		return -1;
4982 	      break;
4983 	    case 0x2e:
4984 	      if (ir.dflag)
4985 		{
4986 		  if (record_arch_list_add_mem (addr64, 28))
4987 		    return -1;
4988 		  addr64 += 28;
4989 		}
4990 	      else
4991 		{
4992 		  if (record_arch_list_add_mem (addr64, 14))
4993 		    return -1;
4994 		  addr64 += 14;
4995 		}
4996 	      if (record_arch_list_add_mem (addr64, 80))
4997 		return -1;
4998 	      /* Insn fsave.  */
4999 	      if (i386_record_floats (gdbarch, &ir,
5000 				      I386_SAVE_FPU_ENV_REG_STACK))
5001 		return -1;
5002 	      break;
5003 	    case 0x3f:
5004 	      if (record_arch_list_add_mem (addr64, 8))
5005 		return -1;
5006 	      /* Insn fistp.  */
5007 	      if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5008 		return -1;
5009 	      break;
5010 	    default:
5011 	      ir.addr -= 2;
5012 	      opcode = opcode << 8 | ir.modrm;
5013 	      goto no_support;
5014 	      break;
5015 	    }
5016 	}
5017       /* Opcode is an extension of modR/M byte.  */
5018       else
5019         {
5020 	  switch (opcode)
5021 	    {
5022 	    case 0xd8:
5023 	      if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
5024 		return -1;
5025 	      break;
5026 	    case 0xd9:
5027 	      if (0x0c == (ir.modrm >> 4))
5028 		{
5029 		  if ((ir.modrm & 0x0f) <= 7)
5030 		    {
5031 		      if (i386_record_floats (gdbarch, &ir,
5032 					      I386_SAVE_FPU_REGS))
5033 			return -1;
5034 		    }
5035                   else
5036 		    {
5037 		      if (i386_record_floats (gdbarch, &ir,
5038 					      I387_ST0_REGNUM (tdep)))
5039 			return -1;
5040 		      /* If only st(0) is changing, then we have already
5041 			 recorded.  */
5042 		      if ((ir.modrm & 0x0f) - 0x08)
5043 			{
5044 			  if (i386_record_floats (gdbarch, &ir,
5045 						  I387_ST0_REGNUM (tdep) +
5046 						  ((ir.modrm & 0x0f) - 0x08)))
5047 			    return -1;
5048 			}
5049 		    }
5050 		}
5051               else
5052                 {
5053 		  switch (ir.modrm)
5054 		    {
5055 		    case 0xe0:
5056 		    case 0xe1:
5057 		    case 0xf0:
5058 		    case 0xf5:
5059 		    case 0xf8:
5060 		    case 0xfa:
5061 		    case 0xfc:
5062 		    case 0xfe:
5063 		    case 0xff:
5064 		      if (i386_record_floats (gdbarch, &ir,
5065 					      I387_ST0_REGNUM (tdep)))
5066 			return -1;
5067 		      break;
5068 		    case 0xf1:
5069 		    case 0xf2:
5070 		    case 0xf3:
5071 		    case 0xf4:
5072 		    case 0xf6:
5073 		    case 0xf7:
5074 		    case 0xe8:
5075 		    case 0xe9:
5076 		    case 0xea:
5077 		    case 0xeb:
5078 		    case 0xec:
5079 		    case 0xed:
5080 		    case 0xee:
5081 		    case 0xf9:
5082 		    case 0xfb:
5083 		      if (i386_record_floats (gdbarch, &ir,
5084 					      I386_SAVE_FPU_REGS))
5085 			return -1;
5086 		      break;
5087 		    case 0xfd:
5088 		      if (i386_record_floats (gdbarch, &ir,
5089 					      I387_ST0_REGNUM (tdep)))
5090 			return -1;
5091 		      if (i386_record_floats (gdbarch, &ir,
5092 					      I387_ST0_REGNUM (tdep) + 1))
5093 			return -1;
5094 		      break;
5095 		    }
5096 		}
5097               break;
5098             case 0xda:
5099               if (0xe9 == ir.modrm)
5100                 {
5101 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5102 		    return -1;
5103                 }
5104               else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
5105                 {
5106 		  if (i386_record_floats (gdbarch, &ir,
5107 					  I387_ST0_REGNUM (tdep)))
5108 		    return -1;
5109 		  if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
5110 		    {
5111 		      if (i386_record_floats (gdbarch, &ir,
5112 					      I387_ST0_REGNUM (tdep) +
5113 					      (ir.modrm & 0x0f)))
5114 			return -1;
5115 		    }
5116 		  else if ((ir.modrm & 0x0f) - 0x08)
5117 		    {
5118 		      if (i386_record_floats (gdbarch, &ir,
5119 					      I387_ST0_REGNUM (tdep) +
5120 					      ((ir.modrm & 0x0f) - 0x08)))
5121 			return -1;
5122 		    }
5123                 }
5124               break;
5125             case 0xdb:
5126               if (0xe3 == ir.modrm)
5127                 {
5128 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV))
5129 		    return -1;
5130                 }
5131               else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
5132                 {
5133 		  if (i386_record_floats (gdbarch, &ir,
5134 					  I387_ST0_REGNUM (tdep)))
5135 		    return -1;
5136 		  if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
5137 		    {
5138 		      if (i386_record_floats (gdbarch, &ir,
5139 					      I387_ST0_REGNUM (tdep) +
5140 					      (ir.modrm & 0x0f)))
5141 			return -1;
5142 		    }
5143 		  else if ((ir.modrm & 0x0f) - 0x08)
5144 		    {
5145 		      if (i386_record_floats (gdbarch, &ir,
5146 					      I387_ST0_REGNUM (tdep) +
5147 					      ((ir.modrm & 0x0f) - 0x08)))
5148 			return -1;
5149 		    }
5150                 }
5151               break;
5152             case 0xdc:
5153               if ((0x0c == ir.modrm >> 4)
5154 		  || (0x0d == ir.modrm >> 4)
5155 		  || (0x0f == ir.modrm >> 4))
5156                 {
5157 		  if ((ir.modrm & 0x0f) <= 7)
5158 		    {
5159 		      if (i386_record_floats (gdbarch, &ir,
5160 					      I387_ST0_REGNUM (tdep) +
5161 					      (ir.modrm & 0x0f)))
5162 			return -1;
5163 		    }
5164 		  else
5165 		    {
5166 		      if (i386_record_floats (gdbarch, &ir,
5167 					      I387_ST0_REGNUM (tdep) +
5168 					      ((ir.modrm & 0x0f) - 0x08)))
5169 			return -1;
5170 		    }
5171                 }
5172 	      break;
5173             case 0xdd:
5174               if (0x0c == ir.modrm >> 4)
5175                 {
5176                   if (i386_record_floats (gdbarch, &ir,
5177                                           I387_FTAG_REGNUM (tdep)))
5178                     return -1;
5179                 }
5180               else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
5181                 {
5182                   if ((ir.modrm & 0x0f) <= 7)
5183                     {
5184 		      if (i386_record_floats (gdbarch, &ir,
5185 					      I387_ST0_REGNUM (tdep) +
5186 					      (ir.modrm & 0x0f)))
5187 			return -1;
5188                     }
5189                   else
5190                     {
5191                       if (i386_record_floats (gdbarch, &ir,
5192 					      I386_SAVE_FPU_REGS))
5193                         return -1;
5194                     }
5195                 }
5196               break;
5197             case 0xde:
5198               if ((0x0c == ir.modrm >> 4)
5199 		  || (0x0e == ir.modrm >> 4)
5200 		  || (0x0f == ir.modrm >> 4)
5201 		  || (0xd9 == ir.modrm))
5202                 {
5203 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5204 		    return -1;
5205                 }
5206               break;
5207             case 0xdf:
5208               if (0xe0 == ir.modrm)
5209                 {
5210 		  if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
5211 		    return -1;
5212                 }
5213               else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
5214                 {
5215 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5216 		    return -1;
5217                 }
5218               break;
5219 	    }
5220 	}
5221       break;
5222       /* string ops */
5223     case 0xa4:    /* movsS */
5224     case 0xa5:
5225     case 0xaa:    /* stosS */
5226     case 0xab:
5227     case 0x6c:    /* insS */
5228     case 0x6d:
5229       regcache_raw_read_unsigned (ir.regcache,
5230                                   ir.regmap[X86_RECORD_RECX_REGNUM],
5231                                   &addr);
5232       if (addr)
5233         {
5234           ULONGEST es, ds;
5235 
5236           if ((opcode & 1) == 0)
5237 	    ir.ot = OT_BYTE;
5238           else
5239 	    ir.ot = ir.dflag + OT_WORD;
5240           regcache_raw_read_unsigned (ir.regcache,
5241                                       ir.regmap[X86_RECORD_REDI_REGNUM],
5242                                       &addr);
5243 
5244           regcache_raw_read_unsigned (ir.regcache,
5245                                       ir.regmap[X86_RECORD_ES_REGNUM],
5246                                       &es);
5247           regcache_raw_read_unsigned (ir.regcache,
5248                                       ir.regmap[X86_RECORD_DS_REGNUM],
5249                                       &ds);
5250           if (ir.aflag && (es != ds))
5251             {
5252               /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */
5253               if (record_memory_query)
5254                 {
5255 	          int q;
5256 
5257                   target_terminal_ours ();
5258                   q = yquery (_("\
5259 Process record ignores the memory change of instruction at address %s\n\
5260 because it can't get the value of the segment register.\n\
5261 Do you want to stop the program?"),
5262                               paddress (gdbarch, ir.orig_addr));
5263                   target_terminal_inferior ();
5264                   if (q)
5265                     return -1;
5266                 }
5267             }
5268           else
5269             {
5270               if (record_arch_list_add_mem (addr, 1 << ir.ot))
5271                 return -1;
5272             }
5273 
5274           if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5275             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5276           if (opcode == 0xa4 || opcode == 0xa5)
5277             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5278           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5279           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5280 	}
5281       break;
5282 
5283     case 0xa6:    /* cmpsS */
5284     case 0xa7:
5285       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5286       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5287       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5288         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5289       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5290       break;
5291 
5292     case 0xac:    /* lodsS */
5293     case 0xad:
5294       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5295       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5296       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5297         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5298       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5299       break;
5300 
5301     case 0xae:    /* scasS */
5302     case 0xaf:
5303       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5304       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5305         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5306       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5307       break;
5308 
5309     case 0x6e:    /* outsS */
5310     case 0x6f:
5311       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5312       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5313         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5314       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5315       break;
5316 
5317     case 0xe4:    /* port I/O */
5318     case 0xe5:
5319     case 0xec:
5320     case 0xed:
5321       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5322       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5323       break;
5324 
5325     case 0xe6:
5326     case 0xe7:
5327     case 0xee:
5328     case 0xef:
5329       break;
5330 
5331       /* control */
5332     case 0xc2:    /* ret im */
5333     case 0xc3:    /* ret */
5334       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5335       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5336       break;
5337 
5338     case 0xca:    /* lret im */
5339     case 0xcb:    /* lret */
5340     case 0xcf:    /* iret */
5341       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
5342       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5343       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5344       break;
5345 
5346     case 0xe8:    /* call im */
5347       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
5348         ir.dflag = 2;
5349       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5350         return -1;
5351       break;
5352 
5353     case 0x9a:    /* lcall im */
5354       if (ir.regmap[X86_RECORD_R8_REGNUM])
5355         {
5356           ir.addr -= 1;
5357           goto no_support;
5358         }
5359       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
5360       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5361         return -1;
5362       break;
5363 
5364     case 0xe9:    /* jmp im */
5365     case 0xea:    /* ljmp im */
5366     case 0xeb:    /* jmp Jb */
5367     case 0x70:    /* jcc Jb */
5368     case 0x71:
5369     case 0x72:
5370     case 0x73:
5371     case 0x74:
5372     case 0x75:
5373     case 0x76:
5374     case 0x77:
5375     case 0x78:
5376     case 0x79:
5377     case 0x7a:
5378     case 0x7b:
5379     case 0x7c:
5380     case 0x7d:
5381     case 0x7e:
5382     case 0x7f:
5383     case 0x0f80:  /* jcc Jv */
5384     case 0x0f81:
5385     case 0x0f82:
5386     case 0x0f83:
5387     case 0x0f84:
5388     case 0x0f85:
5389     case 0x0f86:
5390     case 0x0f87:
5391     case 0x0f88:
5392     case 0x0f89:
5393     case 0x0f8a:
5394     case 0x0f8b:
5395     case 0x0f8c:
5396     case 0x0f8d:
5397     case 0x0f8e:
5398     case 0x0f8f:
5399       break;
5400 
5401     case 0x0f90:  /* setcc Gv */
5402     case 0x0f91:
5403     case 0x0f92:
5404     case 0x0f93:
5405     case 0x0f94:
5406     case 0x0f95:
5407     case 0x0f96:
5408     case 0x0f97:
5409     case 0x0f98:
5410     case 0x0f99:
5411     case 0x0f9a:
5412     case 0x0f9b:
5413     case 0x0f9c:
5414     case 0x0f9d:
5415     case 0x0f9e:
5416     case 0x0f9f:
5417       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5418       ir.ot = OT_BYTE;
5419       if (i386_record_modrm (&ir))
5420 	return -1;
5421       if (ir.mod == 3)
5422         I386_RECORD_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b)
5423 	                                        : (ir.rm & 0x3));
5424       else
5425 	{
5426 	  if (i386_record_lea_modrm (&ir))
5427 	    return -1;
5428 	}
5429       break;
5430 
5431     case 0x0f40:    /* cmov Gv, Ev */
5432     case 0x0f41:
5433     case 0x0f42:
5434     case 0x0f43:
5435     case 0x0f44:
5436     case 0x0f45:
5437     case 0x0f46:
5438     case 0x0f47:
5439     case 0x0f48:
5440     case 0x0f49:
5441     case 0x0f4a:
5442     case 0x0f4b:
5443     case 0x0f4c:
5444     case 0x0f4d:
5445     case 0x0f4e:
5446     case 0x0f4f:
5447       if (i386_record_modrm (&ir))
5448 	return -1;
5449       ir.reg |= rex_r;
5450       if (ir.dflag == OT_BYTE)
5451 	ir.reg &= 0x3;
5452       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
5453       break;
5454 
5455       /* flags */
5456     case 0x9c:    /* pushf */
5457       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5458       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
5459         ir.dflag = 2;
5460       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5461         return -1;
5462       break;
5463 
5464     case 0x9d:    /* popf */
5465       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5466       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5467       break;
5468 
5469     case 0x9e:    /* sahf */
5470       if (ir.regmap[X86_RECORD_R8_REGNUM])
5471         {
5472           ir.addr -= 1;
5473           goto no_support;
5474         }
5475       /* FALLTHROUGH */
5476     case 0xf5:    /* cmc */
5477     case 0xf8:    /* clc */
5478     case 0xf9:    /* stc */
5479     case 0xfc:    /* cld */
5480     case 0xfd:    /* std */
5481       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5482       break;
5483 
5484     case 0x9f:    /* lahf */
5485       if (ir.regmap[X86_RECORD_R8_REGNUM])
5486         {
5487           ir.addr -= 1;
5488           goto no_support;
5489         }
5490       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5491       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5492       break;
5493 
5494       /* bit operations */
5495     case 0x0fba:    /* bt/bts/btr/btc Gv, im */
5496       ir.ot = ir.dflag + OT_WORD;
5497       if (i386_record_modrm (&ir))
5498 	return -1;
5499       if (ir.reg < 4)
5500 	{
5501 	  ir.addr -= 2;
5502 	  opcode = opcode << 8 | ir.modrm;
5503 	  goto no_support;
5504 	}
5505       if (ir.reg != 4)
5506 	{
5507           if (ir.mod == 3)
5508             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5509 	  else
5510 	    {
5511 	      if (i386_record_lea_modrm (&ir))
5512 		return -1;
5513 	    }
5514 	}
5515       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5516       break;
5517 
5518     case 0x0fa3:    /* bt Gv, Ev */
5519       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5520       break;
5521 
5522     case 0x0fab:    /* bts */
5523     case 0x0fb3:    /* btr */
5524     case 0x0fbb:    /* btc */
5525       ir.ot = ir.dflag + OT_WORD;
5526       if (i386_record_modrm (&ir))
5527         return -1;
5528       if (ir.mod == 3)
5529         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5530       else
5531         {
5532           uint64_t addr64;
5533           if (i386_record_lea_modrm_addr (&ir, &addr64))
5534             return -1;
5535           regcache_raw_read_unsigned (ir.regcache,
5536                                       ir.regmap[ir.reg | rex_r],
5537                                       &addr);
5538           switch (ir.dflag)
5539             {
5540             case 0:
5541               addr64 += ((int16_t) addr >> 4) << 4;
5542               break;
5543             case 1:
5544               addr64 += ((int32_t) addr >> 5) << 5;
5545               break;
5546             case 2:
5547               addr64 += ((int64_t) addr >> 6) << 6;
5548               break;
5549             }
5550           if (record_arch_list_add_mem (addr64, 1 << ir.ot))
5551             return -1;
5552           if (i386_record_lea_modrm (&ir))
5553             return -1;
5554         }
5555       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5556       break;
5557 
5558     case 0x0fbc:    /* bsf */
5559     case 0x0fbd:    /* bsr */
5560       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
5561       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5562       break;
5563 
5564       /* bcd */
5565     case 0x27:    /* daa */
5566     case 0x2f:    /* das */
5567     case 0x37:    /* aaa */
5568     case 0x3f:    /* aas */
5569     case 0xd4:    /* aam */
5570     case 0xd5:    /* aad */
5571       if (ir.regmap[X86_RECORD_R8_REGNUM])
5572         {
5573           ir.addr -= 1;
5574           goto no_support;
5575         }
5576       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5577       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5578       break;
5579 
5580       /* misc */
5581     case 0x90:    /* nop */
5582       if (prefixes & PREFIX_LOCK)
5583 	{
5584 	  ir.addr -= 1;
5585 	  goto no_support;
5586 	}
5587       break;
5588 
5589     case 0x9b:    /* fwait */
5590       if (target_read_memory (ir.addr, &opcode8, 1))
5591         {
5592           if (record_debug)
5593             printf_unfiltered (_("Process record: error reading memory at "
5594 				 "addr 0x%s len = 1.\n"),
5595 			       paddress (gdbarch, ir.addr));
5596           return -1;
5597         }
5598       opcode = (uint32_t) opcode8;
5599       ir.addr++;
5600       goto reswitch;
5601       break;
5602 
5603       /* XXX */
5604     case 0xcc:    /* int3 */
5605       printf_unfiltered (_("Process record does not support instruction "
5606 			   "int3.\n"));
5607       ir.addr -= 1;
5608       goto no_support;
5609       break;
5610 
5611       /* XXX */
5612     case 0xcd:    /* int */
5613       {
5614 	int ret;
5615 	uint8_t interrupt;
5616 	if (target_read_memory (ir.addr, &interrupt, 1))
5617 	  {
5618 	    if (record_debug)
5619 	      printf_unfiltered (_("Process record: error reading memory "
5620 				   "at addr %s len = 1.\n"),
5621 				 paddress (gdbarch, ir.addr));
5622 	    return -1;
5623 	  }
5624 	ir.addr++;
5625 	if (interrupt != 0x80
5626 	    || tdep->i386_intx80_record == NULL)
5627 	  {
5628 	    printf_unfiltered (_("Process record does not support "
5629 				 "instruction int 0x%02x.\n"),
5630 			       interrupt);
5631 	    ir.addr -= 2;
5632 	    goto no_support;
5633 	  }
5634 	ret = tdep->i386_intx80_record (ir.regcache);
5635 	if (ret)
5636 	  return ret;
5637       }
5638       break;
5639 
5640       /* XXX */
5641     case 0xce:    /* into */
5642       printf_unfiltered (_("Process record does not support "
5643 			   "instruction into.\n"));
5644       ir.addr -= 1;
5645       goto no_support;
5646       break;
5647 
5648     case 0xfa:    /* cli */
5649     case 0xfb:    /* sti */
5650       break;
5651 
5652     case 0x62:    /* bound */
5653       printf_unfiltered (_("Process record does not support "
5654 			   "instruction bound.\n"));
5655       ir.addr -= 1;
5656       goto no_support;
5657       break;
5658 
5659     case 0x0fc8:    /* bswap reg */
5660     case 0x0fc9:
5661     case 0x0fca:
5662     case 0x0fcb:
5663     case 0x0fcc:
5664     case 0x0fcd:
5665     case 0x0fce:
5666     case 0x0fcf:
5667       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 7) | ir.rex_b);
5668       break;
5669 
5670     case 0xd6:    /* salc */
5671       if (ir.regmap[X86_RECORD_R8_REGNUM])
5672         {
5673           ir.addr -= 1;
5674           goto no_support;
5675         }
5676       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5677       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5678       break;
5679 
5680     case 0xe0:    /* loopnz */
5681     case 0xe1:    /* loopz */
5682     case 0xe2:    /* loop */
5683     case 0xe3:    /* jecxz */
5684       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5685       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5686       break;
5687 
5688     case 0x0f30:    /* wrmsr */
5689       printf_unfiltered (_("Process record does not support "
5690 			   "instruction wrmsr.\n"));
5691       ir.addr -= 2;
5692       goto no_support;
5693       break;
5694 
5695     case 0x0f32:    /* rdmsr */
5696       printf_unfiltered (_("Process record does not support "
5697 			   "instruction rdmsr.\n"));
5698       ir.addr -= 2;
5699       goto no_support;
5700       break;
5701 
5702     case 0x0f31:    /* rdtsc */
5703       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5704       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5705       break;
5706 
5707     case 0x0f34:    /* sysenter */
5708       {
5709 	int ret;
5710         if (ir.regmap[X86_RECORD_R8_REGNUM])
5711           {
5712             ir.addr -= 2;
5713             goto no_support;
5714           }
5715 	if (tdep->i386_sysenter_record == NULL)
5716 	  {
5717 	    printf_unfiltered (_("Process record does not support "
5718 				 "instruction sysenter.\n"));
5719 	    ir.addr -= 2;
5720 	    goto no_support;
5721 	  }
5722 	ret = tdep->i386_sysenter_record (ir.regcache);
5723 	if (ret)
5724 	  return ret;
5725       }
5726       break;
5727 
5728     case 0x0f35:    /* sysexit */
5729       printf_unfiltered (_("Process record does not support "
5730 			   "instruction sysexit.\n"));
5731       ir.addr -= 2;
5732       goto no_support;
5733       break;
5734 
5735     case 0x0f05:    /* syscall */
5736       {
5737 	int ret;
5738 	if (tdep->i386_syscall_record == NULL)
5739 	  {
5740 	    printf_unfiltered (_("Process record does not support "
5741 				 "instruction syscall.\n"));
5742 	    ir.addr -= 2;
5743 	    goto no_support;
5744 	  }
5745 	ret = tdep->i386_syscall_record (ir.regcache);
5746 	if (ret)
5747 	  return ret;
5748       }
5749       break;
5750 
5751     case 0x0f07:    /* sysret */
5752       printf_unfiltered (_("Process record does not support "
5753                            "instruction sysret.\n"));
5754       ir.addr -= 2;
5755       goto no_support;
5756       break;
5757 
5758     case 0x0fa2:    /* cpuid */
5759       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5760       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5761       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5762       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
5763       break;
5764 
5765     case 0xf4:    /* hlt */
5766       printf_unfiltered (_("Process record does not support "
5767 			   "instruction hlt.\n"));
5768       ir.addr -= 1;
5769       goto no_support;
5770       break;
5771 
5772     case 0x0f00:
5773       if (i386_record_modrm (&ir))
5774 	return -1;
5775       switch (ir.reg)
5776 	{
5777 	case 0:  /* sldt */
5778 	case 1:  /* str  */
5779 	  if (ir.mod == 3)
5780             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5781 	  else
5782 	    {
5783 	      ir.ot = OT_WORD;
5784 	      if (i386_record_lea_modrm (&ir))
5785 		return -1;
5786 	    }
5787 	  break;
5788 	case 2:  /* lldt */
5789 	case 3:  /* ltr */
5790 	  break;
5791 	case 4:  /* verr */
5792 	case 5:  /* verw */
5793           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5794 	  break;
5795 	default:
5796 	  ir.addr -= 3;
5797 	  opcode = opcode << 8 | ir.modrm;
5798 	  goto no_support;
5799 	  break;
5800 	}
5801       break;
5802 
5803     case 0x0f01:
5804       if (i386_record_modrm (&ir))
5805 	return -1;
5806       switch (ir.reg)
5807 	{
5808 	case 0:  /* sgdt */
5809 	  {
5810 	    uint64_t addr64;
5811 
5812 	    if (ir.mod == 3)
5813 	      {
5814 		ir.addr -= 3;
5815 		opcode = opcode << 8 | ir.modrm;
5816 		goto no_support;
5817 	      }
5818 	    if (ir.override >= 0)
5819 	      {
5820                 if (record_memory_query)
5821                   {
5822 	            int q;
5823 
5824                     target_terminal_ours ();
5825                     q = yquery (_("\
5826 Process record ignores the memory change of instruction at address %s\n\
5827 because it can't get the value of the segment register.\n\
5828 Do you want to stop the program?"),
5829                                 paddress (gdbarch, ir.orig_addr));
5830                     target_terminal_inferior ();
5831                     if (q)
5832                       return -1;
5833                   }
5834 	      }
5835 	    else
5836 	      {
5837 		if (i386_record_lea_modrm_addr (&ir, &addr64))
5838 		  return -1;
5839 		if (record_arch_list_add_mem (addr64, 2))
5840 		  return -1;
5841 		addr64 += 2;
5842                 if (ir.regmap[X86_RECORD_R8_REGNUM])
5843                   {
5844                     if (record_arch_list_add_mem (addr64, 8))
5845 		      return -1;
5846                   }
5847                 else
5848                   {
5849                     if (record_arch_list_add_mem (addr64, 4))
5850 		      return -1;
5851                   }
5852 	      }
5853 	  }
5854 	  break;
5855 	case 1:
5856 	  if (ir.mod == 3)
5857 	    {
5858 	      switch (ir.rm)
5859 		{
5860 		case 0:  /* monitor */
5861 		  break;
5862 		case 1:  /* mwait */
5863 		  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5864 		  break;
5865 		default:
5866 		  ir.addr -= 3;
5867 		  opcode = opcode << 8 | ir.modrm;
5868 		  goto no_support;
5869 		  break;
5870 		}
5871 	    }
5872 	  else
5873 	    {
5874 	      /* sidt */
5875 	      if (ir.override >= 0)
5876 		{
5877                   if (record_memory_query)
5878                     {
5879 	              int q;
5880 
5881                       target_terminal_ours ();
5882                       q = yquery (_("\
5883 Process record ignores the memory change of instruction at address %s\n\
5884 because it can't get the value of the segment register.\n\
5885 Do you want to stop the program?"),
5886                                   paddress (gdbarch, ir.orig_addr));
5887                       target_terminal_inferior ();
5888                       if (q)
5889                         return -1;
5890                     }
5891 		}
5892 	      else
5893 		{
5894 		  uint64_t addr64;
5895 
5896 		  if (i386_record_lea_modrm_addr (&ir, &addr64))
5897 		    return -1;
5898 		  if (record_arch_list_add_mem (addr64, 2))
5899 		    return -1;
5900 		  addr64 += 2;
5901                   if (ir.regmap[X86_RECORD_R8_REGNUM])
5902                     {
5903                       if (record_arch_list_add_mem (addr64, 8))
5904 		        return -1;
5905                     }
5906                   else
5907                     {
5908                       if (record_arch_list_add_mem (addr64, 4))
5909 		        return -1;
5910                     }
5911 		}
5912 	    }
5913 	  break;
5914 	case 2:  /* lgdt */
5915 	  if (ir.mod == 3)
5916 	    {
5917 	      /* xgetbv */
5918 	      if (ir.rm == 0)
5919 		{
5920 		  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5921 		  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5922 		  break;
5923 		}
5924 	      /* xsetbv */
5925 	      else if (ir.rm == 1)
5926 		break;
5927 	    }
5928 	case 3:  /* lidt */
5929 	  if (ir.mod == 3)
5930 	    {
5931 	      ir.addr -= 3;
5932 	      opcode = opcode << 8 | ir.modrm;
5933 	      goto no_support;
5934 	    }
5935 	  break;
5936 	case 4:  /* smsw */
5937 	  if (ir.mod == 3)
5938 	    {
5939 	      if (record_arch_list_add_reg (ir.regcache, ir.rm | ir.rex_b))
5940 		return -1;
5941 	    }
5942 	  else
5943 	    {
5944 	      ir.ot = OT_WORD;
5945 	      if (i386_record_lea_modrm (&ir))
5946 		return -1;
5947 	    }
5948 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5949 	  break;
5950 	case 6:  /* lmsw */
5951 	  I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5952 	  break;
5953 	case 7:  /* invlpg */
5954 	  if (ir.mod == 3)
5955 	    {
5956 	      if (ir.rm == 0 && ir.regmap[X86_RECORD_R8_REGNUM])
5957 	        I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
5958 	      else
5959 	        {
5960 	          ir.addr -= 3;
5961 	          opcode = opcode << 8 | ir.modrm;
5962 	          goto no_support;
5963 	        }
5964 	    }
5965 	  else
5966 	    I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5967 	  break;
5968 	default:
5969 	  ir.addr -= 3;
5970 	  opcode = opcode << 8 | ir.modrm;
5971 	  goto no_support;
5972 	  break;
5973 	}
5974       break;
5975 
5976     case 0x0f08:    /* invd */
5977     case 0x0f09:    /* wbinvd */
5978       break;
5979 
5980     case 0x63:    /* arpl */
5981       if (i386_record_modrm (&ir))
5982 	return -1;
5983       if (ir.mod == 3 || ir.regmap[X86_RECORD_R8_REGNUM])
5984         {
5985           I386_RECORD_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM]
5986 	                                   ? (ir.reg | rex_r) : ir.rm);
5987         }
5988       else
5989         {
5990           ir.ot = ir.dflag ? OT_LONG : OT_WORD;
5991           if (i386_record_lea_modrm (&ir))
5992             return -1;
5993         }
5994       if (!ir.regmap[X86_RECORD_R8_REGNUM])
5995         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5996       break;
5997 
5998     case 0x0f02:    /* lar */
5999     case 0x0f03:    /* lsl */
6000       if (i386_record_modrm (&ir))
6001 	return -1;
6002       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
6003       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6004       break;
6005 
6006     case 0x0f18:
6007       if (i386_record_modrm (&ir))
6008 	return -1;
6009       if (ir.mod == 3 && ir.reg == 3)
6010         {
6011 	  ir.addr -= 3;
6012 	  opcode = opcode << 8 | ir.modrm;
6013 	  goto no_support;
6014 	}
6015       break;
6016 
6017     case 0x0f19:
6018     case 0x0f1a:
6019     case 0x0f1b:
6020     case 0x0f1c:
6021     case 0x0f1d:
6022     case 0x0f1e:
6023     case 0x0f1f:
6024       /* nop (multi byte) */
6025       break;
6026 
6027     case 0x0f20:    /* mov reg, crN */
6028     case 0x0f22:    /* mov crN, reg */
6029       if (i386_record_modrm (&ir))
6030 	return -1;
6031       if ((ir.modrm & 0xc0) != 0xc0)
6032 	{
6033 	  ir.addr -= 3;
6034 	  opcode = opcode << 8 | ir.modrm;
6035 	  goto no_support;
6036 	}
6037       switch (ir.reg)
6038 	{
6039 	case 0:
6040 	case 2:
6041 	case 3:
6042 	case 4:
6043 	case 8:
6044 	  if (opcode & 2)
6045 	    I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6046 	  else
6047             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6048 	  break;
6049 	default:
6050 	  ir.addr -= 3;
6051 	  opcode = opcode << 8 | ir.modrm;
6052 	  goto no_support;
6053 	  break;
6054 	}
6055       break;
6056 
6057     case 0x0f21:    /* mov reg, drN */
6058     case 0x0f23:    /* mov drN, reg */
6059       if (i386_record_modrm (&ir))
6060 	return -1;
6061       if ((ir.modrm & 0xc0) != 0xc0 || ir.reg == 4
6062 	  || ir.reg == 5 || ir.reg >= 8)
6063 	{
6064 	  ir.addr -= 3;
6065 	  opcode = opcode << 8 | ir.modrm;
6066 	  goto no_support;
6067 	}
6068       if (opcode & 2)
6069         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6070       else
6071 	I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6072       break;
6073 
6074     case 0x0f06:    /* clts */
6075       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6076       break;
6077 
6078     /* MMX 3DNow! SSE SSE2 SSE3 SSSE3 SSE4 */
6079 
6080     case 0x0f0d:    /* 3DNow! prefetch */
6081       break;
6082 
6083     case 0x0f0e:    /* 3DNow! femms */
6084     case 0x0f77:    /* emms */
6085       if (i386_fpc_regnum_p (gdbarch, I387_FTAG_REGNUM(tdep)))
6086         goto no_support;
6087       record_arch_list_add_reg (ir.regcache, I387_FTAG_REGNUM(tdep));
6088       break;
6089 
6090     case 0x0f0f:    /* 3DNow! data */
6091       if (i386_record_modrm (&ir))
6092 	return -1;
6093       if (target_read_memory (ir.addr, &opcode8, 1))
6094         {
6095 	  printf_unfiltered (_("Process record: error reading memory at "
6096 	                       "addr %s len = 1.\n"),
6097 	                     paddress (gdbarch, ir.addr));
6098           return -1;
6099         }
6100       ir.addr++;
6101       switch (opcode8)
6102         {
6103         case 0x0c:    /* 3DNow! pi2fw */
6104         case 0x0d:    /* 3DNow! pi2fd */
6105         case 0x1c:    /* 3DNow! pf2iw */
6106         case 0x1d:    /* 3DNow! pf2id */
6107         case 0x8a:    /* 3DNow! pfnacc */
6108         case 0x8e:    /* 3DNow! pfpnacc */
6109         case 0x90:    /* 3DNow! pfcmpge */
6110         case 0x94:    /* 3DNow! pfmin */
6111         case 0x96:    /* 3DNow! pfrcp */
6112         case 0x97:    /* 3DNow! pfrsqrt */
6113         case 0x9a:    /* 3DNow! pfsub */
6114         case 0x9e:    /* 3DNow! pfadd */
6115         case 0xa0:    /* 3DNow! pfcmpgt */
6116         case 0xa4:    /* 3DNow! pfmax */
6117         case 0xa6:    /* 3DNow! pfrcpit1 */
6118         case 0xa7:    /* 3DNow! pfrsqit1 */
6119         case 0xaa:    /* 3DNow! pfsubr */
6120         case 0xae:    /* 3DNow! pfacc */
6121         case 0xb0:    /* 3DNow! pfcmpeq */
6122         case 0xb4:    /* 3DNow! pfmul */
6123         case 0xb6:    /* 3DNow! pfrcpit2 */
6124         case 0xb7:    /* 3DNow! pmulhrw */
6125         case 0xbb:    /* 3DNow! pswapd */
6126         case 0xbf:    /* 3DNow! pavgusb */
6127           if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
6128             goto no_support_3dnow_data;
6129           record_arch_list_add_reg (ir.regcache, ir.reg);
6130           break;
6131 
6132         default:
6133 no_support_3dnow_data:
6134           opcode = (opcode << 8) | opcode8;
6135           goto no_support;
6136           break;
6137         }
6138       break;
6139 
6140     case 0x0faa:    /* rsm */
6141       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6142       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6143       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
6144       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6145       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
6146       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
6147       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
6148       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
6149       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
6150       break;
6151 
6152     case 0x0fae:
6153       if (i386_record_modrm (&ir))
6154 	return -1;
6155       switch(ir.reg)
6156         {
6157         case 0:    /* fxsave */
6158           {
6159             uint64_t tmpu64;
6160 
6161             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6162 	    if (i386_record_lea_modrm_addr (&ir, &tmpu64))
6163 	      return -1;
6164             if (record_arch_list_add_mem (tmpu64, 512))
6165               return -1;
6166           }
6167           break;
6168 
6169         case 1:    /* fxrstor */
6170           {
6171             int i;
6172 
6173             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6174 
6175             for (i = I387_MM0_REGNUM (tdep);
6176                  i386_mmx_regnum_p (gdbarch, i); i++)
6177               record_arch_list_add_reg (ir.regcache, i);
6178 
6179             for (i = I387_XMM0_REGNUM (tdep);
6180                  i386_xmm_regnum_p (gdbarch, i); i++)
6181               record_arch_list_add_reg (ir.regcache, i);
6182 
6183             if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
6184               record_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
6185 
6186             for (i = I387_ST0_REGNUM (tdep);
6187                  i386_fp_regnum_p (gdbarch, i); i++)
6188               record_arch_list_add_reg (ir.regcache, i);
6189 
6190             for (i = I387_FCTRL_REGNUM (tdep);
6191                  i386_fpc_regnum_p (gdbarch, i); i++)
6192               record_arch_list_add_reg (ir.regcache, i);
6193           }
6194           break;
6195 
6196         case 2:    /* ldmxcsr */
6197           if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
6198             goto no_support;
6199           record_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
6200           break;
6201 
6202         case 3:    /* stmxcsr */
6203           ir.ot = OT_LONG;
6204           if (i386_record_lea_modrm (&ir))
6205             return -1;
6206           break;
6207 
6208         case 5:    /* lfence */
6209         case 6:    /* mfence */
6210         case 7:    /* sfence clflush */
6211           break;
6212 
6213         default:
6214           opcode = (opcode << 8) | ir.modrm;
6215           goto no_support;
6216           break;
6217         }
6218       break;
6219 
6220     case 0x0fc3:    /* movnti */
6221       ir.ot = (ir.dflag == 2) ? OT_QUAD : OT_LONG;
6222       if (i386_record_modrm (&ir))
6223 	return -1;
6224       if (ir.mod == 3)
6225         goto no_support;
6226       ir.reg |= rex_r;
6227       if (i386_record_lea_modrm (&ir))
6228         return -1;
6229       break;
6230 
6231     /* Add prefix to opcode.  */
6232     case 0x0f10:
6233     case 0x0f11:
6234     case 0x0f12:
6235     case 0x0f13:
6236     case 0x0f14:
6237     case 0x0f15:
6238     case 0x0f16:
6239     case 0x0f17:
6240     case 0x0f28:
6241     case 0x0f29:
6242     case 0x0f2a:
6243     case 0x0f2b:
6244     case 0x0f2c:
6245     case 0x0f2d:
6246     case 0x0f2e:
6247     case 0x0f2f:
6248     case 0x0f38:
6249     case 0x0f39:
6250     case 0x0f3a:
6251     case 0x0f50:
6252     case 0x0f51:
6253     case 0x0f52:
6254     case 0x0f53:
6255     case 0x0f54:
6256     case 0x0f55:
6257     case 0x0f56:
6258     case 0x0f57:
6259     case 0x0f58:
6260     case 0x0f59:
6261     case 0x0f5a:
6262     case 0x0f5b:
6263     case 0x0f5c:
6264     case 0x0f5d:
6265     case 0x0f5e:
6266     case 0x0f5f:
6267     case 0x0f60:
6268     case 0x0f61:
6269     case 0x0f62:
6270     case 0x0f63:
6271     case 0x0f64:
6272     case 0x0f65:
6273     case 0x0f66:
6274     case 0x0f67:
6275     case 0x0f68:
6276     case 0x0f69:
6277     case 0x0f6a:
6278     case 0x0f6b:
6279     case 0x0f6c:
6280     case 0x0f6d:
6281     case 0x0f6e:
6282     case 0x0f6f:
6283     case 0x0f70:
6284     case 0x0f71:
6285     case 0x0f72:
6286     case 0x0f73:
6287     case 0x0f74:
6288     case 0x0f75:
6289     case 0x0f76:
6290     case 0x0f7c:
6291     case 0x0f7d:
6292     case 0x0f7e:
6293     case 0x0f7f:
6294     case 0x0fb8:
6295     case 0x0fc2:
6296     case 0x0fc4:
6297     case 0x0fc5:
6298     case 0x0fc6:
6299     case 0x0fd0:
6300     case 0x0fd1:
6301     case 0x0fd2:
6302     case 0x0fd3:
6303     case 0x0fd4:
6304     case 0x0fd5:
6305     case 0x0fd6:
6306     case 0x0fd7:
6307     case 0x0fd8:
6308     case 0x0fd9:
6309     case 0x0fda:
6310     case 0x0fdb:
6311     case 0x0fdc:
6312     case 0x0fdd:
6313     case 0x0fde:
6314     case 0x0fdf:
6315     case 0x0fe0:
6316     case 0x0fe1:
6317     case 0x0fe2:
6318     case 0x0fe3:
6319     case 0x0fe4:
6320     case 0x0fe5:
6321     case 0x0fe6:
6322     case 0x0fe7:
6323     case 0x0fe8:
6324     case 0x0fe9:
6325     case 0x0fea:
6326     case 0x0feb:
6327     case 0x0fec:
6328     case 0x0fed:
6329     case 0x0fee:
6330     case 0x0fef:
6331     case 0x0ff0:
6332     case 0x0ff1:
6333     case 0x0ff2:
6334     case 0x0ff3:
6335     case 0x0ff4:
6336     case 0x0ff5:
6337     case 0x0ff6:
6338     case 0x0ff7:
6339     case 0x0ff8:
6340     case 0x0ff9:
6341     case 0x0ffa:
6342     case 0x0ffb:
6343     case 0x0ffc:
6344     case 0x0ffd:
6345     case 0x0ffe:
6346       switch (prefixes)
6347         {
6348         case PREFIX_REPNZ:
6349           opcode |= 0xf20000;
6350           break;
6351         case PREFIX_DATA:
6352           opcode |= 0x660000;
6353           break;
6354         case PREFIX_REPZ:
6355           opcode |= 0xf30000;
6356           break;
6357         }
6358 reswitch_prefix_add:
6359       switch (opcode)
6360         {
6361         case 0x0f38:
6362         case 0x660f38:
6363         case 0xf20f38:
6364         case 0x0f3a:
6365         case 0x660f3a:
6366           if (target_read_memory (ir.addr, &opcode8, 1))
6367             {
6368 	      printf_unfiltered (_("Process record: error reading memory at "
6369 	                           "addr %s len = 1.\n"),
6370 	                         paddress (gdbarch, ir.addr));
6371               return -1;
6372             }
6373           ir.addr++;
6374           opcode = (uint32_t) opcode8 | opcode << 8;
6375           goto reswitch_prefix_add;
6376           break;
6377 
6378         case 0x0f10:        /* movups */
6379         case 0x660f10:      /* movupd */
6380         case 0xf30f10:      /* movss */
6381         case 0xf20f10:      /* movsd */
6382         case 0x0f12:        /* movlps */
6383         case 0x660f12:      /* movlpd */
6384         case 0xf30f12:      /* movsldup */
6385         case 0xf20f12:      /* movddup */
6386         case 0x0f14:        /* unpcklps */
6387         case 0x660f14:      /* unpcklpd */
6388         case 0x0f15:        /* unpckhps */
6389         case 0x660f15:      /* unpckhpd */
6390         case 0x0f16:        /* movhps */
6391         case 0x660f16:      /* movhpd */
6392         case 0xf30f16:      /* movshdup */
6393         case 0x0f28:        /* movaps */
6394         case 0x660f28:      /* movapd */
6395         case 0x0f2a:        /* cvtpi2ps */
6396         case 0x660f2a:      /* cvtpi2pd */
6397         case 0xf30f2a:      /* cvtsi2ss */
6398         case 0xf20f2a:      /* cvtsi2sd */
6399         case 0x0f2c:        /* cvttps2pi */
6400         case 0x660f2c:      /* cvttpd2pi */
6401         case 0x0f2d:        /* cvtps2pi */
6402         case 0x660f2d:      /* cvtpd2pi */
6403         case 0x660f3800:    /* pshufb */
6404         case 0x660f3801:    /* phaddw */
6405         case 0x660f3802:    /* phaddd */
6406         case 0x660f3803:    /* phaddsw */
6407         case 0x660f3804:    /* pmaddubsw */
6408         case 0x660f3805:    /* phsubw */
6409         case 0x660f3806:    /* phsubd */
6410         case 0x660f3807:    /* phsubsw */
6411         case 0x660f3808:    /* psignb */
6412         case 0x660f3809:    /* psignw */
6413         case 0x660f380a:    /* psignd */
6414         case 0x660f380b:    /* pmulhrsw */
6415         case 0x660f3810:    /* pblendvb */
6416         case 0x660f3814:    /* blendvps */
6417         case 0x660f3815:    /* blendvpd */
6418         case 0x660f381c:    /* pabsb */
6419         case 0x660f381d:    /* pabsw */
6420         case 0x660f381e:    /* pabsd */
6421         case 0x660f3820:    /* pmovsxbw */
6422         case 0x660f3821:    /* pmovsxbd */
6423         case 0x660f3822:    /* pmovsxbq */
6424         case 0x660f3823:    /* pmovsxwd */
6425         case 0x660f3824:    /* pmovsxwq */
6426         case 0x660f3825:    /* pmovsxdq */
6427         case 0x660f3828:    /* pmuldq */
6428         case 0x660f3829:    /* pcmpeqq */
6429         case 0x660f382a:    /* movntdqa */
6430         case 0x660f3a08:    /* roundps */
6431         case 0x660f3a09:    /* roundpd */
6432         case 0x660f3a0a:    /* roundss */
6433         case 0x660f3a0b:    /* roundsd */
6434         case 0x660f3a0c:    /* blendps */
6435         case 0x660f3a0d:    /* blendpd */
6436         case 0x660f3a0e:    /* pblendw */
6437         case 0x660f3a0f:    /* palignr */
6438         case 0x660f3a20:    /* pinsrb */
6439         case 0x660f3a21:    /* insertps */
6440         case 0x660f3a22:    /* pinsrd pinsrq */
6441         case 0x660f3a40:    /* dpps */
6442         case 0x660f3a41:    /* dppd */
6443         case 0x660f3a42:    /* mpsadbw */
6444         case 0x660f3a60:    /* pcmpestrm */
6445         case 0x660f3a61:    /* pcmpestri */
6446         case 0x660f3a62:    /* pcmpistrm */
6447         case 0x660f3a63:    /* pcmpistri */
6448         case 0x0f51:        /* sqrtps */
6449         case 0x660f51:      /* sqrtpd */
6450         case 0xf20f51:      /* sqrtsd */
6451         case 0xf30f51:      /* sqrtss */
6452         case 0x0f52:        /* rsqrtps */
6453         case 0xf30f52:      /* rsqrtss */
6454         case 0x0f53:        /* rcpps */
6455         case 0xf30f53:      /* rcpss */
6456         case 0x0f54:        /* andps */
6457         case 0x660f54:      /* andpd */
6458         case 0x0f55:        /* andnps */
6459         case 0x660f55:      /* andnpd */
6460         case 0x0f56:        /* orps */
6461         case 0x660f56:      /* orpd */
6462         case 0x0f57:        /* xorps */
6463         case 0x660f57:      /* xorpd */
6464         case 0x0f58:        /* addps */
6465         case 0x660f58:      /* addpd */
6466         case 0xf20f58:      /* addsd */
6467         case 0xf30f58:      /* addss */
6468         case 0x0f59:        /* mulps */
6469         case 0x660f59:      /* mulpd */
6470         case 0xf20f59:      /* mulsd */
6471         case 0xf30f59:      /* mulss */
6472         case 0x0f5a:        /* cvtps2pd */
6473         case 0x660f5a:      /* cvtpd2ps */
6474         case 0xf20f5a:      /* cvtsd2ss */
6475         case 0xf30f5a:      /* cvtss2sd */
6476         case 0x0f5b:        /* cvtdq2ps */
6477         case 0x660f5b:      /* cvtps2dq */
6478         case 0xf30f5b:      /* cvttps2dq */
6479         case 0x0f5c:        /* subps */
6480         case 0x660f5c:      /* subpd */
6481         case 0xf20f5c:      /* subsd */
6482         case 0xf30f5c:      /* subss */
6483         case 0x0f5d:        /* minps */
6484         case 0x660f5d:      /* minpd */
6485         case 0xf20f5d:      /* minsd */
6486         case 0xf30f5d:      /* minss */
6487         case 0x0f5e:        /* divps */
6488         case 0x660f5e:      /* divpd */
6489         case 0xf20f5e:      /* divsd */
6490         case 0xf30f5e:      /* divss */
6491         case 0x0f5f:        /* maxps */
6492         case 0x660f5f:      /* maxpd */
6493         case 0xf20f5f:      /* maxsd */
6494         case 0xf30f5f:      /* maxss */
6495         case 0x660f60:      /* punpcklbw */
6496         case 0x660f61:      /* punpcklwd */
6497         case 0x660f62:      /* punpckldq */
6498         case 0x660f63:      /* packsswb */
6499         case 0x660f64:      /* pcmpgtb */
6500         case 0x660f65:      /* pcmpgtw */
6501         case 0x660f66:      /* pcmpgtd */
6502         case 0x660f67:      /* packuswb */
6503         case 0x660f68:      /* punpckhbw */
6504         case 0x660f69:      /* punpckhwd */
6505         case 0x660f6a:      /* punpckhdq */
6506         case 0x660f6b:      /* packssdw */
6507         case 0x660f6c:      /* punpcklqdq */
6508         case 0x660f6d:      /* punpckhqdq */
6509         case 0x660f6e:      /* movd */
6510         case 0x660f6f:      /* movdqa */
6511         case 0xf30f6f:      /* movdqu */
6512         case 0x660f70:      /* pshufd */
6513         case 0xf20f70:      /* pshuflw */
6514         case 0xf30f70:      /* pshufhw */
6515         case 0x660f74:      /* pcmpeqb */
6516         case 0x660f75:      /* pcmpeqw */
6517         case 0x660f76:      /* pcmpeqd */
6518         case 0x660f7c:      /* haddpd */
6519         case 0xf20f7c:      /* haddps */
6520         case 0x660f7d:      /* hsubpd */
6521         case 0xf20f7d:      /* hsubps */
6522         case 0xf30f7e:      /* movq */
6523         case 0x0fc2:        /* cmpps */
6524         case 0x660fc2:      /* cmppd */
6525         case 0xf20fc2:      /* cmpsd */
6526         case 0xf30fc2:      /* cmpss */
6527         case 0x660fc4:      /* pinsrw */
6528         case 0x0fc6:        /* shufps */
6529         case 0x660fc6:      /* shufpd */
6530         case 0x660fd0:      /* addsubpd */
6531         case 0xf20fd0:      /* addsubps */
6532         case 0x660fd1:      /* psrlw */
6533         case 0x660fd2:      /* psrld */
6534         case 0x660fd3:      /* psrlq */
6535         case 0x660fd4:      /* paddq */
6536         case 0x660fd5:      /* pmullw */
6537         case 0xf30fd6:      /* movq2dq */
6538         case 0x660fd8:      /* psubusb */
6539         case 0x660fd9:      /* psubusw */
6540         case 0x660fda:      /* pminub */
6541         case 0x660fdb:      /* pand */
6542         case 0x660fdc:      /* paddusb */
6543         case 0x660fdd:      /* paddusw */
6544         case 0x660fde:      /* pmaxub */
6545         case 0x660fdf:      /* pandn */
6546         case 0x660fe0:      /* pavgb */
6547         case 0x660fe1:      /* psraw */
6548         case 0x660fe2:      /* psrad */
6549         case 0x660fe3:      /* pavgw */
6550         case 0x660fe4:      /* pmulhuw */
6551         case 0x660fe5:      /* pmulhw */
6552         case 0x660fe6:      /* cvttpd2dq */
6553         case 0xf20fe6:      /* cvtpd2dq */
6554         case 0xf30fe6:      /* cvtdq2pd */
6555         case 0x660fe8:      /* psubsb */
6556         case 0x660fe9:      /* psubsw */
6557         case 0x660fea:      /* pminsw */
6558         case 0x660feb:      /* por */
6559         case 0x660fec:      /* paddsb */
6560         case 0x660fed:      /* paddsw */
6561         case 0x660fee:      /* pmaxsw */
6562         case 0x660fef:      /* pxor */
6563         case 0xf20ff0:      /* lddqu */
6564         case 0x660ff1:      /* psllw */
6565         case 0x660ff2:      /* pslld */
6566         case 0x660ff3:      /* psllq */
6567         case 0x660ff4:      /* pmuludq */
6568         case 0x660ff5:      /* pmaddwd */
6569         case 0x660ff6:      /* psadbw */
6570         case 0x660ff8:      /* psubb */
6571         case 0x660ff9:      /* psubw */
6572         case 0x660ffa:      /* psubd */
6573         case 0x660ffb:      /* psubq */
6574         case 0x660ffc:      /* paddb */
6575         case 0x660ffd:      /* paddw */
6576         case 0x660ffe:      /* paddd */
6577           if (i386_record_modrm (&ir))
6578 	    return -1;
6579           ir.reg |= rex_r;
6580           if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg))
6581             goto no_support;
6582           record_arch_list_add_reg (ir.regcache,
6583                                     I387_XMM0_REGNUM (tdep) + ir.reg);
6584           if ((opcode & 0xfffffffc) == 0x660f3a60)
6585             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6586           break;
6587 
6588         case 0x0f11:        /* movups */
6589         case 0x660f11:      /* movupd */
6590         case 0xf30f11:      /* movss */
6591         case 0xf20f11:      /* movsd */
6592         case 0x0f13:        /* movlps */
6593         case 0x660f13:      /* movlpd */
6594         case 0x0f17:        /* movhps */
6595         case 0x660f17:      /* movhpd */
6596         case 0x0f29:        /* movaps */
6597         case 0x660f29:      /* movapd */
6598         case 0x660f3a14:    /* pextrb */
6599         case 0x660f3a15:    /* pextrw */
6600         case 0x660f3a16:    /* pextrd pextrq */
6601         case 0x660f3a17:    /* extractps */
6602         case 0x660f7f:      /* movdqa */
6603         case 0xf30f7f:      /* movdqu */
6604           if (i386_record_modrm (&ir))
6605 	    return -1;
6606           if (ir.mod == 3)
6607             {
6608               if (opcode == 0x0f13 || opcode == 0x660f13
6609                   || opcode == 0x0f17 || opcode == 0x660f17)
6610                 goto no_support;
6611               ir.rm |= ir.rex_b;
6612               if (!i386_xmm_regnum_p (gdbarch,
6613 				      I387_XMM0_REGNUM (tdep) + ir.rm))
6614                 goto no_support;
6615               record_arch_list_add_reg (ir.regcache,
6616                                         I387_XMM0_REGNUM (tdep) + ir.rm);
6617             }
6618           else
6619             {
6620               switch (opcode)
6621                 {
6622                   case 0x660f3a14:
6623                     ir.ot = OT_BYTE;
6624                     break;
6625                   case 0x660f3a15:
6626                     ir.ot = OT_WORD;
6627                     break;
6628                   case 0x660f3a16:
6629                     ir.ot = OT_LONG;
6630                     break;
6631                   case 0x660f3a17:
6632                     ir.ot = OT_QUAD;
6633                     break;
6634                   default:
6635                     ir.ot = OT_DQUAD;
6636                     break;
6637                 }
6638               if (i386_record_lea_modrm (&ir))
6639                 return -1;
6640             }
6641           break;
6642 
6643         case 0x0f2b:      /* movntps */
6644         case 0x660f2b:    /* movntpd */
6645         case 0x0fe7:      /* movntq */
6646         case 0x660fe7:    /* movntdq */
6647           if (ir.mod == 3)
6648             goto no_support;
6649           if (opcode == 0x0fe7)
6650             ir.ot = OT_QUAD;
6651           else
6652             ir.ot = OT_DQUAD;
6653           if (i386_record_lea_modrm (&ir))
6654             return -1;
6655           break;
6656 
6657         case 0xf30f2c:      /* cvttss2si */
6658         case 0xf20f2c:      /* cvttsd2si */
6659         case 0xf30f2d:      /* cvtss2si */
6660         case 0xf20f2d:      /* cvtsd2si */
6661         case 0xf20f38f0:    /* crc32 */
6662         case 0xf20f38f1:    /* crc32 */
6663         case 0x0f50:        /* movmskps */
6664         case 0x660f50:      /* movmskpd */
6665         case 0x0fc5:        /* pextrw */
6666         case 0x660fc5:      /* pextrw */
6667         case 0x0fd7:        /* pmovmskb */
6668         case 0x660fd7:      /* pmovmskb */
6669           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
6670           break;
6671 
6672         case 0x0f3800:    /* pshufb */
6673         case 0x0f3801:    /* phaddw */
6674         case 0x0f3802:    /* phaddd */
6675         case 0x0f3803:    /* phaddsw */
6676         case 0x0f3804:    /* pmaddubsw */
6677         case 0x0f3805:    /* phsubw */
6678         case 0x0f3806:    /* phsubd */
6679         case 0x0f3807:    /* phsubsw */
6680         case 0x0f3808:    /* psignb */
6681         case 0x0f3809:    /* psignw */
6682         case 0x0f380a:    /* psignd */
6683         case 0x0f380b:    /* pmulhrsw */
6684         case 0x0f381c:    /* pabsb */
6685         case 0x0f381d:    /* pabsw */
6686         case 0x0f381e:    /* pabsd */
6687         case 0x0f382b:    /* packusdw */
6688         case 0x0f3830:    /* pmovzxbw */
6689         case 0x0f3831:    /* pmovzxbd */
6690         case 0x0f3832:    /* pmovzxbq */
6691         case 0x0f3833:    /* pmovzxwd */
6692         case 0x0f3834:    /* pmovzxwq */
6693         case 0x0f3835:    /* pmovzxdq */
6694         case 0x0f3837:    /* pcmpgtq */
6695         case 0x0f3838:    /* pminsb */
6696         case 0x0f3839:    /* pminsd */
6697         case 0x0f383a:    /* pminuw */
6698         case 0x0f383b:    /* pminud */
6699         case 0x0f383c:    /* pmaxsb */
6700         case 0x0f383d:    /* pmaxsd */
6701         case 0x0f383e:    /* pmaxuw */
6702         case 0x0f383f:    /* pmaxud */
6703         case 0x0f3840:    /* pmulld */
6704         case 0x0f3841:    /* phminposuw */
6705         case 0x0f3a0f:    /* palignr */
6706         case 0x0f60:      /* punpcklbw */
6707         case 0x0f61:      /* punpcklwd */
6708         case 0x0f62:      /* punpckldq */
6709         case 0x0f63:      /* packsswb */
6710         case 0x0f64:      /* pcmpgtb */
6711         case 0x0f65:      /* pcmpgtw */
6712         case 0x0f66:      /* pcmpgtd */
6713         case 0x0f67:      /* packuswb */
6714         case 0x0f68:      /* punpckhbw */
6715         case 0x0f69:      /* punpckhwd */
6716         case 0x0f6a:      /* punpckhdq */
6717         case 0x0f6b:      /* packssdw */
6718         case 0x0f6e:      /* movd */
6719         case 0x0f6f:      /* movq */
6720         case 0x0f70:      /* pshufw */
6721         case 0x0f74:      /* pcmpeqb */
6722         case 0x0f75:      /* pcmpeqw */
6723         case 0x0f76:      /* pcmpeqd */
6724         case 0x0fc4:      /* pinsrw */
6725         case 0x0fd1:      /* psrlw */
6726         case 0x0fd2:      /* psrld */
6727         case 0x0fd3:      /* psrlq */
6728         case 0x0fd4:      /* paddq */
6729         case 0x0fd5:      /* pmullw */
6730         case 0xf20fd6:    /* movdq2q */
6731         case 0x0fd8:      /* psubusb */
6732         case 0x0fd9:      /* psubusw */
6733         case 0x0fda:      /* pminub */
6734         case 0x0fdb:      /* pand */
6735         case 0x0fdc:      /* paddusb */
6736         case 0x0fdd:      /* paddusw */
6737         case 0x0fde:      /* pmaxub */
6738         case 0x0fdf:      /* pandn */
6739         case 0x0fe0:      /* pavgb */
6740         case 0x0fe1:      /* psraw */
6741         case 0x0fe2:      /* psrad */
6742         case 0x0fe3:      /* pavgw */
6743         case 0x0fe4:      /* pmulhuw */
6744         case 0x0fe5:      /* pmulhw */
6745         case 0x0fe8:      /* psubsb */
6746         case 0x0fe9:      /* psubsw */
6747         case 0x0fea:      /* pminsw */
6748         case 0x0feb:      /* por */
6749         case 0x0fec:      /* paddsb */
6750         case 0x0fed:      /* paddsw */
6751         case 0x0fee:      /* pmaxsw */
6752         case 0x0fef:      /* pxor */
6753         case 0x0ff1:      /* psllw */
6754         case 0x0ff2:      /* pslld */
6755         case 0x0ff3:      /* psllq */
6756         case 0x0ff4:      /* pmuludq */
6757         case 0x0ff5:      /* pmaddwd */
6758         case 0x0ff6:      /* psadbw */
6759         case 0x0ff8:      /* psubb */
6760         case 0x0ff9:      /* psubw */
6761         case 0x0ffa:      /* psubd */
6762         case 0x0ffb:      /* psubq */
6763         case 0x0ffc:      /* paddb */
6764         case 0x0ffd:      /* paddw */
6765         case 0x0ffe:      /* paddd */
6766           if (i386_record_modrm (&ir))
6767 	    return -1;
6768           if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
6769             goto no_support;
6770           record_arch_list_add_reg (ir.regcache,
6771                                     I387_MM0_REGNUM (tdep) + ir.reg);
6772           break;
6773 
6774         case 0x0f71:    /* psllw */
6775         case 0x0f72:    /* pslld */
6776         case 0x0f73:    /* psllq */
6777           if (i386_record_modrm (&ir))
6778 	    return -1;
6779           if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
6780             goto no_support;
6781           record_arch_list_add_reg (ir.regcache,
6782                                     I387_MM0_REGNUM (tdep) + ir.rm);
6783           break;
6784 
6785         case 0x660f71:    /* psllw */
6786         case 0x660f72:    /* pslld */
6787         case 0x660f73:    /* psllq */
6788           if (i386_record_modrm (&ir))
6789 	    return -1;
6790           ir.rm |= ir.rex_b;
6791           if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm))
6792             goto no_support;
6793           record_arch_list_add_reg (ir.regcache,
6794                                     I387_XMM0_REGNUM (tdep) + ir.rm);
6795           break;
6796 
6797         case 0x0f7e:      /* movd */
6798         case 0x660f7e:    /* movd */
6799           if (i386_record_modrm (&ir))
6800 	    return -1;
6801           if (ir.mod == 3)
6802             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6803           else
6804             {
6805               if (ir.dflag == 2)
6806                 ir.ot = OT_QUAD;
6807               else
6808                 ir.ot = OT_LONG;
6809               if (i386_record_lea_modrm (&ir))
6810                 return -1;
6811             }
6812           break;
6813 
6814         case 0x0f7f:    /* movq */
6815           if (i386_record_modrm (&ir))
6816 	    return -1;
6817           if (ir.mod == 3)
6818             {
6819               if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
6820                 goto no_support;
6821               record_arch_list_add_reg (ir.regcache,
6822                                         I387_MM0_REGNUM (tdep) + ir.rm);
6823             }
6824           else
6825             {
6826               ir.ot = OT_QUAD;
6827               if (i386_record_lea_modrm (&ir))
6828                 return -1;
6829             }
6830           break;
6831 
6832         case 0xf30fb8:    /* popcnt */
6833           if (i386_record_modrm (&ir))
6834 	    return -1;
6835           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
6836           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6837           break;
6838 
6839         case 0x660fd6:    /* movq */
6840           if (i386_record_modrm (&ir))
6841 	    return -1;
6842           if (ir.mod == 3)
6843             {
6844               ir.rm |= ir.rex_b;
6845               if (!i386_xmm_regnum_p (gdbarch,
6846 				      I387_XMM0_REGNUM (tdep) + ir.rm))
6847                 goto no_support;
6848               record_arch_list_add_reg (ir.regcache,
6849                                         I387_XMM0_REGNUM (tdep) + ir.rm);
6850             }
6851           else
6852             {
6853               ir.ot = OT_QUAD;
6854               if (i386_record_lea_modrm (&ir))
6855                 return -1;
6856             }
6857           break;
6858 
6859         case 0x660f3817:    /* ptest */
6860         case 0x0f2e:        /* ucomiss */
6861         case 0x660f2e:      /* ucomisd */
6862         case 0x0f2f:        /* comiss */
6863         case 0x660f2f:      /* comisd */
6864           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6865           break;
6866 
6867         case 0x0ff7:    /* maskmovq */
6868           regcache_raw_read_unsigned (ir.regcache,
6869                                       ir.regmap[X86_RECORD_REDI_REGNUM],
6870                                       &addr);
6871           if (record_arch_list_add_mem (addr, 64))
6872             return -1;
6873           break;
6874 
6875         case 0x660ff7:    /* maskmovdqu */
6876           regcache_raw_read_unsigned (ir.regcache,
6877                                       ir.regmap[X86_RECORD_REDI_REGNUM],
6878                                       &addr);
6879           if (record_arch_list_add_mem (addr, 128))
6880             return -1;
6881           break;
6882 
6883         default:
6884           goto no_support;
6885           break;
6886         }
6887       break;
6888 
6889     default:
6890       goto no_support;
6891       break;
6892     }
6893 
6894   /* In the future, maybe still need to deal with need_dasm.  */
6895   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REIP_REGNUM);
6896   if (record_arch_list_add_end ())
6897     return -1;
6898 
6899   return 0;
6900 
6901  no_support:
6902   printf_unfiltered (_("Process record does not support instruction 0x%02x "
6903                        "at address %s.\n"),
6904                      (unsigned int) (opcode),
6905                      paddress (gdbarch, ir.orig_addr));
6906   return -1;
6907 }
6908 
6909 static const int i386_record_regmap[] =
6910 {
6911   I386_EAX_REGNUM, I386_ECX_REGNUM, I386_EDX_REGNUM, I386_EBX_REGNUM,
6912   I386_ESP_REGNUM, I386_EBP_REGNUM, I386_ESI_REGNUM, I386_EDI_REGNUM,
6913   0, 0, 0, 0, 0, 0, 0, 0,
6914   I386_EIP_REGNUM, I386_EFLAGS_REGNUM, I386_CS_REGNUM, I386_SS_REGNUM,
6915   I386_DS_REGNUM, I386_ES_REGNUM, I386_FS_REGNUM, I386_GS_REGNUM
6916 };
6917 
6918 /* Check that the given address appears suitable for a fast
6919    tracepoint, which on x86 means that we need an instruction of at
6920    least 5 bytes, so that we can overwrite it with a 4-byte-offset
6921    jump and not have to worry about program jumps to an address in the
6922    middle of the tracepoint jump.  Returns 1 if OK, and writes a size
6923    of instruction to replace, and 0 if not, plus an explanatory
6924    string.  */
6925 
6926 static int
6927 i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
6928 			       CORE_ADDR addr, int *isize, char **msg)
6929 {
6930   int len, jumplen;
6931   static struct ui_file *gdb_null = NULL;
6932 
6933   /* This is based on the target agent using a 4-byte relative jump.
6934      Alternate future possibilities include 8-byte offset for x86-84,
6935      or 3-byte jumps if the program has trampoline space close by.  */
6936   jumplen = 5;
6937 
6938   /* Dummy file descriptor for the disassembler.  */
6939   if (!gdb_null)
6940     gdb_null = ui_file_new ();
6941 
6942   /* Check for fit.  */
6943   len = gdb_print_insn (gdbarch, addr, gdb_null, NULL);
6944   if (len < jumplen)
6945     {
6946       /* Return a bit of target-specific detail to add to the caller's
6947 	 generic failure message.  */
6948       if (msg)
6949 	*msg = xstrprintf (_("; instruction is only %d bytes long, "
6950 			     "need at least %d bytes for the jump"),
6951 			   len, jumplen);
6952       return 0;
6953     }
6954 
6955   if (isize)
6956     *isize = len;
6957   if (msg)
6958     *msg = NULL;
6959   return 1;
6960 }
6961 
6962 static int
6963 i386_validate_tdesc_p (struct gdbarch_tdep *tdep,
6964 		       struct tdesc_arch_data *tdesc_data)
6965 {
6966   const struct target_desc *tdesc = tdep->tdesc;
6967   const struct tdesc_feature *feature_core;
6968   const struct tdesc_feature *feature_sse, *feature_avx;
6969   int i, num_regs, valid_p;
6970 
6971   if (! tdesc_has_registers (tdesc))
6972     return 0;
6973 
6974   /* Get core registers.  */
6975   feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
6976   if (feature_core == NULL)
6977     return 0;
6978 
6979   /* Get SSE registers.  */
6980   feature_sse = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.sse");
6981 
6982   /* Try AVX registers.  */
6983   feature_avx = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx");
6984 
6985   valid_p = 1;
6986 
6987   /* The XCR0 bits.  */
6988   if (feature_avx)
6989     {
6990       /* AVX register description requires SSE register description.  */
6991       if (!feature_sse)
6992 	return 0;
6993 
6994       tdep->xcr0 = I386_XSTATE_AVX_MASK;
6995 
6996       /* It may have been set by OSABI initialization function.  */
6997       if (tdep->num_ymm_regs == 0)
6998 	{
6999 	  tdep->ymmh_register_names = i386_ymmh_names;
7000 	  tdep->num_ymm_regs = 8;
7001 	  tdep->ymm0h_regnum = I386_YMM0H_REGNUM;
7002 	}
7003 
7004       for (i = 0; i < tdep->num_ymm_regs; i++)
7005 	valid_p &= tdesc_numbered_register (feature_avx, tdesc_data,
7006 					    tdep->ymm0h_regnum + i,
7007 					    tdep->ymmh_register_names[i]);
7008     }
7009   else if (feature_sse)
7010     tdep->xcr0 = I386_XSTATE_SSE_MASK;
7011   else
7012     {
7013       tdep->xcr0 = I386_XSTATE_X87_MASK;
7014       tdep->num_xmm_regs = 0;
7015     }
7016 
7017   num_regs = tdep->num_core_regs;
7018   for (i = 0; i < num_regs; i++)
7019     valid_p &= tdesc_numbered_register (feature_core, tdesc_data, i,
7020 					tdep->register_names[i]);
7021 
7022   if (feature_sse)
7023     {
7024       /* Need to include %mxcsr, so add one.  */
7025       num_regs += tdep->num_xmm_regs + 1;
7026       for (; i < num_regs; i++)
7027 	valid_p &= tdesc_numbered_register (feature_sse, tdesc_data, i,
7028 					    tdep->register_names[i]);
7029     }
7030 
7031   return valid_p;
7032 }
7033 
7034 
7035 static struct gdbarch *
7036 i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
7037 {
7038   struct gdbarch_tdep *tdep;
7039   struct gdbarch *gdbarch;
7040   struct tdesc_arch_data *tdesc_data;
7041   const struct target_desc *tdesc;
7042   int mm0_regnum;
7043   int ymm0_regnum;
7044 
7045   /* If there is already a candidate, use it.  */
7046   arches = gdbarch_list_lookup_by_info (arches, &info);
7047   if (arches != NULL)
7048     return arches->gdbarch;
7049 
7050   /* Allocate space for the new architecture.  */
7051   tdep = XCALLOC (1, struct gdbarch_tdep);
7052   gdbarch = gdbarch_alloc (&info, tdep);
7053 
7054   /* General-purpose registers.  */
7055   tdep->gregset = NULL;
7056   tdep->gregset_reg_offset = NULL;
7057   tdep->gregset_num_regs = I386_NUM_GREGS;
7058   tdep->sizeof_gregset = 0;
7059 
7060   /* Floating-point registers.  */
7061   tdep->fpregset = NULL;
7062   tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
7063 
7064   tdep->xstateregset = NULL;
7065 
7066   /* The default settings include the FPU registers, the MMX registers
7067      and the SSE registers.  This can be overridden for a specific ABI
7068      by adjusting the members `st0_regnum', `mm0_regnum' and
7069      `num_xmm_regs' of `struct gdbarch_tdep', otherwise the registers
7070      will show up in the output of "info all-registers".  */
7071 
7072   tdep->st0_regnum = I386_ST0_REGNUM;
7073 
7074   /* I386_NUM_XREGS includes %mxcsr, so substract one.  */
7075   tdep->num_xmm_regs = I386_NUM_XREGS - 1;
7076 
7077   tdep->jb_pc_offset = -1;
7078   tdep->struct_return = pcc_struct_return;
7079   tdep->sigtramp_start = 0;
7080   tdep->sigtramp_end = 0;
7081   tdep->sigtramp_p = i386_sigtramp_p;
7082   tdep->sigcontext_addr = NULL;
7083   tdep->sc_reg_offset = NULL;
7084   tdep->sc_pc_offset = -1;
7085   tdep->sc_sp_offset = -1;
7086 
7087   tdep->xsave_xcr0_offset = -1;
7088 
7089   tdep->record_regmap = i386_record_regmap;
7090 
7091   /* The format used for `long double' on almost all i386 targets is
7092      the i387 extended floating-point format.  In fact, of all targets
7093      in the GCC 2.95 tree, only OSF/1 does it different, and insists
7094      on having a `long double' that's not `long' at all.  */
7095   set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
7096 
7097   /* Although the i387 extended floating-point has only 80 significant
7098      bits, a `long double' actually takes up 96, probably to enforce
7099      alignment.  */
7100   set_gdbarch_long_double_bit (gdbarch, 96);
7101 
7102   /* Register numbers of various important registers.  */
7103   set_gdbarch_sp_regnum (gdbarch, I386_ESP_REGNUM); /* %esp */
7104   set_gdbarch_pc_regnum (gdbarch, I386_EIP_REGNUM); /* %eip */
7105   set_gdbarch_ps_regnum (gdbarch, I386_EFLAGS_REGNUM); /* %eflags */
7106   set_gdbarch_fp0_regnum (gdbarch, I386_ST0_REGNUM); /* %st(0) */
7107 
7108   /* NOTE: kettenis/20040418: GCC does have two possible register
7109      numbering schemes on the i386: dbx and SVR4.  These schemes
7110      differ in how they number %ebp, %esp, %eflags, and the
7111      floating-point registers, and are implemented by the arrays
7112      dbx_register_map[] and svr4_dbx_register_map in
7113      gcc/config/i386.c.  GCC also defines a third numbering scheme in
7114      gcc/config/i386.c, which it designates as the "default" register
7115      map used in 64bit mode.  This last register numbering scheme is
7116      implemented in dbx64_register_map, and is used for AMD64; see
7117      amd64-tdep.c.
7118 
7119      Currently, each GCC i386 target always uses the same register
7120      numbering scheme across all its supported debugging formats
7121      i.e. SDB (COFF), stabs and DWARF 2.  This is because
7122      gcc/sdbout.c, gcc/dbxout.c and gcc/dwarf2out.c all use the
7123      DBX_REGISTER_NUMBER macro which is defined by each target's
7124      respective config header in a manner independent of the requested
7125      output debugging format.
7126 
7127      This does not match the arrangement below, which presumes that
7128      the SDB and stabs numbering schemes differ from the DWARF and
7129      DWARF 2 ones.  The reason for this arrangement is that it is
7130      likely to get the numbering scheme for the target's
7131      default/native debug format right.  For targets where GCC is the
7132      native compiler (FreeBSD, NetBSD, OpenBSD, GNU/Linux) or for
7133      targets where the native toolchain uses a different numbering
7134      scheme for a particular debug format (stabs-in-ELF on Solaris)
7135      the defaults below will have to be overridden, like
7136      i386_elf_init_abi() does.  */
7137 
7138   /* Use the dbx register numbering scheme for stabs and COFF.  */
7139   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
7140   set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
7141 
7142   /* Use the SVR4 register numbering scheme for DWARF 2.  */
7143   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
7144 
7145   /* We don't set gdbarch_stab_reg_to_regnum, since ECOFF doesn't seem to
7146      be in use on any of the supported i386 targets.  */
7147 
7148   set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
7149 
7150   set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
7151 
7152   /* Call dummy code.  */
7153   set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
7154 
7155   set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
7156   set_gdbarch_register_to_value (gdbarch,  i386_register_to_value);
7157   set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
7158 
7159   set_gdbarch_return_value (gdbarch, i386_return_value);
7160 
7161   set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
7162 
7163   /* Stack grows downward.  */
7164   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
7165 
7166   set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
7167   set_gdbarch_decr_pc_after_break (gdbarch, 1);
7168   set_gdbarch_max_insn_length (gdbarch, I386_MAX_INSN_LEN);
7169 
7170   set_gdbarch_frame_args_skip (gdbarch, 8);
7171 
7172   set_gdbarch_print_insn (gdbarch, i386_print_insn);
7173 
7174   set_gdbarch_dummy_id (gdbarch, i386_dummy_id);
7175 
7176   set_gdbarch_unwind_pc (gdbarch, i386_unwind_pc);
7177 
7178   /* Add the i386 register groups.  */
7179   i386_add_reggroups (gdbarch);
7180   tdep->register_reggroup_p = i386_register_reggroup_p;
7181 
7182   /* Helper for function argument information.  */
7183   set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
7184 
7185   /* Hook the function epilogue frame unwinder.  This unwinder is
7186      appended to the list first, so that it supercedes the Dwarf
7187      unwinder in function epilogues (where the Dwarf unwinder
7188      currently fails).  */
7189   frame_unwind_append_unwinder (gdbarch, &i386_epilogue_frame_unwind);
7190 
7191   /* Hook in the DWARF CFI frame unwinder.  This unwinder is appended
7192      to the list before the prologue-based unwinders, so that Dwarf
7193      CFI info will be used if it is available.  */
7194   dwarf2_append_unwinders (gdbarch);
7195 
7196   frame_base_set_default (gdbarch, &i386_frame_base);
7197 
7198   /* Pseudo registers may be changed by amd64_init_abi.  */
7199   set_gdbarch_pseudo_register_read (gdbarch, i386_pseudo_register_read);
7200   set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
7201 
7202   set_tdesc_pseudo_register_type (gdbarch, i386_pseudo_register_type);
7203   set_tdesc_pseudo_register_name (gdbarch, i386_pseudo_register_name);
7204 
7205   /* Override the normal target description method to make the AVX
7206      upper halves anonymous.  */
7207   set_gdbarch_register_name (gdbarch, i386_register_name);
7208 
7209   /* Even though the default ABI only includes general-purpose registers,
7210      floating-point registers and the SSE registers, we have to leave a
7211      gap for the upper AVX registers.  */
7212   set_gdbarch_num_regs (gdbarch, I386_AVX_NUM_REGS);
7213 
7214   /* Get the x86 target description from INFO.  */
7215   tdesc = info.target_desc;
7216   if (! tdesc_has_registers (tdesc))
7217     tdesc = tdesc_i386;
7218   tdep->tdesc = tdesc;
7219 
7220   tdep->num_core_regs = I386_NUM_GREGS + I387_NUM_REGS;
7221   tdep->register_names = i386_register_names;
7222 
7223   /* No upper YMM registers.  */
7224   tdep->ymmh_register_names = NULL;
7225   tdep->ymm0h_regnum = -1;
7226 
7227   tdep->num_byte_regs = 8;
7228   tdep->num_word_regs = 8;
7229   tdep->num_dword_regs = 0;
7230   tdep->num_mmx_regs = 8;
7231   tdep->num_ymm_regs = 0;
7232 
7233   tdesc_data = tdesc_data_alloc ();
7234 
7235   set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction);
7236 
7237   /* Hook in ABI-specific overrides, if they have been registered.  */
7238   info.tdep_info = (void *) tdesc_data;
7239   gdbarch_init_osabi (info, gdbarch);
7240 
7241   if (!i386_validate_tdesc_p (tdep, tdesc_data))
7242     {
7243       tdesc_data_cleanup (tdesc_data);
7244       xfree (tdep);
7245       gdbarch_free (gdbarch);
7246       return NULL;
7247     }
7248 
7249   /* Wire in pseudo registers.  Number of pseudo registers may be
7250      changed.  */
7251   set_gdbarch_num_pseudo_regs (gdbarch, (tdep->num_byte_regs
7252 					 + tdep->num_word_regs
7253 					 + tdep->num_dword_regs
7254 					 + tdep->num_mmx_regs
7255 					 + tdep->num_ymm_regs));
7256 
7257   /* Target description may be changed.  */
7258   tdesc = tdep->tdesc;
7259 
7260   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
7261 
7262   /* Override gdbarch_register_reggroup_p set in tdesc_use_registers.  */
7263   set_gdbarch_register_reggroup_p (gdbarch, tdep->register_reggroup_p);
7264 
7265   /* Make %al the first pseudo-register.  */
7266   tdep->al_regnum = gdbarch_num_regs (gdbarch);
7267   tdep->ax_regnum = tdep->al_regnum + tdep->num_byte_regs;
7268 
7269   ymm0_regnum = tdep->ax_regnum + tdep->num_word_regs;
7270   if (tdep->num_dword_regs)
7271     {
7272       /* Support dword pseudo-register if it hasn't been disabled.  */
7273       tdep->eax_regnum = ymm0_regnum;
7274       ymm0_regnum += tdep->num_dword_regs;
7275     }
7276   else
7277     tdep->eax_regnum = -1;
7278 
7279   mm0_regnum = ymm0_regnum;
7280   if (tdep->num_ymm_regs)
7281     {
7282       /* Support YMM pseudo-register if it is available.  */
7283       tdep->ymm0_regnum = ymm0_regnum;
7284       mm0_regnum += tdep->num_ymm_regs;
7285     }
7286   else
7287     tdep->ymm0_regnum = -1;
7288 
7289   if (tdep->num_mmx_regs != 0)
7290     {
7291       /* Support MMX pseudo-register if MMX hasn't been disabled.  */
7292       tdep->mm0_regnum = mm0_regnum;
7293     }
7294   else
7295     tdep->mm0_regnum = -1;
7296 
7297   /* Hook in the legacy prologue-based unwinders last (fallback).  */
7298   frame_unwind_append_unwinder (gdbarch, &i386_sigtramp_frame_unwind);
7299   frame_unwind_append_unwinder (gdbarch, &i386_frame_unwind);
7300 
7301   /* If we have a register mapping, enable the generic core file
7302      support, unless it has already been enabled.  */
7303   if (tdep->gregset_reg_offset
7304       && !gdbarch_regset_from_core_section_p (gdbarch))
7305     set_gdbarch_regset_from_core_section (gdbarch,
7306 					  i386_regset_from_core_section);
7307 
7308   set_gdbarch_skip_permanent_breakpoint (gdbarch,
7309 					 i386_skip_permanent_breakpoint);
7310 
7311   set_gdbarch_fast_tracepoint_valid_at (gdbarch,
7312 					i386_fast_tracepoint_valid_at);
7313 
7314   return gdbarch;
7315 }
7316 
7317 static enum gdb_osabi
7318 i386_coff_osabi_sniffer (bfd *abfd)
7319 {
7320   if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
7321       || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
7322     return GDB_OSABI_GO32;
7323 
7324   return GDB_OSABI_UNKNOWN;
7325 }
7326 
7327 
7328 /* Provide a prototype to silence -Wmissing-prototypes.  */
7329 void _initialize_i386_tdep (void);
7330 
7331 void
7332 _initialize_i386_tdep (void)
7333 {
7334   register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
7335 
7336   /* Add the variable that controls the disassembly flavor.  */
7337   add_setshow_enum_cmd ("disassembly-flavor", no_class, valid_flavors,
7338 			&disassembly_flavor, _("\
7339 Set the disassembly flavor."), _("\
7340 Show the disassembly flavor."), _("\
7341 The valid values are \"att\" and \"intel\", and the default value is \"att\"."),
7342 			NULL,
7343 			NULL, /* FIXME: i18n: */
7344 			&setlist, &showlist);
7345 
7346   /* Add the variable that controls the convention for returning
7347      structs.  */
7348   add_setshow_enum_cmd ("struct-convention", no_class, valid_conventions,
7349 			&struct_convention, _("\
7350 Set the convention for returning small structs."), _("\
7351 Show the convention for returning small structs."), _("\
7352 Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n\
7353 is \"default\"."),
7354 			NULL,
7355 			NULL, /* FIXME: i18n: */
7356 			&setlist, &showlist);
7357 
7358   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
7359 				  i386_coff_osabi_sniffer);
7360 
7361   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
7362 			  i386_svr4_init_abi);
7363   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
7364 			  i386_go32_init_abi);
7365 
7366   /* Initialize the i386-specific register groups.  */
7367   i386_init_reggroups ();
7368 
7369   /* Initialize the standard target descriptions.  */
7370   initialize_tdesc_i386 ();
7371   initialize_tdesc_i386_mmx ();
7372   initialize_tdesc_i386_avx ();
7373 
7374   /* Tell remote stub that we support XML target description.  */
7375   register_remote_support_xml ("i386");
7376 }
7377