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