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