OSDN Git Service

PR 11123
[pf3gnuchains/pf3gnuchains3x.git] / gdb / i386-tdep.c
1 /* Intel 386 target-dependent stuff.
2
3    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4    1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5    2010 Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "opcode/i386.h"
24 #include "arch-utils.h"
25 #include "command.h"
26 #include "dummy-frame.h"
27 #include "dwarf2-frame.h"
28 #include "doublest.h"
29 #include "frame.h"
30 #include "frame-base.h"
31 #include "frame-unwind.h"
32 #include "inferior.h"
33 #include "gdbcmd.h"
34 #include "gdbcore.h"
35 #include "gdbtypes.h"
36 #include "objfiles.h"
37 #include "osabi.h"
38 #include "regcache.h"
39 #include "reggroups.h"
40 #include "regset.h"
41 #include "symfile.h"
42 #include "symtab.h"
43 #include "target.h"
44 #include "value.h"
45 #include "dis-asm.h"
46
47 #include "gdb_assert.h"
48 #include "gdb_string.h"
49
50 #include "i386-tdep.h"
51 #include "i387-tdep.h"
52
53 #include "record.h"
54 #include <stdint.h>
55
56 /* Register names.  */
57
58 static char *i386_register_names[] =
59 {
60   "eax",   "ecx",    "edx",   "ebx",
61   "esp",   "ebp",    "esi",   "edi",
62   "eip",   "eflags", "cs",    "ss",
63   "ds",    "es",     "fs",    "gs",
64   "st0",   "st1",    "st2",   "st3",
65   "st4",   "st5",    "st6",   "st7",
66   "fctrl", "fstat",  "ftag",  "fiseg",
67   "fioff", "foseg",  "fooff", "fop",
68   "xmm0",  "xmm1",   "xmm2",  "xmm3",
69   "xmm4",  "xmm5",   "xmm6",  "xmm7",
70   "mxcsr"
71 };
72
73 static const int i386_num_register_names = ARRAY_SIZE (i386_register_names);
74
75 /* Register names for MMX pseudo-registers.  */
76
77 static char *i386_mmx_names[] =
78 {
79   "mm0", "mm1", "mm2", "mm3",
80   "mm4", "mm5", "mm6", "mm7"
81 };
82
83 static const int i386_num_mmx_regs = ARRAY_SIZE (i386_mmx_names);
84
85 static int
86 i386_mmx_regnum_p (struct gdbarch *gdbarch, int regnum)
87 {
88   int mm0_regnum = gdbarch_tdep (gdbarch)->mm0_regnum;
89
90   if (mm0_regnum < 0)
91     return 0;
92
93   return (regnum >= mm0_regnum && regnum < mm0_regnum + i386_num_mmx_regs);
94 }
95
96 /* SSE register?  */
97
98 static int
99 i386_sse_regnum_p (struct gdbarch *gdbarch, int regnum)
100 {
101   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
102
103   if (I387_NUM_XMM_REGS (tdep) == 0)
104     return 0;
105
106   return (I387_XMM0_REGNUM (tdep) <= regnum
107           && regnum < I387_MXCSR_REGNUM (tdep));
108 }
109
110 static int
111 i386_mxcsr_regnum_p (struct gdbarch *gdbarch, int regnum)
112 {
113   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
114
115   if (I387_NUM_XMM_REGS (tdep) == 0)
116     return 0;
117
118   return (regnum == I387_MXCSR_REGNUM (tdep));
119 }
120
121 /* FP register?  */
122
123 int
124 i386_fp_regnum_p (struct gdbarch *gdbarch, int regnum)
125 {
126   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
127
128   if (I387_ST0_REGNUM (tdep) < 0)
129     return 0;
130
131   return (I387_ST0_REGNUM (tdep) <= regnum
132           && regnum < I387_FCTRL_REGNUM (tdep));
133 }
134
135 int
136 i386_fpc_regnum_p (struct gdbarch *gdbarch, int regnum)
137 {
138   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
139
140   if (I387_ST0_REGNUM (tdep) < 0)
141     return 0;
142
143   return (I387_FCTRL_REGNUM (tdep) <= regnum 
144           && regnum < I387_XMM0_REGNUM (tdep));
145 }
146
147 /* Return the name of register REGNUM.  */
148
149 const char *
150 i386_register_name (struct gdbarch *gdbarch, int regnum)
151 {
152   if (i386_mmx_regnum_p (gdbarch, regnum))
153     return i386_mmx_names[regnum - I387_MM0_REGNUM (gdbarch_tdep (gdbarch))];
154
155   if (regnum >= 0 && regnum < i386_num_register_names)
156     return i386_register_names[regnum];
157
158   return NULL;
159 }
160
161 /* Convert a dbx register number REG to the appropriate register
162    number used by GDB.  */
163
164 static int
165 i386_dbx_reg_to_regnum (struct gdbarch *gdbarch, int reg)
166 {
167   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
168
169   /* This implements what GCC calls the "default" register map
170      (dbx_register_map[]).  */
171
172   if (reg >= 0 && reg <= 7)
173     {
174       /* General-purpose registers.  The debug info calls %ebp
175          register 4, and %esp register 5.  */
176       if (reg == 4)
177         return 5;
178       else if (reg == 5)
179         return 4;
180       else return reg;
181     }
182   else if (reg >= 12 && reg <= 19)
183     {
184       /* Floating-point registers.  */
185       return reg - 12 + I387_ST0_REGNUM (tdep);
186     }
187   else if (reg >= 21 && reg <= 28)
188     {
189       /* SSE registers.  */
190       return reg - 21 + I387_XMM0_REGNUM (tdep);
191     }
192   else if (reg >= 29 && reg <= 36)
193     {
194       /* MMX registers.  */
195       return reg - 29 + I387_MM0_REGNUM (tdep);
196     }
197
198   /* This will hopefully provoke a warning.  */
199   return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
200 }
201
202 /* Convert SVR4 register number REG to the appropriate register number
203    used by GDB.  */
204
205 static int
206 i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg)
207 {
208   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
209
210   /* This implements the GCC register map that tries to be compatible
211      with the SVR4 C compiler for DWARF (svr4_dbx_register_map[]).  */
212
213   /* The SVR4 register numbering includes %eip and %eflags, and
214      numbers the floating point registers differently.  */
215   if (reg >= 0 && reg <= 9)
216     {
217       /* General-purpose registers.  */
218       return reg;
219     }
220   else if (reg >= 11 && reg <= 18)
221     {
222       /* Floating-point registers.  */
223       return reg - 11 + I387_ST0_REGNUM (tdep);
224     }
225   else if (reg >= 21 && reg <= 36)
226     {
227       /* The SSE and MMX registers have the same numbers as with dbx.  */
228       return i386_dbx_reg_to_regnum (gdbarch, reg);
229     }
230
231   switch (reg)
232     {
233     case 37: return I387_FCTRL_REGNUM (tdep);
234     case 38: return I387_FSTAT_REGNUM (tdep);
235     case 39: return I387_MXCSR_REGNUM (tdep);
236     case 40: return I386_ES_REGNUM;
237     case 41: return I386_CS_REGNUM;
238     case 42: return I386_SS_REGNUM;
239     case 43: return I386_DS_REGNUM;
240     case 44: return I386_FS_REGNUM;
241     case 45: return I386_GS_REGNUM;
242     }
243
244   /* This will hopefully provoke a warning.  */
245   return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
246 }
247
248 \f
249
250 /* This is the variable that is set with "set disassembly-flavor", and
251    its legitimate values.  */
252 static const char att_flavor[] = "att";
253 static const char intel_flavor[] = "intel";
254 static const char *valid_flavors[] =
255 {
256   att_flavor,
257   intel_flavor,
258   NULL
259 };
260 static const char *disassembly_flavor = att_flavor;
261 \f
262
263 /* Use the program counter to determine the contents and size of a
264    breakpoint instruction.  Return a pointer to a string of bytes that
265    encode a breakpoint instruction, store the length of the string in
266    *LEN and optionally adjust *PC to point to the correct memory
267    location for inserting the breakpoint.
268
269    On the i386 we have a single breakpoint that fits in a single byte
270    and can be inserted anywhere.
271
272    This function is 64-bit safe.  */
273
274 static const gdb_byte *
275 i386_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
276 {
277   static gdb_byte break_insn[] = { 0xcc }; /* int 3 */
278
279   *len = sizeof (break_insn);
280   return break_insn;
281 }
282 \f
283 /* Displaced instruction handling.  */
284
285 /* Skip the legacy instruction prefixes in INSN.
286    Not all prefixes are valid for any particular insn
287    but we needn't care, the insn will fault if it's invalid.
288    The result is a pointer to the first opcode byte,
289    or NULL if we run off the end of the buffer.  */
290
291 static gdb_byte *
292 i386_skip_prefixes (gdb_byte *insn, size_t max_len)
293 {
294   gdb_byte *end = insn + max_len;
295
296   while (insn < end)
297     {
298       switch (*insn)
299         {
300         case DATA_PREFIX_OPCODE:
301         case ADDR_PREFIX_OPCODE:
302         case CS_PREFIX_OPCODE:
303         case DS_PREFIX_OPCODE:
304         case ES_PREFIX_OPCODE:
305         case FS_PREFIX_OPCODE:
306         case GS_PREFIX_OPCODE:
307         case SS_PREFIX_OPCODE:
308         case LOCK_PREFIX_OPCODE:
309         case REPE_PREFIX_OPCODE:
310         case REPNE_PREFIX_OPCODE:
311           ++insn;
312           continue;
313         default:
314           return insn;
315         }
316     }
317
318   return NULL;
319 }
320
321 static int
322 i386_absolute_jmp_p (const gdb_byte *insn)
323 {
324   /* jmp far (absolute address in operand) */
325   if (insn[0] == 0xea)
326     return 1;
327
328   if (insn[0] == 0xff)
329     {
330       /* jump near, absolute indirect (/4) */
331       if ((insn[1] & 0x38) == 0x20)
332         return 1;
333
334       /* jump far, absolute indirect (/5) */
335       if ((insn[1] & 0x38) == 0x28)
336         return 1;
337     }
338
339   return 0;
340 }
341
342 static int
343 i386_absolute_call_p (const gdb_byte *insn)
344 {
345   /* call far, absolute */
346   if (insn[0] == 0x9a)
347     return 1;
348
349   if (insn[0] == 0xff)
350     {
351       /* Call near, absolute indirect (/2) */
352       if ((insn[1] & 0x38) == 0x10)
353         return 1;
354
355       /* Call far, absolute indirect (/3) */
356       if ((insn[1] & 0x38) == 0x18)
357         return 1;
358     }
359
360   return 0;
361 }
362
363 static int
364 i386_ret_p (const gdb_byte *insn)
365 {
366   switch (insn[0])
367     {
368     case 0xc2: /* ret near, pop N bytes */
369     case 0xc3: /* ret near */
370     case 0xca: /* ret far, pop N bytes */
371     case 0xcb: /* ret far */
372     case 0xcf: /* iret */
373       return 1;
374
375     default:
376       return 0;
377     }
378 }
379
380 static int
381 i386_call_p (const gdb_byte *insn)
382 {
383   if (i386_absolute_call_p (insn))
384     return 1;
385
386   /* call near, relative */
387   if (insn[0] == 0xe8)
388     return 1;
389
390   return 0;
391 }
392
393 /* Return non-zero if INSN is a system call, and set *LENGTHP to its
394    length in bytes.  Otherwise, return zero.  */
395
396 static int
397 i386_syscall_p (const gdb_byte *insn, ULONGEST *lengthp)
398 {
399   if (insn[0] == 0xcd)
400     {
401       *lengthp = 2;
402       return 1;
403     }
404
405   return 0;
406 }
407
408 /* Fix up the state of registers and memory after having single-stepped
409    a displaced instruction.  */
410
411 void
412 i386_displaced_step_fixup (struct gdbarch *gdbarch,
413                            struct displaced_step_closure *closure,
414                            CORE_ADDR from, CORE_ADDR to,
415                            struct regcache *regs)
416 {
417   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
418
419   /* The offset we applied to the instruction's address.
420      This could well be negative (when viewed as a signed 32-bit
421      value), but ULONGEST won't reflect that, so take care when
422      applying it.  */
423   ULONGEST insn_offset = to - from;
424
425   /* Since we use simple_displaced_step_copy_insn, our closure is a
426      copy of the instruction.  */
427   gdb_byte *insn = (gdb_byte *) closure;
428   /* The start of the insn, needed in case we see some prefixes.  */
429   gdb_byte *insn_start = insn;
430
431   if (debug_displaced)
432     fprintf_unfiltered (gdb_stdlog,
433                         "displaced: fixup (%s, %s), "
434                         "insn = 0x%02x 0x%02x ...\n",
435                         paddress (gdbarch, from), paddress (gdbarch, to),
436                         insn[0], insn[1]);
437
438   /* The list of issues to contend with here is taken from
439      resume_execution in arch/i386/kernel/kprobes.c, Linux 2.6.20.
440      Yay for Free Software!  */
441
442   /* Relocate the %eip, if necessary.  */
443
444   /* The instruction recognizers we use assume any leading prefixes
445      have been skipped.  */
446   {
447     /* This is the size of the buffer in closure.  */
448     size_t max_insn_len = gdbarch_max_insn_length (gdbarch);
449     gdb_byte *opcode = i386_skip_prefixes (insn, max_insn_len);
450     /* If there are too many prefixes, just ignore the insn.
451        It will fault when run.  */
452     if (opcode != NULL)
453       insn = opcode;
454   }
455
456   /* Except in the case of absolute or indirect jump or call
457      instructions, or a return instruction, the new eip is relative to
458      the displaced instruction; make it relative.  Well, signal
459      handler returns don't need relocation either, but we use the
460      value of %eip to recognize those; see below.  */
461   if (! i386_absolute_jmp_p (insn)
462       && ! i386_absolute_call_p (insn)
463       && ! i386_ret_p (insn))
464     {
465       ULONGEST orig_eip;
466       ULONGEST insn_len;
467
468       regcache_cooked_read_unsigned (regs, I386_EIP_REGNUM, &orig_eip);
469
470       /* A signal trampoline system call changes the %eip, resuming
471          execution of the main program after the signal handler has
472          returned.  That makes them like 'return' instructions; we
473          shouldn't relocate %eip.
474
475          But most system calls don't, and we do need to relocate %eip.
476
477          Our heuristic for distinguishing these cases: if stepping
478          over the system call instruction left control directly after
479          the instruction, the we relocate --- control almost certainly
480          doesn't belong in the displaced copy.  Otherwise, we assume
481          the instruction has put control where it belongs, and leave
482          it unrelocated.  Goodness help us if there are PC-relative
483          system calls.  */
484       if (i386_syscall_p (insn, &insn_len)
485           && orig_eip != to + (insn - insn_start) + insn_len)
486         {
487           if (debug_displaced)
488             fprintf_unfiltered (gdb_stdlog,
489                                 "displaced: syscall changed %%eip; "
490                                 "not relocating\n");
491         }
492       else
493         {
494           ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL;
495
496           /* If we just stepped over a breakpoint insn, we don't backup
497              the pc on purpose; this is to match behaviour without
498              stepping.  */
499
500           regcache_cooked_write_unsigned (regs, I386_EIP_REGNUM, eip);
501
502           if (debug_displaced)
503             fprintf_unfiltered (gdb_stdlog,
504                                 "displaced: "
505                                 "relocated %%eip from %s to %s\n",
506                                 paddress (gdbarch, orig_eip),
507                                 paddress (gdbarch, eip));
508         }
509     }
510
511   /* If the instruction was PUSHFL, then the TF bit will be set in the
512      pushed value, and should be cleared.  We'll leave this for later,
513      since GDB already messes up the TF flag when stepping over a
514      pushfl.  */
515
516   /* If the instruction was a call, the return address now atop the
517      stack is the address following the copied instruction.  We need
518      to make it the address following the original instruction.  */
519   if (i386_call_p (insn))
520     {
521       ULONGEST esp;
522       ULONGEST retaddr;
523       const ULONGEST retaddr_len = 4;
524
525       regcache_cooked_read_unsigned (regs, I386_ESP_REGNUM, &esp);
526       retaddr = read_memory_unsigned_integer (esp, retaddr_len, byte_order);
527       retaddr = (retaddr - insn_offset) & 0xffffffffUL;
528       write_memory_unsigned_integer (esp, retaddr_len, byte_order, retaddr);
529
530       if (debug_displaced)
531         fprintf_unfiltered (gdb_stdlog,
532                             "displaced: relocated return addr at %s to %s\n",
533                             paddress (gdbarch, esp),
534                             paddress (gdbarch, retaddr));
535     }
536 }
537 \f
538 #ifdef I386_REGNO_TO_SYMMETRY
539 #error "The Sequent Symmetry is no longer supported."
540 #endif
541
542 /* According to the System V ABI, the registers %ebp, %ebx, %edi, %esi
543    and %esp "belong" to the calling function.  Therefore these
544    registers should be saved if they're going to be modified.  */
545
546 /* The maximum number of saved registers.  This should include all
547    registers mentioned above, and %eip.  */
548 #define I386_NUM_SAVED_REGS     I386_NUM_GREGS
549
550 struct i386_frame_cache
551 {
552   /* Base address.  */
553   CORE_ADDR base;
554   LONGEST sp_offset;
555   CORE_ADDR pc;
556
557   /* Saved registers.  */
558   CORE_ADDR saved_regs[I386_NUM_SAVED_REGS];
559   CORE_ADDR saved_sp;
560   int saved_sp_reg;
561   int pc_in_eax;
562
563   /* Stack space reserved for local variables.  */
564   long locals;
565 };
566
567 /* Allocate and initialize a frame cache.  */
568
569 static struct i386_frame_cache *
570 i386_alloc_frame_cache (void)
571 {
572   struct i386_frame_cache *cache;
573   int i;
574
575   cache = FRAME_OBSTACK_ZALLOC (struct i386_frame_cache);
576
577   /* Base address.  */
578   cache->base = 0;
579   cache->sp_offset = -4;
580   cache->pc = 0;
581
582   /* Saved registers.  We initialize these to -1 since zero is a valid
583      offset (that's where %ebp is supposed to be stored).  */
584   for (i = 0; i < I386_NUM_SAVED_REGS; i++)
585     cache->saved_regs[i] = -1;
586   cache->saved_sp = 0;
587   cache->saved_sp_reg = -1;
588   cache->pc_in_eax = 0;
589
590   /* Frameless until proven otherwise.  */
591   cache->locals = -1;
592
593   return cache;
594 }
595
596 /* If the instruction at PC is a jump, return the address of its
597    target.  Otherwise, return PC.  */
598
599 static CORE_ADDR
600 i386_follow_jump (struct gdbarch *gdbarch, CORE_ADDR pc)
601 {
602   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
603   gdb_byte op;
604   long delta = 0;
605   int data16 = 0;
606
607   target_read_memory (pc, &op, 1);
608   if (op == 0x66)
609     {
610       data16 = 1;
611       op = read_memory_unsigned_integer (pc + 1, 1, byte_order);
612     }
613
614   switch (op)
615     {
616     case 0xe9:
617       /* Relative jump: if data16 == 0, disp32, else disp16.  */
618       if (data16)
619         {
620           delta = read_memory_integer (pc + 2, 2, byte_order);
621
622           /* Include the size of the jmp instruction (including the
623              0x66 prefix).  */
624           delta += 4;
625         }
626       else
627         {
628           delta = read_memory_integer (pc + 1, 4, byte_order);
629
630           /* Include the size of the jmp instruction.  */
631           delta += 5;
632         }
633       break;
634     case 0xeb:
635       /* Relative jump, disp8 (ignore data16).  */
636       delta = read_memory_integer (pc + data16 + 1, 1, byte_order);
637
638       delta += data16 + 2;
639       break;
640     }
641
642   return pc + delta;
643 }
644
645 /* Check whether PC points at a prologue for a function returning a
646    structure or union.  If so, it updates CACHE and returns the
647    address of the first instruction after the code sequence that
648    removes the "hidden" argument from the stack or CURRENT_PC,
649    whichever is smaller.  Otherwise, return PC.  */
650
651 static CORE_ADDR
652 i386_analyze_struct_return (CORE_ADDR pc, CORE_ADDR current_pc,
653                             struct i386_frame_cache *cache)
654 {
655   /* Functions that return a structure or union start with:
656
657         popl %eax             0x58
658         xchgl %eax, (%esp)    0x87 0x04 0x24
659      or xchgl %eax, 0(%esp)   0x87 0x44 0x24 0x00
660
661      (the System V compiler puts out the second `xchg' instruction,
662      and the assembler doesn't try to optimize it, so the 'sib' form
663      gets generated).  This sequence is used to get the address of the
664      return buffer for a function that returns a structure.  */
665   static gdb_byte proto1[3] = { 0x87, 0x04, 0x24 };
666   static gdb_byte proto2[4] = { 0x87, 0x44, 0x24, 0x00 };
667   gdb_byte buf[4];
668   gdb_byte op;
669
670   if (current_pc <= pc)
671     return pc;
672
673   target_read_memory (pc, &op, 1);
674
675   if (op != 0x58)               /* popl %eax */
676     return pc;
677
678   target_read_memory (pc + 1, buf, 4);
679   if (memcmp (buf, proto1, 3) != 0 && memcmp (buf, proto2, 4) != 0)
680     return pc;
681
682   if (current_pc == pc)
683     {
684       cache->sp_offset += 4;
685       return current_pc;
686     }
687
688   if (current_pc == pc + 1)
689     {
690       cache->pc_in_eax = 1;
691       return current_pc;
692     }
693   
694   if (buf[1] == proto1[1])
695     return pc + 4;
696   else
697     return pc + 5;
698 }
699
700 static CORE_ADDR
701 i386_skip_probe (CORE_ADDR pc)
702 {
703   /* A function may start with
704
705         pushl constant
706         call _probe
707         addl $4, %esp
708            
709      followed by
710
711         pushl %ebp
712
713      etc.  */
714   gdb_byte buf[8];
715   gdb_byte op;
716
717   target_read_memory (pc, &op, 1);
718
719   if (op == 0x68 || op == 0x6a)
720     {
721       int delta;
722
723       /* Skip past the `pushl' instruction; it has either a one-byte or a
724          four-byte operand, depending on the opcode.  */
725       if (op == 0x68)
726         delta = 5;
727       else
728         delta = 2;
729
730       /* Read the following 8 bytes, which should be `call _probe' (6
731          bytes) followed by `addl $4,%esp' (2 bytes).  */
732       read_memory (pc + delta, buf, sizeof (buf));
733       if (buf[0] == 0xe8 && buf[6] == 0xc4 && buf[7] == 0x4)
734         pc += delta + sizeof (buf);
735     }
736
737   return pc;
738 }
739
740 /* GCC 4.1 and later, can put code in the prologue to realign the
741    stack pointer.  Check whether PC points to such code, and update
742    CACHE accordingly.  Return the first instruction after the code
743    sequence or CURRENT_PC, whichever is smaller.  If we don't
744    recognize the code, return PC.  */
745
746 static CORE_ADDR
747 i386_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
748                           struct i386_frame_cache *cache)
749 {
750   /* There are 2 code sequences to re-align stack before the frame
751      gets set up:
752
753         1. Use a caller-saved saved register:
754
755                 leal  4(%esp), %reg
756                 andl  $-XXX, %esp
757                 pushl -4(%reg)
758
759         2. Use a callee-saved saved register:
760
761                 pushl %reg
762                 leal  8(%esp), %reg
763                 andl  $-XXX, %esp
764                 pushl -4(%reg)
765
766      "andl $-XXX, %esp" can be either 3 bytes or 6 bytes:
767      
768         0x83 0xe4 0xf0                  andl $-16, %esp
769         0x81 0xe4 0x00 0xff 0xff 0xff   andl $-256, %esp
770    */
771
772   gdb_byte buf[14];
773   int reg;
774   int offset, offset_and;
775   static int regnums[8] = {
776     I386_EAX_REGNUM,            /* %eax */
777     I386_ECX_REGNUM,            /* %ecx */
778     I386_EDX_REGNUM,            /* %edx */
779     I386_EBX_REGNUM,            /* %ebx */
780     I386_ESP_REGNUM,            /* %esp */
781     I386_EBP_REGNUM,            /* %ebp */
782     I386_ESI_REGNUM,            /* %esi */
783     I386_EDI_REGNUM             /* %edi */
784   };
785
786   if (target_read_memory (pc, buf, sizeof buf))
787     return pc;
788
789   /* Check caller-saved saved register.  The first instruction has
790      to be "leal 4(%esp), %reg".  */
791   if (buf[0] == 0x8d && buf[2] == 0x24 && buf[3] == 0x4)
792     {
793       /* MOD must be binary 10 and R/M must be binary 100.  */
794       if ((buf[1] & 0xc7) != 0x44)
795         return pc;
796
797       /* REG has register number.  */
798       reg = (buf[1] >> 3) & 7;
799       offset = 4;
800     }
801   else
802     {
803       /* Check callee-saved saved register.  The first instruction
804          has to be "pushl %reg".  */
805       if ((buf[0] & 0xf8) != 0x50)
806         return pc;
807
808       /* Get register.  */
809       reg = buf[0] & 0x7;
810
811       /* The next instruction has to be "leal 8(%esp), %reg".  */
812       if (buf[1] != 0x8d || buf[3] != 0x24 || buf[4] != 0x8)
813         return pc;
814
815       /* MOD must be binary 10 and R/M must be binary 100.  */
816       if ((buf[2] & 0xc7) != 0x44)
817         return pc;
818       
819       /* REG has register number.  Registers in pushl and leal have to
820          be the same.  */
821       if (reg != ((buf[2] >> 3) & 7))
822         return pc;
823
824       offset = 5;
825     }
826
827   /* Rigister can't be %esp nor %ebp.  */
828   if (reg == 4 || reg == 5)
829     return pc;
830
831   /* The next instruction has to be "andl $-XXX, %esp".  */
832   if (buf[offset + 1] != 0xe4
833       || (buf[offset] != 0x81 && buf[offset] != 0x83))
834     return pc;
835
836   offset_and = offset;
837   offset += buf[offset] == 0x81 ? 6 : 3;
838
839   /* The next instruction has to be "pushl -4(%reg)".  8bit -4 is
840      0xfc.  REG must be binary 110 and MOD must be binary 01.  */
841   if (buf[offset] != 0xff
842       || buf[offset + 2] != 0xfc
843       || (buf[offset + 1] & 0xf8) != 0x70)
844     return pc;
845
846   /* R/M has register.  Registers in leal and pushl have to be the
847      same.  */
848   if (reg != (buf[offset + 1] & 7))
849     return pc;
850
851   if (current_pc > pc + offset_and)
852     cache->saved_sp_reg = regnums[reg];
853
854   return min (pc + offset + 3, current_pc);
855 }
856
857 /* Maximum instruction length we need to handle.  */
858 #define I386_MAX_MATCHED_INSN_LEN       6
859
860 /* Instruction description.  */
861 struct i386_insn
862 {
863   size_t len;
864   gdb_byte insn[I386_MAX_MATCHED_INSN_LEN];
865   gdb_byte mask[I386_MAX_MATCHED_INSN_LEN];
866 };
867
868 /* Search for the instruction at PC in the list SKIP_INSNS.  Return
869    the first instruction description that matches.  Otherwise, return
870    NULL.  */
871
872 static struct i386_insn *
873 i386_match_insn (CORE_ADDR pc, struct i386_insn *skip_insns)
874 {
875   struct i386_insn *insn;
876   gdb_byte op;
877
878   target_read_memory (pc, &op, 1);
879
880   for (insn = skip_insns; insn->len > 0; insn++)
881     {
882       if ((op & insn->mask[0]) == insn->insn[0])
883         {
884           gdb_byte buf[I386_MAX_MATCHED_INSN_LEN - 1];
885           int insn_matched = 1;
886           size_t i;
887
888           gdb_assert (insn->len > 1);
889           gdb_assert (insn->len <= I386_MAX_MATCHED_INSN_LEN);
890
891           target_read_memory (pc + 1, buf, insn->len - 1);
892           for (i = 1; i < insn->len; i++)
893             {
894               if ((buf[i - 1] & insn->mask[i]) != insn->insn[i])
895                 insn_matched = 0;
896             }
897
898           if (insn_matched)
899             return insn;
900         }
901     }
902
903   return NULL;
904 }
905
906 /* Some special instructions that might be migrated by GCC into the
907    part of the prologue that sets up the new stack frame.  Because the
908    stack frame hasn't been setup yet, no registers have been saved
909    yet, and only the scratch registers %eax, %ecx and %edx can be
910    touched.  */
911
912 struct i386_insn i386_frame_setup_skip_insns[] =
913 {
914   /* Check for `movb imm8, r' and `movl imm32, r'. 
915     
916      ??? Should we handle 16-bit operand-sizes here?  */
917
918   /* `movb imm8, %al' and `movb imm8, %ah' */
919   /* `movb imm8, %cl' and `movb imm8, %ch' */
920   { 2, { 0xb0, 0x00 }, { 0xfa, 0x00 } },
921   /* `movb imm8, %dl' and `movb imm8, %dh' */
922   { 2, { 0xb2, 0x00 }, { 0xfb, 0x00 } },
923   /* `movl imm32, %eax' and `movl imm32, %ecx' */
924   { 5, { 0xb8 }, { 0xfe } },
925   /* `movl imm32, %edx' */
926   { 5, { 0xba }, { 0xff } },
927
928   /* Check for `mov imm32, r32'.  Note that there is an alternative
929      encoding for `mov m32, %eax'.
930
931      ??? Should we handle SIB adressing here?
932      ??? Should we handle 16-bit operand-sizes here?  */
933
934   /* `movl m32, %eax' */
935   { 5, { 0xa1 }, { 0xff } },
936   /* `movl m32, %eax' and `mov; m32, %ecx' */
937   { 6, { 0x89, 0x05 }, {0xff, 0xf7 } },
938   /* `movl m32, %edx' */
939   { 6, { 0x89, 0x15 }, {0xff, 0xff } },
940
941   /* Check for `xorl r32, r32' and the equivalent `subl r32, r32'.
942      Because of the symmetry, there are actually two ways to encode
943      these instructions; opcode bytes 0x29 and 0x2b for `subl' and
944      opcode bytes 0x31 and 0x33 for `xorl'.  */
945
946   /* `subl %eax, %eax' */
947   { 2, { 0x29, 0xc0 }, { 0xfd, 0xff } },
948   /* `subl %ecx, %ecx' */
949   { 2, { 0x29, 0xc9 }, { 0xfd, 0xff } },
950   /* `subl %edx, %edx' */
951   { 2, { 0x29, 0xd2 }, { 0xfd, 0xff } },
952   /* `xorl %eax, %eax' */
953   { 2, { 0x31, 0xc0 }, { 0xfd, 0xff } },
954   /* `xorl %ecx, %ecx' */
955   { 2, { 0x31, 0xc9 }, { 0xfd, 0xff } },
956   /* `xorl %edx, %edx' */
957   { 2, { 0x31, 0xd2 }, { 0xfd, 0xff } },
958   { 0 }
959 };
960
961
962 /* Check whether PC points to a no-op instruction.  */
963 static CORE_ADDR
964 i386_skip_noop (CORE_ADDR pc)
965 {
966   gdb_byte op;
967   int check = 1;
968
969   target_read_memory (pc, &op, 1);
970
971   while (check) 
972     {
973       check = 0;
974       /* Ignore `nop' instruction.  */
975       if (op == 0x90) 
976         {
977           pc += 1;
978           target_read_memory (pc, &op, 1);
979           check = 1;
980         }
981       /* Ignore no-op instruction `mov %edi, %edi'.
982          Microsoft system dlls often start with
983          a `mov %edi,%edi' instruction.
984          The 5 bytes before the function start are
985          filled with `nop' instructions.
986          This pattern can be used for hot-patching:
987          The `mov %edi, %edi' instruction can be replaced by a
988          near jump to the location of the 5 `nop' instructions
989          which can be replaced by a 32-bit jump to anywhere
990          in the 32-bit address space.  */
991
992       else if (op == 0x8b)
993         {
994           target_read_memory (pc + 1, &op, 1);
995           if (op == 0xff)
996             {
997               pc += 2;
998               target_read_memory (pc, &op, 1);
999               check = 1;
1000             }
1001         }
1002     }
1003   return pc; 
1004 }
1005
1006 /* Check whether PC points at a code that sets up a new stack frame.
1007    If so, it updates CACHE and returns the address of the first
1008    instruction after the sequence that sets up the frame or LIMIT,
1009    whichever is smaller.  If we don't recognize the code, return PC.  */
1010
1011 static CORE_ADDR
1012 i386_analyze_frame_setup (struct gdbarch *gdbarch,
1013                           CORE_ADDR pc, CORE_ADDR limit,
1014                           struct i386_frame_cache *cache)
1015 {
1016   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1017   struct i386_insn *insn;
1018   gdb_byte op;
1019   int skip = 0;
1020
1021   if (limit <= pc)
1022     return limit;
1023
1024   target_read_memory (pc, &op, 1);
1025
1026   if (op == 0x55)               /* pushl %ebp */
1027     {
1028       /* Take into account that we've executed the `pushl %ebp' that
1029          starts this instruction sequence.  */
1030       cache->saved_regs[I386_EBP_REGNUM] = 0;
1031       cache->sp_offset += 4;
1032       pc++;
1033
1034       /* If that's all, return now.  */
1035       if (limit <= pc)
1036         return limit;
1037
1038       /* Check for some special instructions that might be migrated by
1039          GCC into the prologue and skip them.  At this point in the
1040          prologue, code should only touch the scratch registers %eax,
1041          %ecx and %edx, so while the number of posibilities is sheer,
1042          it is limited.
1043
1044          Make sure we only skip these instructions if we later see the
1045          `movl %esp, %ebp' that actually sets up the frame.  */
1046       while (pc + skip < limit)
1047         {
1048           insn = i386_match_insn (pc + skip, i386_frame_setup_skip_insns);
1049           if (insn == NULL)
1050             break;
1051
1052           skip += insn->len;
1053         }
1054
1055       /* If that's all, return now.  */
1056       if (limit <= pc + skip)
1057         return limit;
1058
1059       target_read_memory (pc + skip, &op, 1);
1060
1061       /* Check for `movl %esp, %ebp' -- can be written in two ways.  */
1062       switch (op)
1063         {
1064         case 0x8b:
1065           if (read_memory_unsigned_integer (pc + skip + 1, 1, byte_order)
1066               != 0xec)
1067             return pc;
1068           break;
1069         case 0x89:
1070           if (read_memory_unsigned_integer (pc + skip + 1, 1, byte_order)
1071               != 0xe5)
1072             return pc;
1073           break;
1074         default:
1075           return pc;
1076         }
1077
1078       /* OK, we actually have a frame.  We just don't know how large
1079          it is yet.  Set its size to zero.  We'll adjust it if
1080          necessary.  We also now commit to skipping the special
1081          instructions mentioned before.  */
1082       cache->locals = 0;
1083       pc += (skip + 2);
1084
1085       /* If that's all, return now.  */
1086       if (limit <= pc)
1087         return limit;
1088
1089       /* Check for stack adjustment 
1090
1091             subl $XXX, %esp
1092
1093          NOTE: You can't subtract a 16-bit immediate from a 32-bit
1094          reg, so we don't have to worry about a data16 prefix.  */
1095       target_read_memory (pc, &op, 1);
1096       if (op == 0x83)
1097         {
1098           /* `subl' with 8-bit immediate.  */
1099           if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0xec)
1100             /* Some instruction starting with 0x83 other than `subl'.  */
1101             return pc;
1102
1103           /* `subl' with signed 8-bit immediate (though it wouldn't
1104              make sense to be negative).  */
1105           cache->locals = read_memory_integer (pc + 2, 1, byte_order);
1106           return pc + 3;
1107         }
1108       else if (op == 0x81)
1109         {
1110           /* Maybe it is `subl' with a 32-bit immediate.  */
1111           if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0xec)
1112             /* Some instruction starting with 0x81 other than `subl'.  */
1113             return pc;
1114
1115           /* It is `subl' with a 32-bit immediate.  */
1116           cache->locals = read_memory_integer (pc + 2, 4, byte_order);
1117           return pc + 6;
1118         }
1119       else
1120         {
1121           /* Some instruction other than `subl'.  */
1122           return pc;
1123         }
1124     }
1125   else if (op == 0xc8)          /* enter */
1126     {
1127       cache->locals = read_memory_unsigned_integer (pc + 1, 2, byte_order);
1128       return pc + 4;
1129     }
1130
1131   return pc;
1132 }
1133
1134 /* Check whether PC points at code that saves registers on the stack.
1135    If so, it updates CACHE and returns the address of the first
1136    instruction after the register saves or CURRENT_PC, whichever is
1137    smaller.  Otherwise, return PC.  */
1138
1139 static CORE_ADDR
1140 i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
1141                              struct i386_frame_cache *cache)
1142 {
1143   CORE_ADDR offset = 0;
1144   gdb_byte op;
1145   int i;
1146
1147   if (cache->locals > 0)
1148     offset -= cache->locals;
1149   for (i = 0; i < 8 && pc < current_pc; i++)
1150     {
1151       target_read_memory (pc, &op, 1);
1152       if (op < 0x50 || op > 0x57)
1153         break;
1154
1155       offset -= 4;
1156       cache->saved_regs[op - 0x50] = offset;
1157       cache->sp_offset += 4;
1158       pc++;
1159     }
1160
1161   return pc;
1162 }
1163
1164 /* Do a full analysis of the prologue at PC and update CACHE
1165    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
1166    address where the analysis stopped.
1167
1168    We handle these cases:
1169
1170    The startup sequence can be at the start of the function, or the
1171    function can start with a branch to startup code at the end.
1172
1173    %ebp can be set up with either the 'enter' instruction, or "pushl
1174    %ebp, movl %esp, %ebp" (`enter' is too slow to be useful, but was
1175    once used in the System V compiler).
1176
1177    Local space is allocated just below the saved %ebp by either the
1178    'enter' instruction, or by "subl $<size>, %esp".  'enter' has a
1179    16-bit unsigned argument for space to allocate, and the 'addl'
1180    instruction could have either a signed byte, or 32-bit immediate.
1181
1182    Next, the registers used by this function are pushed.  With the
1183    System V compiler they will always be in the order: %edi, %esi,
1184    %ebx (and sometimes a harmless bug causes it to also save but not
1185    restore %eax); however, the code below is willing to see the pushes
1186    in any order, and will handle up to 8 of them.
1187  
1188    If the setup sequence is at the end of the function, then the next
1189    instruction will be a branch back to the start.  */
1190
1191 static CORE_ADDR
1192 i386_analyze_prologue (struct gdbarch *gdbarch,
1193                        CORE_ADDR pc, CORE_ADDR current_pc,
1194                        struct i386_frame_cache *cache)
1195 {
1196   pc = i386_skip_noop (pc);
1197   pc = i386_follow_jump (gdbarch, pc);
1198   pc = i386_analyze_struct_return (pc, current_pc, cache);
1199   pc = i386_skip_probe (pc);
1200   pc = i386_analyze_stack_align (pc, current_pc, cache);
1201   pc = i386_analyze_frame_setup (gdbarch, pc, current_pc, cache);
1202   return i386_analyze_register_saves (pc, current_pc, cache);
1203 }
1204
1205 /* Return PC of first real instruction.  */
1206
1207 static CORE_ADDR
1208 i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1209 {
1210   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1211
1212   static gdb_byte pic_pat[6] =
1213   {
1214     0xe8, 0, 0, 0, 0,           /* call 0x0 */
1215     0x5b,                       /* popl %ebx */
1216   };
1217   struct i386_frame_cache cache;
1218   CORE_ADDR pc;
1219   gdb_byte op;
1220   int i;
1221
1222   cache.locals = -1;
1223   pc = i386_analyze_prologue (gdbarch, start_pc, 0xffffffff, &cache);
1224   if (cache.locals < 0)
1225     return start_pc;
1226
1227   /* Found valid frame setup.  */
1228
1229   /* The native cc on SVR4 in -K PIC mode inserts the following code
1230      to get the address of the global offset table (GOT) into register
1231      %ebx:
1232
1233         call    0x0
1234         popl    %ebx
1235         movl    %ebx,x(%ebp)    (optional)
1236         addl    y,%ebx
1237
1238      This code is with the rest of the prologue (at the end of the
1239      function), so we have to skip it to get to the first real
1240      instruction at the start of the function.  */
1241
1242   for (i = 0; i < 6; i++)
1243     {
1244       target_read_memory (pc + i, &op, 1);
1245       if (pic_pat[i] != op)
1246         break;
1247     }
1248   if (i == 6)
1249     {
1250       int delta = 6;
1251
1252       target_read_memory (pc + delta, &op, 1);
1253
1254       if (op == 0x89)           /* movl %ebx, x(%ebp) */
1255         {
1256           op = read_memory_unsigned_integer (pc + delta + 1, 1, byte_order);
1257
1258           if (op == 0x5d)       /* One byte offset from %ebp.  */
1259             delta += 3;
1260           else if (op == 0x9d)  /* Four byte offset from %ebp.  */
1261             delta += 6;
1262           else                  /* Unexpected instruction.  */
1263             delta = 0;
1264
1265           target_read_memory (pc + delta, &op, 1);
1266         }
1267
1268       /* addl y,%ebx */
1269       if (delta > 0 && op == 0x81
1270           && read_memory_unsigned_integer (pc + delta + 1, 1, byte_order)
1271              == 0xc3)
1272         {
1273           pc += delta + 6;
1274         }
1275     }
1276
1277   /* If the function starts with a branch (to startup code at the end)
1278      the last instruction should bring us back to the first
1279      instruction of the real code.  */
1280   if (i386_follow_jump (gdbarch, start_pc) != start_pc)
1281     pc = i386_follow_jump (gdbarch, pc);
1282
1283   return pc;
1284 }
1285
1286 /* Check that the code pointed to by PC corresponds to a call to
1287    __main, skip it if so.  Return PC otherwise.  */
1288
1289 CORE_ADDR
1290 i386_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1291 {
1292   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1293   gdb_byte op;
1294
1295   target_read_memory (pc, &op, 1);
1296   if (op == 0xe8)
1297     {
1298       gdb_byte buf[4];
1299
1300       if (target_read_memory (pc + 1, buf, sizeof buf) == 0)
1301         {
1302           /* Make sure address is computed correctly as a 32bit
1303              integer even if CORE_ADDR is 64 bit wide.  */
1304           struct minimal_symbol *s;
1305           CORE_ADDR call_dest;
1306
1307           call_dest = pc + 5 + extract_signed_integer (buf, 4, byte_order);
1308           call_dest = call_dest & 0xffffffffU;
1309           s = lookup_minimal_symbol_by_pc (call_dest);
1310           if (s != NULL
1311               && SYMBOL_LINKAGE_NAME (s) != NULL
1312               && strcmp (SYMBOL_LINKAGE_NAME (s), "__main") == 0)
1313             pc += 5;
1314         }
1315     }
1316
1317   return pc;
1318 }
1319
1320 /* This function is 64-bit safe.  */
1321
1322 static CORE_ADDR
1323 i386_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1324 {
1325   gdb_byte buf[8];
1326
1327   frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
1328   return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
1329 }
1330 \f
1331
1332 /* Normal frames.  */
1333
1334 static struct i386_frame_cache *
1335 i386_frame_cache (struct frame_info *this_frame, void **this_cache)
1336 {
1337   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1338   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1339   struct i386_frame_cache *cache;
1340   gdb_byte buf[4];
1341   int i;
1342
1343   if (*this_cache)
1344     return *this_cache;
1345
1346   cache = i386_alloc_frame_cache ();
1347   *this_cache = cache;
1348
1349   /* In principle, for normal frames, %ebp holds the frame pointer,
1350      which holds the base address for the current stack frame.
1351      However, for functions that don't need it, the frame pointer is
1352      optional.  For these "frameless" functions the frame pointer is
1353      actually the frame pointer of the calling frame.  Signal
1354      trampolines are just a special case of a "frameless" function.
1355      They (usually) share their frame pointer with the frame that was
1356      in progress when the signal occurred.  */
1357
1358   get_frame_register (this_frame, I386_EBP_REGNUM, buf);
1359   cache->base = extract_unsigned_integer (buf, 4, byte_order);
1360   if (cache->base == 0)
1361     return cache;
1362
1363   /* For normal frames, %eip is stored at 4(%ebp).  */
1364   cache->saved_regs[I386_EIP_REGNUM] = 4;
1365
1366   cache->pc = get_frame_func (this_frame);
1367   if (cache->pc != 0)
1368     i386_analyze_prologue (gdbarch, cache->pc, get_frame_pc (this_frame),
1369                            cache);
1370
1371   if (cache->saved_sp_reg != -1)
1372     {
1373       /* Saved stack pointer has been saved.  */
1374       get_frame_register (this_frame, cache->saved_sp_reg, buf);
1375       cache->saved_sp = extract_unsigned_integer (buf, 4, byte_order);
1376     }
1377
1378   if (cache->locals < 0)
1379     {
1380       /* We didn't find a valid frame, which means that CACHE->base
1381          currently holds the frame pointer for our calling frame.  If
1382          we're at the start of a function, or somewhere half-way its
1383          prologue, the function's frame probably hasn't been fully
1384          setup yet.  Try to reconstruct the base address for the stack
1385          frame by looking at the stack pointer.  For truly "frameless"
1386          functions this might work too.  */
1387
1388       if (cache->saved_sp_reg != -1)
1389         {
1390           /* We're halfway aligning the stack.  */
1391           cache->base = ((cache->saved_sp - 4) & 0xfffffff0) - 4;
1392           cache->saved_regs[I386_EIP_REGNUM] = cache->saved_sp - 4;
1393
1394           /* This will be added back below.  */
1395           cache->saved_regs[I386_EIP_REGNUM] -= cache->base;
1396         }
1397       else
1398         {
1399           get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1400           cache->base = extract_unsigned_integer (buf, 4, byte_order)
1401                         + cache->sp_offset;
1402         }
1403     }
1404
1405   /* Now that we have the base address for the stack frame we can
1406      calculate the value of %esp in the calling frame.  */
1407   if (cache->saved_sp == 0)
1408     cache->saved_sp = cache->base + 8;
1409
1410   /* Adjust all the saved registers such that they contain addresses
1411      instead of offsets.  */
1412   for (i = 0; i < I386_NUM_SAVED_REGS; i++)
1413     if (cache->saved_regs[i] != -1)
1414       cache->saved_regs[i] += cache->base;
1415
1416   return cache;
1417 }
1418
1419 static void
1420 i386_frame_this_id (struct frame_info *this_frame, void **this_cache,
1421                     struct frame_id *this_id)
1422 {
1423   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1424
1425   /* This marks the outermost frame.  */
1426   if (cache->base == 0)
1427     return;
1428
1429   /* See the end of i386_push_dummy_call.  */
1430   (*this_id) = frame_id_build (cache->base + 8, cache->pc);
1431 }
1432
1433 static struct value *
1434 i386_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1435                           int regnum)
1436 {
1437   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1438
1439   gdb_assert (regnum >= 0);
1440
1441   /* The System V ABI says that:
1442
1443      "The flags register contains the system flags, such as the
1444      direction flag and the carry flag.  The direction flag must be
1445      set to the forward (that is, zero) direction before entry and
1446      upon exit from a function.  Other user flags have no specified
1447      role in the standard calling sequence and are not preserved."
1448
1449      To guarantee the "upon exit" part of that statement we fake a
1450      saved flags register that has its direction flag cleared.
1451
1452      Note that GCC doesn't seem to rely on the fact that the direction
1453      flag is cleared after a function return; it always explicitly
1454      clears the flag before operations where it matters.
1455
1456      FIXME: kettenis/20030316: I'm not quite sure whether this is the
1457      right thing to do.  The way we fake the flags register here makes
1458      it impossible to change it.  */
1459
1460   if (regnum == I386_EFLAGS_REGNUM)
1461     {
1462       ULONGEST val;
1463
1464       val = get_frame_register_unsigned (this_frame, regnum);
1465       val &= ~(1 << 10);
1466       return frame_unwind_got_constant (this_frame, regnum, val);
1467     }
1468
1469   if (regnum == I386_EIP_REGNUM && cache->pc_in_eax)
1470     return frame_unwind_got_register (this_frame, regnum, I386_EAX_REGNUM);
1471
1472   if (regnum == I386_ESP_REGNUM && cache->saved_sp)
1473     return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
1474
1475   if (regnum < I386_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
1476     return frame_unwind_got_memory (this_frame, regnum,
1477                                     cache->saved_regs[regnum]);
1478
1479   return frame_unwind_got_register (this_frame, regnum, regnum);
1480 }
1481
1482 static const struct frame_unwind i386_frame_unwind =
1483 {
1484   NORMAL_FRAME,
1485   i386_frame_this_id,
1486   i386_frame_prev_register,
1487   NULL,
1488   default_frame_sniffer
1489 };
1490
1491 /* Normal frames, but in a function epilogue.  */
1492
1493 /* The epilogue is defined here as the 'ret' instruction, which will
1494    follow any instruction such as 'leave' or 'pop %ebp' that destroys
1495    the function's stack frame.  */
1496
1497 static int
1498 i386_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1499 {
1500   gdb_byte insn;
1501
1502   if (target_read_memory (pc, &insn, 1))
1503     return 0;   /* Can't read memory at pc.  */
1504
1505   if (insn != 0xc3)     /* 'ret' instruction.  */
1506     return 0;
1507
1508   return 1;
1509 }
1510
1511 static int
1512 i386_epilogue_frame_sniffer (const struct frame_unwind *self,
1513                              struct frame_info *this_frame,
1514                              void **this_prologue_cache)
1515 {
1516   if (frame_relative_level (this_frame) == 0)
1517     return i386_in_function_epilogue_p (get_frame_arch (this_frame),
1518                                         get_frame_pc (this_frame));
1519   else
1520     return 0;
1521 }
1522
1523 static struct i386_frame_cache *
1524 i386_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
1525 {
1526   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1527   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1528   struct i386_frame_cache *cache;
1529   gdb_byte buf[4];
1530
1531   if (*this_cache)
1532     return *this_cache;
1533
1534   cache = i386_alloc_frame_cache ();
1535   *this_cache = cache;
1536
1537   /* Cache base will be %esp plus cache->sp_offset (-4).  */
1538   get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1539   cache->base = extract_unsigned_integer (buf, 4, 
1540                                           byte_order) + cache->sp_offset;
1541
1542   /* Cache pc will be the frame func.  */
1543   cache->pc = get_frame_pc (this_frame);
1544
1545   /* The saved %esp will be at cache->base plus 8.  */
1546   cache->saved_sp = cache->base + 8;
1547
1548   /* The saved %eip will be at cache->base plus 4.  */
1549   cache->saved_regs[I386_EIP_REGNUM] = cache->base + 4;
1550
1551   return cache;
1552 }
1553
1554 static void
1555 i386_epilogue_frame_this_id (struct frame_info *this_frame,
1556                              void **this_cache,
1557                              struct frame_id *this_id)
1558 {
1559   struct i386_frame_cache *cache = i386_epilogue_frame_cache (this_frame,
1560                                                               this_cache);
1561
1562   (*this_id) = frame_id_build (cache->base + 8, cache->pc);
1563 }
1564
1565 static const struct frame_unwind i386_epilogue_frame_unwind =
1566 {
1567   NORMAL_FRAME,
1568   i386_epilogue_frame_this_id,
1569   i386_frame_prev_register,
1570   NULL, 
1571   i386_epilogue_frame_sniffer
1572 };
1573 \f
1574
1575 /* Signal trampolines.  */
1576
1577 static struct i386_frame_cache *
1578 i386_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
1579 {
1580   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1581   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1582   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1583   struct i386_frame_cache *cache;
1584   CORE_ADDR addr;
1585   gdb_byte buf[4];
1586
1587   if (*this_cache)
1588     return *this_cache;
1589
1590   cache = i386_alloc_frame_cache ();
1591
1592   get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1593   cache->base = extract_unsigned_integer (buf, 4, byte_order) - 4;
1594
1595   addr = tdep->sigcontext_addr (this_frame);
1596   if (tdep->sc_reg_offset)
1597     {
1598       int i;
1599
1600       gdb_assert (tdep->sc_num_regs <= I386_NUM_SAVED_REGS);
1601
1602       for (i = 0; i < tdep->sc_num_regs; i++)
1603         if (tdep->sc_reg_offset[i] != -1)
1604           cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
1605     }
1606   else
1607     {
1608       cache->saved_regs[I386_EIP_REGNUM] = addr + tdep->sc_pc_offset;
1609       cache->saved_regs[I386_ESP_REGNUM] = addr + tdep->sc_sp_offset;
1610     }
1611
1612   *this_cache = cache;
1613   return cache;
1614 }
1615
1616 static void
1617 i386_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
1618                              struct frame_id *this_id)
1619 {
1620   struct i386_frame_cache *cache =
1621     i386_sigtramp_frame_cache (this_frame, this_cache);
1622
1623   /* See the end of i386_push_dummy_call.  */
1624   (*this_id) = frame_id_build (cache->base + 8, get_frame_pc (this_frame));
1625 }
1626
1627 static struct value *
1628 i386_sigtramp_frame_prev_register (struct frame_info *this_frame,
1629                                    void **this_cache, int regnum)
1630 {
1631   /* Make sure we've initialized the cache.  */
1632   i386_sigtramp_frame_cache (this_frame, this_cache);
1633
1634   return i386_frame_prev_register (this_frame, this_cache, regnum);
1635 }
1636
1637 static int
1638 i386_sigtramp_frame_sniffer (const struct frame_unwind *self,
1639                              struct frame_info *this_frame,
1640                              void **this_prologue_cache)
1641 {
1642   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
1643
1644   /* We shouldn't even bother if we don't have a sigcontext_addr
1645      handler.  */
1646   if (tdep->sigcontext_addr == NULL)
1647     return 0;
1648
1649   if (tdep->sigtramp_p != NULL)
1650     {
1651       if (tdep->sigtramp_p (this_frame))
1652         return 1;
1653     }
1654
1655   if (tdep->sigtramp_start != 0)
1656     {
1657       CORE_ADDR pc = get_frame_pc (this_frame);
1658
1659       gdb_assert (tdep->sigtramp_end != 0);
1660       if (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end)
1661         return 1;
1662     }
1663
1664   return 0;
1665 }
1666
1667 static const struct frame_unwind i386_sigtramp_frame_unwind =
1668 {
1669   SIGTRAMP_FRAME,
1670   i386_sigtramp_frame_this_id,
1671   i386_sigtramp_frame_prev_register,
1672   NULL,
1673   i386_sigtramp_frame_sniffer
1674 };
1675 \f
1676
1677 static CORE_ADDR
1678 i386_frame_base_address (struct frame_info *this_frame, void **this_cache)
1679 {
1680   struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1681
1682   return cache->base;
1683 }
1684
1685 static const struct frame_base i386_frame_base =
1686 {
1687   &i386_frame_unwind,
1688   i386_frame_base_address,
1689   i386_frame_base_address,
1690   i386_frame_base_address
1691 };
1692
1693 static struct frame_id
1694 i386_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1695 {
1696   CORE_ADDR fp;
1697
1698   fp = get_frame_register_unsigned (this_frame, I386_EBP_REGNUM);
1699
1700   /* See the end of i386_push_dummy_call.  */
1701   return frame_id_build (fp + 8, get_frame_pc (this_frame));
1702 }
1703 \f
1704
1705 /* Figure out where the longjmp will land.  Slurp the args out of the
1706    stack.  We expect the first arg to be a pointer to the jmp_buf
1707    structure from which we extract the address that we will land at.
1708    This address is copied into PC.  This routine returns non-zero on
1709    success.  */
1710
1711 static int
1712 i386_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1713 {
1714   gdb_byte buf[4];
1715   CORE_ADDR sp, jb_addr;
1716   struct gdbarch *gdbarch = get_frame_arch (frame);
1717   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1718   int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
1719
1720   /* If JB_PC_OFFSET is -1, we have no way to find out where the
1721      longjmp will land.  */
1722   if (jb_pc_offset == -1)
1723     return 0;
1724
1725   get_frame_register (frame, I386_ESP_REGNUM, buf);
1726   sp = extract_unsigned_integer (buf, 4, byte_order);
1727   if (target_read_memory (sp + 4, buf, 4))
1728     return 0;
1729
1730   jb_addr = extract_unsigned_integer (buf, 4, byte_order);
1731   if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
1732     return 0;
1733
1734   *pc = extract_unsigned_integer (buf, 4, byte_order);
1735   return 1;
1736 }
1737 \f
1738
1739 /* Check whether TYPE must be 16-byte-aligned when passed as a
1740    function argument.  16-byte vectors, _Decimal128 and structures or
1741    unions containing such types must be 16-byte-aligned; other
1742    arguments are 4-byte-aligned.  */
1743
1744 static int
1745 i386_16_byte_align_p (struct type *type)
1746 {
1747   type = check_typedef (type);
1748   if ((TYPE_CODE (type) == TYPE_CODE_DECFLOAT
1749        || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)))
1750       && TYPE_LENGTH (type) == 16)
1751     return 1;
1752   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1753     return i386_16_byte_align_p (TYPE_TARGET_TYPE (type));
1754   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1755       || TYPE_CODE (type) == TYPE_CODE_UNION)
1756     {
1757       int i;
1758       for (i = 0; i < TYPE_NFIELDS (type); i++)
1759         {
1760           if (i386_16_byte_align_p (TYPE_FIELD_TYPE (type, i)))
1761             return 1;
1762         }
1763     }
1764   return 0;
1765 }
1766
1767 static CORE_ADDR
1768 i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1769                       struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
1770                       struct value **args, CORE_ADDR sp, int struct_return,
1771                       CORE_ADDR struct_addr)
1772 {
1773   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1774   gdb_byte buf[4];
1775   int i;
1776   int write_pass;
1777   int args_space = 0;
1778
1779   /* Determine the total space required for arguments and struct
1780      return address in a first pass (allowing for 16-byte-aligned
1781      arguments), then push arguments in a second pass.  */
1782
1783   for (write_pass = 0; write_pass < 2; write_pass++)
1784     {
1785       int args_space_used = 0;
1786       int have_16_byte_aligned_arg = 0;
1787
1788       if (struct_return)
1789         {
1790           if (write_pass)
1791             {
1792               /* Push value address.  */
1793               store_unsigned_integer (buf, 4, byte_order, struct_addr);
1794               write_memory (sp, buf, 4);
1795               args_space_used += 4;
1796             }
1797           else
1798             args_space += 4;
1799         }
1800
1801       for (i = 0; i < nargs; i++)
1802         {
1803           int len = TYPE_LENGTH (value_enclosing_type (args[i]));
1804
1805           if (write_pass)
1806             {
1807               if (i386_16_byte_align_p (value_enclosing_type (args[i])))
1808                 args_space_used = align_up (args_space_used, 16);
1809
1810               write_memory (sp + args_space_used,
1811                             value_contents_all (args[i]), len);
1812               /* The System V ABI says that:
1813
1814               "An argument's size is increased, if necessary, to make it a
1815               multiple of [32-bit] words.  This may require tail padding,
1816               depending on the size of the argument."
1817
1818               This makes sure the stack stays word-aligned.  */
1819               args_space_used += align_up (len, 4);
1820             }
1821           else
1822             {
1823               if (i386_16_byte_align_p (value_enclosing_type (args[i])))
1824                 {
1825                   args_space = align_up (args_space, 16);
1826                   have_16_byte_aligned_arg = 1;
1827                 }
1828               args_space += align_up (len, 4);
1829             }
1830         }
1831
1832       if (!write_pass)
1833         {
1834           if (have_16_byte_aligned_arg)
1835             args_space = align_up (args_space, 16);
1836           sp -= args_space;
1837         }
1838     }
1839
1840   /* Store return address.  */
1841   sp -= 4;
1842   store_unsigned_integer (buf, 4, byte_order, bp_addr);
1843   write_memory (sp, buf, 4);
1844
1845   /* Finally, update the stack pointer...  */
1846   store_unsigned_integer (buf, 4, byte_order, sp);
1847   regcache_cooked_write (regcache, I386_ESP_REGNUM, buf);
1848
1849   /* ...and fake a frame pointer.  */
1850   regcache_cooked_write (regcache, I386_EBP_REGNUM, buf);
1851
1852   /* MarkK wrote: This "+ 8" is all over the place:
1853      (i386_frame_this_id, i386_sigtramp_frame_this_id,
1854      i386_dummy_id).  It's there, since all frame unwinders for
1855      a given target have to agree (within a certain margin) on the
1856      definition of the stack address of a frame.  Otherwise frame id
1857      comparison might not work correctly.  Since DWARF2/GCC uses the
1858      stack address *before* the function call as a frame's CFA.  On
1859      the i386, when %ebp is used as a frame pointer, the offset
1860      between the contents %ebp and the CFA as defined by GCC.  */
1861   return sp + 8;
1862 }
1863
1864 /* These registers are used for returning integers (and on some
1865    targets also for returning `struct' and `union' values when their
1866    size and alignment match an integer type).  */
1867 #define LOW_RETURN_REGNUM       I386_EAX_REGNUM /* %eax */
1868 #define HIGH_RETURN_REGNUM      I386_EDX_REGNUM /* %edx */
1869
1870 /* Read, for architecture GDBARCH, a function return value of TYPE
1871    from REGCACHE, and copy that into VALBUF.  */
1872
1873 static void
1874 i386_extract_return_value (struct gdbarch *gdbarch, struct type *type,
1875                            struct regcache *regcache, gdb_byte *valbuf)
1876 {
1877   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1878   int len = TYPE_LENGTH (type);
1879   gdb_byte buf[I386_MAX_REGISTER_SIZE];
1880
1881   if (TYPE_CODE (type) == TYPE_CODE_FLT)
1882     {
1883       if (tdep->st0_regnum < 0)
1884         {
1885           warning (_("Cannot find floating-point return value."));
1886           memset (valbuf, 0, len);
1887           return;
1888         }
1889
1890       /* Floating-point return values can be found in %st(0).  Convert
1891          its contents to the desired type.  This is probably not
1892          exactly how it would happen on the target itself, but it is
1893          the best we can do.  */
1894       regcache_raw_read (regcache, I386_ST0_REGNUM, buf);
1895       convert_typed_floating (buf, i387_ext_type (gdbarch), valbuf, type);
1896     }
1897   else
1898     {
1899       int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
1900       int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
1901
1902       if (len <= low_size)
1903         {
1904           regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
1905           memcpy (valbuf, buf, len);
1906         }
1907       else if (len <= (low_size + high_size))
1908         {
1909           regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
1910           memcpy (valbuf, buf, low_size);
1911           regcache_raw_read (regcache, HIGH_RETURN_REGNUM, buf);
1912           memcpy (valbuf + low_size, buf, len - low_size);
1913         }
1914       else
1915         internal_error (__FILE__, __LINE__,
1916                         _("Cannot extract return value of %d bytes long."), len);
1917     }
1918 }
1919
1920 /* Write, for architecture GDBARCH, a function return value of TYPE
1921    from VALBUF into REGCACHE.  */
1922
1923 static void
1924 i386_store_return_value (struct gdbarch *gdbarch, struct type *type,
1925                          struct regcache *regcache, const gdb_byte *valbuf)
1926 {
1927   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1928   int len = TYPE_LENGTH (type);
1929
1930   if (TYPE_CODE (type) == TYPE_CODE_FLT)
1931     {
1932       ULONGEST fstat;
1933       gdb_byte buf[I386_MAX_REGISTER_SIZE];
1934
1935       if (tdep->st0_regnum < 0)
1936         {
1937           warning (_("Cannot set floating-point return value."));
1938           return;
1939         }
1940
1941       /* Returning floating-point values is a bit tricky.  Apart from
1942          storing the return value in %st(0), we have to simulate the
1943          state of the FPU at function return point.  */
1944
1945       /* Convert the value found in VALBUF to the extended
1946          floating-point format used by the FPU.  This is probably
1947          not exactly how it would happen on the target itself, but
1948          it is the best we can do.  */
1949       convert_typed_floating (valbuf, type, buf, i387_ext_type (gdbarch));
1950       regcache_raw_write (regcache, I386_ST0_REGNUM, buf);
1951
1952       /* Set the top of the floating-point register stack to 7.  The
1953          actual value doesn't really matter, but 7 is what a normal
1954          function return would end up with if the program started out
1955          with a freshly initialized FPU.  */
1956       regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
1957       fstat |= (7 << 11);
1958       regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM (tdep), fstat);
1959
1960       /* Mark %st(1) through %st(7) as empty.  Since we set the top of
1961          the floating-point register stack to 7, the appropriate value
1962          for the tag word is 0x3fff.  */
1963       regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM (tdep), 0x3fff);
1964     }
1965   else
1966     {
1967       int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
1968       int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
1969
1970       if (len <= low_size)
1971         regcache_raw_write_part (regcache, LOW_RETURN_REGNUM, 0, len, valbuf);
1972       else if (len <= (low_size + high_size))
1973         {
1974           regcache_raw_write (regcache, LOW_RETURN_REGNUM, valbuf);
1975           regcache_raw_write_part (regcache, HIGH_RETURN_REGNUM, 0,
1976                                    len - low_size, valbuf + low_size);
1977         }
1978       else
1979         internal_error (__FILE__, __LINE__,
1980                         _("Cannot store return value of %d bytes long."), len);
1981     }
1982 }
1983 \f
1984
1985 /* This is the variable that is set with "set struct-convention", and
1986    its legitimate values.  */
1987 static const char default_struct_convention[] = "default";
1988 static const char pcc_struct_convention[] = "pcc";
1989 static const char reg_struct_convention[] = "reg";
1990 static const char *valid_conventions[] =
1991 {
1992   default_struct_convention,
1993   pcc_struct_convention,
1994   reg_struct_convention,
1995   NULL
1996 };
1997 static const char *struct_convention = default_struct_convention;
1998
1999 /* Return non-zero if TYPE, which is assumed to be a structure,
2000    a union type, or an array type, should be returned in registers
2001    for architecture GDBARCH.  */
2002
2003 static int
2004 i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
2005 {
2006   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2007   enum type_code code = TYPE_CODE (type);
2008   int len = TYPE_LENGTH (type);
2009
2010   gdb_assert (code == TYPE_CODE_STRUCT
2011               || code == TYPE_CODE_UNION
2012               || code == TYPE_CODE_ARRAY);
2013
2014   if (struct_convention == pcc_struct_convention
2015       || (struct_convention == default_struct_convention
2016           && tdep->struct_return == pcc_struct_return))
2017     return 0;
2018
2019   /* Structures consisting of a single `float', `double' or 'long
2020      double' member are returned in %st(0).  */
2021   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2022     {
2023       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2024       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2025         return (len == 4 || len == 8 || len == 12);
2026     }
2027
2028   return (len == 1 || len == 2 || len == 4 || len == 8);
2029 }
2030
2031 /* Determine, for architecture GDBARCH, how a return value of TYPE
2032    should be returned.  If it is supposed to be returned in registers,
2033    and READBUF is non-zero, read the appropriate value from REGCACHE,
2034    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
2035    from WRITEBUF into REGCACHE.  */
2036
2037 static enum return_value_convention
2038 i386_return_value (struct gdbarch *gdbarch, struct type *func_type,
2039                    struct type *type, struct regcache *regcache,
2040                    gdb_byte *readbuf, const gdb_byte *writebuf)
2041 {
2042   enum type_code code = TYPE_CODE (type);
2043
2044   if (((code == TYPE_CODE_STRUCT
2045         || code == TYPE_CODE_UNION
2046         || code == TYPE_CODE_ARRAY)
2047        && !i386_reg_struct_return_p (gdbarch, type))
2048       /* 128-bit decimal float uses the struct return convention.  */
2049       || (code == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 16))
2050     {
2051       /* The System V ABI says that:
2052
2053          "A function that returns a structure or union also sets %eax
2054          to the value of the original address of the caller's area
2055          before it returns.  Thus when the caller receives control
2056          again, the address of the returned object resides in register
2057          %eax and can be used to access the object."
2058
2059          So the ABI guarantees that we can always find the return
2060          value just after the function has returned.  */
2061
2062       /* Note that the ABI doesn't mention functions returning arrays,
2063          which is something possible in certain languages such as Ada.
2064          In this case, the value is returned as if it was wrapped in
2065          a record, so the convention applied to records also applies
2066          to arrays.  */
2067
2068       if (readbuf)
2069         {
2070           ULONGEST addr;
2071
2072           regcache_raw_read_unsigned (regcache, I386_EAX_REGNUM, &addr);
2073           read_memory (addr, readbuf, TYPE_LENGTH (type));
2074         }
2075
2076       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
2077     }
2078
2079   /* This special case is for structures consisting of a single
2080      `float', `double' or 'long double' member.  These structures are
2081      returned in %st(0).  For these structures, we call ourselves
2082      recursively, changing TYPE into the type of the first member of
2083      the structure.  Since that should work for all structures that
2084      have only one member, we don't bother to check the member's type
2085      here.  */
2086   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2087     {
2088       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2089       return i386_return_value (gdbarch, func_type, type, regcache,
2090                                 readbuf, writebuf);
2091     }
2092
2093   if (readbuf)
2094     i386_extract_return_value (gdbarch, type, regcache, readbuf);
2095   if (writebuf)
2096     i386_store_return_value (gdbarch, type, regcache, writebuf);
2097
2098   return RETURN_VALUE_REGISTER_CONVENTION;
2099 }
2100 \f
2101
2102 /* Construct types for ISA-specific registers.  */
2103 struct type *
2104 i386_eflags_type (struct gdbarch *gdbarch)
2105 {
2106   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2107
2108   if (!tdep->i386_eflags_type)
2109     {
2110       struct type *type;
2111
2112       type = arch_flags_type (gdbarch, "builtin_type_i386_eflags", 4);
2113       append_flags_type_flag (type, 0, "CF");
2114       append_flags_type_flag (type, 1, NULL);
2115       append_flags_type_flag (type, 2, "PF");
2116       append_flags_type_flag (type, 4, "AF");
2117       append_flags_type_flag (type, 6, "ZF");
2118       append_flags_type_flag (type, 7, "SF");
2119       append_flags_type_flag (type, 8, "TF");
2120       append_flags_type_flag (type, 9, "IF");
2121       append_flags_type_flag (type, 10, "DF");
2122       append_flags_type_flag (type, 11, "OF");
2123       append_flags_type_flag (type, 14, "NT");
2124       append_flags_type_flag (type, 16, "RF");
2125       append_flags_type_flag (type, 17, "VM");
2126       append_flags_type_flag (type, 18, "AC");
2127       append_flags_type_flag (type, 19, "VIF");
2128       append_flags_type_flag (type, 20, "VIP");
2129       append_flags_type_flag (type, 21, "ID");
2130
2131       tdep->i386_eflags_type = type;
2132     }
2133
2134   return tdep->i386_eflags_type;
2135 }
2136
2137 struct type *
2138 i386_mxcsr_type (struct gdbarch *gdbarch)
2139 {
2140   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2141
2142   if (!tdep->i386_mxcsr_type)
2143     {
2144       struct type *type;
2145
2146       type = arch_flags_type (gdbarch, "builtin_type_i386_mxcsr", 4);
2147       append_flags_type_flag (type, 0, "IE");
2148       append_flags_type_flag (type, 1, "DE");
2149       append_flags_type_flag (type, 2, "ZE");
2150       append_flags_type_flag (type, 3, "OE");
2151       append_flags_type_flag (type, 4, "UE");
2152       append_flags_type_flag (type, 5, "PE");
2153       append_flags_type_flag (type, 6, "DAZ");
2154       append_flags_type_flag (type, 7, "IM");
2155       append_flags_type_flag (type, 8, "DM");
2156       append_flags_type_flag (type, 9, "ZM");
2157       append_flags_type_flag (type, 10, "OM");
2158       append_flags_type_flag (type, 11, "UM");
2159       append_flags_type_flag (type, 12, "PM");
2160       append_flags_type_flag (type, 15, "FZ");
2161
2162       tdep->i386_mxcsr_type = type;
2163     }
2164
2165   return tdep->i386_mxcsr_type;
2166 }
2167
2168 struct type *
2169 i387_ext_type (struct gdbarch *gdbarch)
2170 {
2171   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2172
2173   if (!tdep->i387_ext_type)
2174     tdep->i387_ext_type
2175       = arch_float_type (gdbarch, -1, "builtin_type_i387_ext",
2176                          floatformats_i387_ext);
2177
2178   return tdep->i387_ext_type;
2179 }
2180
2181 /* Construct vector type for MMX registers.  */
2182 struct type *
2183 i386_mmx_type (struct gdbarch *gdbarch)
2184 {
2185   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2186
2187   if (!tdep->i386_mmx_type)
2188     {
2189       const struct builtin_type *bt = builtin_type (gdbarch);
2190
2191       /* The type we're building is this: */
2192 #if 0
2193       union __gdb_builtin_type_vec64i
2194       {
2195         int64_t uint64;
2196         int32_t v2_int32[2];
2197         int16_t v4_int16[4];
2198         int8_t v8_int8[8];
2199       };
2200 #endif
2201
2202       struct type *t;
2203
2204       t = arch_composite_type (gdbarch,
2205                                "__gdb_builtin_type_vec64i", TYPE_CODE_UNION);
2206
2207       append_composite_type_field (t, "uint64", bt->builtin_int64);
2208       append_composite_type_field (t, "v2_int32",
2209                                    init_vector_type (bt->builtin_int32, 2));
2210       append_composite_type_field (t, "v4_int16",
2211                                    init_vector_type (bt->builtin_int16, 4));
2212       append_composite_type_field (t, "v8_int8",
2213                                    init_vector_type (bt->builtin_int8, 8));
2214
2215       TYPE_VECTOR (t) = 1;
2216       TYPE_NAME (t) = "builtin_type_vec64i";
2217       tdep->i386_mmx_type = t;
2218     }
2219
2220   return tdep->i386_mmx_type;
2221 }
2222
2223 struct type *
2224 i386_sse_type (struct gdbarch *gdbarch)
2225 {
2226   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2227
2228   if (!tdep->i386_sse_type)
2229     {
2230       const struct builtin_type *bt = builtin_type (gdbarch);
2231
2232       /* The type we're building is this: */
2233 #if 0
2234       union __gdb_builtin_type_vec128i
2235       {
2236         int128_t uint128;
2237         int64_t v2_int64[2];
2238         int32_t v4_int32[4];
2239         int16_t v8_int16[8];
2240         int8_t v16_int8[16];
2241         double v2_double[2];
2242         float v4_float[4];
2243       };
2244 #endif
2245
2246       struct type *t;
2247
2248       t = arch_composite_type (gdbarch,
2249                                "__gdb_builtin_type_vec128i", TYPE_CODE_UNION);
2250       append_composite_type_field (t, "v4_float",
2251                                    init_vector_type (bt->builtin_float, 4));
2252       append_composite_type_field (t, "v2_double",
2253                                    init_vector_type (bt->builtin_double, 2));
2254       append_composite_type_field (t, "v16_int8",
2255                                    init_vector_type (bt->builtin_int8, 16));
2256       append_composite_type_field (t, "v8_int16",
2257                                    init_vector_type (bt->builtin_int16, 8));
2258       append_composite_type_field (t, "v4_int32",
2259                                    init_vector_type (bt->builtin_int32, 4));
2260       append_composite_type_field (t, "v2_int64",
2261                                    init_vector_type (bt->builtin_int64, 2));
2262       append_composite_type_field (t, "uint128", bt->builtin_int128);
2263
2264       TYPE_VECTOR (t) = 1;
2265       TYPE_NAME (t) = "builtin_type_vec128i";
2266       tdep->i386_sse_type = t;
2267     }
2268
2269   return tdep->i386_sse_type;
2270 }
2271
2272 /* Return the GDB type object for the "standard" data type of data in
2273    register REGNUM.  Perhaps %esi and %edi should go here, but
2274    potentially they could be used for things other than address.  */
2275
2276 static struct type *
2277 i386_register_type (struct gdbarch *gdbarch, int regnum)
2278 {
2279   if (regnum == I386_EIP_REGNUM)
2280     return builtin_type (gdbarch)->builtin_func_ptr;
2281
2282   if (regnum == I386_EFLAGS_REGNUM)
2283     return i386_eflags_type (gdbarch);
2284
2285   if (regnum == I386_EBP_REGNUM || regnum == I386_ESP_REGNUM)
2286     return builtin_type (gdbarch)->builtin_data_ptr;
2287
2288   if (i386_fp_regnum_p (gdbarch, regnum))
2289     return i387_ext_type (gdbarch);
2290
2291   if (i386_mmx_regnum_p (gdbarch, regnum))
2292     return i386_mmx_type (gdbarch);
2293
2294   if (i386_sse_regnum_p (gdbarch, regnum))
2295     return i386_sse_type (gdbarch);
2296
2297   if (regnum == I387_MXCSR_REGNUM (gdbarch_tdep (gdbarch)))
2298     return i386_mxcsr_type (gdbarch);
2299
2300   return builtin_type (gdbarch)->builtin_int;
2301 }
2302
2303 /* Map a cooked register onto a raw register or memory.  For the i386,
2304    the MMX registers need to be mapped onto floating point registers.  */
2305
2306 static int
2307 i386_mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
2308 {
2309   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
2310   int mmxreg, fpreg;
2311   ULONGEST fstat;
2312   int tos;
2313
2314   mmxreg = regnum - tdep->mm0_regnum;
2315   regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2316   tos = (fstat >> 11) & 0x7;
2317   fpreg = (mmxreg + tos) % 8;
2318
2319   return (I387_ST0_REGNUM (tdep) + fpreg);
2320 }
2321
2322 static void
2323 i386_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2324                            int regnum, gdb_byte *buf)
2325 {
2326   if (i386_mmx_regnum_p (gdbarch, regnum))
2327     {
2328       gdb_byte mmx_buf[MAX_REGISTER_SIZE];
2329       int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2330
2331       /* Extract (always little endian).  */
2332       regcache_raw_read (regcache, fpnum, mmx_buf);
2333       memcpy (buf, mmx_buf, register_size (gdbarch, regnum));
2334     }
2335   else
2336     regcache_raw_read (regcache, regnum, buf);
2337 }
2338
2339 static void
2340 i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2341                             int regnum, const gdb_byte *buf)
2342 {
2343   if (i386_mmx_regnum_p (gdbarch, regnum))
2344     {
2345       gdb_byte mmx_buf[MAX_REGISTER_SIZE];
2346       int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2347
2348       /* Read ...  */
2349       regcache_raw_read (regcache, fpnum, mmx_buf);
2350       /* ... Modify ... (always little endian).  */
2351       memcpy (mmx_buf, buf, register_size (gdbarch, regnum));
2352       /* ... Write.  */
2353       regcache_raw_write (regcache, fpnum, mmx_buf);
2354     }
2355   else
2356     regcache_raw_write (regcache, regnum, buf);
2357 }
2358 \f
2359
2360 /* Return the register number of the register allocated by GCC after
2361    REGNUM, or -1 if there is no such register.  */
2362
2363 static int
2364 i386_next_regnum (int regnum)
2365 {
2366   /* GCC allocates the registers in the order:
2367
2368      %eax, %edx, %ecx, %ebx, %esi, %edi, %ebp, %esp, ...
2369
2370      Since storing a variable in %esp doesn't make any sense we return
2371      -1 for %ebp and for %esp itself.  */
2372   static int next_regnum[] =
2373   {
2374     I386_EDX_REGNUM,            /* Slot for %eax.  */
2375     I386_EBX_REGNUM,            /* Slot for %ecx.  */
2376     I386_ECX_REGNUM,            /* Slot for %edx.  */
2377     I386_ESI_REGNUM,            /* Slot for %ebx.  */
2378     -1, -1,                     /* Slots for %esp and %ebp.  */
2379     I386_EDI_REGNUM,            /* Slot for %esi.  */
2380     I386_EBP_REGNUM             /* Slot for %edi.  */
2381   };
2382
2383   if (regnum >= 0 && regnum < sizeof (next_regnum) / sizeof (next_regnum[0]))
2384     return next_regnum[regnum];
2385
2386   return -1;
2387 }
2388
2389 /* Return nonzero if a value of type TYPE stored in register REGNUM
2390    needs any special handling.  */
2391
2392 static int
2393 i386_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type)
2394 {
2395   int len = TYPE_LENGTH (type);
2396
2397   /* Values may be spread across multiple registers.  Most debugging
2398      formats aren't expressive enough to specify the locations, so
2399      some heuristics is involved.  Right now we only handle types that
2400      have a length that is a multiple of the word size, since GCC
2401      doesn't seem to put any other types into registers.  */
2402   if (len > 4 && len % 4 == 0)
2403     {
2404       int last_regnum = regnum;
2405
2406       while (len > 4)
2407         {
2408           last_regnum = i386_next_regnum (last_regnum);
2409           len -= 4;
2410         }
2411
2412       if (last_regnum != -1)
2413         return 1;
2414     }
2415
2416   return i387_convert_register_p (gdbarch, regnum, type);
2417 }
2418
2419 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
2420    return its contents in TO.  */
2421
2422 static void
2423 i386_register_to_value (struct frame_info *frame, int regnum,
2424                         struct type *type, gdb_byte *to)
2425 {
2426   struct gdbarch *gdbarch = get_frame_arch (frame);
2427   int len = TYPE_LENGTH (type);
2428
2429   /* FIXME: kettenis/20030609: What should we do if REGNUM isn't
2430      available in FRAME (i.e. if it wasn't saved)?  */
2431
2432   if (i386_fp_regnum_p (gdbarch, regnum))
2433     {
2434       i387_register_to_value (frame, regnum, type, to);
2435       return;
2436     }
2437
2438   /* Read a value spread across multiple registers.  */
2439
2440   gdb_assert (len > 4 && len % 4 == 0);
2441
2442   while (len > 0)
2443     {
2444       gdb_assert (regnum != -1);
2445       gdb_assert (register_size (gdbarch, regnum) == 4);
2446
2447       get_frame_register (frame, regnum, to);
2448       regnum = i386_next_regnum (regnum);
2449       len -= 4;
2450       to += 4;
2451     }
2452 }
2453
2454 /* Write the contents FROM of a value of type TYPE into register
2455    REGNUM in frame FRAME.  */
2456
2457 static void
2458 i386_value_to_register (struct frame_info *frame, int regnum,
2459                         struct type *type, const gdb_byte *from)
2460 {
2461   int len = TYPE_LENGTH (type);
2462
2463   if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
2464     {
2465       i387_value_to_register (frame, regnum, type, from);
2466       return;
2467     }
2468
2469   /* Write a value spread across multiple registers.  */
2470
2471   gdb_assert (len > 4 && len % 4 == 0);
2472
2473   while (len > 0)
2474     {
2475       gdb_assert (regnum != -1);
2476       gdb_assert (register_size (get_frame_arch (frame), regnum) == 4);
2477
2478       put_frame_register (frame, regnum, from);
2479       regnum = i386_next_regnum (regnum);
2480       len -= 4;
2481       from += 4;
2482     }
2483 }
2484 \f
2485 /* Supply register REGNUM from the buffer specified by GREGS and LEN
2486    in the general-purpose register set REGSET to register cache
2487    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
2488
2489 void
2490 i386_supply_gregset (const struct regset *regset, struct regcache *regcache,
2491                      int regnum, const void *gregs, size_t len)
2492 {
2493   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2494   const gdb_byte *regs = gregs;
2495   int i;
2496
2497   gdb_assert (len == tdep->sizeof_gregset);
2498
2499   for (i = 0; i < tdep->gregset_num_regs; i++)
2500     {
2501       if ((regnum == i || regnum == -1)
2502           && tdep->gregset_reg_offset[i] != -1)
2503         regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
2504     }
2505 }
2506
2507 /* Collect register REGNUM from the register cache REGCACHE and store
2508    it in the buffer specified by GREGS and LEN as described by the
2509    general-purpose register set REGSET.  If REGNUM is -1, do this for
2510    all registers in REGSET.  */
2511
2512 void
2513 i386_collect_gregset (const struct regset *regset,
2514                       const struct regcache *regcache,
2515                       int regnum, void *gregs, size_t len)
2516 {
2517   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2518   gdb_byte *regs = gregs;
2519   int i;
2520
2521   gdb_assert (len == tdep->sizeof_gregset);
2522
2523   for (i = 0; i < tdep->gregset_num_regs; i++)
2524     {
2525       if ((regnum == i || regnum == -1)
2526           && tdep->gregset_reg_offset[i] != -1)
2527         regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]);
2528     }
2529 }
2530
2531 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
2532    in the floating-point register set REGSET to register cache
2533    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
2534
2535 static void
2536 i386_supply_fpregset (const struct regset *regset, struct regcache *regcache,
2537                       int regnum, const void *fpregs, size_t len)
2538 {
2539   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2540
2541   if (len == I387_SIZEOF_FXSAVE)
2542     {
2543       i387_supply_fxsave (regcache, regnum, fpregs);
2544       return;
2545     }
2546
2547   gdb_assert (len == tdep->sizeof_fpregset);
2548   i387_supply_fsave (regcache, regnum, fpregs);
2549 }
2550
2551 /* Collect register REGNUM from the register cache REGCACHE and store
2552    it in the buffer specified by FPREGS and LEN as described by the
2553    floating-point register set REGSET.  If REGNUM is -1, do this for
2554    all registers in REGSET.  */
2555
2556 static void
2557 i386_collect_fpregset (const struct regset *regset,
2558                        const struct regcache *regcache,
2559                        int regnum, void *fpregs, size_t len)
2560 {
2561   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2562
2563   if (len == I387_SIZEOF_FXSAVE)
2564     {
2565       i387_collect_fxsave (regcache, regnum, fpregs);
2566       return;
2567     }
2568
2569   gdb_assert (len == tdep->sizeof_fpregset);
2570   i387_collect_fsave (regcache, regnum, fpregs);
2571 }
2572
2573 /* Return the appropriate register set for the core section identified
2574    by SECT_NAME and SECT_SIZE.  */
2575
2576 const struct regset *
2577 i386_regset_from_core_section (struct gdbarch *gdbarch,
2578                                const char *sect_name, size_t sect_size)
2579 {
2580   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2581
2582   if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
2583     {
2584       if (tdep->gregset == NULL)
2585         tdep->gregset = regset_alloc (gdbarch, i386_supply_gregset,
2586                                       i386_collect_gregset);
2587       return tdep->gregset;
2588     }
2589
2590   if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
2591       || (strcmp (sect_name, ".reg-xfp") == 0
2592           && sect_size == I387_SIZEOF_FXSAVE))
2593     {
2594       if (tdep->fpregset == NULL)
2595         tdep->fpregset = regset_alloc (gdbarch, i386_supply_fpregset,
2596                                        i386_collect_fpregset);
2597       return tdep->fpregset;
2598     }
2599
2600   return NULL;
2601 }
2602 \f
2603
2604 /* Stuff for WIN32 PE style DLL's but is pretty generic really.  */
2605
2606 CORE_ADDR
2607 i386_pe_skip_trampoline_code (struct frame_info *frame,
2608                               CORE_ADDR pc, char *name)
2609 {
2610   struct gdbarch *gdbarch = get_frame_arch (frame);
2611   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2612
2613   /* jmp *(dest) */
2614   if (pc && read_memory_unsigned_integer (pc, 2, byte_order) == 0x25ff)
2615     {
2616       unsigned long indirect =
2617         read_memory_unsigned_integer (pc + 2, 4, byte_order);
2618       struct minimal_symbol *indsym =
2619         indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
2620       char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
2621
2622       if (symname)
2623         {
2624           if (strncmp (symname, "__imp_", 6) == 0
2625               || strncmp (symname, "_imp_", 5) == 0)
2626             return name ? 1 :
2627                    read_memory_unsigned_integer (indirect, 4, byte_order);
2628         }
2629     }
2630   return 0;                     /* Not a trampoline.  */
2631 }
2632 \f
2633
2634 /* Return whether the THIS_FRAME corresponds to a sigtramp
2635    routine.  */
2636
2637 int
2638 i386_sigtramp_p (struct frame_info *this_frame)
2639 {
2640   CORE_ADDR pc = get_frame_pc (this_frame);
2641   char *name;
2642
2643   find_pc_partial_function (pc, &name, NULL, NULL);
2644   return (name && strcmp ("_sigtramp", name) == 0);
2645 }
2646 \f
2647
2648 /* We have two flavours of disassembly.  The machinery on this page
2649    deals with switching between those.  */
2650
2651 static int
2652 i386_print_insn (bfd_vma pc, struct disassemble_info *info)
2653 {
2654   gdb_assert (disassembly_flavor == att_flavor
2655               || disassembly_flavor == intel_flavor);
2656
2657   /* FIXME: kettenis/20020915: Until disassembler_options is properly
2658      constified, cast to prevent a compiler warning.  */
2659   info->disassembler_options = (char *) disassembly_flavor;
2660
2661   return print_insn_i386 (pc, info);
2662 }
2663 \f
2664
2665 /* There are a few i386 architecture variants that differ only
2666    slightly from the generic i386 target.  For now, we don't give them
2667    their own source file, but include them here.  As a consequence,
2668    they'll always be included.  */
2669
2670 /* System V Release 4 (SVR4).  */
2671
2672 /* Return whether THIS_FRAME corresponds to a SVR4 sigtramp
2673    routine.  */
2674
2675 static int
2676 i386_svr4_sigtramp_p (struct frame_info *this_frame)
2677 {
2678   CORE_ADDR pc = get_frame_pc (this_frame);
2679   char *name;
2680
2681   /* UnixWare uses _sigacthandler.  The origin of the other symbols is
2682      currently unknown.  */
2683   find_pc_partial_function (pc, &name, NULL, NULL);
2684   return (name && (strcmp ("_sigreturn", name) == 0
2685                    || strcmp ("_sigacthandler", name) == 0
2686                    || strcmp ("sigvechandler", name) == 0));
2687 }
2688
2689 /* Assuming THIS_FRAME is for a SVR4 sigtramp routine, return the
2690    address of the associated sigcontext (ucontext) structure.  */
2691
2692 static CORE_ADDR
2693 i386_svr4_sigcontext_addr (struct frame_info *this_frame)
2694 {
2695   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2696   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2697   gdb_byte buf[4];
2698   CORE_ADDR sp;
2699
2700   get_frame_register (this_frame, I386_ESP_REGNUM, buf);
2701   sp = extract_unsigned_integer (buf, 4, byte_order);
2702
2703   return read_memory_unsigned_integer (sp + 8, 4, byte_order);
2704 }
2705 \f
2706
2707 /* Generic ELF.  */
2708
2709 void
2710 i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2711 {
2712   /* We typically use stabs-in-ELF with the SVR4 register numbering.  */
2713   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
2714 }
2715
2716 /* System V Release 4 (SVR4).  */
2717
2718 void
2719 i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2720 {
2721   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2722
2723   /* System V Release 4 uses ELF.  */
2724   i386_elf_init_abi (info, gdbarch);
2725
2726   /* System V Release 4 has shared libraries.  */
2727   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
2728
2729   tdep->sigtramp_p = i386_svr4_sigtramp_p;
2730   tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
2731   tdep->sc_pc_offset = 36 + 14 * 4;
2732   tdep->sc_sp_offset = 36 + 17 * 4;
2733
2734   tdep->jb_pc_offset = 20;
2735 }
2736
2737 /* DJGPP.  */
2738
2739 static void
2740 i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2741 {
2742   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2743
2744   /* DJGPP doesn't have any special frames for signal handlers.  */
2745   tdep->sigtramp_p = NULL;
2746
2747   tdep->jb_pc_offset = 36;
2748
2749   /* DJGPP does not support the SSE registers.  */
2750   tdep->num_xmm_regs = 0;
2751   set_gdbarch_num_regs (gdbarch, I386_NUM_GREGS + I386_NUM_FREGS);
2752
2753   /* Native compiler is GCC, which uses the SVR4 register numbering
2754      even in COFF and STABS.  See the comment in i386_gdbarch_init,
2755      before the calls to set_gdbarch_stab_reg_to_regnum and
2756      set_gdbarch_sdb_reg_to_regnum.  */
2757   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
2758   set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
2759 }
2760 \f
2761
2762 /* i386 register groups.  In addition to the normal groups, add "mmx"
2763    and "sse".  */
2764
2765 static struct reggroup *i386_sse_reggroup;
2766 static struct reggroup *i386_mmx_reggroup;
2767
2768 static void
2769 i386_init_reggroups (void)
2770 {
2771   i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
2772   i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
2773 }
2774
2775 static void
2776 i386_add_reggroups (struct gdbarch *gdbarch)
2777 {
2778   reggroup_add (gdbarch, i386_sse_reggroup);
2779   reggroup_add (gdbarch, i386_mmx_reggroup);
2780   reggroup_add (gdbarch, general_reggroup);
2781   reggroup_add (gdbarch, float_reggroup);
2782   reggroup_add (gdbarch, all_reggroup);
2783   reggroup_add (gdbarch, save_reggroup);
2784   reggroup_add (gdbarch, restore_reggroup);
2785   reggroup_add (gdbarch, vector_reggroup);
2786   reggroup_add (gdbarch, system_reggroup);
2787 }
2788
2789 int
2790 i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2791                           struct reggroup *group)
2792 {
2793   int sse_regnum_p = (i386_sse_regnum_p (gdbarch, regnum)
2794                       || i386_mxcsr_regnum_p (gdbarch, regnum));
2795   int fp_regnum_p = (i386_fp_regnum_p (gdbarch, regnum)
2796                      || i386_fpc_regnum_p (gdbarch, regnum));
2797   int mmx_regnum_p = (i386_mmx_regnum_p (gdbarch, regnum));
2798
2799   if (group == i386_mmx_reggroup)
2800     return mmx_regnum_p;
2801   if (group == i386_sse_reggroup)
2802     return sse_regnum_p;
2803   if (group == vector_reggroup)
2804     return (mmx_regnum_p || sse_regnum_p);
2805   if (group == float_reggroup)
2806     return fp_regnum_p;
2807   if (group == general_reggroup)
2808     return (!fp_regnum_p && !mmx_regnum_p && !sse_regnum_p);
2809
2810   return default_register_reggroup_p (gdbarch, regnum, group);
2811 }
2812 \f
2813
2814 /* Get the ARGIth function argument for the current function.  */
2815
2816 static CORE_ADDR
2817 i386_fetch_pointer_argument (struct frame_info *frame, int argi, 
2818                              struct type *type)
2819 {
2820   struct gdbarch *gdbarch = get_frame_arch (frame);
2821   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2822   CORE_ADDR sp = get_frame_register_unsigned  (frame, I386_ESP_REGNUM);
2823   return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4, byte_order);
2824 }
2825
2826 static void
2827 i386_skip_permanent_breakpoint (struct regcache *regcache)
2828 {
2829   CORE_ADDR current_pc = regcache_read_pc (regcache);
2830
2831  /* On i386, breakpoint is exactly 1 byte long, so we just
2832     adjust the PC in the regcache.  */
2833   current_pc += 1;
2834   regcache_write_pc (regcache, current_pc);
2835 }
2836
2837
2838 #define PREFIX_REPZ     0x01
2839 #define PREFIX_REPNZ    0x02
2840 #define PREFIX_LOCK     0x04
2841 #define PREFIX_DATA     0x08
2842 #define PREFIX_ADDR     0x10
2843
2844 /* operand size */
2845 enum
2846 {
2847   OT_BYTE = 0,
2848   OT_WORD,
2849   OT_LONG,
2850   OT_QUAD,
2851 };
2852
2853 /* i386 arith/logic operations */
2854 enum
2855 {
2856   OP_ADDL,
2857   OP_ORL,
2858   OP_ADCL,
2859   OP_SBBL,
2860   OP_ANDL,
2861   OP_SUBL,
2862   OP_XORL,
2863   OP_CMPL,
2864 };
2865
2866 struct i386_record_s
2867 {
2868   struct gdbarch *gdbarch;
2869   struct regcache *regcache;
2870   CORE_ADDR orig_addr;
2871   CORE_ADDR addr;
2872   int aflag;
2873   int dflag;
2874   int override;
2875   uint8_t modrm;
2876   uint8_t mod, reg, rm;
2877   int ot;
2878   uint8_t rex_x;
2879   uint8_t rex_b;
2880   int rip_offset;
2881   int popl_esp_hack;
2882   const int *regmap;
2883 };
2884
2885 /* Parse "modrm" part in current memory address that irp->addr point to
2886    Return -1 if something wrong. */
2887
2888 static int
2889 i386_record_modrm (struct i386_record_s *irp)
2890 {
2891   struct gdbarch *gdbarch = irp->gdbarch;
2892
2893   if (target_read_memory (irp->addr, &irp->modrm, 1))
2894     {
2895       if (record_debug)
2896         printf_unfiltered (_("Process record: error reading memory at "
2897                              "addr %s len = 1.\n"),
2898                            paddress (gdbarch, irp->addr));
2899       return -1;
2900     }
2901   irp->addr++;
2902   irp->mod = (irp->modrm >> 6) & 3;
2903   irp->reg = (irp->modrm >> 3) & 7;
2904   irp->rm = irp->modrm & 7;
2905
2906   return 0;
2907 }
2908
2909 /* Get the memory address that current instruction  write to and set it to
2910    the argument "addr".
2911    Return -1 if something wrong. */
2912
2913 static int
2914 i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr)
2915 {
2916   struct gdbarch *gdbarch = irp->gdbarch;
2917   uint8_t tmpu8;
2918   int16_t tmpi16;
2919   int32_t tmpi32;
2920   ULONGEST tmpulongest;
2921
2922   *addr = 0;
2923   if (irp->aflag)
2924     {
2925       /* 32 bits */
2926       int havesib = 0;
2927       uint8_t scale = 0;
2928       uint8_t index = 0;
2929       uint8_t base = irp->rm;
2930
2931       if (base == 4)
2932         {
2933           havesib = 1;
2934           if (target_read_memory (irp->addr, &tmpu8, 1))
2935             {
2936               if (record_debug)
2937                 printf_unfiltered (_("Process record: error reading memory "
2938                                      "at addr %s len = 1.\n"),
2939                                    paddress (gdbarch, irp->addr));
2940               return -1;
2941             }
2942           irp->addr++;
2943           scale = (tmpu8 >> 6) & 3;
2944           index = ((tmpu8 >> 3) & 7) | irp->rex_x;
2945           base = (tmpu8 & 7);
2946         }
2947       base |= irp->rex_b;
2948
2949       switch (irp->mod)
2950         {
2951         case 0:
2952           if ((base & 7) == 5)
2953             {
2954               base = 0xff;
2955               if (target_read_memory (irp->addr, (gdb_byte *) &tmpi32, 4))
2956                 {
2957                   if (record_debug)
2958                     printf_unfiltered (_("Process record: error reading "
2959                                          "memory at addr %s len = 4.\n"),
2960                                        paddress (gdbarch, irp->addr));
2961                   return -1;
2962                 }
2963               irp->addr += 4;
2964               *addr = tmpi32;
2965               if (irp->regmap[X86_RECORD_R8_REGNUM] && !havesib)
2966                 *addr += irp->addr + irp->rip_offset;
2967             }
2968           else
2969             {
2970               *addr = 0;
2971             }
2972           break;
2973         case 1:
2974           if (target_read_memory (irp->addr, &tmpu8, 1))
2975             {
2976               if (record_debug)
2977                 printf_unfiltered (_("Process record: error reading memory "
2978                                      "at addr %s len = 1.\n"),
2979                                    paddress (gdbarch, irp->addr));
2980               return -1;
2981             }
2982           irp->addr++;
2983           *addr = (int8_t) tmpu8;
2984           break;
2985         case 2:
2986           if (target_read_memory (irp->addr, (gdb_byte *) &tmpi32, 4))
2987             {
2988               if (record_debug)
2989                 printf_unfiltered (_("Process record: error reading memory "
2990                                      "at addr %s len = 4.\n"),
2991                                    paddress (gdbarch, irp->addr));
2992               return -1;
2993             }
2994           *addr = tmpi32;
2995           irp->addr += 4;
2996           break;
2997         }
2998
2999       tmpulongest = 0;
3000       if (base != 0xff)
3001         {
3002           if (base == 4 && irp->popl_esp_hack)
3003             *addr += irp->popl_esp_hack;
3004           regcache_raw_read_unsigned (irp->regcache, irp->regmap[base],
3005                                       &tmpulongest);
3006         }
3007       if (irp->aflag == 2)
3008         {
3009           *addr += tmpulongest;
3010         }
3011       else
3012         *addr = (uint32_t) (tmpulongest + *addr);
3013
3014       if (havesib && (index != 4 || scale != 0))
3015         {
3016           regcache_raw_read_unsigned (irp->regcache, irp->regmap[index],
3017                                       &tmpulongest);
3018           if (irp->aflag == 2)
3019             *addr += tmpulongest << scale;
3020           else
3021             *addr = (uint32_t) (*addr + (tmpulongest << scale));
3022         }
3023     }
3024   else
3025     {
3026       /* 16 bits */
3027       switch (irp->mod)
3028         {
3029         case 0:
3030           if (irp->rm == 6)
3031             {
3032               if (target_read_memory
3033                   (irp->addr, (gdb_byte *) &tmpi16, 2))
3034                 {
3035                   if (record_debug)
3036                     printf_unfiltered (_("Process record: error reading "
3037                                          "memory at addr %s len = 2.\n"),
3038                                        paddress (gdbarch, irp->addr));
3039                   return -1;
3040                 }
3041               irp->addr += 2;
3042               *addr = tmpi16;
3043               irp->rm = 0;
3044               goto no_rm;
3045             }
3046           else
3047             {
3048               *addr = 0;
3049             }
3050           break;
3051         case 1:
3052           if (target_read_memory (irp->addr, &tmpu8, 1))
3053             {
3054               if (record_debug)
3055                 printf_unfiltered (_("Process record: error reading memory "
3056                                      "at addr %s len = 1.\n"),
3057                                    paddress (gdbarch, irp->addr));
3058               return -1;
3059             }
3060           irp->addr++;
3061           *addr = (int8_t) tmpu8;
3062           break;
3063         case 2:
3064           if (target_read_memory (irp->addr, (gdb_byte *) &tmpi16, 2))
3065             {
3066               if (record_debug)
3067                 printf_unfiltered (_("Process record: error reading memory "
3068                                      "at addr %s len = 2.\n"),
3069                                    paddress (gdbarch, irp->addr));
3070               return -1;
3071             }
3072           irp->addr += 2;
3073           *addr = tmpi16;
3074           break;
3075         }
3076
3077       switch (irp->rm)
3078         {
3079         case 0:
3080           regcache_raw_read_unsigned (irp->regcache,
3081                                       irp->regmap[X86_RECORD_REBX_REGNUM],
3082                                       &tmpulongest);
3083           *addr = (uint32_t) (*addr + tmpulongest);
3084           regcache_raw_read_unsigned (irp->regcache,
3085                                       irp->regmap[X86_RECORD_RESI_REGNUM],
3086                                       &tmpulongest);
3087           *addr = (uint32_t) (*addr + tmpulongest);
3088           break;
3089         case 1:
3090           regcache_raw_read_unsigned (irp->regcache,
3091                                       irp->regmap[X86_RECORD_REBX_REGNUM],
3092                                       &tmpulongest);
3093           *addr = (uint32_t) (*addr + tmpulongest);
3094           regcache_raw_read_unsigned (irp->regcache,
3095                                       irp->regmap[X86_RECORD_REDI_REGNUM],
3096                                       &tmpulongest);
3097           *addr = (uint32_t) (*addr + tmpulongest);
3098           break;
3099         case 2:
3100           regcache_raw_read_unsigned (irp->regcache,
3101                                       irp->regmap[X86_RECORD_REBP_REGNUM],
3102                                       &tmpulongest);
3103           *addr = (uint32_t) (*addr + tmpulongest);
3104           regcache_raw_read_unsigned (irp->regcache,
3105                                       irp->regmap[X86_RECORD_RESI_REGNUM],
3106                                       &tmpulongest);
3107           *addr = (uint32_t) (*addr + tmpulongest);
3108           break;
3109         case 3:
3110           regcache_raw_read_unsigned (irp->regcache,
3111                                       irp->regmap[X86_RECORD_REBP_REGNUM],
3112                                       &tmpulongest);
3113           *addr = (uint32_t) (*addr + tmpulongest);
3114           regcache_raw_read_unsigned (irp->regcache,
3115                                       irp->regmap[X86_RECORD_REDI_REGNUM],
3116                                       &tmpulongest);
3117           *addr = (uint32_t) (*addr + tmpulongest);
3118           break;
3119         case 4:
3120           regcache_raw_read_unsigned (irp->regcache,
3121                                       irp->regmap[X86_RECORD_RESI_REGNUM],
3122                                       &tmpulongest);
3123           *addr = (uint32_t) (*addr + tmpulongest);
3124           break;
3125         case 5:
3126           regcache_raw_read_unsigned (irp->regcache,
3127                                       irp->regmap[X86_RECORD_REDI_REGNUM],
3128                                       &tmpulongest);
3129           *addr = (uint32_t) (*addr + tmpulongest);
3130           break;
3131         case 6:
3132           regcache_raw_read_unsigned (irp->regcache,
3133                                       irp->regmap[X86_RECORD_REBP_REGNUM],
3134                                       &tmpulongest);
3135           *addr = (uint32_t) (*addr + tmpulongest);
3136           break;
3137         case 7:
3138           regcache_raw_read_unsigned (irp->regcache,
3139                                       irp->regmap[X86_RECORD_REBX_REGNUM],
3140                                       &tmpulongest);
3141           *addr = (uint32_t) (*addr + tmpulongest);
3142           break;
3143         }
3144       *addr &= 0xffff;
3145     }
3146
3147  no_rm:
3148   return 0;
3149 }
3150
3151 /* Record the value of the memory that willbe changed in current instruction
3152    to "record_arch_list".
3153    Return -1 if something wrong. */
3154
3155 static int
3156 i386_record_lea_modrm (struct i386_record_s *irp)
3157 {
3158   struct gdbarch *gdbarch = irp->gdbarch;
3159   uint64_t addr;
3160
3161   if (irp->override >= 0)
3162     {
3163       warning (_("Process record ignores the memory change "
3164                  "of instruction at address %s because it "
3165                  "can't get the value of the segment register."),
3166                paddress (gdbarch, irp->orig_addr));
3167       return 0;
3168     }
3169
3170   if (i386_record_lea_modrm_addr (irp, &addr))
3171     return -1;
3172
3173   if (record_arch_list_add_mem (addr, 1 << irp->ot))
3174     return -1;
3175
3176   return 0;
3177 }
3178
3179 /* Record the push operation to "record_arch_list".
3180    Return -1 if something wrong. */
3181
3182 static int
3183 i386_record_push (struct i386_record_s *irp, int size)
3184 {
3185   ULONGEST tmpulongest;
3186
3187   if (record_arch_list_add_reg (irp->regcache,
3188                                 irp->regmap[X86_RECORD_RESP_REGNUM]))
3189     return -1;
3190   regcache_raw_read_unsigned (irp->regcache,
3191                               irp->regmap[X86_RECORD_RESP_REGNUM],
3192                               &tmpulongest);
3193   if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest - size, size))
3194     return -1;
3195
3196   return 0;
3197 }
3198
3199
3200 /* Defines contents to record.  */
3201 #define I386_SAVE_FPU_REGS              0xfffd
3202 #define I386_SAVE_FPU_ENV               0xfffe
3203 #define I386_SAVE_FPU_ENV_REG_STACK     0xffff
3204
3205 /* Record the value of floating point registers which will be changed by the
3206    current instruction to "record_arch_list".  Return -1 if something is wrong.
3207 */
3208
3209 static int i386_record_floats (struct gdbarch *gdbarch,
3210                                struct i386_record_s *ir,
3211                                uint32_t iregnum)
3212 {
3213   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3214   int i;
3215
3216   /* Oza: Because of floating point insn push/pop of fpu stack is going to
3217      happen.  Currently we store st0-st7 registers, but we need not store all
3218      registers all the time, in future we use ftag register and record only
3219      those who are not marked as an empty.  */
3220
3221   if (I386_SAVE_FPU_REGS == iregnum)
3222     {
3223       for (i = I387_ST0_REGNUM (tdep); i <= I387_ST0_REGNUM (tdep) + 7; i++)
3224         {
3225           if (record_arch_list_add_reg (ir->regcache, i))
3226             return -1;
3227         }
3228     }
3229   else if (I386_SAVE_FPU_ENV == iregnum)
3230     {
3231       for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3232               {
3233               if (record_arch_list_add_reg (ir->regcache, i))
3234                 return -1;
3235               }
3236     }
3237   else if (I386_SAVE_FPU_ENV_REG_STACK == iregnum)
3238     {
3239       for (i = I387_ST0_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3240       {
3241         if (record_arch_list_add_reg (ir->regcache, i))
3242           return -1;
3243       }
3244     }
3245   else if ((iregnum >= I387_ST0_REGNUM (tdep)) &&
3246            (iregnum <= I387_FOP_REGNUM (tdep)))
3247     {
3248       if (record_arch_list_add_reg (ir->regcache,iregnum))
3249         return -1;
3250     }
3251   else
3252     {
3253       /* Parameter error.  */
3254       return -1;
3255     }
3256   if(I386_SAVE_FPU_ENV != iregnum)
3257     {
3258     for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
3259       {
3260       if (record_arch_list_add_reg (ir->regcache, i))
3261         return -1;
3262       }
3263     }
3264   return 0;
3265 }
3266
3267 /* Parse the current instruction and record the values of the registers and
3268    memory that will be changed in current instruction to "record_arch_list".
3269    Return -1 if something wrong. */
3270
3271 #define I386_RECORD_ARCH_LIST_ADD_REG(regnum) \
3272     record_arch_list_add_reg (ir.regcache, ir.regmap[(regnum)])
3273
3274 int
3275 i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
3276                      CORE_ADDR addr)
3277 {
3278   int prefixes = 0;
3279   uint8_t tmpu8;
3280   uint16_t tmpu16;
3281   uint32_t tmpu32;
3282   ULONGEST tmpulongest;
3283   uint32_t opcode;
3284   struct i386_record_s ir;
3285   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3286   int rex = 0;
3287   uint8_t rex_w = -1;
3288   uint8_t rex_r = 0;
3289
3290   memset (&ir, 0, sizeof (struct i386_record_s));
3291   ir.regcache = regcache;
3292   ir.addr = addr;
3293   ir.orig_addr = addr;
3294   ir.aflag = 1;
3295   ir.dflag = 1;
3296   ir.override = -1;
3297   ir.popl_esp_hack = 0;
3298   ir.regmap = gdbarch_tdep (gdbarch)->record_regmap;
3299   ir.gdbarch = gdbarch;
3300
3301   if (record_debug > 1)
3302     fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
3303                                     "addr = %s\n",
3304                         paddress (gdbarch, ir.addr));
3305
3306   /* prefixes */
3307   while (1)
3308     {
3309       if (target_read_memory (ir.addr, &tmpu8, 1))
3310         {
3311           if (record_debug)
3312             printf_unfiltered (_("Process record: error reading memory at "
3313                                  "addr %s len = 1.\n"),
3314                                paddress (gdbarch, ir.addr));
3315           return -1;
3316         }
3317       ir.addr++;
3318       switch (tmpu8)    /* Instruction prefixes */
3319         {
3320         case REPE_PREFIX_OPCODE:
3321           prefixes |= PREFIX_REPZ;
3322           break;
3323         case REPNE_PREFIX_OPCODE:
3324           prefixes |= PREFIX_REPNZ;
3325           break;
3326         case LOCK_PREFIX_OPCODE:
3327           prefixes |= PREFIX_LOCK;
3328           break;
3329         case CS_PREFIX_OPCODE:
3330           ir.override = X86_RECORD_CS_REGNUM;
3331           break;
3332         case SS_PREFIX_OPCODE:
3333           ir.override = X86_RECORD_SS_REGNUM;
3334           break;
3335         case DS_PREFIX_OPCODE:
3336           ir.override = X86_RECORD_DS_REGNUM;
3337           break;
3338         case ES_PREFIX_OPCODE:
3339           ir.override = X86_RECORD_ES_REGNUM;
3340           break;
3341         case FS_PREFIX_OPCODE:
3342           ir.override = X86_RECORD_FS_REGNUM;
3343           break;
3344         case GS_PREFIX_OPCODE:
3345           ir.override = X86_RECORD_GS_REGNUM;
3346           break;
3347         case DATA_PREFIX_OPCODE:
3348           prefixes |= PREFIX_DATA;
3349           break;
3350         case ADDR_PREFIX_OPCODE:
3351           prefixes |= PREFIX_ADDR;
3352           break;
3353         case 0x40:      /* i386 inc %eax */
3354         case 0x41:      /* i386 inc %ecx */
3355         case 0x42:      /* i386 inc %edx */
3356         case 0x43:      /* i386 inc %ebx */
3357         case 0x44:      /* i386 inc %esp */
3358         case 0x45:      /* i386 inc %ebp */
3359         case 0x46:      /* i386 inc %esi */
3360         case 0x47:      /* i386 inc %edi */
3361         case 0x48:      /* i386 dec %eax */
3362         case 0x49:      /* i386 dec %ecx */
3363         case 0x4a:      /* i386 dec %edx */
3364         case 0x4b:      /* i386 dec %ebx */
3365         case 0x4c:      /* i386 dec %esp */
3366         case 0x4d:      /* i386 dec %ebp */
3367         case 0x4e:      /* i386 dec %esi */
3368         case 0x4f:      /* i386 dec %edi */
3369           if (ir.regmap[X86_RECORD_R8_REGNUM])  /* 64 bit target */
3370             {
3371                /* REX */
3372                rex = 1;
3373                rex_w = (tmpu8 >> 3) & 1;
3374                rex_r = (tmpu8 & 0x4) << 1;
3375                ir.rex_x = (tmpu8 & 0x2) << 2;
3376                ir.rex_b = (tmpu8 & 0x1) << 3;
3377             }
3378           else                                  /* 32 bit target */
3379             goto out_prefixes;
3380           break;
3381         default:
3382           goto out_prefixes;
3383           break;
3384         }
3385     }
3386  out_prefixes:
3387   if (ir.regmap[X86_RECORD_R8_REGNUM] && rex_w == 1)
3388     {
3389       ir.dflag = 2;
3390     }
3391   else
3392     {
3393       if (prefixes & PREFIX_DATA)
3394         ir.dflag ^= 1;
3395     }
3396   if (prefixes & PREFIX_ADDR)
3397     ir.aflag ^= 1;
3398   else if (ir.regmap[X86_RECORD_R8_REGNUM])
3399     ir.aflag = 2;
3400
3401   /* now check op code */
3402   opcode = (uint32_t) tmpu8;
3403  reswitch:
3404   switch (opcode)
3405     {
3406     case 0x0f:
3407       if (target_read_memory (ir.addr, &tmpu8, 1))
3408         {
3409           if (record_debug)
3410             printf_unfiltered (_("Process record: error reading memory at "
3411                                  "addr %s len = 1.\n"),
3412                                paddress (gdbarch, ir.addr));
3413           return -1;
3414         }
3415       ir.addr++;
3416       opcode = (uint16_t) tmpu8 | 0x0f00;
3417       goto reswitch;
3418       break;
3419
3420     case 0x00:    /* arith & logic */
3421     case 0x01:
3422     case 0x02:
3423     case 0x03:
3424     case 0x04:
3425     case 0x05:
3426     case 0x08:
3427     case 0x09:
3428     case 0x0a:
3429     case 0x0b:
3430     case 0x0c:
3431     case 0x0d:
3432     case 0x10:
3433     case 0x11:
3434     case 0x12:
3435     case 0x13:
3436     case 0x14:
3437     case 0x15:
3438     case 0x18:
3439     case 0x19:
3440     case 0x1a:
3441     case 0x1b:
3442     case 0x1c:
3443     case 0x1d:
3444     case 0x20:
3445     case 0x21:
3446     case 0x22:
3447     case 0x23:
3448     case 0x24:
3449     case 0x25:
3450     case 0x28:
3451     case 0x29:
3452     case 0x2a:
3453     case 0x2b:
3454     case 0x2c:
3455     case 0x2d:
3456     case 0x30:
3457     case 0x31:
3458     case 0x32:
3459     case 0x33:
3460     case 0x34:
3461     case 0x35:
3462     case 0x38:
3463     case 0x39:
3464     case 0x3a:
3465     case 0x3b:
3466     case 0x3c:
3467     case 0x3d:
3468       if (((opcode >> 3) & 7) != OP_CMPL)
3469         {
3470           if ((opcode & 1) == 0)
3471             ir.ot = OT_BYTE;
3472           else
3473             ir.ot = ir.dflag + OT_WORD;
3474
3475           switch ((opcode >> 1) & 3)
3476             {
3477             case 0:    /* OP Ev, Gv */
3478               if (i386_record_modrm (&ir))
3479                 return -1;
3480               if (ir.mod != 3)
3481                 {
3482                   if (i386_record_lea_modrm (&ir))
3483                     return -1;
3484                 }
3485               else
3486                 {
3487                   ir.rm |= ir.rex_b;
3488                   if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3489                     ir.rm &= 0x3;
3490                   I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3491                 }
3492               break;
3493             case 1:    /* OP Gv, Ev */
3494               if (i386_record_modrm (&ir))
3495                 return -1;
3496               ir.reg |= rex_r;
3497               if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3498                 ir.reg &= 0x3;
3499               I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
3500               break;
3501             case 2:    /* OP A, Iv */
3502               I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3503               break;
3504             }
3505         }
3506       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3507       break;
3508
3509     case 0x80:    /* GRP1 */
3510     case 0x81:
3511     case 0x82:
3512     case 0x83:
3513       if (i386_record_modrm (&ir))
3514         return -1;
3515
3516       if (ir.reg != OP_CMPL)
3517         {
3518           if ((opcode & 1) == 0)
3519             ir.ot = OT_BYTE;
3520           else
3521             ir.ot = ir.dflag + OT_WORD;
3522
3523           if (ir.mod != 3)
3524             {
3525               if (opcode == 0x83)
3526                 ir.rip_offset = 1;
3527               else
3528                 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
3529               if (i386_record_lea_modrm (&ir))
3530                 return -1;
3531             }
3532           else
3533             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
3534         }
3535       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3536       break;
3537
3538     case 0x40:      /* inc */
3539     case 0x41:
3540     case 0x42:
3541     case 0x43:
3542     case 0x44:
3543     case 0x45:
3544     case 0x46:
3545     case 0x47:
3546
3547     case 0x48:      /* dec */
3548     case 0x49:
3549     case 0x4a:
3550     case 0x4b:
3551     case 0x4c:
3552     case 0x4d:
3553     case 0x4e:
3554     case 0x4f:
3555
3556       I386_RECORD_ARCH_LIST_ADD_REG (opcode & 7);
3557       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3558       break;
3559
3560     case 0xf6:    /* GRP3 */
3561     case 0xf7:
3562       if ((opcode & 1) == 0)
3563         ir.ot = OT_BYTE;
3564       else
3565         ir.ot = ir.dflag + OT_WORD;
3566       if (i386_record_modrm (&ir))
3567         return -1;
3568
3569       if (ir.mod != 3 && ir.reg == 0)
3570         ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
3571
3572       switch (ir.reg)
3573         {
3574         case 0:    /* test */
3575           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3576           break;
3577         case 2:    /* not */
3578         case 3:    /* neg */
3579           if (ir.mod != 3)
3580             {
3581               if (i386_record_lea_modrm (&ir))
3582                 return -1;
3583             }
3584           else
3585             {
3586               ir.rm |= ir.rex_b;
3587               if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3588                 ir.rm &= 0x3;
3589               I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3590             }
3591           if (ir.reg == 3)  /* neg */
3592             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3593           break;
3594         case 4:    /* mul  */
3595         case 5:    /* imul */
3596         case 6:    /* div  */
3597         case 7:    /* idiv */
3598           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3599           if (ir.ot != OT_BYTE)
3600             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
3601           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3602           break;
3603         default:
3604           ir.addr -= 2;
3605           opcode = opcode << 8 | ir.modrm;
3606           goto no_support;
3607           break;
3608         }
3609       break;
3610
3611     case 0xfe:    /* GRP4 */
3612     case 0xff:    /* GRP5 */
3613       if (i386_record_modrm (&ir))
3614         return -1;
3615       if (ir.reg >= 2 && opcode == 0xfe)
3616         {
3617           ir.addr -= 2;
3618           opcode = opcode << 8 | ir.modrm;
3619           goto no_support;
3620         }
3621       switch (ir.reg)
3622         {
3623         case 0:    /* inc */
3624         case 1:    /* dec */
3625           if ((opcode & 1) == 0)
3626             ir.ot = OT_BYTE;
3627           else
3628             ir.ot = ir.dflag + OT_WORD;
3629           if (ir.mod != 3)
3630             {
3631               if (i386_record_lea_modrm (&ir))
3632                 return -1;
3633             }
3634           else
3635             {
3636               ir.rm |= ir.rex_b;
3637               if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3638                 ir.rm &= 0x3;
3639               I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3640             }
3641           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3642           break;
3643         case 2:    /* call */
3644           if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
3645             ir.dflag = 2;
3646           if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3647             return -1;
3648           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3649           break;
3650         case 3:    /* lcall */
3651           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
3652           if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3653             return -1;
3654           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3655           break;
3656         case 4:    /* jmp  */
3657         case 5:    /* ljmp */
3658           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3659           break;
3660         case 6:    /* push */
3661           if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
3662             ir.dflag = 2;
3663           if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3664             return -1;
3665           break;
3666         default:
3667           ir.addr -= 2;
3668           opcode = opcode << 8 | ir.modrm;
3669           goto no_support;
3670           break;
3671         }
3672       break;
3673
3674     case 0x84:    /* test */
3675     case 0x85:
3676     case 0xa8:
3677     case 0xa9:
3678       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3679       break;
3680
3681     case 0x98:    /* CWDE/CBW */
3682       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3683       break;
3684
3685     case 0x99:    /* CDQ/CWD */
3686       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3687       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
3688       break;
3689
3690     case 0x0faf:  /* imul */
3691     case 0x69:
3692     case 0x6b:
3693       ir.ot = ir.dflag + OT_WORD;
3694       if (i386_record_modrm (&ir))
3695         return -1;
3696       if (opcode == 0x69)
3697         ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
3698       else if (opcode == 0x6b)
3699         ir.rip_offset = 1;
3700       ir.reg |= rex_r;
3701       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3702         ir.reg &= 0x3;
3703       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
3704       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3705       break;
3706
3707     case 0x0fc0:  /* xadd */
3708     case 0x0fc1:
3709       if ((opcode & 1) == 0)
3710         ir.ot = OT_BYTE;
3711       else
3712         ir.ot = ir.dflag + OT_WORD;
3713       if (i386_record_modrm (&ir))
3714         return -1;
3715       ir.reg |= rex_r;
3716       if (ir.mod == 3)
3717         {
3718           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3719             ir.reg &= 0x3;
3720           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
3721           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3722             ir.rm &= 0x3;
3723           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3724         }
3725       else
3726         {
3727           if (i386_record_lea_modrm (&ir))
3728             return -1;
3729           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3730             ir.reg &= 0x3;
3731           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
3732         }
3733       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3734       break;
3735
3736     case 0x0fb0:  /* cmpxchg */
3737     case 0x0fb1:
3738       if ((opcode & 1) == 0)
3739         ir.ot = OT_BYTE;
3740       else
3741         ir.ot = ir.dflag + OT_WORD;
3742       if (i386_record_modrm (&ir))
3743         return -1;
3744       if (ir.mod == 3)
3745         {
3746           ir.reg |= rex_r;
3747           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3748           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3749             ir.reg &= 0x3;
3750           I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
3751         }
3752       else
3753         {
3754           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3755           if (i386_record_lea_modrm (&ir))
3756             return -1;
3757         }
3758       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3759       break;
3760
3761     case 0x0fc7:    /* cmpxchg8b */
3762       if (i386_record_modrm (&ir))
3763         return -1;
3764       if (ir.mod == 3)
3765         {
3766           ir.addr -= 2;
3767           opcode = opcode << 8 | ir.modrm;
3768           goto no_support;
3769         }
3770       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
3771       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
3772       if (i386_record_lea_modrm (&ir))
3773         return -1;
3774       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3775       break;
3776
3777     case 0x50:    /* push */
3778     case 0x51:
3779     case 0x52:
3780     case 0x53:
3781     case 0x54:
3782     case 0x55:
3783     case 0x56:
3784     case 0x57:
3785     case 0x68:
3786     case 0x6a:
3787       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
3788         ir.dflag = 2;
3789       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3790         return -1;
3791       break;
3792
3793     case 0x06:    /* push es */
3794     case 0x0e:    /* push cs */
3795     case 0x16:    /* push ss */
3796     case 0x1e:    /* push ds */
3797       if (ir.regmap[X86_RECORD_R8_REGNUM])
3798         {
3799           ir.addr -= 1;
3800           goto no_support;
3801         }
3802       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3803         return -1;
3804       break;
3805
3806     case 0x0fa0:    /* push fs */
3807     case 0x0fa8:    /* push gs */
3808       if (ir.regmap[X86_RECORD_R8_REGNUM])
3809         {
3810           ir.addr -= 2;
3811           goto no_support;
3812         }
3813       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3814         return -1;
3815       break;
3816
3817     case 0x60:    /* pusha */
3818       if (ir.regmap[X86_RECORD_R8_REGNUM])
3819         {
3820           ir.addr -= 1;
3821           goto no_support;
3822         }
3823       if (i386_record_push (&ir, 1 << (ir.dflag + 4)))
3824         return -1;
3825       break;
3826
3827     case 0x58:    /* pop */
3828     case 0x59:
3829     case 0x5a:
3830     case 0x5b:
3831     case 0x5c:
3832     case 0x5d:
3833     case 0x5e:
3834     case 0x5f:
3835       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3836       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
3837       break;
3838
3839     case 0x61:    /* popa */
3840       if (ir.regmap[X86_RECORD_R8_REGNUM])
3841         {
3842           ir.addr -= 1;
3843           goto no_support;
3844         }
3845       for (tmpu8 = X86_RECORD_REAX_REGNUM; tmpu8 <= X86_RECORD_REDI_REGNUM;
3846            tmpu8++)
3847         I386_RECORD_ARCH_LIST_ADD_REG (tmpu8);
3848       break;
3849
3850     case 0x8f:    /* pop */
3851       if (ir.regmap[X86_RECORD_R8_REGNUM])
3852         ir.ot = ir.dflag ? OT_QUAD : OT_WORD;
3853       else
3854         ir.ot = ir.dflag + OT_WORD;
3855       if (i386_record_modrm (&ir))
3856         return -1;
3857       if (ir.mod == 3)
3858         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
3859       else
3860         {
3861           ir.popl_esp_hack = 1 << ir.ot;
3862           if (i386_record_lea_modrm (&ir))
3863             return -1;
3864         }
3865       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3866       break;
3867
3868     case 0xc8:    /* enter */
3869       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
3870       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
3871         ir.dflag = 2;
3872       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
3873         return -1;
3874       break;
3875
3876     case 0xc9:    /* leave */
3877       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3878       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
3879       break;
3880
3881     case 0x07:    /* pop es */
3882       if (ir.regmap[X86_RECORD_R8_REGNUM])
3883         {
3884           ir.addr -= 1;
3885           goto no_support;
3886         }
3887       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3888       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_ES_REGNUM);
3889       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3890       break;
3891
3892     case 0x17:    /* pop ss */
3893       if (ir.regmap[X86_RECORD_R8_REGNUM])
3894         {
3895           ir.addr -= 1;
3896           goto no_support;
3897         }
3898       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3899       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_SS_REGNUM);
3900       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3901       break;
3902
3903     case 0x1f:    /* pop ds */
3904       if (ir.regmap[X86_RECORD_R8_REGNUM])
3905         {
3906           ir.addr -= 1;
3907           goto no_support;
3908         }
3909       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3910       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_DS_REGNUM);
3911       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3912       break;
3913
3914     case 0x0fa1:    /* pop fs */
3915       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3916       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_FS_REGNUM);
3917       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3918       break;
3919
3920     case 0x0fa9:    /* pop gs */
3921       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
3922       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
3923       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
3924       break;
3925
3926     case 0x88:    /* mov */
3927     case 0x89:
3928     case 0xc6:
3929     case 0xc7:
3930       if ((opcode & 1) == 0)
3931         ir.ot = OT_BYTE;
3932       else
3933         ir.ot = ir.dflag + OT_WORD;
3934
3935       if (i386_record_modrm (&ir))
3936         return -1;
3937
3938       if (ir.mod != 3)
3939         {
3940           if (opcode == 0xc6 || opcode == 0xc7)
3941             ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
3942           if (i386_record_lea_modrm (&ir))
3943             return -1;
3944         }
3945       else
3946         {
3947           if (opcode == 0xc6 || opcode == 0xc7)
3948             ir.rm |= ir.rex_b;
3949           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3950             ir.rm &= 0x3;
3951           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3952         }
3953       break;
3954
3955     case 0x8a:    /* mov */
3956     case 0x8b:
3957       if ((opcode & 1) == 0)
3958         ir.ot = OT_BYTE;
3959       else
3960         ir.ot = ir.dflag + OT_WORD;
3961       if (i386_record_modrm (&ir))
3962         return -1;
3963       ir.reg |= rex_r;
3964       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
3965         ir.reg &= 0x3;
3966       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
3967       break;
3968
3969     case 0x8c:    /* mov seg */
3970       if (i386_record_modrm (&ir))
3971         return -1;
3972       if (ir.reg > 5)
3973         {
3974           ir.addr -= 2;
3975           opcode = opcode << 8 | ir.modrm;
3976           goto no_support;
3977         }
3978
3979       if (ir.mod == 3)
3980         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
3981       else
3982         {
3983           ir.ot = OT_WORD;
3984           if (i386_record_lea_modrm (&ir))
3985             return -1;
3986         }
3987       break;
3988
3989     case 0x8e:    /* mov seg */
3990       if (i386_record_modrm (&ir))
3991         return -1;
3992       switch (ir.reg)
3993         {
3994         case 0:
3995           tmpu8 = X86_RECORD_ES_REGNUM;
3996           break;
3997         case 2:
3998           tmpu8 = X86_RECORD_SS_REGNUM;
3999           break;
4000         case 3:
4001           tmpu8 = X86_RECORD_DS_REGNUM;
4002           break;
4003         case 4:
4004           tmpu8 = X86_RECORD_FS_REGNUM;
4005           break;
4006         case 5:
4007           tmpu8 = X86_RECORD_GS_REGNUM;
4008           break;
4009         default:
4010           ir.addr -= 2;
4011           opcode = opcode << 8 | ir.modrm;
4012           goto no_support;
4013           break;
4014         }
4015       I386_RECORD_ARCH_LIST_ADD_REG (tmpu8);
4016       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4017       break;
4018
4019     case 0x0fb6:    /* movzbS */
4020     case 0x0fb7:    /* movzwS */
4021     case 0x0fbe:    /* movsbS */
4022     case 0x0fbf:    /* movswS */
4023       if (i386_record_modrm (&ir))
4024         return -1;
4025       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
4026       break;
4027
4028     case 0x8d:      /* lea */
4029       if (i386_record_modrm (&ir))
4030         return -1;
4031       if (ir.mod == 3)
4032         {
4033           ir.addr -= 2;
4034           opcode = opcode << 8 | ir.modrm;
4035           goto no_support;
4036         }
4037       ir.ot = ir.dflag;
4038       ir.reg |= rex_r;
4039       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4040         ir.reg &= 0x3;
4041       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4042       break;
4043
4044     case 0xa0:    /* mov EAX */
4045     case 0xa1:
4046
4047     case 0xd7:    /* xlat */
4048       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4049       break;
4050
4051     case 0xa2:    /* mov EAX */
4052     case 0xa3:
4053       if (ir.override >= 0)
4054         {
4055           warning (_("Process record ignores the memory change "
4056                      "of instruction at address %s because "
4057                      "it can't get the value of the segment "
4058                      "register."),
4059                    paddress (gdbarch, ir.orig_addr));
4060         }
4061       else
4062         {
4063           if ((opcode & 1) == 0)
4064             ir.ot = OT_BYTE;
4065           else
4066             ir.ot = ir.dflag + OT_WORD;
4067           if (ir.aflag == 2)
4068             {
4069               if (target_read_memory (ir.addr, (gdb_byte *) &addr, 8))
4070                 {
4071                   if (record_debug)
4072                     printf_unfiltered (_("Process record: error reading "
4073                                          "memory at addr 0x%s len = 8.\n"),
4074                                        paddress (gdbarch, ir.addr));
4075                   return -1;
4076                 }
4077               ir.addr += 8;
4078             }
4079           else if (ir.aflag)
4080             {
4081               if (target_read_memory (ir.addr, (gdb_byte *) &tmpu32, 4))
4082                 {
4083                   if (record_debug)
4084                     printf_unfiltered (_("Process record: error reading "
4085                                          "memory at addr 0x%s len = 4.\n"),
4086                                        paddress (gdbarch, ir.addr));
4087                   return -1;
4088                 }
4089               ir.addr += 4;
4090               addr = tmpu32;
4091             }
4092           else
4093             {
4094               if (target_read_memory (ir.addr, (gdb_byte *) &tmpu16, 2))
4095                 {
4096                   if (record_debug)
4097                     printf_unfiltered (_("Process record: error reading "
4098                                          "memory at addr 0x%s len = 2.\n"),
4099                                        paddress (gdbarch, ir.addr));
4100                   return -1;
4101                 }
4102               ir.addr += 2;
4103               addr = tmpu16;
4104             }
4105           if (record_arch_list_add_mem (addr, 1 << ir.ot))
4106             return -1;
4107         }
4108       break;
4109
4110     case 0xb0:    /* mov R, Ib */
4111     case 0xb1:
4112     case 0xb2:
4113     case 0xb3:
4114     case 0xb4:
4115     case 0xb5:
4116     case 0xb6:
4117     case 0xb7:
4118       I386_RECORD_ARCH_LIST_ADD_REG ((ir.regmap[X86_RECORD_R8_REGNUM])
4119                                         ? ((opcode & 0x7) | ir.rex_b)
4120                                         : ((opcode & 0x7) & 0x3));
4121       break;
4122
4123     case 0xb8:    /* mov R, Iv */
4124     case 0xb9:
4125     case 0xba:
4126     case 0xbb:
4127     case 0xbc:
4128     case 0xbd:
4129     case 0xbe:
4130     case 0xbf:
4131       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
4132       break;
4133
4134     case 0x91:    /* xchg R, EAX */
4135     case 0x92:
4136     case 0x93:
4137     case 0x94:
4138     case 0x95:
4139     case 0x96:
4140     case 0x97:
4141       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4142       I386_RECORD_ARCH_LIST_ADD_REG (opcode & 0x7);
4143       break;
4144
4145     case 0x86:    /* xchg Ev, Gv */
4146     case 0x87:
4147       if ((opcode & 1) == 0)
4148         ir.ot = OT_BYTE;
4149       else
4150         ir.ot = ir.dflag + OT_WORD;
4151       if (i386_record_modrm (&ir))
4152         return -1;
4153       if (ir.mod == 3)
4154         {
4155           ir.rm |= ir.rex_b;
4156           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4157             ir.rm &= 0x3;
4158           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4159         }
4160       else
4161         {
4162           if (i386_record_lea_modrm (&ir))
4163             return -1;
4164         }
4165       ir.reg |= rex_r;
4166       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4167         ir.reg &= 0x3;
4168       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4169       break;
4170
4171     case 0xc4:    /* les Gv */
4172     case 0xc5:    /* lds Gv */
4173       if (ir.regmap[X86_RECORD_R8_REGNUM])
4174         {
4175           ir.addr -= 1;
4176           goto no_support;
4177         }
4178     case 0x0fb2:    /* lss Gv */
4179     case 0x0fb4:    /* lfs Gv */
4180     case 0x0fb5:    /* lgs Gv */
4181       if (i386_record_modrm (&ir))
4182         return -1;
4183       if (ir.mod == 3)
4184         {
4185           if (opcode > 0xff)
4186             ir.addr -= 3;
4187           else
4188             ir.addr -= 2;
4189           opcode = opcode << 8 | ir.modrm;
4190           goto no_support;
4191         }
4192       switch (opcode)
4193         {
4194         case 0xc4:    /* les Gv */
4195           tmpu8 = X86_RECORD_ES_REGNUM;
4196           break;
4197         case 0xc5:    /* lds Gv */
4198           tmpu8 = X86_RECORD_DS_REGNUM;
4199           break;
4200         case 0x0fb2:  /* lss Gv */
4201           tmpu8 = X86_RECORD_SS_REGNUM;
4202           break;
4203         case 0x0fb4:  /* lfs Gv */
4204           tmpu8 = X86_RECORD_FS_REGNUM;
4205           break;
4206         case 0x0fb5:  /* lgs Gv */
4207           tmpu8 = X86_RECORD_GS_REGNUM;
4208           break;
4209         }
4210       I386_RECORD_ARCH_LIST_ADD_REG (tmpu8);
4211       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
4212       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4213       break;
4214
4215     case 0xc0:    /* shifts */
4216     case 0xc1:
4217     case 0xd0:
4218     case 0xd1:
4219     case 0xd2:
4220     case 0xd3:
4221       if ((opcode & 1) == 0)
4222         ir.ot = OT_BYTE;
4223       else
4224         ir.ot = ir.dflag + OT_WORD;
4225       if (i386_record_modrm (&ir))
4226         return -1;
4227       if (ir.mod != 3 && (opcode == 0xd2 || opcode == 0xd3))
4228         {
4229           if (i386_record_lea_modrm (&ir))
4230             return -1;
4231         }
4232       else
4233         {
4234           ir.rm |= ir.rex_b;
4235           if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4236             ir.rm &= 0x3;
4237           I386_RECORD_ARCH_LIST_ADD_REG (ir.rm);
4238         }
4239       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4240       break;
4241
4242     case 0x0fa4:
4243     case 0x0fa5:
4244     case 0x0fac:
4245     case 0x0fad:
4246       if (i386_record_modrm (&ir))
4247         return -1;
4248       if (ir.mod == 3)
4249         {
4250           if (record_arch_list_add_reg (ir.regcache, ir.rm))
4251             return -1;
4252         }
4253       else
4254         {
4255           if (i386_record_lea_modrm (&ir))
4256             return -1;
4257         }
4258       break;
4259
4260     case 0xd8:    /* Floats.  */
4261     case 0xd9:
4262     case 0xda:
4263     case 0xdb:
4264     case 0xdc:
4265     case 0xdd:
4266     case 0xde:
4267     case 0xdf:
4268       if (i386_record_modrm (&ir))
4269         return -1;
4270       ir.reg |= ((opcode & 7) << 3);
4271       if (ir.mod != 3)
4272         {
4273           /* Memory. */
4274           uint64_t tmpu64;
4275
4276           if (i386_record_lea_modrm_addr (&ir, &tmpu64))
4277             return -1;
4278           switch (ir.reg)
4279             {
4280             case 0x02:
4281             case 0x12:
4282             case 0x22:
4283             case 0x32:
4284               /* For fcom, ficom nothing to do.  */
4285               break;
4286             case 0x03:
4287             case 0x13:
4288             case 0x23:
4289             case 0x33:
4290               /* For fcomp, ficomp pop FPU stack, store all.  */
4291               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4292                 return -1;
4293               break;
4294             case 0x00:
4295             case 0x01:
4296             case 0x04:
4297             case 0x05:
4298             case 0x06:
4299             case 0x07:
4300             case 0x10:
4301             case 0x11:
4302             case 0x14:
4303             case 0x15:
4304             case 0x16:
4305             case 0x17:
4306             case 0x20:
4307             case 0x21:
4308             case 0x24:
4309             case 0x25:
4310             case 0x26:
4311             case 0x27:
4312             case 0x30:
4313             case 0x31:
4314             case 0x34:
4315             case 0x35:
4316             case 0x36:
4317             case 0x37:
4318               /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,
4319                  fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension
4320                  of code,  always affects st(0) register.  */
4321               if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
4322                 return -1;
4323               break;
4324             case 0x08:
4325             case 0x0a:
4326             case 0x0b:
4327             case 0x18:
4328             case 0x19:
4329             case 0x1a:
4330             case 0x1b:
4331             case 0x1d:
4332             case 0x28:
4333             case 0x29:
4334             case 0x2a:
4335             case 0x2b:
4336             case 0x38:
4337             case 0x39:
4338             case 0x3a:
4339             case 0x3b:
4340             case 0x3c:
4341             case 0x3d:
4342               switch (ir.reg & 7)
4343                 {
4344                 case 0:
4345                   /* Handling fld, fild.  */
4346                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4347                     return -1;
4348                   break;
4349                 case 1:
4350                   switch (ir.reg >> 4)
4351                     {
4352                     case 0:
4353                       if (record_arch_list_add_mem (tmpu64, 4))
4354                         return -1;
4355                       break;
4356                     case 2:
4357                       if (record_arch_list_add_mem (tmpu64, 8))
4358                         return -1;
4359                       break;
4360                     case 3:
4361                       break;
4362                     default:
4363                       if (record_arch_list_add_mem (tmpu64, 2))
4364                         return -1;
4365                       break;
4366                     }
4367                   break;
4368                 default:
4369                   switch (ir.reg >> 4)
4370                     {
4371                     case 0:
4372                       if (record_arch_list_add_mem (tmpu64, 4))
4373                         return -1;
4374                       if (3 == (ir.reg & 7))
4375                         {
4376                           /* For fstp m32fp.  */
4377                           if (i386_record_floats (gdbarch, &ir,
4378                                                   I386_SAVE_FPU_REGS))
4379                             return -1;
4380                         }
4381                       break;
4382                     case 1:
4383                       if (record_arch_list_add_mem (tmpu64, 4))
4384                         return -1;
4385                       if ((3 == (ir.reg & 7))
4386                           || (5 == (ir.reg & 7))
4387                           || (7 == (ir.reg & 7)))
4388                         {
4389                           /* For fstp insn.  */
4390                           if (i386_record_floats (gdbarch, &ir,
4391                                                   I386_SAVE_FPU_REGS))
4392                             return -1;
4393                         }
4394                       break;
4395                     case 2:
4396                       if (record_arch_list_add_mem (tmpu64, 8))
4397                         return -1;
4398                       if (3 == (ir.reg & 7))
4399                         {
4400                           /* For fstp m64fp.  */
4401                           if (i386_record_floats (gdbarch, &ir,
4402                                                   I386_SAVE_FPU_REGS))
4403                             return -1;
4404                         }
4405                       break;
4406                     case 3:
4407                       if ((3 <= (ir.reg & 7)) && (6 <= (ir.reg & 7)))
4408                         {
4409                           /* For fistp, fbld, fild, fbstp.  */
4410                           if (i386_record_floats (gdbarch, &ir,
4411                                                   I386_SAVE_FPU_REGS))
4412                             return -1;
4413                         }
4414                       /* Fall through */
4415                     default:
4416                       if (record_arch_list_add_mem (tmpu64, 2))
4417                         return -1;
4418                       break;
4419                     }
4420                   break;
4421                 }
4422               break;
4423             case 0x0c:
4424               /* Insn fldenv.  */
4425               if (i386_record_floats (gdbarch, &ir,
4426                                       I386_SAVE_FPU_ENV_REG_STACK))
4427                 return -1;
4428               break;
4429             case 0x0d:
4430               /* Insn fldcw.  */
4431               if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep)))
4432                 return -1;
4433               break;
4434             case 0x2c:
4435               /* Insn frstor.  */
4436               if (i386_record_floats (gdbarch, &ir,
4437                                       I386_SAVE_FPU_ENV_REG_STACK))
4438                 return -1;
4439               break;
4440             case 0x0e:
4441               if (ir.dflag)
4442                 {
4443                   if (record_arch_list_add_mem (tmpu64, 28))
4444                     return -1;
4445                 }
4446               else
4447                 {
4448                   if (record_arch_list_add_mem (tmpu64, 14))
4449                     return -1;
4450                 }
4451               break;
4452             case 0x0f:
4453             case 0x2f:
4454               if (record_arch_list_add_mem (tmpu64, 2))
4455                 return -1;
4456               /* Insn fstp, fbstp.  */
4457               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4458                 return -1;
4459               break;
4460             case 0x1f:
4461             case 0x3e:
4462               if (record_arch_list_add_mem (tmpu64, 10))
4463                 return -1;
4464               break;
4465             case 0x2e:
4466               if (ir.dflag)
4467                 {
4468                   if (record_arch_list_add_mem (tmpu64, 28))
4469                     return -1;
4470                   tmpu64 += 28;
4471                 }
4472               else
4473                 {
4474                   if (record_arch_list_add_mem (tmpu64, 14))
4475                     return -1;
4476                   tmpu64 += 14;
4477                 }
4478               if (record_arch_list_add_mem (tmpu64, 80))
4479                 return -1;
4480               /* Insn fsave.  */
4481               if (i386_record_floats (gdbarch, &ir,
4482                                       I386_SAVE_FPU_ENV_REG_STACK))
4483                 return -1;
4484               break;
4485             case 0x3f:
4486               if (record_arch_list_add_mem (tmpu64, 8))
4487                 return -1;
4488               /* Insn fistp.  */
4489               if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4490                 return -1;
4491               break;
4492             default:
4493               ir.addr -= 2;
4494               opcode = opcode << 8 | ir.modrm;
4495               goto no_support;
4496               break;
4497             }
4498         }
4499       /* Opcode is an extension of modR/M byte.  */
4500       else
4501         {
4502           switch (opcode)
4503             {
4504             case 0xd8:
4505               if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
4506                 return -1;
4507               break;
4508             case 0xd9:
4509               if (0x0c == (ir.modrm >> 4))
4510                 {
4511                   if ((ir.modrm & 0x0f) <= 7)
4512                     {
4513                       if (i386_record_floats (gdbarch, &ir,
4514                                               I386_SAVE_FPU_REGS))
4515                         return -1;
4516                     }
4517                   else
4518                     {
4519                       if (i386_record_floats (gdbarch, &ir,
4520                                               I387_ST0_REGNUM (tdep)))
4521                         return -1;
4522                       /* If only st(0) is changing, then we have already
4523                          recorded.  */
4524                       if ((ir.modrm & 0x0f) - 0x08)
4525                         {
4526                           if (i386_record_floats (gdbarch, &ir,
4527                                                   I387_ST0_REGNUM (tdep) +
4528                                                   ((ir.modrm & 0x0f) - 0x08)))
4529                             return -1;
4530                         }
4531                     }
4532                 }
4533               else
4534                 {
4535                   switch (ir.modrm)
4536                     {
4537                     case 0xe0:
4538                     case 0xe1:
4539                     case 0xf0:
4540                     case 0xf5:
4541                     case 0xf8:
4542                     case 0xfa:
4543                     case 0xfc:
4544                     case 0xfe:
4545                     case 0xff:
4546                       if (i386_record_floats (gdbarch, &ir,
4547                                               I387_ST0_REGNUM (tdep)))
4548                         return -1;
4549                       break;
4550                     case 0xf1:
4551                     case 0xf2:
4552                     case 0xf3:
4553                     case 0xf4:
4554                     case 0xf6:
4555                     case 0xf7:
4556                     case 0xe8:
4557                     case 0xe9:
4558                     case 0xea:
4559                     case 0xeb:
4560                     case 0xec:
4561                     case 0xed:
4562                     case 0xee:
4563                     case 0xf9:
4564                     case 0xfb:
4565                       if (i386_record_floats (gdbarch, &ir,
4566                                               I386_SAVE_FPU_REGS))
4567                         return -1;
4568                       break;
4569                     case 0xfd:
4570                       if (i386_record_floats (gdbarch, &ir,
4571                                               I387_ST0_REGNUM (tdep)))
4572                         return -1;
4573                       if (i386_record_floats (gdbarch, &ir,
4574                                               I387_ST0_REGNUM (tdep) + 1))
4575                         return -1;
4576                       break;
4577                     }
4578                 }
4579               break;
4580             case 0xda:
4581               if (0xe9 == ir.modrm)
4582                 {
4583                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4584                     return -1;
4585                 }
4586               else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
4587                 {
4588                   if (i386_record_floats (gdbarch, &ir,
4589                                           I387_ST0_REGNUM (tdep)))
4590                     return -1;
4591                   if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
4592                     {
4593                       if (i386_record_floats (gdbarch, &ir,
4594                                               I387_ST0_REGNUM (tdep) +
4595                                               (ir.modrm & 0x0f)))
4596                         return -1;
4597                     }
4598                   else if ((ir.modrm & 0x0f) - 0x08)
4599                     {
4600                       if (i386_record_floats (gdbarch, &ir,
4601                                               I387_ST0_REGNUM (tdep) +
4602                                               ((ir.modrm & 0x0f) - 0x08)))
4603                         return -1;
4604                     }
4605                 }
4606               break;
4607             case 0xdb:
4608               if (0xe3 == ir.modrm)
4609                 {
4610                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV))
4611                     return -1;
4612                 }
4613               else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
4614                 {
4615                   if (i386_record_floats (gdbarch, &ir,
4616                                           I387_ST0_REGNUM (tdep)))
4617                     return -1;
4618                   if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
4619                     {
4620                       if (i386_record_floats (gdbarch, &ir,
4621                                               I387_ST0_REGNUM (tdep) +
4622                                               (ir.modrm & 0x0f)))
4623                         return -1;
4624                     }
4625                   else if ((ir.modrm & 0x0f) - 0x08)
4626                     {
4627                       if (i386_record_floats (gdbarch, &ir,
4628                                               I387_ST0_REGNUM (tdep) +
4629                                               ((ir.modrm & 0x0f) - 0x08)))
4630                         return -1;
4631                     }
4632                 }
4633               break;
4634             case 0xdc:
4635               if ((0x0c == ir.modrm >> 4)
4636                   || (0x0d == ir.modrm >> 4)
4637                   || (0x0f == ir.modrm >> 4))
4638                 {
4639                   if ((ir.modrm & 0x0f) <= 7)
4640                     {
4641                       if (i386_record_floats (gdbarch, &ir,
4642                                               I387_ST0_REGNUM (tdep) +
4643                                               (ir.modrm & 0x0f)))
4644                         return -1;
4645                     }
4646                   else
4647                     {
4648                       if (i386_record_floats (gdbarch, &ir,
4649                                               I387_ST0_REGNUM (tdep) +
4650                                               ((ir.modrm & 0x0f) - 0x08)))
4651                         return -1;
4652                     }
4653                 }
4654               break;
4655             case 0xdd:
4656               if (0x0c == ir.modrm >> 4)
4657                 {
4658                   if (i386_record_floats (gdbarch, &ir,
4659                                           I387_FTAG_REGNUM (tdep)))
4660                     return -1;
4661                 }
4662               else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
4663                 {
4664                   if ((ir.modrm & 0x0f) <= 7)
4665                     {
4666                       if (i386_record_floats (gdbarch, &ir,
4667                                               I387_ST0_REGNUM (tdep) +
4668                                               (ir.modrm & 0x0f)))
4669                         return -1;
4670                     }
4671                   else
4672                     {
4673                       if (i386_record_floats (gdbarch, &ir,
4674                                               I386_SAVE_FPU_REGS))
4675                         return -1;
4676                     }
4677                 }
4678               break;
4679             case 0xde:
4680               if ((0x0c == ir.modrm >> 4)
4681                   || (0x0e == ir.modrm >> 4)
4682                   || (0x0f == ir.modrm >> 4)
4683                   || (0xd9 == ir.modrm))
4684                 {
4685                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4686                     return -1;
4687                 }
4688               break;
4689             case 0xdf:
4690               if (0xe0 == ir.modrm)
4691                 {
4692                   if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4693                     return -1;
4694                 }
4695               else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
4696                 {
4697                   if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
4698                     return -1;
4699                 }
4700               break;
4701             }
4702         }
4703       break;
4704       /* string ops */
4705     case 0xa4:    /* movsS */
4706     case 0xa5:
4707     case 0xaa:    /* stosS */
4708     case 0xab:
4709     case 0x6c:    /* insS */
4710     case 0x6d:
4711       regcache_raw_read_unsigned (ir.regcache,
4712                                   ir.regmap[X86_RECORD_RECX_REGNUM],
4713                                   &tmpulongest);
4714       if (tmpulongest)
4715         {
4716           ULONGEST es, ds;
4717
4718           if ((opcode & 1) == 0)
4719             ir.ot = OT_BYTE;
4720           else
4721             ir.ot = ir.dflag + OT_WORD;
4722           regcache_raw_read_unsigned (ir.regcache,
4723                                       ir.regmap[X86_RECORD_REDI_REGNUM],
4724                                       &tmpulongest);
4725
4726           regcache_raw_read_unsigned (ir.regcache,
4727                                       ir.regmap[X86_RECORD_ES_REGNUM],
4728                                       &es);
4729           regcache_raw_read_unsigned (ir.regcache,
4730                                       ir.regmap[X86_RECORD_DS_REGNUM],
4731                                       &ds);
4732           if (ir.aflag && (es != ds))
4733             {
4734               /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */
4735               warning (_("Process record ignores the memory "
4736                          "change of instruction at address %s "
4737                          "because it can't get the value of the "
4738                          "ES segment register."),
4739                        paddress (gdbarch, ir.orig_addr));
4740             }
4741           else
4742             {
4743               if (record_arch_list_add_mem (tmpulongest, 1 << ir.ot))
4744                 return -1;
4745             }
4746
4747           if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4748             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
4749           if (opcode == 0xa4 || opcode == 0xa5)
4750             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
4751           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
4752           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4753         }
4754       break;
4755
4756     case 0xa6:    /* cmpsS */
4757     case 0xa7:
4758       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
4759       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
4760       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4761         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
4762       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4763       break;
4764
4765     case 0xac:    /* lodsS */
4766     case 0xad:
4767       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4768       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
4769       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4770         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
4771       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4772       break;
4773
4774     case 0xae:    /* scasS */
4775     case 0xaf:
4776       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
4777       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4778         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
4779       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4780       break;
4781
4782     case 0x6e:    /* outsS */
4783     case 0x6f:
4784       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
4785       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4786         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
4787       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4788       break;
4789
4790     case 0xe4:    /* port I/O */
4791     case 0xe5:
4792     case 0xec:
4793     case 0xed:
4794       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4795       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4796       break;
4797
4798     case 0xe6:
4799     case 0xe7:
4800     case 0xee:
4801     case 0xef:
4802       break;
4803
4804       /* control */
4805     case 0xc2:    /* ret im */
4806     case 0xc3:    /* ret */
4807       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4808       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4809       break;
4810
4811     case 0xca:    /* lret im */
4812     case 0xcb:    /* lret */
4813     case 0xcf:    /* iret */
4814       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
4815       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4816       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4817       break;
4818
4819     case 0xe8:    /* call im */
4820       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4821         ir.dflag = 2;
4822       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4823         return -1;
4824       break;
4825
4826     case 0x9a:    /* lcall im */
4827       if (ir.regmap[X86_RECORD_R8_REGNUM])
4828         {
4829           ir.addr -= 1;
4830           goto no_support;
4831         }
4832       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
4833       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4834         return -1;
4835       break;
4836
4837     case 0xe9:    /* jmp im */
4838     case 0xea:    /* ljmp im */
4839     case 0xeb:    /* jmp Jb */
4840     case 0x70:    /* jcc Jb */
4841     case 0x71:
4842     case 0x72:
4843     case 0x73:
4844     case 0x74:
4845     case 0x75:
4846     case 0x76:
4847     case 0x77:
4848     case 0x78:
4849     case 0x79:
4850     case 0x7a:
4851     case 0x7b:
4852     case 0x7c:
4853     case 0x7d:
4854     case 0x7e:
4855     case 0x7f:
4856     case 0x0f80:  /* jcc Jv */
4857     case 0x0f81:
4858     case 0x0f82:
4859     case 0x0f83:
4860     case 0x0f84:
4861     case 0x0f85:
4862     case 0x0f86:
4863     case 0x0f87:
4864     case 0x0f88:
4865     case 0x0f89:
4866     case 0x0f8a:
4867     case 0x0f8b:
4868     case 0x0f8c:
4869     case 0x0f8d:
4870     case 0x0f8e:
4871     case 0x0f8f:
4872       break;
4873
4874     case 0x0f90:  /* setcc Gv */
4875     case 0x0f91:
4876     case 0x0f92:
4877     case 0x0f93:
4878     case 0x0f94:
4879     case 0x0f95:
4880     case 0x0f96:
4881     case 0x0f97:
4882     case 0x0f98:
4883     case 0x0f99:
4884     case 0x0f9a:
4885     case 0x0f9b:
4886     case 0x0f9c:
4887     case 0x0f9d:
4888     case 0x0f9e:
4889     case 0x0f9f:
4890       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4891       ir.ot = OT_BYTE;
4892       if (i386_record_modrm (&ir))
4893         return -1;
4894       if (ir.mod == 3)
4895         I386_RECORD_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b)
4896                                                 : (ir.rm & 0x3));
4897       else
4898         {
4899           if (i386_record_lea_modrm (&ir))
4900             return -1;
4901         }
4902       break;
4903
4904     case 0x0f40:    /* cmov Gv, Ev */
4905     case 0x0f41:
4906     case 0x0f42:
4907     case 0x0f43:
4908     case 0x0f44:
4909     case 0x0f45:
4910     case 0x0f46:
4911     case 0x0f47:
4912     case 0x0f48:
4913     case 0x0f49:
4914     case 0x0f4a:
4915     case 0x0f4b:
4916     case 0x0f4c:
4917     case 0x0f4d:
4918     case 0x0f4e:
4919     case 0x0f4f:
4920       if (i386_record_modrm (&ir))
4921         return -1;
4922       ir.reg |= rex_r;
4923       if (ir.dflag == OT_BYTE)
4924         ir.reg &= 0x3;
4925       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg);
4926       break;
4927
4928       /* flags */
4929     case 0x9c:    /* pushf */
4930       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4931       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4932         ir.dflag = 2;
4933       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4934         return -1;
4935       break;
4936
4937     case 0x9d:    /* popf */
4938       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4939       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4940       break;
4941
4942     case 0x9e:    /* sahf */
4943       if (ir.regmap[X86_RECORD_R8_REGNUM])
4944         {
4945           ir.addr -= 1;
4946           goto no_support;
4947         }
4948     case 0xf5:    /* cmc */
4949     case 0xf8:    /* clc */
4950     case 0xf9:    /* stc */
4951     case 0xfc:    /* cld */
4952     case 0xfd:    /* std */
4953       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4954       break;
4955
4956     case 0x9f:    /* lahf */
4957       if (ir.regmap[X86_RECORD_R8_REGNUM])
4958         {
4959           ir.addr -= 1;
4960           goto no_support;
4961         }
4962       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4963       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4964       break;
4965
4966       /* bit operations */
4967     case 0x0fba:    /* bt/bts/btr/btc Gv, im */
4968       ir.ot = ir.dflag + OT_WORD;
4969       if (i386_record_modrm (&ir))
4970         return -1;
4971       if (ir.reg < 4)
4972         {
4973           ir.addr -= 2;
4974           opcode = opcode << 8 | ir.modrm;
4975           goto no_support;
4976         }
4977       if (ir.reg != 4)
4978         {
4979           if (ir.mod == 3)
4980             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4981           else
4982             {
4983               if (i386_record_lea_modrm (&ir))
4984                 return -1;
4985             }
4986         }
4987       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4988       break;
4989
4990     case 0x0fa3:    /* bt Gv, Ev */
4991       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4992       break;
4993
4994     case 0x0fab:    /* bts */
4995     case 0x0fb3:    /* btr */
4996     case 0x0fbb:    /* btc */
4997       ir.ot = ir.dflag + OT_WORD;
4998       if (i386_record_modrm (&ir))
4999         return -1;
5000       if (ir.mod == 3)
5001         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5002       else
5003         {
5004           uint64_t tmpu64;
5005           if (i386_record_lea_modrm_addr (&ir, &tmpu64))
5006             return -1;
5007           regcache_raw_read_unsigned (ir.regcache,
5008                                       ir.regmap[ir.reg | rex_r],
5009                                       &tmpulongest);
5010           switch (ir.dflag)
5011             {
5012             case 0:
5013               tmpu64 += ((int16_t) tmpulongest >> 4) << 4;
5014               break;
5015             case 1:
5016               tmpu64 += ((int32_t) tmpulongest >> 5) << 5;
5017               break;
5018             case 2:
5019               tmpu64 += ((int64_t) tmpulongest >> 6) << 6;
5020               break;
5021             }
5022           if (record_arch_list_add_mem (tmpu64, 1 << ir.ot))
5023             return -1;
5024           if (i386_record_lea_modrm (&ir))
5025             return -1;
5026         }
5027       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5028       break;
5029
5030     case 0x0fbc:    /* bsf */
5031     case 0x0fbd:    /* bsr */
5032       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
5033       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5034       break;
5035
5036       /* bcd */
5037     case 0x27:    /* daa */
5038     case 0x2f:    /* das */
5039     case 0x37:    /* aaa */
5040     case 0x3f:    /* aas */
5041     case 0xd4:    /* aam */
5042     case 0xd5:    /* aad */
5043       if (ir.regmap[X86_RECORD_R8_REGNUM])
5044         {
5045           ir.addr -= 1;
5046           goto no_support;
5047         }
5048       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5049       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5050       break;
5051
5052       /* misc */
5053     case 0x90:    /* nop */
5054       if (prefixes & PREFIX_LOCK)
5055         {
5056           ir.addr -= 1;
5057           goto no_support;
5058         }
5059       break;
5060
5061     case 0x9b:    /* fwait */
5062       if (target_read_memory (ir.addr, &tmpu8, 1))
5063         {
5064           if (record_debug)
5065             printf_unfiltered (_("Process record: error reading memory at "
5066                                  "addr 0x%s len = 1.\n"),
5067                                paddress (gdbarch, ir.addr));
5068           return -1;
5069         }
5070       opcode = (uint32_t) tmpu8;
5071       ir.addr++;
5072       goto reswitch;
5073       break;
5074
5075       /* XXX */
5076     case 0xcc:    /* int3 */
5077       printf_unfiltered (_("Process record doesn't support instruction "
5078                            "int3.\n"));
5079       ir.addr -= 1;
5080       goto no_support;
5081       break;
5082
5083       /* XXX */
5084     case 0xcd:    /* int */
5085       {
5086         int ret;
5087         if (target_read_memory (ir.addr, &tmpu8, 1))
5088           {
5089             if (record_debug)
5090               printf_unfiltered (_("Process record: error reading memory "
5091                                    "at addr %s len = 1.\n"),
5092                                  paddress (gdbarch, ir.addr));
5093             return -1;
5094           }
5095         ir.addr++;
5096         if (tmpu8 != 0x80
5097             || gdbarch_tdep (gdbarch)->i386_intx80_record == NULL)
5098           {
5099             printf_unfiltered (_("Process record doesn't support "
5100                                  "instruction int 0x%02x.\n"),
5101                                tmpu8);
5102             ir.addr -= 2;
5103             goto no_support;
5104           }
5105         ret = gdbarch_tdep (gdbarch)->i386_intx80_record (ir.regcache);
5106         if (ret)
5107           return ret;
5108       }
5109       break;
5110
5111       /* XXX */
5112     case 0xce:    /* into */
5113       printf_unfiltered (_("Process record doesn't support "
5114                            "instruction into.\n"));
5115       ir.addr -= 1;
5116       goto no_support;
5117       break;
5118
5119     case 0xfa:    /* cli */
5120     case 0xfb:    /* sti */
5121       break;
5122
5123     case 0x62:    /* bound */
5124       printf_unfiltered (_("Process record doesn't support "
5125                            "instruction bound.\n"));
5126       ir.addr -= 1;
5127       goto no_support;
5128       break;
5129
5130     case 0x0fc8:    /* bswap reg */
5131     case 0x0fc9:
5132     case 0x0fca:
5133     case 0x0fcb:
5134     case 0x0fcc:
5135     case 0x0fcd:
5136     case 0x0fce:
5137     case 0x0fcf:
5138       I386_RECORD_ARCH_LIST_ADD_REG ((opcode & 7) | ir.rex_b);
5139       break;
5140
5141     case 0xd6:    /* salc */
5142       if (ir.regmap[X86_RECORD_R8_REGNUM])
5143         {
5144           ir.addr -= 1;
5145           goto no_support;
5146         }
5147       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5148       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5149       break;
5150
5151     case 0xe0:    /* loopnz */
5152     case 0xe1:    /* loopz */
5153     case 0xe2:    /* loop */
5154     case 0xe3:    /* jecxz */
5155       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5156       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5157       break;
5158
5159     case 0x0f30:    /* wrmsr */
5160       printf_unfiltered (_("Process record doesn't support "
5161                            "instruction wrmsr.\n"));
5162       ir.addr -= 2;
5163       goto no_support;
5164       break;
5165
5166     case 0x0f32:    /* rdmsr */
5167       printf_unfiltered (_("Process record doesn't support "
5168                            "instruction rdmsr.\n"));
5169       ir.addr -= 2;
5170       goto no_support;
5171       break;
5172
5173     case 0x0f31:    /* rdtsc */
5174       printf_unfiltered (_("Process record doesn't support "
5175                            "instruction rdtsc.\n"));
5176       ir.addr -= 2;
5177       goto no_support;
5178       break;
5179
5180     case 0x0f34:    /* sysenter */
5181       {
5182         int ret;
5183         if (ir.regmap[X86_RECORD_R8_REGNUM])
5184           {
5185             ir.addr -= 2;
5186             goto no_support;
5187           }
5188         if (gdbarch_tdep (gdbarch)->i386_sysenter_record == NULL)
5189           {
5190             printf_unfiltered (_("Process record doesn't support "
5191                                  "instruction sysenter.\n"));
5192             ir.addr -= 2;
5193             goto no_support;
5194           }
5195         ret = gdbarch_tdep (gdbarch)->i386_sysenter_record (ir.regcache);
5196         if (ret)
5197           return ret;
5198       }
5199       break;
5200
5201     case 0x0f35:    /* sysexit */
5202       printf_unfiltered (_("Process record doesn't support "
5203                            "instruction sysexit.\n"));
5204       ir.addr -= 2;
5205       goto no_support;
5206       break;
5207
5208     case 0x0f05:    /* syscall */
5209       {
5210         int ret;
5211         if (gdbarch_tdep (gdbarch)->i386_syscall_record == NULL)
5212           {
5213             printf_unfiltered (_("Process record doesn't support "
5214                                  "instruction syscall.\n"));
5215             ir.addr -= 2;
5216             goto no_support;
5217           }
5218         ret = gdbarch_tdep (gdbarch)->i386_syscall_record (ir.regcache);
5219         if (ret)
5220           return ret;
5221       }
5222       break;
5223
5224     case 0x0f07:    /* sysret */
5225       printf_unfiltered (_("Process record doesn't support "
5226                            "instruction sysret.\n"));
5227       ir.addr -= 2;
5228       goto no_support;
5229       break;
5230
5231     case 0x0fa2:    /* cpuid */
5232       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5233       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5234       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5235       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
5236       break;
5237
5238     case 0xf4:    /* hlt */
5239       printf_unfiltered (_("Process record doesn't support "
5240                            "instruction hlt.\n"));
5241       ir.addr -= 1;
5242       goto no_support;
5243       break;
5244
5245     case 0x0f00:
5246       if (i386_record_modrm (&ir))
5247         return -1;
5248       switch (ir.reg)
5249         {
5250         case 0:  /* sldt */
5251         case 1:  /* str  */
5252           if (ir.mod == 3)
5253             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5254           else
5255             {
5256               ir.ot = OT_WORD;
5257               if (i386_record_lea_modrm (&ir))
5258                 return -1;
5259             }
5260           break;
5261         case 2:  /* lldt */
5262         case 3:  /* ltr */
5263           break;
5264         case 4:  /* verr */
5265         case 5:  /* verw */
5266           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5267           break;
5268         default:
5269           ir.addr -= 3;
5270           opcode = opcode << 8 | ir.modrm;
5271           goto no_support;
5272           break;
5273         }
5274       break;
5275
5276     case 0x0f01:
5277       if (i386_record_modrm (&ir))
5278         return -1;
5279       switch (ir.reg)
5280         {
5281         case 0:  /* sgdt */
5282           {
5283             uint64_t tmpu64;
5284
5285             if (ir.mod == 3)
5286               {
5287                 ir.addr -= 3;
5288                 opcode = opcode << 8 | ir.modrm;
5289                 goto no_support;
5290               }
5291             if (ir.override >= 0)
5292               {
5293                 warning (_("Process record ignores the memory "
5294                            "change of instruction at "
5295                            "address %s because it can't get "
5296                            "the value of the segment "
5297                            "register."),
5298                          paddress (gdbarch, ir.orig_addr));
5299               }
5300             else
5301               {
5302                 if (i386_record_lea_modrm_addr (&ir, &tmpu64))
5303                   return -1;
5304                 if (record_arch_list_add_mem (tmpu64, 2))
5305                   return -1;
5306                 tmpu64 += 2;
5307                 if (ir.regmap[X86_RECORD_R8_REGNUM])
5308                   {
5309                     if (record_arch_list_add_mem (tmpu64, 8))
5310                       return -1;
5311                   }
5312                 else
5313                   {
5314                     if (record_arch_list_add_mem (tmpu64, 4))
5315                       return -1;
5316                   }
5317               }
5318           }
5319           break;
5320         case 1:
5321           if (ir.mod == 3)
5322             {
5323               switch (ir.rm)
5324                 {
5325                 case 0:  /* monitor */
5326                   break;
5327                 case 1:  /* mwait */
5328                   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5329                   break;
5330                 default:
5331                   ir.addr -= 3;
5332                   opcode = opcode << 8 | ir.modrm;
5333                   goto no_support;
5334                   break;
5335                 }
5336             }
5337           else
5338             {
5339               /* sidt */
5340               if (ir.override >= 0)
5341                 {
5342                   warning (_("Process record ignores the memory "
5343                              "change of instruction at "
5344                              "address %s because it can't get "
5345                              "the value of the segment "
5346                              "register."),
5347                            paddress (gdbarch, ir.orig_addr));
5348                 }
5349               else
5350                 {
5351                   uint64_t tmpu64;
5352
5353                   if (i386_record_lea_modrm_addr (&ir, &tmpu64))
5354                     return -1;
5355                   if (record_arch_list_add_mem (tmpu64, 2))
5356                     return -1;
5357                   addr += 2;
5358                   if (ir.regmap[X86_RECORD_R8_REGNUM])
5359                     {
5360                       if (record_arch_list_add_mem (tmpu64, 8))
5361                         return -1;
5362                     }
5363                   else
5364                     {
5365                       if (record_arch_list_add_mem (tmpu64, 4))
5366                         return -1;
5367                     }
5368                 }
5369             }
5370           break;
5371         case 2:  /* lgdt */
5372           if (ir.mod == 3)
5373             {
5374               /* xgetbv */
5375               if (ir.rm == 0)
5376                 {
5377                   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5378                   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
5379                   break;
5380                 }
5381               /* xsetbv */
5382               else if (ir.rm == 1)
5383                 break;
5384             }
5385         case 3:  /* lidt */
5386           if (ir.mod == 3)
5387             {
5388               ir.addr -= 3;
5389               opcode = opcode << 8 | ir.modrm;
5390               goto no_support;
5391             }
5392           break;
5393         case 4:  /* smsw */
5394           if (ir.mod == 3)
5395             {
5396               if (record_arch_list_add_reg (ir.regcache, ir.rm | ir.rex_b))
5397                 return -1;
5398             }
5399           else
5400             {
5401               ir.ot = OT_WORD;
5402               if (i386_record_lea_modrm (&ir))
5403                 return -1;
5404             }
5405           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5406           break;
5407         case 6:  /* lmsw */
5408           I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5409           break;
5410         case 7:  /* invlpg */
5411           if (ir.mod == 3)
5412             {
5413               if (ir.rm == 0 && ir.regmap[X86_RECORD_R8_REGNUM])
5414                 I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
5415               else
5416                 {
5417                   ir.addr -= 3;
5418                   opcode = opcode << 8 | ir.modrm;
5419                   goto no_support;
5420                 }
5421             }
5422           else
5423             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5424           break;
5425         default:
5426           ir.addr -= 3;
5427           opcode = opcode << 8 | ir.modrm;
5428           goto no_support;
5429           break;
5430         }
5431       break;
5432
5433     case 0x0f08:    /* invd */
5434     case 0x0f09:    /* wbinvd */
5435       break;
5436
5437     case 0x63:    /* arpl */
5438       if (i386_record_modrm (&ir))
5439         return -1;
5440       if (ir.mod == 3 || ir.regmap[X86_RECORD_R8_REGNUM])
5441         {
5442           I386_RECORD_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM]
5443                                            ? (ir.reg | rex_r) : ir.rm);
5444         }
5445       else
5446         {
5447           ir.ot = ir.dflag ? OT_LONG : OT_WORD;
5448           if (i386_record_lea_modrm (&ir))
5449             return -1;
5450         }
5451       if (!ir.regmap[X86_RECORD_R8_REGNUM])
5452         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5453       break;
5454
5455     case 0x0f02:    /* lar */
5456     case 0x0f03:    /* lsl */
5457       if (i386_record_modrm (&ir))
5458         return -1;
5459       I386_RECORD_ARCH_LIST_ADD_REG (ir.reg | rex_r);
5460       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5461       break;
5462
5463     case 0x0f18:
5464       if (i386_record_modrm (&ir))
5465         return -1;
5466       if (ir.mod == 3 && ir.reg == 3)
5467         {
5468           ir.addr -= 3;
5469           opcode = opcode << 8 | ir.modrm;
5470           goto no_support;
5471         }
5472       break;
5473
5474     case 0x0f19:
5475     case 0x0f1a:
5476     case 0x0f1b:
5477     case 0x0f1c:
5478     case 0x0f1d:
5479     case 0x0f1e:
5480     case 0x0f1f:
5481       /* nop (multi byte) */
5482       break;
5483
5484     case 0x0f20:    /* mov reg, crN */
5485     case 0x0f22:    /* mov crN, reg */
5486       if (i386_record_modrm (&ir))
5487         return -1;
5488       if ((ir.modrm & 0xc0) != 0xc0)
5489         {
5490           ir.addr -= 3;
5491           opcode = opcode << 8 | ir.modrm;
5492           goto no_support;
5493         }
5494       switch (ir.reg)
5495         {
5496         case 0:
5497         case 2:
5498         case 3:
5499         case 4:
5500         case 8:
5501           if (opcode & 2)
5502             I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5503           else
5504             I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5505           break;
5506         default:
5507           ir.addr -= 3;
5508           opcode = opcode << 8 | ir.modrm;
5509           goto no_support;
5510           break;
5511         }
5512       break;
5513
5514     case 0x0f21:    /* mov reg, drN */
5515     case 0x0f23:    /* mov drN, reg */
5516       if (i386_record_modrm (&ir))
5517         return -1;
5518       if ((ir.modrm & 0xc0) != 0xc0 || ir.reg == 4
5519           || ir.reg == 5 || ir.reg >= 8)
5520         {
5521           ir.addr -= 3;
5522           opcode = opcode << 8 | ir.modrm;
5523           goto no_support;
5524         }
5525       if (opcode & 2)
5526         I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5527       else
5528         I386_RECORD_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
5529       break;
5530
5531     case 0x0f06:    /* clts */
5532       I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5533       break;
5534
5535       /* MMX/SSE/SSE2/PNI support */
5536       /* XXX */
5537
5538     default:
5539       if (opcode > 0xff)
5540         ir.addr -= 2;
5541       else
5542         ir.addr -= 1;
5543       goto no_support;
5544       break;
5545     }
5546
5547   /* In the future, maybe still need to deal with need_dasm.  */
5548   I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REIP_REGNUM);
5549   if (record_arch_list_add_end ())
5550     return -1;
5551
5552   return 0;
5553
5554  no_support:
5555   printf_unfiltered (_("Process record doesn't support instruction 0x%02x "
5556                        "at address %s.\n"),
5557                      (unsigned int) (opcode), paddress (gdbarch, ir.addr));
5558   return -1;
5559 }
5560
5561 static const int i386_record_regmap[] =
5562 {
5563   I386_EAX_REGNUM, I386_ECX_REGNUM, I386_EDX_REGNUM, I386_EBX_REGNUM,
5564   I386_ESP_REGNUM, I386_EBP_REGNUM, I386_ESI_REGNUM, I386_EDI_REGNUM,
5565   0, 0, 0, 0, 0, 0, 0, 0,
5566   I386_EIP_REGNUM, I386_EFLAGS_REGNUM, I386_CS_REGNUM, I386_SS_REGNUM,
5567   I386_DS_REGNUM, I386_ES_REGNUM, I386_FS_REGNUM, I386_GS_REGNUM
5568 };
5569
5570 \f
5571 static struct gdbarch *
5572 i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
5573 {
5574   struct gdbarch_tdep *tdep;
5575   struct gdbarch *gdbarch;
5576
5577   /* If there is already a candidate, use it.  */
5578   arches = gdbarch_list_lookup_by_info (arches, &info);
5579   if (arches != NULL)
5580     return arches->gdbarch;
5581
5582   /* Allocate space for the new architecture.  */
5583   tdep = XCALLOC (1, struct gdbarch_tdep);
5584   gdbarch = gdbarch_alloc (&info, tdep);
5585
5586   /* General-purpose registers.  */
5587   tdep->gregset = NULL;
5588   tdep->gregset_reg_offset = NULL;
5589   tdep->gregset_num_regs = I386_NUM_GREGS;
5590   tdep->sizeof_gregset = 0;
5591
5592   /* Floating-point registers.  */
5593   tdep->fpregset = NULL;
5594   tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
5595
5596   /* The default settings include the FPU registers, the MMX registers
5597      and the SSE registers.  This can be overridden for a specific ABI
5598      by adjusting the members `st0_regnum', `mm0_regnum' and
5599      `num_xmm_regs' of `struct gdbarch_tdep', otherwise the registers
5600      will show up in the output of "info all-registers".  Ideally we
5601      should try to autodetect whether they are available, such that we
5602      can prevent "info all-registers" from displaying registers that
5603      aren't available.
5604
5605      NOTE: kevinb/2003-07-13: ... if it's a choice between printing
5606      [the SSE registers] always (even when they don't exist) or never
5607      showing them to the user (even when they do exist), I prefer the
5608      former over the latter.  */
5609
5610   tdep->st0_regnum = I386_ST0_REGNUM;
5611
5612   /* The MMX registers are implemented as pseudo-registers.  Put off
5613      calculating the register number for %mm0 until we know the number
5614      of raw registers.  */
5615   tdep->mm0_regnum = 0;
5616
5617   /* I386_NUM_XREGS includes %mxcsr, so substract one.  */
5618   tdep->num_xmm_regs = I386_NUM_XREGS - 1;
5619
5620   tdep->jb_pc_offset = -1;
5621   tdep->struct_return = pcc_struct_return;
5622   tdep->sigtramp_start = 0;
5623   tdep->sigtramp_end = 0;
5624   tdep->sigtramp_p = i386_sigtramp_p;
5625   tdep->sigcontext_addr = NULL;
5626   tdep->sc_reg_offset = NULL;
5627   tdep->sc_pc_offset = -1;
5628   tdep->sc_sp_offset = -1;
5629
5630   tdep->record_regmap = i386_record_regmap;
5631
5632   /* The format used for `long double' on almost all i386 targets is
5633      the i387 extended floating-point format.  In fact, of all targets
5634      in the GCC 2.95 tree, only OSF/1 does it different, and insists
5635      on having a `long double' that's not `long' at all.  */
5636   set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
5637
5638   /* Although the i387 extended floating-point has only 80 significant
5639      bits, a `long double' actually takes up 96, probably to enforce
5640      alignment.  */
5641   set_gdbarch_long_double_bit (gdbarch, 96);
5642
5643   /* The default ABI includes general-purpose registers, 
5644      floating-point registers, and the SSE registers.  */
5645   set_gdbarch_num_regs (gdbarch, I386_SSE_NUM_REGS);
5646   set_gdbarch_register_name (gdbarch, i386_register_name);
5647   set_gdbarch_register_type (gdbarch, i386_register_type);
5648
5649   /* Register numbers of various important registers.  */
5650   set_gdbarch_sp_regnum (gdbarch, I386_ESP_REGNUM); /* %esp */
5651   set_gdbarch_pc_regnum (gdbarch, I386_EIP_REGNUM); /* %eip */
5652   set_gdbarch_ps_regnum (gdbarch, I386_EFLAGS_REGNUM); /* %eflags */
5653   set_gdbarch_fp0_regnum (gdbarch, I386_ST0_REGNUM); /* %st(0) */
5654
5655   /* NOTE: kettenis/20040418: GCC does have two possible register
5656      numbering schemes on the i386: dbx and SVR4.  These schemes
5657      differ in how they number %ebp, %esp, %eflags, and the
5658      floating-point registers, and are implemented by the arrays
5659      dbx_register_map[] and svr4_dbx_register_map in
5660      gcc/config/i386.c.  GCC also defines a third numbering scheme in
5661      gcc/config/i386.c, which it designates as the "default" register
5662      map used in 64bit mode.  This last register numbering scheme is
5663      implemented in dbx64_register_map, and is used for AMD64; see
5664      amd64-tdep.c.
5665
5666      Currently, each GCC i386 target always uses the same register
5667      numbering scheme across all its supported debugging formats
5668      i.e. SDB (COFF), stabs and DWARF 2.  This is because
5669      gcc/sdbout.c, gcc/dbxout.c and gcc/dwarf2out.c all use the
5670      DBX_REGISTER_NUMBER macro which is defined by each target's
5671      respective config header in a manner independent of the requested
5672      output debugging format.
5673
5674      This does not match the arrangement below, which presumes that
5675      the SDB and stabs numbering schemes differ from the DWARF and
5676      DWARF 2 ones.  The reason for this arrangement is that it is
5677      likely to get the numbering scheme for the target's
5678      default/native debug format right.  For targets where GCC is the
5679      native compiler (FreeBSD, NetBSD, OpenBSD, GNU/Linux) or for
5680      targets where the native toolchain uses a different numbering
5681      scheme for a particular debug format (stabs-in-ELF on Solaris)
5682      the defaults below will have to be overridden, like
5683      i386_elf_init_abi() does.  */
5684
5685   /* Use the dbx register numbering scheme for stabs and COFF.  */
5686   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
5687   set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
5688
5689   /* Use the SVR4 register numbering scheme for DWARF 2.  */
5690   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
5691
5692   /* We don't set gdbarch_stab_reg_to_regnum, since ECOFF doesn't seem to
5693      be in use on any of the supported i386 targets.  */
5694
5695   set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
5696
5697   set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
5698
5699   /* Call dummy code.  */
5700   set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
5701
5702   set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
5703   set_gdbarch_register_to_value (gdbarch,  i386_register_to_value);
5704   set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
5705
5706   set_gdbarch_return_value (gdbarch, i386_return_value);
5707
5708   set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
5709
5710   /* Stack grows downward.  */
5711   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
5712
5713   set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
5714   set_gdbarch_decr_pc_after_break (gdbarch, 1);
5715   set_gdbarch_max_insn_length (gdbarch, I386_MAX_INSN_LEN);
5716
5717   set_gdbarch_frame_args_skip (gdbarch, 8);
5718
5719   /* Wire in the MMX registers.  */
5720   set_gdbarch_num_pseudo_regs (gdbarch, i386_num_mmx_regs);
5721   set_gdbarch_pseudo_register_read (gdbarch, i386_pseudo_register_read);
5722   set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
5723
5724   set_gdbarch_print_insn (gdbarch, i386_print_insn);
5725
5726   set_gdbarch_dummy_id (gdbarch, i386_dummy_id);
5727
5728   set_gdbarch_unwind_pc (gdbarch, i386_unwind_pc);
5729
5730   /* Add the i386 register groups.  */
5731   i386_add_reggroups (gdbarch);
5732   set_gdbarch_register_reggroup_p (gdbarch, i386_register_reggroup_p);
5733
5734   /* Helper for function argument information.  */
5735   set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
5736
5737   /* Hook the function epilogue frame unwinder.  This unwinder is
5738      appended to the list first, so that it supercedes the Dwarf
5739      unwinder in function epilogues (where the Dwarf unwinder
5740      currently fails).  */
5741   frame_unwind_append_unwinder (gdbarch, &i386_epilogue_frame_unwind);
5742
5743   /* Hook in the DWARF CFI frame unwinder.  This unwinder is appended
5744      to the list before the prologue-based unwinders, so that Dwarf
5745      CFI info will be used if it is available.  */
5746   dwarf2_append_unwinders (gdbarch);
5747
5748   frame_base_set_default (gdbarch, &i386_frame_base);
5749
5750   /* Hook in ABI-specific overrides, if they have been registered.  */
5751   gdbarch_init_osabi (info, gdbarch);
5752
5753   /* Hook in the legacy prologue-based unwinders last (fallback).  */
5754   frame_unwind_append_unwinder (gdbarch, &i386_sigtramp_frame_unwind);
5755   frame_unwind_append_unwinder (gdbarch, &i386_frame_unwind);
5756
5757   /* If we have a register mapping, enable the generic core file
5758      support, unless it has already been enabled.  */
5759   if (tdep->gregset_reg_offset
5760       && !gdbarch_regset_from_core_section_p (gdbarch))
5761     set_gdbarch_regset_from_core_section (gdbarch,
5762                                           i386_regset_from_core_section);
5763
5764   /* Unless support for MMX has been disabled, make %mm0 the first
5765      pseudo-register.  */
5766   if (tdep->mm0_regnum == 0)
5767     tdep->mm0_regnum = gdbarch_num_regs (gdbarch);
5768
5769   set_gdbarch_skip_permanent_breakpoint (gdbarch,
5770                                          i386_skip_permanent_breakpoint);
5771
5772   return gdbarch;
5773 }
5774
5775 static enum gdb_osabi
5776 i386_coff_osabi_sniffer (bfd *abfd)
5777 {
5778   if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
5779       || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
5780     return GDB_OSABI_GO32;
5781
5782   return GDB_OSABI_UNKNOWN;
5783 }
5784 \f
5785
5786 /* Provide a prototype to silence -Wmissing-prototypes.  */
5787 void _initialize_i386_tdep (void);
5788
5789 void
5790 _initialize_i386_tdep (void)
5791 {
5792   register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
5793
5794   /* Add the variable that controls the disassembly flavor.  */
5795   add_setshow_enum_cmd ("disassembly-flavor", no_class, valid_flavors,
5796                         &disassembly_flavor, _("\
5797 Set the disassembly flavor."), _("\
5798 Show the disassembly flavor."), _("\
5799 The valid values are \"att\" and \"intel\", and the default value is \"att\"."),
5800                         NULL,
5801                         NULL, /* FIXME: i18n: */
5802                         &setlist, &showlist);
5803
5804   /* Add the variable that controls the convention for returning
5805      structs.  */
5806   add_setshow_enum_cmd ("struct-convention", no_class, valid_conventions,
5807                         &struct_convention, _("\
5808 Set the convention for returning small structs."), _("\
5809 Show the convention for returning small structs."), _("\
5810 Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n\
5811 is \"default\"."),
5812                         NULL,
5813                         NULL, /* FIXME: i18n: */
5814                         &setlist, &showlist);
5815
5816   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
5817                                   i386_coff_osabi_sniffer);
5818
5819   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
5820                           i386_svr4_init_abi);
5821   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
5822                           i386_go32_init_abi);
5823
5824   /* Initialize the i386-specific register groups.  */
5825   i386_init_reggroups ();
5826 }