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