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