1 /* Intel 386 target-dependent stuff.
3 Copyright (C) 1988-2013 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 #include "opcode/i386.h"
22 #include "arch-utils.h"
24 #include "dummy-frame.h"
25 #include "dwarf2-frame.h"
28 #include "frame-base.h"
29 #include "frame-unwind.h"
37 #include "reggroups.h"
46 #include "exceptions.h"
47 #include "gdb_assert.h"
48 #include "gdb_string.h"
50 #include "i386-tdep.h"
51 #include "i387-tdep.h"
52 #include "i386-xstate.h"
55 #include "record-full.h"
58 #include "features/i386/i386.c"
59 #include "features/i386/i386-avx.c"
60 #include "features/i386/i386-mmx.c"
65 #include "stap-probe.h"
66 #include "user-regs.h"
67 #include "cli/cli-utils.h"
68 #include "expression.h"
69 #include "parser-defs.h"
74 static const char *i386_register_names[] =
76 "eax", "ecx", "edx", "ebx",
77 "esp", "ebp", "esi", "edi",
78 "eip", "eflags", "cs", "ss",
79 "ds", "es", "fs", "gs",
80 "st0", "st1", "st2", "st3",
81 "st4", "st5", "st6", "st7",
82 "fctrl", "fstat", "ftag", "fiseg",
83 "fioff", "foseg", "fooff", "fop",
84 "xmm0", "xmm1", "xmm2", "xmm3",
85 "xmm4", "xmm5", "xmm6", "xmm7",
89 static const char *i386_ymm_names[] =
91 "ymm0", "ymm1", "ymm2", "ymm3",
92 "ymm4", "ymm5", "ymm6", "ymm7",
95 static const char *i386_ymmh_names[] =
97 "ymm0h", "ymm1h", "ymm2h", "ymm3h",
98 "ymm4h", "ymm5h", "ymm6h", "ymm7h",
101 /* Register names for MMX pseudo-registers. */
103 static const char *i386_mmx_names[] =
105 "mm0", "mm1", "mm2", "mm3",
106 "mm4", "mm5", "mm6", "mm7"
109 /* Register names for byte pseudo-registers. */
111 static const char *i386_byte_names[] =
113 "al", "cl", "dl", "bl",
114 "ah", "ch", "dh", "bh"
117 /* Register names for word pseudo-registers. */
119 static const char *i386_word_names[] =
121 "ax", "cx", "dx", "bx",
128 i386_mmx_regnum_p (struct gdbarch *gdbarch, int regnum)
130 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
131 int mm0_regnum = tdep->mm0_regnum;
136 regnum -= mm0_regnum;
137 return regnum >= 0 && regnum < tdep->num_mmx_regs;
143 i386_byte_regnum_p (struct gdbarch *gdbarch, int regnum)
145 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
147 regnum -= tdep->al_regnum;
148 return regnum >= 0 && regnum < tdep->num_byte_regs;
154 i386_word_regnum_p (struct gdbarch *gdbarch, int regnum)
156 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
158 regnum -= tdep->ax_regnum;
159 return regnum >= 0 && regnum < tdep->num_word_regs;
162 /* Dword register? */
165 i386_dword_regnum_p (struct gdbarch *gdbarch, int regnum)
167 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
168 int eax_regnum = tdep->eax_regnum;
173 regnum -= eax_regnum;
174 return regnum >= 0 && regnum < tdep->num_dword_regs;
178 i386_ymmh_regnum_p (struct gdbarch *gdbarch, int regnum)
180 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
181 int ymm0h_regnum = tdep->ymm0h_regnum;
183 if (ymm0h_regnum < 0)
186 regnum -= ymm0h_regnum;
187 return regnum >= 0 && regnum < tdep->num_ymm_regs;
193 i386_ymm_regnum_p (struct gdbarch *gdbarch, int regnum)
195 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
196 int ymm0_regnum = tdep->ymm0_regnum;
201 regnum -= ymm0_regnum;
202 return regnum >= 0 && regnum < tdep->num_ymm_regs;
208 i386_xmm_regnum_p (struct gdbarch *gdbarch, int regnum)
210 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
211 int num_xmm_regs = I387_NUM_XMM_REGS (tdep);
213 if (num_xmm_regs == 0)
216 regnum -= I387_XMM0_REGNUM (tdep);
217 return regnum >= 0 && regnum < num_xmm_regs;
221 i386_mxcsr_regnum_p (struct gdbarch *gdbarch, int regnum)
223 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
225 if (I387_NUM_XMM_REGS (tdep) == 0)
228 return (regnum == I387_MXCSR_REGNUM (tdep));
234 i386_fp_regnum_p (struct gdbarch *gdbarch, int regnum)
236 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
238 if (I387_ST0_REGNUM (tdep) < 0)
241 return (I387_ST0_REGNUM (tdep) <= regnum
242 && regnum < I387_FCTRL_REGNUM (tdep));
246 i386_fpc_regnum_p (struct gdbarch *gdbarch, int regnum)
248 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
250 if (I387_ST0_REGNUM (tdep) < 0)
253 return (I387_FCTRL_REGNUM (tdep) <= regnum
254 && regnum < I387_XMM0_REGNUM (tdep));
257 /* Return the name of register REGNUM, or the empty string if it is
258 an anonymous register. */
261 i386_register_name (struct gdbarch *gdbarch, int regnum)
263 /* Hide the upper YMM registers. */
264 if (i386_ymmh_regnum_p (gdbarch, regnum))
267 return tdesc_register_name (gdbarch, regnum);
270 /* Return the name of register REGNUM. */
273 i386_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
275 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
276 if (i386_mmx_regnum_p (gdbarch, regnum))
277 return i386_mmx_names[regnum - I387_MM0_REGNUM (tdep)];
278 else if (i386_ymm_regnum_p (gdbarch, regnum))
279 return i386_ymm_names[regnum - tdep->ymm0_regnum];
280 else if (i386_byte_regnum_p (gdbarch, regnum))
281 return i386_byte_names[regnum - tdep->al_regnum];
282 else if (i386_word_regnum_p (gdbarch, regnum))
283 return i386_word_names[regnum - tdep->ax_regnum];
285 internal_error (__FILE__, __LINE__, _("invalid regnum"));
288 /* Convert a dbx register number REG to the appropriate register
289 number used by GDB. */
292 i386_dbx_reg_to_regnum (struct gdbarch *gdbarch, int reg)
294 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
296 /* This implements what GCC calls the "default" register map
297 (dbx_register_map[]). */
299 if (reg >= 0 && reg <= 7)
301 /* General-purpose registers. The debug info calls %ebp
302 register 4, and %esp register 5. */
309 else if (reg >= 12 && reg <= 19)
311 /* Floating-point registers. */
312 return reg - 12 + I387_ST0_REGNUM (tdep);
314 else if (reg >= 21 && reg <= 28)
317 int ymm0_regnum = tdep->ymm0_regnum;
320 && i386_xmm_regnum_p (gdbarch, reg))
321 return reg - 21 + ymm0_regnum;
323 return reg - 21 + I387_XMM0_REGNUM (tdep);
325 else if (reg >= 29 && reg <= 36)
328 return reg - 29 + I387_MM0_REGNUM (tdep);
331 /* This will hopefully provoke a warning. */
332 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
335 /* Convert SVR4 register number REG to the appropriate register number
339 i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg)
341 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
343 /* This implements the GCC register map that tries to be compatible
344 with the SVR4 C compiler for DWARF (svr4_dbx_register_map[]). */
346 /* The SVR4 register numbering includes %eip and %eflags, and
347 numbers the floating point registers differently. */
348 if (reg >= 0 && reg <= 9)
350 /* General-purpose registers. */
353 else if (reg >= 11 && reg <= 18)
355 /* Floating-point registers. */
356 return reg - 11 + I387_ST0_REGNUM (tdep);
358 else if (reg >= 21 && reg <= 36)
360 /* The SSE and MMX registers have the same numbers as with dbx. */
361 return i386_dbx_reg_to_regnum (gdbarch, reg);
366 case 37: return I387_FCTRL_REGNUM (tdep);
367 case 38: return I387_FSTAT_REGNUM (tdep);
368 case 39: return I387_MXCSR_REGNUM (tdep);
369 case 40: return I386_ES_REGNUM;
370 case 41: return I386_CS_REGNUM;
371 case 42: return I386_SS_REGNUM;
372 case 43: return I386_DS_REGNUM;
373 case 44: return I386_FS_REGNUM;
374 case 45: return I386_GS_REGNUM;
377 /* This will hopefully provoke a warning. */
378 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
383 /* This is the variable that is set with "set disassembly-flavor", and
384 its legitimate values. */
385 static const char att_flavor[] = "att";
386 static const char intel_flavor[] = "intel";
387 static const char *const valid_flavors[] =
393 static const char *disassembly_flavor = att_flavor;
396 /* Use the program counter to determine the contents and size of a
397 breakpoint instruction. Return a pointer to a string of bytes that
398 encode a breakpoint instruction, store the length of the string in
399 *LEN and optionally adjust *PC to point to the correct memory
400 location for inserting the breakpoint.
402 On the i386 we have a single breakpoint that fits in a single byte
403 and can be inserted anywhere.
405 This function is 64-bit safe. */
407 static const gdb_byte *
408 i386_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
410 static gdb_byte break_insn[] = { 0xcc }; /* int 3 */
412 *len = sizeof (break_insn);
416 /* Displaced instruction handling. */
418 /* Skip the legacy instruction prefixes in INSN.
419 Not all prefixes are valid for any particular insn
420 but we needn't care, the insn will fault if it's invalid.
421 The result is a pointer to the first opcode byte,
422 or NULL if we run off the end of the buffer. */
425 i386_skip_prefixes (gdb_byte *insn, size_t max_len)
427 gdb_byte *end = insn + max_len;
433 case DATA_PREFIX_OPCODE:
434 case ADDR_PREFIX_OPCODE:
435 case CS_PREFIX_OPCODE:
436 case DS_PREFIX_OPCODE:
437 case ES_PREFIX_OPCODE:
438 case FS_PREFIX_OPCODE:
439 case GS_PREFIX_OPCODE:
440 case SS_PREFIX_OPCODE:
441 case LOCK_PREFIX_OPCODE:
442 case REPE_PREFIX_OPCODE:
443 case REPNE_PREFIX_OPCODE:
455 i386_absolute_jmp_p (const gdb_byte *insn)
457 /* jmp far (absolute address in operand). */
463 /* jump near, absolute indirect (/4). */
464 if ((insn[1] & 0x38) == 0x20)
467 /* jump far, absolute indirect (/5). */
468 if ((insn[1] & 0x38) == 0x28)
476 i386_absolute_call_p (const gdb_byte *insn)
478 /* call far, absolute. */
484 /* Call near, absolute indirect (/2). */
485 if ((insn[1] & 0x38) == 0x10)
488 /* Call far, absolute indirect (/3). */
489 if ((insn[1] & 0x38) == 0x18)
497 i386_ret_p (const gdb_byte *insn)
501 case 0xc2: /* ret near, pop N bytes. */
502 case 0xc3: /* ret near */
503 case 0xca: /* ret far, pop N bytes. */
504 case 0xcb: /* ret far */
505 case 0xcf: /* iret */
514 i386_call_p (const gdb_byte *insn)
516 if (i386_absolute_call_p (insn))
519 /* call near, relative. */
526 /* Return non-zero if INSN is a system call, and set *LENGTHP to its
527 length in bytes. Otherwise, return zero. */
530 i386_syscall_p (const gdb_byte *insn, int *lengthp)
532 /* Is it 'int $0x80'? */
533 if ((insn[0] == 0xcd && insn[1] == 0x80)
534 /* Or is it 'sysenter'? */
535 || (insn[0] == 0x0f && insn[1] == 0x34)
536 /* Or is it 'syscall'? */
537 || (insn[0] == 0x0f && insn[1] == 0x05))
546 /* Some kernels may run one past a syscall insn, so we have to cope.
547 Otherwise this is just simple_displaced_step_copy_insn. */
549 struct displaced_step_closure *
550 i386_displaced_step_copy_insn (struct gdbarch *gdbarch,
551 CORE_ADDR from, CORE_ADDR to,
552 struct regcache *regs)
554 size_t len = gdbarch_max_insn_length (gdbarch);
555 gdb_byte *buf = xmalloc (len);
557 read_memory (from, buf, len);
559 /* GDB may get control back after the insn after the syscall.
560 Presumably this is a kernel bug.
561 If this is a syscall, make sure there's a nop afterwards. */
566 insn = i386_skip_prefixes (buf, len);
567 if (insn != NULL && i386_syscall_p (insn, &syscall_length))
568 insn[syscall_length] = NOP_OPCODE;
571 write_memory (to, buf, len);
575 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
576 paddress (gdbarch, from), paddress (gdbarch, to));
577 displaced_step_dump_bytes (gdb_stdlog, buf, len);
580 return (struct displaced_step_closure *) buf;
583 /* Fix up the state of registers and memory after having single-stepped
584 a displaced instruction. */
587 i386_displaced_step_fixup (struct gdbarch *gdbarch,
588 struct displaced_step_closure *closure,
589 CORE_ADDR from, CORE_ADDR to,
590 struct regcache *regs)
592 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
594 /* The offset we applied to the instruction's address.
595 This could well be negative (when viewed as a signed 32-bit
596 value), but ULONGEST won't reflect that, so take care when
598 ULONGEST insn_offset = to - from;
600 /* Since we use simple_displaced_step_copy_insn, our closure is a
601 copy of the instruction. */
602 gdb_byte *insn = (gdb_byte *) closure;
603 /* The start of the insn, needed in case we see some prefixes. */
604 gdb_byte *insn_start = insn;
607 fprintf_unfiltered (gdb_stdlog,
608 "displaced: fixup (%s, %s), "
609 "insn = 0x%02x 0x%02x ...\n",
610 paddress (gdbarch, from), paddress (gdbarch, to),
613 /* The list of issues to contend with here is taken from
614 resume_execution in arch/i386/kernel/kprobes.c, Linux 2.6.20.
615 Yay for Free Software! */
617 /* Relocate the %eip, if necessary. */
619 /* The instruction recognizers we use assume any leading prefixes
620 have been skipped. */
622 /* This is the size of the buffer in closure. */
623 size_t max_insn_len = gdbarch_max_insn_length (gdbarch);
624 gdb_byte *opcode = i386_skip_prefixes (insn, max_insn_len);
625 /* If there are too many prefixes, just ignore the insn.
626 It will fault when run. */
631 /* Except in the case of absolute or indirect jump or call
632 instructions, or a return instruction, the new eip is relative to
633 the displaced instruction; make it relative. Well, signal
634 handler returns don't need relocation either, but we use the
635 value of %eip to recognize those; see below. */
636 if (! i386_absolute_jmp_p (insn)
637 && ! i386_absolute_call_p (insn)
638 && ! i386_ret_p (insn))
643 regcache_cooked_read_unsigned (regs, I386_EIP_REGNUM, &orig_eip);
645 /* A signal trampoline system call changes the %eip, resuming
646 execution of the main program after the signal handler has
647 returned. That makes them like 'return' instructions; we
648 shouldn't relocate %eip.
650 But most system calls don't, and we do need to relocate %eip.
652 Our heuristic for distinguishing these cases: if stepping
653 over the system call instruction left control directly after
654 the instruction, the we relocate --- control almost certainly
655 doesn't belong in the displaced copy. Otherwise, we assume
656 the instruction has put control where it belongs, and leave
657 it unrelocated. Goodness help us if there are PC-relative
659 if (i386_syscall_p (insn, &insn_len)
660 && orig_eip != to + (insn - insn_start) + insn_len
661 /* GDB can get control back after the insn after the syscall.
662 Presumably this is a kernel bug.
663 i386_displaced_step_copy_insn ensures its a nop,
664 we add one to the length for it. */
665 && orig_eip != to + (insn - insn_start) + insn_len + 1)
668 fprintf_unfiltered (gdb_stdlog,
669 "displaced: syscall changed %%eip; "
674 ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL;
676 /* If we just stepped over a breakpoint insn, we don't backup
677 the pc on purpose; this is to match behaviour without
680 regcache_cooked_write_unsigned (regs, I386_EIP_REGNUM, eip);
683 fprintf_unfiltered (gdb_stdlog,
685 "relocated %%eip from %s to %s\n",
686 paddress (gdbarch, orig_eip),
687 paddress (gdbarch, eip));
691 /* If the instruction was PUSHFL, then the TF bit will be set in the
692 pushed value, and should be cleared. We'll leave this for later,
693 since GDB already messes up the TF flag when stepping over a
696 /* If the instruction was a call, the return address now atop the
697 stack is the address following the copied instruction. We need
698 to make it the address following the original instruction. */
699 if (i386_call_p (insn))
703 const ULONGEST retaddr_len = 4;
705 regcache_cooked_read_unsigned (regs, I386_ESP_REGNUM, &esp);
706 retaddr = read_memory_unsigned_integer (esp, retaddr_len, byte_order);
707 retaddr = (retaddr - insn_offset) & 0xffffffffUL;
708 write_memory_unsigned_integer (esp, retaddr_len, byte_order, retaddr);
711 fprintf_unfiltered (gdb_stdlog,
712 "displaced: relocated return addr at %s to %s\n",
713 paddress (gdbarch, esp),
714 paddress (gdbarch, retaddr));
719 append_insns (CORE_ADDR *to, ULONGEST len, const gdb_byte *buf)
721 target_write_memory (*to, buf, len);
726 i386_relocate_instruction (struct gdbarch *gdbarch,
727 CORE_ADDR *to, CORE_ADDR oldloc)
729 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
730 gdb_byte buf[I386_MAX_INSN_LEN];
731 int offset = 0, rel32, newrel;
733 gdb_byte *insn = buf;
735 read_memory (oldloc, buf, I386_MAX_INSN_LEN);
737 insn_length = gdb_buffered_insn_length (gdbarch, insn,
738 I386_MAX_INSN_LEN, oldloc);
740 /* Get past the prefixes. */
741 insn = i386_skip_prefixes (insn, I386_MAX_INSN_LEN);
743 /* Adjust calls with 32-bit relative addresses as push/jump, with
744 the address pushed being the location where the original call in
745 the user program would return to. */
748 gdb_byte push_buf[16];
749 unsigned int ret_addr;
751 /* Where "ret" in the original code will return to. */
752 ret_addr = oldloc + insn_length;
753 push_buf[0] = 0x68; /* pushq $... */
754 store_unsigned_integer (&push_buf[1], 4, byte_order, ret_addr);
756 append_insns (to, 5, push_buf);
758 /* Convert the relative call to a relative jump. */
761 /* Adjust the destination offset. */
762 rel32 = extract_signed_integer (insn + 1, 4, byte_order);
763 newrel = (oldloc - *to) + rel32;
764 store_signed_integer (insn + 1, 4, byte_order, newrel);
767 fprintf_unfiltered (gdb_stdlog,
768 "Adjusted insn rel32=%s at %s to"
770 hex_string (rel32), paddress (gdbarch, oldloc),
771 hex_string (newrel), paddress (gdbarch, *to));
773 /* Write the adjusted jump into its displaced location. */
774 append_insns (to, 5, insn);
778 /* Adjust jumps with 32-bit relative addresses. Calls are already
782 /* Adjust conditional jumps. */
783 else if (insn[0] == 0x0f && (insn[1] & 0xf0) == 0x80)
788 rel32 = extract_signed_integer (insn + offset, 4, byte_order);
789 newrel = (oldloc - *to) + rel32;
790 store_signed_integer (insn + offset, 4, byte_order, newrel);
792 fprintf_unfiltered (gdb_stdlog,
793 "Adjusted insn rel32=%s at %s to"
795 hex_string (rel32), paddress (gdbarch, oldloc),
796 hex_string (newrel), paddress (gdbarch, *to));
799 /* Write the adjusted instructions into their displaced
801 append_insns (to, insn_length, buf);
805 #ifdef I386_REGNO_TO_SYMMETRY
806 #error "The Sequent Symmetry is no longer supported."
809 /* According to the System V ABI, the registers %ebp, %ebx, %edi, %esi
810 and %esp "belong" to the calling function. Therefore these
811 registers should be saved if they're going to be modified. */
813 /* The maximum number of saved registers. This should include all
814 registers mentioned above, and %eip. */
815 #define I386_NUM_SAVED_REGS I386_NUM_GREGS
817 struct i386_frame_cache
825 /* Saved registers. */
826 CORE_ADDR saved_regs[I386_NUM_SAVED_REGS];
831 /* Stack space reserved for local variables. */
835 /* Allocate and initialize a frame cache. */
837 static struct i386_frame_cache *
838 i386_alloc_frame_cache (void)
840 struct i386_frame_cache *cache;
843 cache = FRAME_OBSTACK_ZALLOC (struct i386_frame_cache);
848 cache->sp_offset = -4;
851 /* Saved registers. We initialize these to -1 since zero is a valid
852 offset (that's where %ebp is supposed to be stored). */
853 for (i = 0; i < I386_NUM_SAVED_REGS; i++)
854 cache->saved_regs[i] = -1;
856 cache->saved_sp_reg = -1;
857 cache->pc_in_eax = 0;
859 /* Frameless until proven otherwise. */
865 /* If the instruction at PC is a jump, return the address of its
866 target. Otherwise, return PC. */
869 i386_follow_jump (struct gdbarch *gdbarch, CORE_ADDR pc)
871 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
876 if (target_read_memory (pc, &op, 1))
882 op = read_memory_unsigned_integer (pc + 1, 1, byte_order);
888 /* Relative jump: if data16 == 0, disp32, else disp16. */
891 delta = read_memory_integer (pc + 2, 2, byte_order);
893 /* Include the size of the jmp instruction (including the
899 delta = read_memory_integer (pc + 1, 4, byte_order);
901 /* Include the size of the jmp instruction. */
906 /* Relative jump, disp8 (ignore data16). */
907 delta = read_memory_integer (pc + data16 + 1, 1, byte_order);
916 /* Check whether PC points at a prologue for a function returning a
917 structure or union. If so, it updates CACHE and returns the
918 address of the first instruction after the code sequence that
919 removes the "hidden" argument from the stack or CURRENT_PC,
920 whichever is smaller. Otherwise, return PC. */
923 i386_analyze_struct_return (CORE_ADDR pc, CORE_ADDR current_pc,
924 struct i386_frame_cache *cache)
926 /* Functions that return a structure or union start with:
929 xchgl %eax, (%esp) 0x87 0x04 0x24
930 or xchgl %eax, 0(%esp) 0x87 0x44 0x24 0x00
932 (the System V compiler puts out the second `xchg' instruction,
933 and the assembler doesn't try to optimize it, so the 'sib' form
934 gets generated). This sequence is used to get the address of the
935 return buffer for a function that returns a structure. */
936 static gdb_byte proto1[3] = { 0x87, 0x04, 0x24 };
937 static gdb_byte proto2[4] = { 0x87, 0x44, 0x24, 0x00 };
941 if (current_pc <= pc)
944 if (target_read_memory (pc, &op, 1))
947 if (op != 0x58) /* popl %eax */
950 if (target_read_memory (pc + 1, buf, 4))
953 if (memcmp (buf, proto1, 3) != 0 && memcmp (buf, proto2, 4) != 0)
956 if (current_pc == pc)
958 cache->sp_offset += 4;
962 if (current_pc == pc + 1)
964 cache->pc_in_eax = 1;
968 if (buf[1] == proto1[1])
975 i386_skip_probe (CORE_ADDR pc)
977 /* A function may start with
991 if (target_read_memory (pc, &op, 1))
994 if (op == 0x68 || op == 0x6a)
998 /* Skip past the `pushl' instruction; it has either a one-byte or a
999 four-byte operand, depending on the opcode. */
1005 /* Read the following 8 bytes, which should be `call _probe' (6
1006 bytes) followed by `addl $4,%esp' (2 bytes). */
1007 read_memory (pc + delta, buf, sizeof (buf));
1008 if (buf[0] == 0xe8 && buf[6] == 0xc4 && buf[7] == 0x4)
1009 pc += delta + sizeof (buf);
1015 /* GCC 4.1 and later, can put code in the prologue to realign the
1016 stack pointer. Check whether PC points to such code, and update
1017 CACHE accordingly. Return the first instruction after the code
1018 sequence or CURRENT_PC, whichever is smaller. If we don't
1019 recognize the code, return PC. */
1022 i386_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
1023 struct i386_frame_cache *cache)
1025 /* There are 2 code sequences to re-align stack before the frame
1028 1. Use a caller-saved saved register:
1034 2. Use a callee-saved saved register:
1041 "andl $-XXX, %esp" can be either 3 bytes or 6 bytes:
1043 0x83 0xe4 0xf0 andl $-16, %esp
1044 0x81 0xe4 0x00 0xff 0xff 0xff andl $-256, %esp
1049 int offset, offset_and;
1050 static int regnums[8] = {
1051 I386_EAX_REGNUM, /* %eax */
1052 I386_ECX_REGNUM, /* %ecx */
1053 I386_EDX_REGNUM, /* %edx */
1054 I386_EBX_REGNUM, /* %ebx */
1055 I386_ESP_REGNUM, /* %esp */
1056 I386_EBP_REGNUM, /* %ebp */
1057 I386_ESI_REGNUM, /* %esi */
1058 I386_EDI_REGNUM /* %edi */
1061 if (target_read_memory (pc, buf, sizeof buf))
1064 /* Check caller-saved saved register. The first instruction has
1065 to be "leal 4(%esp), %reg". */
1066 if (buf[0] == 0x8d && buf[2] == 0x24 && buf[3] == 0x4)
1068 /* MOD must be binary 10 and R/M must be binary 100. */
1069 if ((buf[1] & 0xc7) != 0x44)
1072 /* REG has register number. */
1073 reg = (buf[1] >> 3) & 7;
1078 /* Check callee-saved saved register. The first instruction
1079 has to be "pushl %reg". */
1080 if ((buf[0] & 0xf8) != 0x50)
1086 /* The next instruction has to be "leal 8(%esp), %reg". */
1087 if (buf[1] != 0x8d || buf[3] != 0x24 || buf[4] != 0x8)
1090 /* MOD must be binary 10 and R/M must be binary 100. */
1091 if ((buf[2] & 0xc7) != 0x44)
1094 /* REG has register number. Registers in pushl and leal have to
1096 if (reg != ((buf[2] >> 3) & 7))
1102 /* Rigister can't be %esp nor %ebp. */
1103 if (reg == 4 || reg == 5)
1106 /* The next instruction has to be "andl $-XXX, %esp". */
1107 if (buf[offset + 1] != 0xe4
1108 || (buf[offset] != 0x81 && buf[offset] != 0x83))
1111 offset_and = offset;
1112 offset += buf[offset] == 0x81 ? 6 : 3;
1114 /* The next instruction has to be "pushl -4(%reg)". 8bit -4 is
1115 0xfc. REG must be binary 110 and MOD must be binary 01. */
1116 if (buf[offset] != 0xff
1117 || buf[offset + 2] != 0xfc
1118 || (buf[offset + 1] & 0xf8) != 0x70)
1121 /* R/M has register. Registers in leal and pushl have to be the
1123 if (reg != (buf[offset + 1] & 7))
1126 if (current_pc > pc + offset_and)
1127 cache->saved_sp_reg = regnums[reg];
1129 return min (pc + offset + 3, current_pc);
1132 /* Maximum instruction length we need to handle. */
1133 #define I386_MAX_MATCHED_INSN_LEN 6
1135 /* Instruction description. */
1139 gdb_byte insn[I386_MAX_MATCHED_INSN_LEN];
1140 gdb_byte mask[I386_MAX_MATCHED_INSN_LEN];
1143 /* Return whether instruction at PC matches PATTERN. */
1146 i386_match_pattern (CORE_ADDR pc, struct i386_insn pattern)
1150 if (target_read_memory (pc, &op, 1))
1153 if ((op & pattern.mask[0]) == pattern.insn[0])
1155 gdb_byte buf[I386_MAX_MATCHED_INSN_LEN - 1];
1156 int insn_matched = 1;
1159 gdb_assert (pattern.len > 1);
1160 gdb_assert (pattern.len <= I386_MAX_MATCHED_INSN_LEN);
1162 if (target_read_memory (pc + 1, buf, pattern.len - 1))
1165 for (i = 1; i < pattern.len; i++)
1167 if ((buf[i - 1] & pattern.mask[i]) != pattern.insn[i])
1170 return insn_matched;
1175 /* Search for the instruction at PC in the list INSN_PATTERNS. Return
1176 the first instruction description that matches. Otherwise, return
1179 static struct i386_insn *
1180 i386_match_insn (CORE_ADDR pc, struct i386_insn *insn_patterns)
1182 struct i386_insn *pattern;
1184 for (pattern = insn_patterns; pattern->len > 0; pattern++)
1186 if (i386_match_pattern (pc, *pattern))
1193 /* Return whether PC points inside a sequence of instructions that
1194 matches INSN_PATTERNS. */
1197 i386_match_insn_block (CORE_ADDR pc, struct i386_insn *insn_patterns)
1199 CORE_ADDR current_pc;
1201 struct i386_insn *insn;
1203 insn = i386_match_insn (pc, insn_patterns);
1208 ix = insn - insn_patterns;
1209 for (i = ix - 1; i >= 0; i--)
1211 current_pc -= insn_patterns[i].len;
1213 if (!i386_match_pattern (current_pc, insn_patterns[i]))
1217 current_pc = pc + insn->len;
1218 for (insn = insn_patterns + ix + 1; insn->len > 0; insn++)
1220 if (!i386_match_pattern (current_pc, *insn))
1223 current_pc += insn->len;
1229 /* Some special instructions that might be migrated by GCC into the
1230 part of the prologue that sets up the new stack frame. Because the
1231 stack frame hasn't been setup yet, no registers have been saved
1232 yet, and only the scratch registers %eax, %ecx and %edx can be
1235 struct i386_insn i386_frame_setup_skip_insns[] =
1237 /* Check for `movb imm8, r' and `movl imm32, r'.
1239 ??? Should we handle 16-bit operand-sizes here? */
1241 /* `movb imm8, %al' and `movb imm8, %ah' */
1242 /* `movb imm8, %cl' and `movb imm8, %ch' */
1243 { 2, { 0xb0, 0x00 }, { 0xfa, 0x00 } },
1244 /* `movb imm8, %dl' and `movb imm8, %dh' */
1245 { 2, { 0xb2, 0x00 }, { 0xfb, 0x00 } },
1246 /* `movl imm32, %eax' and `movl imm32, %ecx' */
1247 { 5, { 0xb8 }, { 0xfe } },
1248 /* `movl imm32, %edx' */
1249 { 5, { 0xba }, { 0xff } },
1251 /* Check for `mov imm32, r32'. Note that there is an alternative
1252 encoding for `mov m32, %eax'.
1254 ??? Should we handle SIB adressing here?
1255 ??? Should we handle 16-bit operand-sizes here? */
1257 /* `movl m32, %eax' */
1258 { 5, { 0xa1 }, { 0xff } },
1259 /* `movl m32, %eax' and `mov; m32, %ecx' */
1260 { 6, { 0x89, 0x05 }, {0xff, 0xf7 } },
1261 /* `movl m32, %edx' */
1262 { 6, { 0x89, 0x15 }, {0xff, 0xff } },
1264 /* Check for `xorl r32, r32' and the equivalent `subl r32, r32'.
1265 Because of the symmetry, there are actually two ways to encode
1266 these instructions; opcode bytes 0x29 and 0x2b for `subl' and
1267 opcode bytes 0x31 and 0x33 for `xorl'. */
1269 /* `subl %eax, %eax' */
1270 { 2, { 0x29, 0xc0 }, { 0xfd, 0xff } },
1271 /* `subl %ecx, %ecx' */
1272 { 2, { 0x29, 0xc9 }, { 0xfd, 0xff } },
1273 /* `subl %edx, %edx' */
1274 { 2, { 0x29, 0xd2 }, { 0xfd, 0xff } },
1275 /* `xorl %eax, %eax' */
1276 { 2, { 0x31, 0xc0 }, { 0xfd, 0xff } },
1277 /* `xorl %ecx, %ecx' */
1278 { 2, { 0x31, 0xc9 }, { 0xfd, 0xff } },
1279 /* `xorl %edx, %edx' */
1280 { 2, { 0x31, 0xd2 }, { 0xfd, 0xff } },
1285 /* Check whether PC points to a no-op instruction. */
1287 i386_skip_noop (CORE_ADDR pc)
1292 if (target_read_memory (pc, &op, 1))
1298 /* Ignore `nop' instruction. */
1302 if (target_read_memory (pc, &op, 1))
1306 /* Ignore no-op instruction `mov %edi, %edi'.
1307 Microsoft system dlls often start with
1308 a `mov %edi,%edi' instruction.
1309 The 5 bytes before the function start are
1310 filled with `nop' instructions.
1311 This pattern can be used for hot-patching:
1312 The `mov %edi, %edi' instruction can be replaced by a
1313 near jump to the location of the 5 `nop' instructions
1314 which can be replaced by a 32-bit jump to anywhere
1315 in the 32-bit address space. */
1317 else if (op == 0x8b)
1319 if (target_read_memory (pc + 1, &op, 1))
1325 if (target_read_memory (pc, &op, 1))
1335 /* Check whether PC points at a code that sets up a new stack frame.
1336 If so, it updates CACHE and returns the address of the first
1337 instruction after the sequence that sets up the frame or LIMIT,
1338 whichever is smaller. If we don't recognize the code, return PC. */
1341 i386_analyze_frame_setup (struct gdbarch *gdbarch,
1342 CORE_ADDR pc, CORE_ADDR limit,
1343 struct i386_frame_cache *cache)
1345 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1346 struct i386_insn *insn;
1353 if (target_read_memory (pc, &op, 1))
1356 if (op == 0x55) /* pushl %ebp */
1358 /* Take into account that we've executed the `pushl %ebp' that
1359 starts this instruction sequence. */
1360 cache->saved_regs[I386_EBP_REGNUM] = 0;
1361 cache->sp_offset += 4;
1364 /* If that's all, return now. */
1368 /* Check for some special instructions that might be migrated by
1369 GCC into the prologue and skip them. At this point in the
1370 prologue, code should only touch the scratch registers %eax,
1371 %ecx and %edx, so while the number of posibilities is sheer,
1374 Make sure we only skip these instructions if we later see the
1375 `movl %esp, %ebp' that actually sets up the frame. */
1376 while (pc + skip < limit)
1378 insn = i386_match_insn (pc + skip, i386_frame_setup_skip_insns);
1385 /* If that's all, return now. */
1386 if (limit <= pc + skip)
1389 if (target_read_memory (pc + skip, &op, 1))
1392 /* The i386 prologue looks like
1398 and a different prologue can be generated for atom.
1402 lea -0x10(%esp),%esp
1404 We handle both of them here. */
1408 /* Check for `movl %esp, %ebp' -- can be written in two ways. */
1410 if (read_memory_unsigned_integer (pc + skip + 1, 1, byte_order)
1416 if (read_memory_unsigned_integer (pc + skip + 1, 1, byte_order)
1421 case 0x8d: /* Check for 'lea (%ebp), %ebp'. */
1422 if (read_memory_unsigned_integer (pc + skip + 1, 2, byte_order)
1431 /* OK, we actually have a frame. We just don't know how large
1432 it is yet. Set its size to zero. We'll adjust it if
1433 necessary. We also now commit to skipping the special
1434 instructions mentioned before. */
1437 /* If that's all, return now. */
1441 /* Check for stack adjustment
1447 NOTE: You can't subtract a 16-bit immediate from a 32-bit
1448 reg, so we don't have to worry about a data16 prefix. */
1449 if (target_read_memory (pc, &op, 1))
1453 /* `subl' with 8-bit immediate. */
1454 if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0xec)
1455 /* Some instruction starting with 0x83 other than `subl'. */
1458 /* `subl' with signed 8-bit immediate (though it wouldn't
1459 make sense to be negative). */
1460 cache->locals = read_memory_integer (pc + 2, 1, byte_order);
1463 else if (op == 0x81)
1465 /* Maybe it is `subl' with a 32-bit immediate. */
1466 if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0xec)
1467 /* Some instruction starting with 0x81 other than `subl'. */
1470 /* It is `subl' with a 32-bit immediate. */
1471 cache->locals = read_memory_integer (pc + 2, 4, byte_order);
1474 else if (op == 0x8d)
1476 /* The ModR/M byte is 0x64. */
1477 if (read_memory_unsigned_integer (pc + 1, 1, byte_order) != 0x64)
1479 /* 'lea' with 8-bit displacement. */
1480 cache->locals = -1 * read_memory_integer (pc + 3, 1, byte_order);
1485 /* Some instruction other than `subl' nor 'lea'. */
1489 else if (op == 0xc8) /* enter */
1491 cache->locals = read_memory_unsigned_integer (pc + 1, 2, byte_order);
1498 /* Check whether PC points at code that saves registers on the stack.
1499 If so, it updates CACHE and returns the address of the first
1500 instruction after the register saves or CURRENT_PC, whichever is
1501 smaller. Otherwise, return PC. */
1504 i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
1505 struct i386_frame_cache *cache)
1507 CORE_ADDR offset = 0;
1511 if (cache->locals > 0)
1512 offset -= cache->locals;
1513 for (i = 0; i < 8 && pc < current_pc; i++)
1515 if (target_read_memory (pc, &op, 1))
1517 if (op < 0x50 || op > 0x57)
1521 cache->saved_regs[op - 0x50] = offset;
1522 cache->sp_offset += 4;
1529 /* Do a full analysis of the prologue at PC and update CACHE
1530 accordingly. Bail out early if CURRENT_PC is reached. Return the
1531 address where the analysis stopped.
1533 We handle these cases:
1535 The startup sequence can be at the start of the function, or the
1536 function can start with a branch to startup code at the end.
1538 %ebp can be set up with either the 'enter' instruction, or "pushl
1539 %ebp, movl %esp, %ebp" (`enter' is too slow to be useful, but was
1540 once used in the System V compiler).
1542 Local space is allocated just below the saved %ebp by either the
1543 'enter' instruction, or by "subl $<size>, %esp". 'enter' has a
1544 16-bit unsigned argument for space to allocate, and the 'addl'
1545 instruction could have either a signed byte, or 32-bit immediate.
1547 Next, the registers used by this function are pushed. With the
1548 System V compiler they will always be in the order: %edi, %esi,
1549 %ebx (and sometimes a harmless bug causes it to also save but not
1550 restore %eax); however, the code below is willing to see the pushes
1551 in any order, and will handle up to 8 of them.
1553 If the setup sequence is at the end of the function, then the next
1554 instruction will be a branch back to the start. */
1557 i386_analyze_prologue (struct gdbarch *gdbarch,
1558 CORE_ADDR pc, CORE_ADDR current_pc,
1559 struct i386_frame_cache *cache)
1561 pc = i386_skip_noop (pc);
1562 pc = i386_follow_jump (gdbarch, pc);
1563 pc = i386_analyze_struct_return (pc, current_pc, cache);
1564 pc = i386_skip_probe (pc);
1565 pc = i386_analyze_stack_align (pc, current_pc, cache);
1566 pc = i386_analyze_frame_setup (gdbarch, pc, current_pc, cache);
1567 return i386_analyze_register_saves (pc, current_pc, cache);
1570 /* Return PC of first real instruction. */
1573 i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1575 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1577 static gdb_byte pic_pat[6] =
1579 0xe8, 0, 0, 0, 0, /* call 0x0 */
1580 0x5b, /* popl %ebx */
1582 struct i386_frame_cache cache;
1586 CORE_ADDR func_addr;
1588 if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
1590 CORE_ADDR post_prologue_pc
1591 = skip_prologue_using_sal (gdbarch, func_addr);
1592 struct symtab *s = find_pc_symtab (func_addr);
1594 /* Clang always emits a line note before the prologue and another
1595 one after. We trust clang to emit usable line notes. */
1596 if (post_prologue_pc
1598 && s->producer != NULL
1599 && strncmp (s->producer, "clang ", sizeof ("clang ") - 1) == 0))
1600 return max (start_pc, post_prologue_pc);
1604 pc = i386_analyze_prologue (gdbarch, start_pc, 0xffffffff, &cache);
1605 if (cache.locals < 0)
1608 /* Found valid frame setup. */
1610 /* The native cc on SVR4 in -K PIC mode inserts the following code
1611 to get the address of the global offset table (GOT) into register
1616 movl %ebx,x(%ebp) (optional)
1619 This code is with the rest of the prologue (at the end of the
1620 function), so we have to skip it to get to the first real
1621 instruction at the start of the function. */
1623 for (i = 0; i < 6; i++)
1625 if (target_read_memory (pc + i, &op, 1))
1628 if (pic_pat[i] != op)
1635 if (target_read_memory (pc + delta, &op, 1))
1638 if (op == 0x89) /* movl %ebx, x(%ebp) */
1640 op = read_memory_unsigned_integer (pc + delta + 1, 1, byte_order);
1642 if (op == 0x5d) /* One byte offset from %ebp. */
1644 else if (op == 0x9d) /* Four byte offset from %ebp. */
1646 else /* Unexpected instruction. */
1649 if (target_read_memory (pc + delta, &op, 1))
1654 if (delta > 0 && op == 0x81
1655 && read_memory_unsigned_integer (pc + delta + 1, 1, byte_order)
1662 /* If the function starts with a branch (to startup code at the end)
1663 the last instruction should bring us back to the first
1664 instruction of the real code. */
1665 if (i386_follow_jump (gdbarch, start_pc) != start_pc)
1666 pc = i386_follow_jump (gdbarch, pc);
1671 /* Check that the code pointed to by PC corresponds to a call to
1672 __main, skip it if so. Return PC otherwise. */
1675 i386_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1677 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1680 if (target_read_memory (pc, &op, 1))
1686 if (target_read_memory (pc + 1, buf, sizeof buf) == 0)
1688 /* Make sure address is computed correctly as a 32bit
1689 integer even if CORE_ADDR is 64 bit wide. */
1690 struct bound_minimal_symbol s;
1691 CORE_ADDR call_dest;
1693 call_dest = pc + 5 + extract_signed_integer (buf, 4, byte_order);
1694 call_dest = call_dest & 0xffffffffU;
1695 s = lookup_minimal_symbol_by_pc (call_dest);
1696 if (s.minsym != NULL
1697 && SYMBOL_LINKAGE_NAME (s.minsym) != NULL
1698 && strcmp (SYMBOL_LINKAGE_NAME (s.minsym), "__main") == 0)
1706 /* This function is 64-bit safe. */
1709 i386_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1713 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
1714 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
1718 /* Normal frames. */
1721 i386_frame_cache_1 (struct frame_info *this_frame,
1722 struct i386_frame_cache *cache)
1724 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1725 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1729 cache->pc = get_frame_func (this_frame);
1731 /* In principle, for normal frames, %ebp holds the frame pointer,
1732 which holds the base address for the current stack frame.
1733 However, for functions that don't need it, the frame pointer is
1734 optional. For these "frameless" functions the frame pointer is
1735 actually the frame pointer of the calling frame. Signal
1736 trampolines are just a special case of a "frameless" function.
1737 They (usually) share their frame pointer with the frame that was
1738 in progress when the signal occurred. */
1740 get_frame_register (this_frame, I386_EBP_REGNUM, buf);
1741 cache->base = extract_unsigned_integer (buf, 4, byte_order);
1742 if (cache->base == 0)
1748 /* For normal frames, %eip is stored at 4(%ebp). */
1749 cache->saved_regs[I386_EIP_REGNUM] = 4;
1752 i386_analyze_prologue (gdbarch, cache->pc, get_frame_pc (this_frame),
1755 if (cache->locals < 0)
1757 /* We didn't find a valid frame, which means that CACHE->base
1758 currently holds the frame pointer for our calling frame. If
1759 we're at the start of a function, or somewhere half-way its
1760 prologue, the function's frame probably hasn't been fully
1761 setup yet. Try to reconstruct the base address for the stack
1762 frame by looking at the stack pointer. For truly "frameless"
1763 functions this might work too. */
1765 if (cache->saved_sp_reg != -1)
1767 /* Saved stack pointer has been saved. */
1768 get_frame_register (this_frame, cache->saved_sp_reg, buf);
1769 cache->saved_sp = extract_unsigned_integer (buf, 4, byte_order);
1771 /* We're halfway aligning the stack. */
1772 cache->base = ((cache->saved_sp - 4) & 0xfffffff0) - 4;
1773 cache->saved_regs[I386_EIP_REGNUM] = cache->saved_sp - 4;
1775 /* This will be added back below. */
1776 cache->saved_regs[I386_EIP_REGNUM] -= cache->base;
1778 else if (cache->pc != 0
1779 || target_read_memory (get_frame_pc (this_frame), buf, 1))
1781 /* We're in a known function, but did not find a frame
1782 setup. Assume that the function does not use %ebp.
1783 Alternatively, we may have jumped to an invalid
1784 address; in that case there is definitely no new
1786 get_frame_register (this_frame, I386_ESP_REGNUM, buf);
1787 cache->base = extract_unsigned_integer (buf, 4, byte_order)
1791 /* We're in an unknown function. We could not find the start
1792 of the function to analyze the prologue; our best option is
1793 to assume a typical frame layout with the caller's %ebp
1795 cache->saved_regs[I386_EBP_REGNUM] = 0;
1798 if (cache->saved_sp_reg != -1)
1800 /* Saved stack pointer has been saved (but the SAVED_SP_REG
1801 register may be unavailable). */
1802 if (cache->saved_sp == 0
1803 && deprecated_frame_register_read (this_frame,
1804 cache->saved_sp_reg, buf))
1805 cache->saved_sp = extract_unsigned_integer (buf, 4, byte_order);
1807 /* Now that we have the base address for the stack frame we can
1808 calculate the value of %esp in the calling frame. */
1809 else if (cache->saved_sp == 0)
1810 cache->saved_sp = cache->base + 8;
1812 /* Adjust all the saved registers such that they contain addresses
1813 instead of offsets. */
1814 for (i = 0; i < I386_NUM_SAVED_REGS; i++)
1815 if (cache->saved_regs[i] != -1)
1816 cache->saved_regs[i] += cache->base;
1821 static struct i386_frame_cache *
1822 i386_frame_cache (struct frame_info *this_frame, void **this_cache)
1824 volatile struct gdb_exception ex;
1825 struct i386_frame_cache *cache;
1830 cache = i386_alloc_frame_cache ();
1831 *this_cache = cache;
1833 TRY_CATCH (ex, RETURN_MASK_ERROR)
1835 i386_frame_cache_1 (this_frame, cache);
1837 if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
1838 throw_exception (ex);
1844 i386_frame_this_id (struct frame_info *this_frame, void **this_cache,
1845 struct frame_id *this_id)
1847 struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1849 /* This marks the outermost frame. */
1850 if (cache->base == 0)
1853 /* See the end of i386_push_dummy_call. */
1854 (*this_id) = frame_id_build (cache->base + 8, cache->pc);
1857 static enum unwind_stop_reason
1858 i386_frame_unwind_stop_reason (struct frame_info *this_frame,
1861 struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1864 return UNWIND_UNAVAILABLE;
1866 /* This marks the outermost frame. */
1867 if (cache->base == 0)
1868 return UNWIND_OUTERMOST;
1870 return UNWIND_NO_REASON;
1873 static struct value *
1874 i386_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1877 struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
1879 gdb_assert (regnum >= 0);
1881 /* The System V ABI says that:
1883 "The flags register contains the system flags, such as the
1884 direction flag and the carry flag. The direction flag must be
1885 set to the forward (that is, zero) direction before entry and
1886 upon exit from a function. Other user flags have no specified
1887 role in the standard calling sequence and are not preserved."
1889 To guarantee the "upon exit" part of that statement we fake a
1890 saved flags register that has its direction flag cleared.
1892 Note that GCC doesn't seem to rely on the fact that the direction
1893 flag is cleared after a function return; it always explicitly
1894 clears the flag before operations where it matters.
1896 FIXME: kettenis/20030316: I'm not quite sure whether this is the
1897 right thing to do. The way we fake the flags register here makes
1898 it impossible to change it. */
1900 if (regnum == I386_EFLAGS_REGNUM)
1904 val = get_frame_register_unsigned (this_frame, regnum);
1906 return frame_unwind_got_constant (this_frame, regnum, val);
1909 if (regnum == I386_EIP_REGNUM && cache->pc_in_eax)
1910 return frame_unwind_got_register (this_frame, regnum, I386_EAX_REGNUM);
1912 if (regnum == I386_ESP_REGNUM
1913 && (cache->saved_sp != 0 || cache->saved_sp_reg != -1))
1915 /* If the SP has been saved, but we don't know where, then this
1916 means that SAVED_SP_REG register was found unavailable back
1917 when we built the cache. */
1918 if (cache->saved_sp == 0)
1919 return frame_unwind_got_register (this_frame, regnum,
1920 cache->saved_sp_reg);
1922 return frame_unwind_got_constant (this_frame, regnum,
1926 if (regnum < I386_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
1927 return frame_unwind_got_memory (this_frame, regnum,
1928 cache->saved_regs[regnum]);
1930 return frame_unwind_got_register (this_frame, regnum, regnum);
1933 static const struct frame_unwind i386_frame_unwind =
1936 i386_frame_unwind_stop_reason,
1938 i386_frame_prev_register,
1940 default_frame_sniffer
1943 /* Normal frames, but in a function epilogue. */
1945 /* The epilogue is defined here as the 'ret' instruction, which will
1946 follow any instruction such as 'leave' or 'pop %ebp' that destroys
1947 the function's stack frame. */
1950 i386_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1953 struct symtab *symtab;
1955 symtab = find_pc_symtab (pc);
1956 if (symtab && symtab->epilogue_unwind_valid)
1959 if (target_read_memory (pc, &insn, 1))
1960 return 0; /* Can't read memory at pc. */
1962 if (insn != 0xc3) /* 'ret' instruction. */
1969 i386_epilogue_frame_sniffer (const struct frame_unwind *self,
1970 struct frame_info *this_frame,
1971 void **this_prologue_cache)
1973 if (frame_relative_level (this_frame) == 0)
1974 return i386_in_function_epilogue_p (get_frame_arch (this_frame),
1975 get_frame_pc (this_frame));
1980 static struct i386_frame_cache *
1981 i386_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
1983 volatile struct gdb_exception ex;
1984 struct i386_frame_cache *cache;
1990 cache = i386_alloc_frame_cache ();
1991 *this_cache = cache;
1993 TRY_CATCH (ex, RETURN_MASK_ERROR)
1995 cache->pc = get_frame_func (this_frame);
1997 /* At this point the stack looks as if we just entered the
1998 function, with the return address at the top of the
2000 sp = get_frame_register_unsigned (this_frame, I386_ESP_REGNUM);
2001 cache->base = sp + cache->sp_offset;
2002 cache->saved_sp = cache->base + 8;
2003 cache->saved_regs[I386_EIP_REGNUM] = cache->base + 4;
2007 if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
2008 throw_exception (ex);
2013 static enum unwind_stop_reason
2014 i386_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
2017 struct i386_frame_cache *cache =
2018 i386_epilogue_frame_cache (this_frame, this_cache);
2021 return UNWIND_UNAVAILABLE;
2023 return UNWIND_NO_REASON;
2027 i386_epilogue_frame_this_id (struct frame_info *this_frame,
2029 struct frame_id *this_id)
2031 struct i386_frame_cache *cache =
2032 i386_epilogue_frame_cache (this_frame, this_cache);
2037 (*this_id) = frame_id_build (cache->base + 8, cache->pc);
2040 static struct value *
2041 i386_epilogue_frame_prev_register (struct frame_info *this_frame,
2042 void **this_cache, int regnum)
2044 /* Make sure we've initialized the cache. */
2045 i386_epilogue_frame_cache (this_frame, this_cache);
2047 return i386_frame_prev_register (this_frame, this_cache, regnum);
2050 static const struct frame_unwind i386_epilogue_frame_unwind =
2053 i386_epilogue_frame_unwind_stop_reason,
2054 i386_epilogue_frame_this_id,
2055 i386_epilogue_frame_prev_register,
2057 i386_epilogue_frame_sniffer
2061 /* Stack-based trampolines. */
2063 /* These trampolines are used on cross x86 targets, when taking the
2064 address of a nested function. When executing these trampolines,
2065 no stack frame is set up, so we are in a similar situation as in
2066 epilogues and i386_epilogue_frame_this_id can be re-used. */
2068 /* Static chain passed in register. */
2070 struct i386_insn i386_tramp_chain_in_reg_insns[] =
2072 /* `movl imm32, %eax' and `movl imm32, %ecx' */
2073 { 5, { 0xb8 }, { 0xfe } },
2076 { 5, { 0xe9 }, { 0xff } },
2081 /* Static chain passed on stack (when regparm=3). */
2083 struct i386_insn i386_tramp_chain_on_stack_insns[] =
2086 { 5, { 0x68 }, { 0xff } },
2089 { 5, { 0xe9 }, { 0xff } },
2094 /* Return whether PC points inside a stack trampoline. */
2097 i386_in_stack_tramp_p (CORE_ADDR pc)
2102 /* A stack trampoline is detected if no name is associated
2103 to the current pc and if it points inside a trampoline
2106 find_pc_partial_function (pc, &name, NULL, NULL);
2110 if (target_read_memory (pc, &insn, 1))
2113 if (!i386_match_insn_block (pc, i386_tramp_chain_in_reg_insns)
2114 && !i386_match_insn_block (pc, i386_tramp_chain_on_stack_insns))
2121 i386_stack_tramp_frame_sniffer (const struct frame_unwind *self,
2122 struct frame_info *this_frame,
2125 if (frame_relative_level (this_frame) == 0)
2126 return i386_in_stack_tramp_p (get_frame_pc (this_frame));
2131 static const struct frame_unwind i386_stack_tramp_frame_unwind =
2134 i386_epilogue_frame_unwind_stop_reason,
2135 i386_epilogue_frame_this_id,
2136 i386_epilogue_frame_prev_register,
2138 i386_stack_tramp_frame_sniffer
2141 /* Generate a bytecode expression to get the value of the saved PC. */
2144 i386_gen_return_address (struct gdbarch *gdbarch,
2145 struct agent_expr *ax, struct axs_value *value,
2148 /* The following sequence assumes the traditional use of the base
2150 ax_reg (ax, I386_EBP_REGNUM);
2152 ax_simple (ax, aop_add);
2153 value->type = register_type (gdbarch, I386_EIP_REGNUM);
2154 value->kind = axs_lvalue_memory;
2158 /* Signal trampolines. */
2160 static struct i386_frame_cache *
2161 i386_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
2163 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2164 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2165 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2166 volatile struct gdb_exception ex;
2167 struct i386_frame_cache *cache;
2174 cache = i386_alloc_frame_cache ();
2176 TRY_CATCH (ex, RETURN_MASK_ERROR)
2178 get_frame_register (this_frame, I386_ESP_REGNUM, buf);
2179 cache->base = extract_unsigned_integer (buf, 4, byte_order) - 4;
2181 addr = tdep->sigcontext_addr (this_frame);
2182 if (tdep->sc_reg_offset)
2186 gdb_assert (tdep->sc_num_regs <= I386_NUM_SAVED_REGS);
2188 for (i = 0; i < tdep->sc_num_regs; i++)
2189 if (tdep->sc_reg_offset[i] != -1)
2190 cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
2194 cache->saved_regs[I386_EIP_REGNUM] = addr + tdep->sc_pc_offset;
2195 cache->saved_regs[I386_ESP_REGNUM] = addr + tdep->sc_sp_offset;
2200 if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
2201 throw_exception (ex);
2203 *this_cache = cache;
2207 static enum unwind_stop_reason
2208 i386_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
2211 struct i386_frame_cache *cache =
2212 i386_sigtramp_frame_cache (this_frame, this_cache);
2215 return UNWIND_UNAVAILABLE;
2217 return UNWIND_NO_REASON;
2221 i386_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
2222 struct frame_id *this_id)
2224 struct i386_frame_cache *cache =
2225 i386_sigtramp_frame_cache (this_frame, this_cache);
2230 /* See the end of i386_push_dummy_call. */
2231 (*this_id) = frame_id_build (cache->base + 8, get_frame_pc (this_frame));
2234 static struct value *
2235 i386_sigtramp_frame_prev_register (struct frame_info *this_frame,
2236 void **this_cache, int regnum)
2238 /* Make sure we've initialized the cache. */
2239 i386_sigtramp_frame_cache (this_frame, this_cache);
2241 return i386_frame_prev_register (this_frame, this_cache, regnum);
2245 i386_sigtramp_frame_sniffer (const struct frame_unwind *self,
2246 struct frame_info *this_frame,
2247 void **this_prologue_cache)
2249 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2251 /* We shouldn't even bother if we don't have a sigcontext_addr
2253 if (tdep->sigcontext_addr == NULL)
2256 if (tdep->sigtramp_p != NULL)
2258 if (tdep->sigtramp_p (this_frame))
2262 if (tdep->sigtramp_start != 0)
2264 CORE_ADDR pc = get_frame_pc (this_frame);
2266 gdb_assert (tdep->sigtramp_end != 0);
2267 if (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end)
2274 static const struct frame_unwind i386_sigtramp_frame_unwind =
2277 i386_sigtramp_frame_unwind_stop_reason,
2278 i386_sigtramp_frame_this_id,
2279 i386_sigtramp_frame_prev_register,
2281 i386_sigtramp_frame_sniffer
2286 i386_frame_base_address (struct frame_info *this_frame, void **this_cache)
2288 struct i386_frame_cache *cache = i386_frame_cache (this_frame, this_cache);
2293 static const struct frame_base i386_frame_base =
2296 i386_frame_base_address,
2297 i386_frame_base_address,
2298 i386_frame_base_address
2301 static struct frame_id
2302 i386_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2306 fp = get_frame_register_unsigned (this_frame, I386_EBP_REGNUM);
2308 /* See the end of i386_push_dummy_call. */
2309 return frame_id_build (fp + 8, get_frame_pc (this_frame));
2312 /* _Decimal128 function return values need 16-byte alignment on the
2316 i386_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
2318 return sp & -(CORE_ADDR)16;
2322 /* Figure out where the longjmp will land. Slurp the args out of the
2323 stack. We expect the first arg to be a pointer to the jmp_buf
2324 structure from which we extract the address that we will land at.
2325 This address is copied into PC. This routine returns non-zero on
2329 i386_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
2332 CORE_ADDR sp, jb_addr;
2333 struct gdbarch *gdbarch = get_frame_arch (frame);
2334 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2335 int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
2337 /* If JB_PC_OFFSET is -1, we have no way to find out where the
2338 longjmp will land. */
2339 if (jb_pc_offset == -1)
2342 get_frame_register (frame, I386_ESP_REGNUM, buf);
2343 sp = extract_unsigned_integer (buf, 4, byte_order);
2344 if (target_read_memory (sp + 4, buf, 4))
2347 jb_addr = extract_unsigned_integer (buf, 4, byte_order);
2348 if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
2351 *pc = extract_unsigned_integer (buf, 4, byte_order);
2356 /* Check whether TYPE must be 16-byte-aligned when passed as a
2357 function argument. 16-byte vectors, _Decimal128 and structures or
2358 unions containing such types must be 16-byte-aligned; other
2359 arguments are 4-byte-aligned. */
2362 i386_16_byte_align_p (struct type *type)
2364 type = check_typedef (type);
2365 if ((TYPE_CODE (type) == TYPE_CODE_DECFLOAT
2366 || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)))
2367 && TYPE_LENGTH (type) == 16)
2369 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2370 return i386_16_byte_align_p (TYPE_TARGET_TYPE (type));
2371 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
2372 || TYPE_CODE (type) == TYPE_CODE_UNION)
2375 for (i = 0; i < TYPE_NFIELDS (type); i++)
2377 if (i386_16_byte_align_p (TYPE_FIELD_TYPE (type, i)))
2384 /* Implementation for set_gdbarch_push_dummy_code. */
2387 i386_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
2388 struct value **args, int nargs, struct type *value_type,
2389 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
2390 struct regcache *regcache)
2392 /* Use 0xcc breakpoint - 1 byte. */
2396 /* Keep the stack aligned. */
2401 i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2402 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
2403 struct value **args, CORE_ADDR sp, int struct_return,
2404 CORE_ADDR struct_addr)
2406 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2412 /* Determine the total space required for arguments and struct
2413 return address in a first pass (allowing for 16-byte-aligned
2414 arguments), then push arguments in a second pass. */
2416 for (write_pass = 0; write_pass < 2; write_pass++)
2418 int args_space_used = 0;
2424 /* Push value address. */
2425 store_unsigned_integer (buf, 4, byte_order, struct_addr);
2426 write_memory (sp, buf, 4);
2427 args_space_used += 4;
2433 for (i = 0; i < nargs; i++)
2435 int len = TYPE_LENGTH (value_enclosing_type (args[i]));
2439 if (i386_16_byte_align_p (value_enclosing_type (args[i])))
2440 args_space_used = align_up (args_space_used, 16);
2442 write_memory (sp + args_space_used,
2443 value_contents_all (args[i]), len);
2444 /* The System V ABI says that:
2446 "An argument's size is increased, if necessary, to make it a
2447 multiple of [32-bit] words. This may require tail padding,
2448 depending on the size of the argument."
2450 This makes sure the stack stays word-aligned. */
2451 args_space_used += align_up (len, 4);
2455 if (i386_16_byte_align_p (value_enclosing_type (args[i])))
2456 args_space = align_up (args_space, 16);
2457 args_space += align_up (len, 4);
2465 /* The original System V ABI only requires word alignment,
2466 but modern incarnations need 16-byte alignment in order
2467 to support SSE. Since wasting a few bytes here isn't
2468 harmful we unconditionally enforce 16-byte alignment. */
2473 /* Store return address. */
2475 store_unsigned_integer (buf, 4, byte_order, bp_addr);
2476 write_memory (sp, buf, 4);
2478 /* Finally, update the stack pointer... */
2479 store_unsigned_integer (buf, 4, byte_order, sp);
2480 regcache_cooked_write (regcache, I386_ESP_REGNUM, buf);
2482 /* ...and fake a frame pointer. */
2483 regcache_cooked_write (regcache, I386_EBP_REGNUM, buf);
2485 /* MarkK wrote: This "+ 8" is all over the place:
2486 (i386_frame_this_id, i386_sigtramp_frame_this_id,
2487 i386_dummy_id). It's there, since all frame unwinders for
2488 a given target have to agree (within a certain margin) on the
2489 definition of the stack address of a frame. Otherwise frame id
2490 comparison might not work correctly. Since DWARF2/GCC uses the
2491 stack address *before* the function call as a frame's CFA. On
2492 the i386, when %ebp is used as a frame pointer, the offset
2493 between the contents %ebp and the CFA as defined by GCC. */
2497 /* These registers are used for returning integers (and on some
2498 targets also for returning `struct' and `union' values when their
2499 size and alignment match an integer type). */
2500 #define LOW_RETURN_REGNUM I386_EAX_REGNUM /* %eax */
2501 #define HIGH_RETURN_REGNUM I386_EDX_REGNUM /* %edx */
2503 /* Read, for architecture GDBARCH, a function return value of TYPE
2504 from REGCACHE, and copy that into VALBUF. */
2507 i386_extract_return_value (struct gdbarch *gdbarch, struct type *type,
2508 struct regcache *regcache, gdb_byte *valbuf)
2510 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2511 int len = TYPE_LENGTH (type);
2512 gdb_byte buf[I386_MAX_REGISTER_SIZE];
2514 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2516 if (tdep->st0_regnum < 0)
2518 warning (_("Cannot find floating-point return value."));
2519 memset (valbuf, 0, len);
2523 /* Floating-point return values can be found in %st(0). Convert
2524 its contents to the desired type. This is probably not
2525 exactly how it would happen on the target itself, but it is
2526 the best we can do. */
2527 regcache_raw_read (regcache, I386_ST0_REGNUM, buf);
2528 convert_typed_floating (buf, i387_ext_type (gdbarch), valbuf, type);
2532 int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
2533 int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
2535 if (len <= low_size)
2537 regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
2538 memcpy (valbuf, buf, len);
2540 else if (len <= (low_size + high_size))
2542 regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
2543 memcpy (valbuf, buf, low_size);
2544 regcache_raw_read (regcache, HIGH_RETURN_REGNUM, buf);
2545 memcpy (valbuf + low_size, buf, len - low_size);
2548 internal_error (__FILE__, __LINE__,
2549 _("Cannot extract return value of %d bytes long."),
2554 /* Write, for architecture GDBARCH, a function return value of TYPE
2555 from VALBUF into REGCACHE. */
2558 i386_store_return_value (struct gdbarch *gdbarch, struct type *type,
2559 struct regcache *regcache, const gdb_byte *valbuf)
2561 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2562 int len = TYPE_LENGTH (type);
2564 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2567 gdb_byte buf[I386_MAX_REGISTER_SIZE];
2569 if (tdep->st0_regnum < 0)
2571 warning (_("Cannot set floating-point return value."));
2575 /* Returning floating-point values is a bit tricky. Apart from
2576 storing the return value in %st(0), we have to simulate the
2577 state of the FPU at function return point. */
2579 /* Convert the value found in VALBUF to the extended
2580 floating-point format used by the FPU. This is probably
2581 not exactly how it would happen on the target itself, but
2582 it is the best we can do. */
2583 convert_typed_floating (valbuf, type, buf, i387_ext_type (gdbarch));
2584 regcache_raw_write (regcache, I386_ST0_REGNUM, buf);
2586 /* Set the top of the floating-point register stack to 7. The
2587 actual value doesn't really matter, but 7 is what a normal
2588 function return would end up with if the program started out
2589 with a freshly initialized FPU. */
2590 regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2592 regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM (tdep), fstat);
2594 /* Mark %st(1) through %st(7) as empty. Since we set the top of
2595 the floating-point register stack to 7, the appropriate value
2596 for the tag word is 0x3fff. */
2597 regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM (tdep), 0x3fff);
2601 int low_size = register_size (gdbarch, LOW_RETURN_REGNUM);
2602 int high_size = register_size (gdbarch, HIGH_RETURN_REGNUM);
2604 if (len <= low_size)
2605 regcache_raw_write_part (regcache, LOW_RETURN_REGNUM, 0, len, valbuf);
2606 else if (len <= (low_size + high_size))
2608 regcache_raw_write (regcache, LOW_RETURN_REGNUM, valbuf);
2609 regcache_raw_write_part (regcache, HIGH_RETURN_REGNUM, 0,
2610 len - low_size, valbuf + low_size);
2613 internal_error (__FILE__, __LINE__,
2614 _("Cannot store return value of %d bytes long."), len);
2619 /* This is the variable that is set with "set struct-convention", and
2620 its legitimate values. */
2621 static const char default_struct_convention[] = "default";
2622 static const char pcc_struct_convention[] = "pcc";
2623 static const char reg_struct_convention[] = "reg";
2624 static const char *const valid_conventions[] =
2626 default_struct_convention,
2627 pcc_struct_convention,
2628 reg_struct_convention,
2631 static const char *struct_convention = default_struct_convention;
2633 /* Return non-zero if TYPE, which is assumed to be a structure,
2634 a union type, or an array type, should be returned in registers
2635 for architecture GDBARCH. */
2638 i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
2640 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2641 enum type_code code = TYPE_CODE (type);
2642 int len = TYPE_LENGTH (type);
2644 gdb_assert (code == TYPE_CODE_STRUCT
2645 || code == TYPE_CODE_UNION
2646 || code == TYPE_CODE_ARRAY);
2648 if (struct_convention == pcc_struct_convention
2649 || (struct_convention == default_struct_convention
2650 && tdep->struct_return == pcc_struct_return))
2653 /* Structures consisting of a single `float', `double' or 'long
2654 double' member are returned in %st(0). */
2655 if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2657 type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2658 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2659 return (len == 4 || len == 8 || len == 12);
2662 return (len == 1 || len == 2 || len == 4 || len == 8);
2665 /* Determine, for architecture GDBARCH, how a return value of TYPE
2666 should be returned. If it is supposed to be returned in registers,
2667 and READBUF is non-zero, read the appropriate value from REGCACHE,
2668 and copy it into READBUF. If WRITEBUF is non-zero, write the value
2669 from WRITEBUF into REGCACHE. */
2671 static enum return_value_convention
2672 i386_return_value (struct gdbarch *gdbarch, struct value *function,
2673 struct type *type, struct regcache *regcache,
2674 gdb_byte *readbuf, const gdb_byte *writebuf)
2676 enum type_code code = TYPE_CODE (type);
2678 if (((code == TYPE_CODE_STRUCT
2679 || code == TYPE_CODE_UNION
2680 || code == TYPE_CODE_ARRAY)
2681 && !i386_reg_struct_return_p (gdbarch, type))
2682 /* Complex double and long double uses the struct return covention. */
2683 || (code == TYPE_CODE_COMPLEX && TYPE_LENGTH (type) == 16)
2684 || (code == TYPE_CODE_COMPLEX && TYPE_LENGTH (type) == 24)
2685 /* 128-bit decimal float uses the struct return convention. */
2686 || (code == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 16))
2688 /* The System V ABI says that:
2690 "A function that returns a structure or union also sets %eax
2691 to the value of the original address of the caller's area
2692 before it returns. Thus when the caller receives control
2693 again, the address of the returned object resides in register
2694 %eax and can be used to access the object."
2696 So the ABI guarantees that we can always find the return
2697 value just after the function has returned. */
2699 /* Note that the ABI doesn't mention functions returning arrays,
2700 which is something possible in certain languages such as Ada.
2701 In this case, the value is returned as if it was wrapped in
2702 a record, so the convention applied to records also applies
2709 regcache_raw_read_unsigned (regcache, I386_EAX_REGNUM, &addr);
2710 read_memory (addr, readbuf, TYPE_LENGTH (type));
2713 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
2716 /* This special case is for structures consisting of a single
2717 `float', `double' or 'long double' member. These structures are
2718 returned in %st(0). For these structures, we call ourselves
2719 recursively, changing TYPE into the type of the first member of
2720 the structure. Since that should work for all structures that
2721 have only one member, we don't bother to check the member's type
2723 if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2725 type = check_typedef (TYPE_FIELD_TYPE (type, 0));
2726 return i386_return_value (gdbarch, function, type, regcache,
2731 i386_extract_return_value (gdbarch, type, regcache, readbuf);
2733 i386_store_return_value (gdbarch, type, regcache, writebuf);
2735 return RETURN_VALUE_REGISTER_CONVENTION;
2740 i387_ext_type (struct gdbarch *gdbarch)
2742 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2744 if (!tdep->i387_ext_type)
2746 tdep->i387_ext_type = tdesc_find_type (gdbarch, "i387_ext");
2747 gdb_assert (tdep->i387_ext_type != NULL);
2750 return tdep->i387_ext_type;
2753 /* Construct vector type for pseudo YMM registers. We can't use
2754 tdesc_find_type since YMM isn't described in target description. */
2756 static struct type *
2757 i386_ymm_type (struct gdbarch *gdbarch)
2759 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2761 if (!tdep->i386_ymm_type)
2763 const struct builtin_type *bt = builtin_type (gdbarch);
2765 /* The type we're building is this: */
2767 union __gdb_builtin_type_vec256i
2769 int128_t uint128[2];
2770 int64_t v2_int64[4];
2771 int32_t v4_int32[8];
2772 int16_t v8_int16[16];
2773 int8_t v16_int8[32];
2774 double v2_double[4];
2781 t = arch_composite_type (gdbarch,
2782 "__gdb_builtin_type_vec256i", TYPE_CODE_UNION);
2783 append_composite_type_field (t, "v8_float",
2784 init_vector_type (bt->builtin_float, 8));
2785 append_composite_type_field (t, "v4_double",
2786 init_vector_type (bt->builtin_double, 4));
2787 append_composite_type_field (t, "v32_int8",
2788 init_vector_type (bt->builtin_int8, 32));
2789 append_composite_type_field (t, "v16_int16",
2790 init_vector_type (bt->builtin_int16, 16));
2791 append_composite_type_field (t, "v8_int32",
2792 init_vector_type (bt->builtin_int32, 8));
2793 append_composite_type_field (t, "v4_int64",
2794 init_vector_type (bt->builtin_int64, 4));
2795 append_composite_type_field (t, "v2_int128",
2796 init_vector_type (bt->builtin_int128, 2));
2798 TYPE_VECTOR (t) = 1;
2799 TYPE_NAME (t) = "builtin_type_vec256i";
2800 tdep->i386_ymm_type = t;
2803 return tdep->i386_ymm_type;
2806 /* Construct vector type for MMX registers. */
2807 static struct type *
2808 i386_mmx_type (struct gdbarch *gdbarch)
2810 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2812 if (!tdep->i386_mmx_type)
2814 const struct builtin_type *bt = builtin_type (gdbarch);
2816 /* The type we're building is this: */
2818 union __gdb_builtin_type_vec64i
2821 int32_t v2_int32[2];
2822 int16_t v4_int16[4];
2829 t = arch_composite_type (gdbarch,
2830 "__gdb_builtin_type_vec64i", TYPE_CODE_UNION);
2832 append_composite_type_field (t, "uint64", bt->builtin_int64);
2833 append_composite_type_field (t, "v2_int32",
2834 init_vector_type (bt->builtin_int32, 2));
2835 append_composite_type_field (t, "v4_int16",
2836 init_vector_type (bt->builtin_int16, 4));
2837 append_composite_type_field (t, "v8_int8",
2838 init_vector_type (bt->builtin_int8, 8));
2840 TYPE_VECTOR (t) = 1;
2841 TYPE_NAME (t) = "builtin_type_vec64i";
2842 tdep->i386_mmx_type = t;
2845 return tdep->i386_mmx_type;
2848 /* Return the GDB type object for the "standard" data type of data in
2852 i386_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
2854 if (i386_mmx_regnum_p (gdbarch, regnum))
2855 return i386_mmx_type (gdbarch);
2856 else if (i386_ymm_regnum_p (gdbarch, regnum))
2857 return i386_ymm_type (gdbarch);
2860 const struct builtin_type *bt = builtin_type (gdbarch);
2861 if (i386_byte_regnum_p (gdbarch, regnum))
2862 return bt->builtin_int8;
2863 else if (i386_word_regnum_p (gdbarch, regnum))
2864 return bt->builtin_int16;
2865 else if (i386_dword_regnum_p (gdbarch, regnum))
2866 return bt->builtin_int32;
2869 internal_error (__FILE__, __LINE__, _("invalid regnum"));
2872 /* Map a cooked register onto a raw register or memory. For the i386,
2873 the MMX registers need to be mapped onto floating point registers. */
2876 i386_mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
2878 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
2883 mmxreg = regnum - tdep->mm0_regnum;
2884 regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2885 tos = (fstat >> 11) & 0x7;
2886 fpreg = (mmxreg + tos) % 8;
2888 return (I387_ST0_REGNUM (tdep) + fpreg);
2891 /* A helper function for us by i386_pseudo_register_read_value and
2892 amd64_pseudo_register_read_value. It does all the work but reads
2893 the data into an already-allocated value. */
2896 i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
2897 struct regcache *regcache,
2899 struct value *result_value)
2901 gdb_byte raw_buf[MAX_REGISTER_SIZE];
2902 enum register_status status;
2903 gdb_byte *buf = value_contents_raw (result_value);
2905 if (i386_mmx_regnum_p (gdbarch, regnum))
2907 int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2909 /* Extract (always little endian). */
2910 status = regcache_raw_read (regcache, fpnum, raw_buf);
2911 if (status != REG_VALID)
2912 mark_value_bytes_unavailable (result_value, 0,
2913 TYPE_LENGTH (value_type (result_value)));
2915 memcpy (buf, raw_buf, register_size (gdbarch, regnum));
2919 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2921 if (i386_ymm_regnum_p (gdbarch, regnum))
2923 regnum -= tdep->ymm0_regnum;
2925 /* Extract (always little endian). Read lower 128bits. */
2926 status = regcache_raw_read (regcache,
2927 I387_XMM0_REGNUM (tdep) + regnum,
2929 if (status != REG_VALID)
2930 mark_value_bytes_unavailable (result_value, 0, 16);
2932 memcpy (buf, raw_buf, 16);
2933 /* Read upper 128bits. */
2934 status = regcache_raw_read (regcache,
2935 tdep->ymm0h_regnum + regnum,
2937 if (status != REG_VALID)
2938 mark_value_bytes_unavailable (result_value, 16, 32);
2940 memcpy (buf + 16, raw_buf, 16);
2942 else if (i386_word_regnum_p (gdbarch, regnum))
2944 int gpnum = regnum - tdep->ax_regnum;
2946 /* Extract (always little endian). */
2947 status = regcache_raw_read (regcache, gpnum, raw_buf);
2948 if (status != REG_VALID)
2949 mark_value_bytes_unavailable (result_value, 0,
2950 TYPE_LENGTH (value_type (result_value)));
2952 memcpy (buf, raw_buf, 2);
2954 else if (i386_byte_regnum_p (gdbarch, regnum))
2956 /* Check byte pseudo registers last since this function will
2957 be called from amd64_pseudo_register_read, which handles
2958 byte pseudo registers differently. */
2959 int gpnum = regnum - tdep->al_regnum;
2961 /* Extract (always little endian). We read both lower and
2963 status = regcache_raw_read (regcache, gpnum % 4, raw_buf);
2964 if (status != REG_VALID)
2965 mark_value_bytes_unavailable (result_value, 0,
2966 TYPE_LENGTH (value_type (result_value)));
2967 else if (gpnum >= 4)
2968 memcpy (buf, raw_buf + 1, 1);
2970 memcpy (buf, raw_buf, 1);
2973 internal_error (__FILE__, __LINE__, _("invalid regnum"));
2977 static struct value *
2978 i386_pseudo_register_read_value (struct gdbarch *gdbarch,
2979 struct regcache *regcache,
2982 struct value *result;
2984 result = allocate_value (register_type (gdbarch, regnum));
2985 VALUE_LVAL (result) = lval_register;
2986 VALUE_REGNUM (result) = regnum;
2988 i386_pseudo_register_read_into_value (gdbarch, regcache, regnum, result);
2994 i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2995 int regnum, const gdb_byte *buf)
2997 gdb_byte raw_buf[MAX_REGISTER_SIZE];
2999 if (i386_mmx_regnum_p (gdbarch, regnum))
3001 int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
3004 regcache_raw_read (regcache, fpnum, raw_buf);
3005 /* ... Modify ... (always little endian). */
3006 memcpy (raw_buf, buf, register_size (gdbarch, regnum));
3008 regcache_raw_write (regcache, fpnum, raw_buf);
3012 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3014 if (i386_ymm_regnum_p (gdbarch, regnum))
3016 regnum -= tdep->ymm0_regnum;
3018 /* ... Write lower 128bits. */
3019 regcache_raw_write (regcache,
3020 I387_XMM0_REGNUM (tdep) + regnum,
3022 /* ... Write upper 128bits. */
3023 regcache_raw_write (regcache,
3024 tdep->ymm0h_regnum + regnum,
3027 else if (i386_word_regnum_p (gdbarch, regnum))
3029 int gpnum = regnum - tdep->ax_regnum;
3032 regcache_raw_read (regcache, gpnum, raw_buf);
3033 /* ... Modify ... (always little endian). */
3034 memcpy (raw_buf, buf, 2);
3036 regcache_raw_write (regcache, gpnum, raw_buf);
3038 else if (i386_byte_regnum_p (gdbarch, regnum))
3040 /* Check byte pseudo registers last since this function will
3041 be called from amd64_pseudo_register_read, which handles
3042 byte pseudo registers differently. */
3043 int gpnum = regnum - tdep->al_regnum;
3045 /* Read ... We read both lower and upper registers. */
3046 regcache_raw_read (regcache, gpnum % 4, raw_buf);
3047 /* ... Modify ... (always little endian). */
3049 memcpy (raw_buf + 1, buf, 1);
3051 memcpy (raw_buf, buf, 1);
3053 regcache_raw_write (regcache, gpnum % 4, raw_buf);
3056 internal_error (__FILE__, __LINE__, _("invalid regnum"));
3061 /* Return the register number of the register allocated by GCC after
3062 REGNUM, or -1 if there is no such register. */
3065 i386_next_regnum (int regnum)
3067 /* GCC allocates the registers in the order:
3069 %eax, %edx, %ecx, %ebx, %esi, %edi, %ebp, %esp, ...
3071 Since storing a variable in %esp doesn't make any sense we return
3072 -1 for %ebp and for %esp itself. */
3073 static int next_regnum[] =
3075 I386_EDX_REGNUM, /* Slot for %eax. */
3076 I386_EBX_REGNUM, /* Slot for %ecx. */
3077 I386_ECX_REGNUM, /* Slot for %edx. */
3078 I386_ESI_REGNUM, /* Slot for %ebx. */
3079 -1, -1, /* Slots for %esp and %ebp. */
3080 I386_EDI_REGNUM, /* Slot for %esi. */
3081 I386_EBP_REGNUM /* Slot for %edi. */
3084 if (regnum >= 0 && regnum < sizeof (next_regnum) / sizeof (next_regnum[0]))
3085 return next_regnum[regnum];
3090 /* Return nonzero if a value of type TYPE stored in register REGNUM
3091 needs any special handling. */
3094 i386_convert_register_p (struct gdbarch *gdbarch,
3095 int regnum, struct type *type)
3097 int len = TYPE_LENGTH (type);
3099 /* Values may be spread across multiple registers. Most debugging
3100 formats aren't expressive enough to specify the locations, so
3101 some heuristics is involved. Right now we only handle types that
3102 have a length that is a multiple of the word size, since GCC
3103 doesn't seem to put any other types into registers. */
3104 if (len > 4 && len % 4 == 0)
3106 int last_regnum = regnum;
3110 last_regnum = i386_next_regnum (last_regnum);
3114 if (last_regnum != -1)
3118 return i387_convert_register_p (gdbarch, regnum, type);
3121 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
3122 return its contents in TO. */
3125 i386_register_to_value (struct frame_info *frame, int regnum,
3126 struct type *type, gdb_byte *to,
3127 int *optimizedp, int *unavailablep)
3129 struct gdbarch *gdbarch = get_frame_arch (frame);
3130 int len = TYPE_LENGTH (type);
3132 if (i386_fp_regnum_p (gdbarch, regnum))
3133 return i387_register_to_value (frame, regnum, type, to,
3134 optimizedp, unavailablep);
3136 /* Read a value spread across multiple registers. */
3138 gdb_assert (len > 4 && len % 4 == 0);
3142 gdb_assert (regnum != -1);
3143 gdb_assert (register_size (gdbarch, regnum) == 4);
3145 if (!get_frame_register_bytes (frame, regnum, 0,
3146 register_size (gdbarch, regnum),
3147 to, optimizedp, unavailablep))
3150 regnum = i386_next_regnum (regnum);
3155 *optimizedp = *unavailablep = 0;
3159 /* Write the contents FROM of a value of type TYPE into register
3160 REGNUM in frame FRAME. */
3163 i386_value_to_register (struct frame_info *frame, int regnum,
3164 struct type *type, const gdb_byte *from)
3166 int len = TYPE_LENGTH (type);
3168 if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
3170 i387_value_to_register (frame, regnum, type, from);
3174 /* Write a value spread across multiple registers. */
3176 gdb_assert (len > 4 && len % 4 == 0);
3180 gdb_assert (regnum != -1);
3181 gdb_assert (register_size (get_frame_arch (frame), regnum) == 4);
3183 put_frame_register (frame, regnum, from);
3184 regnum = i386_next_regnum (regnum);
3190 /* Supply register REGNUM from the buffer specified by GREGS and LEN
3191 in the general-purpose register set REGSET to register cache
3192 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
3195 i386_supply_gregset (const struct regset *regset, struct regcache *regcache,
3196 int regnum, const void *gregs, size_t len)
3198 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3199 const gdb_byte *regs = gregs;
3202 gdb_assert (len == tdep->sizeof_gregset);
3204 for (i = 0; i < tdep->gregset_num_regs; i++)
3206 if ((regnum == i || regnum == -1)
3207 && tdep->gregset_reg_offset[i] != -1)
3208 regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
3212 /* Collect register REGNUM from the register cache REGCACHE and store
3213 it in the buffer specified by GREGS and LEN as described by the
3214 general-purpose register set REGSET. If REGNUM is -1, do this for
3215 all registers in REGSET. */
3218 i386_collect_gregset (const struct regset *regset,
3219 const struct regcache *regcache,
3220 int regnum, void *gregs, size_t len)
3222 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3223 gdb_byte *regs = gregs;
3226 gdb_assert (len == tdep->sizeof_gregset);
3228 for (i = 0; i < tdep->gregset_num_regs; i++)
3230 if ((regnum == i || regnum == -1)
3231 && tdep->gregset_reg_offset[i] != -1)
3232 regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]);
3236 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
3237 in the floating-point register set REGSET to register cache
3238 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
3241 i386_supply_fpregset (const struct regset *regset, struct regcache *regcache,
3242 int regnum, const void *fpregs, size_t len)
3244 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3246 if (len == I387_SIZEOF_FXSAVE)
3248 i387_supply_fxsave (regcache, regnum, fpregs);
3252 gdb_assert (len == tdep->sizeof_fpregset);
3253 i387_supply_fsave (regcache, regnum, fpregs);
3256 /* Collect register REGNUM from the register cache REGCACHE and store
3257 it in the buffer specified by FPREGS and LEN as described by the
3258 floating-point register set REGSET. If REGNUM is -1, do this for
3259 all registers in REGSET. */
3262 i386_collect_fpregset (const struct regset *regset,
3263 const struct regcache *regcache,
3264 int regnum, void *fpregs, size_t len)
3266 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
3268 if (len == I387_SIZEOF_FXSAVE)
3270 i387_collect_fxsave (regcache, regnum, fpregs);
3274 gdb_assert (len == tdep->sizeof_fpregset);
3275 i387_collect_fsave (regcache, regnum, fpregs);
3278 /* Similar to i386_supply_fpregset, but use XSAVE extended state. */
3281 i386_supply_xstateregset (const struct regset *regset,
3282 struct regcache *regcache, int regnum,
3283 const void *xstateregs, size_t len)
3285 i387_supply_xsave (regcache, regnum, xstateregs);
3288 /* Similar to i386_collect_fpregset , but use XSAVE extended state. */
3291 i386_collect_xstateregset (const struct regset *regset,
3292 const struct regcache *regcache,
3293 int regnum, void *xstateregs, size_t len)
3295 i387_collect_xsave (regcache, regnum, xstateregs, 1);
3298 /* Return the appropriate register set for the core section identified
3299 by SECT_NAME and SECT_SIZE. */
3301 const struct regset *
3302 i386_regset_from_core_section (struct gdbarch *gdbarch,
3303 const char *sect_name, size_t sect_size)
3305 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3307 if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
3309 if (tdep->gregset == NULL)
3310 tdep->gregset = regset_alloc (gdbarch, i386_supply_gregset,
3311 i386_collect_gregset);
3312 return tdep->gregset;
3315 if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
3316 || (strcmp (sect_name, ".reg-xfp") == 0
3317 && sect_size == I387_SIZEOF_FXSAVE))
3319 if (tdep->fpregset == NULL)
3320 tdep->fpregset = regset_alloc (gdbarch, i386_supply_fpregset,
3321 i386_collect_fpregset);
3322 return tdep->fpregset;
3325 if (strcmp (sect_name, ".reg-xstate") == 0)
3327 if (tdep->xstateregset == NULL)
3328 tdep->xstateregset = regset_alloc (gdbarch,
3329 i386_supply_xstateregset,
3330 i386_collect_xstateregset);
3332 return tdep->xstateregset;
3339 /* Stuff for WIN32 PE style DLL's but is pretty generic really. */
3342 i386_pe_skip_trampoline_code (struct frame_info *frame,
3343 CORE_ADDR pc, char *name)
3345 struct gdbarch *gdbarch = get_frame_arch (frame);
3346 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3349 if (pc && read_memory_unsigned_integer (pc, 2, byte_order) == 0x25ff)
3351 unsigned long indirect =
3352 read_memory_unsigned_integer (pc + 2, 4, byte_order);
3353 struct minimal_symbol *indsym =
3354 indirect ? lookup_minimal_symbol_by_pc (indirect).minsym : 0;
3355 const char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
3359 if (strncmp (symname, "__imp_", 6) == 0
3360 || strncmp (symname, "_imp_", 5) == 0)
3362 read_memory_unsigned_integer (indirect, 4, byte_order);
3365 return 0; /* Not a trampoline. */
3369 /* Return whether the THIS_FRAME corresponds to a sigtramp
3373 i386_sigtramp_p (struct frame_info *this_frame)
3375 CORE_ADDR pc = get_frame_pc (this_frame);
3378 find_pc_partial_function (pc, &name, NULL, NULL);
3379 return (name && strcmp ("_sigtramp", name) == 0);
3383 /* We have two flavours of disassembly. The machinery on this page
3384 deals with switching between those. */
3387 i386_print_insn (bfd_vma pc, struct disassemble_info *info)
3389 gdb_assert (disassembly_flavor == att_flavor
3390 || disassembly_flavor == intel_flavor);
3392 /* FIXME: kettenis/20020915: Until disassembler_options is properly
3393 constified, cast to prevent a compiler warning. */
3394 info->disassembler_options = (char *) disassembly_flavor;
3396 return print_insn_i386 (pc, info);
3400 /* There are a few i386 architecture variants that differ only
3401 slightly from the generic i386 target. For now, we don't give them
3402 their own source file, but include them here. As a consequence,
3403 they'll always be included. */
3405 /* System V Release 4 (SVR4). */
3407 /* Return whether THIS_FRAME corresponds to a SVR4 sigtramp
3411 i386_svr4_sigtramp_p (struct frame_info *this_frame)
3413 CORE_ADDR pc = get_frame_pc (this_frame);
3416 /* The origin of these symbols is currently unknown. */
3417 find_pc_partial_function (pc, &name, NULL, NULL);
3418 return (name && (strcmp ("_sigreturn", name) == 0
3419 || strcmp ("sigvechandler", name) == 0));
3422 /* Assuming THIS_FRAME is for a SVR4 sigtramp routine, return the
3423 address of the associated sigcontext (ucontext) structure. */
3426 i386_svr4_sigcontext_addr (struct frame_info *this_frame)
3428 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3429 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3433 get_frame_register (this_frame, I386_ESP_REGNUM, buf);
3434 sp = extract_unsigned_integer (buf, 4, byte_order);
3436 return read_memory_unsigned_integer (sp + 8, 4, byte_order);
3441 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
3445 i386_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
3447 return (*s == '$' /* Literal number. */
3448 || (isdigit (*s) && s[1] == '(' && s[2] == '%') /* Displacement. */
3449 || (*s == '(' && s[1] == '%') /* Register indirection. */
3450 || (*s == '%' && isalpha (s[1]))); /* Register access. */
3453 /* Implementation of `gdbarch_stap_parse_special_token', as defined in
3457 i386_stap_parse_special_token (struct gdbarch *gdbarch,
3458 struct stap_parse_info *p)
3460 /* In order to parse special tokens, we use a state-machine that go
3461 through every known token and try to get a match. */
3465 THREE_ARG_DISPLACEMENT,
3469 current_state = TRIPLET;
3471 /* The special tokens to be parsed here are:
3473 - `register base + (register index * size) + offset', as represented
3474 in `(%rcx,%rax,8)', or `[OFFSET](BASE_REG,INDEX_REG[,SIZE])'.
3476 - Operands of the form `-8+3+1(%rbp)', which must be interpreted as
3477 `*(-8 + 3 - 1 + (void *) $eax)'. */
3479 while (current_state != DONE)
3481 const char *s = p->arg;
3483 switch (current_state)
3487 if (isdigit (*s) || *s == '-' || *s == '+')
3491 long displacements[3];
3507 displacements[0] = strtol (s, &endp, 10);
3510 if (*s != '+' && *s != '-')
3512 /* We are not dealing with a triplet. */
3525 displacements[1] = strtol (s, &endp, 10);
3528 if (*s != '+' && *s != '-')
3530 /* We are not dealing with a triplet. */
3543 displacements[2] = strtol (s, &endp, 10);
3546 if (*s != '(' || s[1] != '%')
3552 while (isalnum (*s))
3559 regname = alloca (len + 1);
3561 strncpy (regname, start, len);
3562 regname[len] = '\0';
3564 if (user_reg_map_name_to_regnum (gdbarch,
3565 regname, len) == -1)
3566 error (_("Invalid register name `%s' "
3567 "on expression `%s'."),
3568 regname, p->saved_arg);
3570 for (i = 0; i < 3; i++)
3572 write_exp_elt_opcode (OP_LONG);
3574 (builtin_type (gdbarch)->builtin_long);
3575 write_exp_elt_longcst (displacements[i]);
3576 write_exp_elt_opcode (OP_LONG);
3578 write_exp_elt_opcode (UNOP_NEG);
3581 write_exp_elt_opcode (OP_REGISTER);
3584 write_exp_string (str);
3585 write_exp_elt_opcode (OP_REGISTER);
3587 write_exp_elt_opcode (UNOP_CAST);
3588 write_exp_elt_type (builtin_type (gdbarch)->builtin_data_ptr);
3589 write_exp_elt_opcode (UNOP_CAST);
3591 write_exp_elt_opcode (BINOP_ADD);
3592 write_exp_elt_opcode (BINOP_ADD);
3593 write_exp_elt_opcode (BINOP_ADD);
3595 write_exp_elt_opcode (UNOP_CAST);
3596 write_exp_elt_type (lookup_pointer_type (p->arg_type));
3597 write_exp_elt_opcode (UNOP_CAST);
3599 write_exp_elt_opcode (UNOP_IND);
3607 case THREE_ARG_DISPLACEMENT:
3609 if (isdigit (*s) || *s == '(' || *s == '-' || *s == '+')
3611 int offset_minus = 0;
3620 struct stoken base_token, index_token;
3630 if (offset_minus && !isdigit (*s))
3637 offset = strtol (s, &endp, 10);
3641 if (*s != '(' || s[1] != '%')
3647 while (isalnum (*s))
3650 if (*s != ',' || s[1] != '%')
3653 len_base = s - start;
3654 base = alloca (len_base + 1);
3655 strncpy (base, start, len_base);
3656 base[len_base] = '\0';
3658 if (user_reg_map_name_to_regnum (gdbarch,
3659 base, len_base) == -1)
3660 error (_("Invalid register name `%s' "
3661 "on expression `%s'."),
3662 base, p->saved_arg);
3667 while (isalnum (*s))
3670 len_index = s - start;
3671 index = alloca (len_index + 1);
3672 strncpy (index, start, len_index);
3673 index[len_index] = '\0';
3675 if (user_reg_map_name_to_regnum (gdbarch,
3676 index, len_index) == -1)
3677 error (_("Invalid register name `%s' "
3678 "on expression `%s'."),
3679 index, p->saved_arg);
3681 if (*s != ',' && *s != ')')
3697 size = strtol (s, &endp, 10);
3708 write_exp_elt_opcode (OP_LONG);
3710 (builtin_type (gdbarch)->builtin_long);
3711 write_exp_elt_longcst (offset);
3712 write_exp_elt_opcode (OP_LONG);
3714 write_exp_elt_opcode (UNOP_NEG);
3717 write_exp_elt_opcode (OP_REGISTER);
3718 base_token.ptr = base;
3719 base_token.length = len_base;
3720 write_exp_string (base_token);
3721 write_exp_elt_opcode (OP_REGISTER);
3724 write_exp_elt_opcode (BINOP_ADD);
3726 write_exp_elt_opcode (OP_REGISTER);
3727 index_token.ptr = index;
3728 index_token.length = len_index;
3729 write_exp_string (index_token);
3730 write_exp_elt_opcode (OP_REGISTER);
3734 write_exp_elt_opcode (OP_LONG);
3736 (builtin_type (gdbarch)->builtin_long);
3737 write_exp_elt_longcst (size);
3738 write_exp_elt_opcode (OP_LONG);
3740 write_exp_elt_opcode (UNOP_NEG);
3741 write_exp_elt_opcode (BINOP_MUL);
3744 write_exp_elt_opcode (BINOP_ADD);
3746 write_exp_elt_opcode (UNOP_CAST);
3747 write_exp_elt_type (lookup_pointer_type (p->arg_type));
3748 write_exp_elt_opcode (UNOP_CAST);
3750 write_exp_elt_opcode (UNOP_IND);
3760 /* Advancing to the next state. */
3772 i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3774 /* We typically use stabs-in-ELF with the SVR4 register numbering. */
3775 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3777 /* Registering SystemTap handlers. */
3778 set_gdbarch_stap_integer_prefix (gdbarch, "$");
3779 set_gdbarch_stap_register_prefix (gdbarch, "%");
3780 set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
3781 set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
3782 set_gdbarch_stap_is_single_operand (gdbarch,
3783 i386_stap_is_single_operand);
3784 set_gdbarch_stap_parse_special_token (gdbarch,
3785 i386_stap_parse_special_token);
3788 /* System V Release 4 (SVR4). */
3791 i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3793 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3795 /* System V Release 4 uses ELF. */
3796 i386_elf_init_abi (info, gdbarch);
3798 /* System V Release 4 has shared libraries. */
3799 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
3801 tdep->sigtramp_p = i386_svr4_sigtramp_p;
3802 tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
3803 tdep->sc_pc_offset = 36 + 14 * 4;
3804 tdep->sc_sp_offset = 36 + 17 * 4;
3806 tdep->jb_pc_offset = 20;
3812 i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
3814 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3816 /* DJGPP doesn't have any special frames for signal handlers. */
3817 tdep->sigtramp_p = NULL;
3819 tdep->jb_pc_offset = 36;
3821 /* DJGPP does not support the SSE registers. */
3822 if (! tdesc_has_registers (info.target_desc))
3823 tdep->tdesc = tdesc_i386_mmx;
3825 /* Native compiler is GCC, which uses the SVR4 register numbering
3826 even in COFF and STABS. See the comment in i386_gdbarch_init,
3827 before the calls to set_gdbarch_stab_reg_to_regnum and
3828 set_gdbarch_sdb_reg_to_regnum. */
3829 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3830 set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
3832 set_gdbarch_has_dos_based_file_system (gdbarch, 1);
3836 /* i386 register groups. In addition to the normal groups, add "mmx"
3839 static struct reggroup *i386_sse_reggroup;
3840 static struct reggroup *i386_mmx_reggroup;
3843 i386_init_reggroups (void)
3845 i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
3846 i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
3850 i386_add_reggroups (struct gdbarch *gdbarch)
3852 reggroup_add (gdbarch, i386_sse_reggroup);
3853 reggroup_add (gdbarch, i386_mmx_reggroup);
3854 reggroup_add (gdbarch, general_reggroup);
3855 reggroup_add (gdbarch, float_reggroup);
3856 reggroup_add (gdbarch, all_reggroup);
3857 reggroup_add (gdbarch, save_reggroup);
3858 reggroup_add (gdbarch, restore_reggroup);
3859 reggroup_add (gdbarch, vector_reggroup);
3860 reggroup_add (gdbarch, system_reggroup);
3864 i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
3865 struct reggroup *group)
3867 const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3868 int fp_regnum_p, mmx_regnum_p, xmm_regnum_p, mxcsr_regnum_p,
3869 ymm_regnum_p, ymmh_regnum_p;
3871 /* Don't include pseudo registers, except for MMX, in any register
3873 if (i386_byte_regnum_p (gdbarch, regnum))
3876 if (i386_word_regnum_p (gdbarch, regnum))
3879 if (i386_dword_regnum_p (gdbarch, regnum))
3882 mmx_regnum_p = i386_mmx_regnum_p (gdbarch, regnum);
3883 if (group == i386_mmx_reggroup)
3884 return mmx_regnum_p;
3886 xmm_regnum_p = i386_xmm_regnum_p (gdbarch, regnum);
3887 mxcsr_regnum_p = i386_mxcsr_regnum_p (gdbarch, regnum);
3888 if (group == i386_sse_reggroup)
3889 return xmm_regnum_p || mxcsr_regnum_p;
3891 ymm_regnum_p = i386_ymm_regnum_p (gdbarch, regnum);
3892 if (group == vector_reggroup)
3893 return (mmx_regnum_p
3897 && ((tdep->xcr0 & I386_XSTATE_AVX_MASK)
3898 == I386_XSTATE_SSE_MASK)));
3900 fp_regnum_p = (i386_fp_regnum_p (gdbarch, regnum)
3901 || i386_fpc_regnum_p (gdbarch, regnum));
3902 if (group == float_reggroup)
3905 /* For "info reg all", don't include upper YMM registers nor XMM
3906 registers when AVX is supported. */
3907 ymmh_regnum_p = i386_ymmh_regnum_p (gdbarch, regnum);
3908 if (group == all_reggroup
3910 && (tdep->xcr0 & I386_XSTATE_AVX))
3914 if (group == general_reggroup)
3915 return (!fp_regnum_p
3922 return default_register_reggroup_p (gdbarch, regnum, group);
3926 /* Get the ARGIth function argument for the current function. */
3929 i386_fetch_pointer_argument (struct frame_info *frame, int argi,
3932 struct gdbarch *gdbarch = get_frame_arch (frame);
3933 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3934 CORE_ADDR sp = get_frame_register_unsigned (frame, I386_ESP_REGNUM);
3935 return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4, byte_order);
3939 i386_skip_permanent_breakpoint (struct regcache *regcache)
3941 CORE_ADDR current_pc = regcache_read_pc (regcache);
3943 /* On i386, breakpoint is exactly 1 byte long, so we just
3944 adjust the PC in the regcache. */
3946 regcache_write_pc (regcache, current_pc);
3950 #define PREFIX_REPZ 0x01
3951 #define PREFIX_REPNZ 0x02
3952 #define PREFIX_LOCK 0x04
3953 #define PREFIX_DATA 0x08
3954 #define PREFIX_ADDR 0x10
3966 /* i386 arith/logic operations */
3979 struct i386_record_s
3981 struct gdbarch *gdbarch;
3982 struct regcache *regcache;
3983 CORE_ADDR orig_addr;
3989 uint8_t mod, reg, rm;
3998 /* Parse the "modrm" part of the memory address irp->addr points at.
3999 Returns -1 if something goes wrong, 0 otherwise. */
4002 i386_record_modrm (struct i386_record_s *irp)
4004 struct gdbarch *gdbarch = irp->gdbarch;
4006 if (record_read_memory (gdbarch, irp->addr, &irp->modrm, 1))
4010 irp->mod = (irp->modrm >> 6) & 3;
4011 irp->reg = (irp->modrm >> 3) & 7;
4012 irp->rm = irp->modrm & 7;
4017 /* Extract the memory address that the current instruction writes to,
4018 and return it in *ADDR. Return -1 if something goes wrong. */
4021 i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr)
4023 struct gdbarch *gdbarch = irp->gdbarch;
4024 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4036 uint8_t base = irp->rm;
4041 if (record_read_memory (gdbarch, irp->addr, &byte, 1))
4044 scale = (byte >> 6) & 3;
4045 index = ((byte >> 3) & 7) | irp->rex_x;
4053 if ((base & 7) == 5)
4056 if (record_read_memory (gdbarch, irp->addr, buf, 4))
4059 *addr = extract_signed_integer (buf, 4, byte_order);
4060 if (irp->regmap[X86_RECORD_R8_REGNUM] && !havesib)
4061 *addr += irp->addr + irp->rip_offset;
4065 if (record_read_memory (gdbarch, irp->addr, buf, 1))
4068 *addr = (int8_t) buf[0];
4071 if (record_read_memory (gdbarch, irp->addr, buf, 4))
4073 *addr = extract_signed_integer (buf, 4, byte_order);
4081 if (base == 4 && irp->popl_esp_hack)
4082 *addr += irp->popl_esp_hack;
4083 regcache_raw_read_unsigned (irp->regcache, irp->regmap[base],
4086 if (irp->aflag == 2)
4091 *addr = (uint32_t) (offset64 + *addr);
4093 if (havesib && (index != 4 || scale != 0))
4095 regcache_raw_read_unsigned (irp->regcache, irp->regmap[index],
4097 if (irp->aflag == 2)
4098 *addr += offset64 << scale;
4100 *addr = (uint32_t) (*addr + (offset64 << scale));
4111 if (record_read_memory (gdbarch, irp->addr, buf, 2))
4114 *addr = extract_signed_integer (buf, 2, byte_order);
4120 if (record_read_memory (gdbarch, irp->addr, buf, 1))
4123 *addr = (int8_t) buf[0];
4126 if (record_read_memory (gdbarch, irp->addr, buf, 2))
4129 *addr = extract_signed_integer (buf, 2, byte_order);
4136 regcache_raw_read_unsigned (irp->regcache,
4137 irp->regmap[X86_RECORD_REBX_REGNUM],
4139 *addr = (uint32_t) (*addr + offset64);
4140 regcache_raw_read_unsigned (irp->regcache,
4141 irp->regmap[X86_RECORD_RESI_REGNUM],
4143 *addr = (uint32_t) (*addr + offset64);
4146 regcache_raw_read_unsigned (irp->regcache,
4147 irp->regmap[X86_RECORD_REBX_REGNUM],
4149 *addr = (uint32_t) (*addr + offset64);
4150 regcache_raw_read_unsigned (irp->regcache,
4151 irp->regmap[X86_RECORD_REDI_REGNUM],
4153 *addr = (uint32_t) (*addr + offset64);
4156 regcache_raw_read_unsigned (irp->regcache,
4157 irp->regmap[X86_RECORD_REBP_REGNUM],
4159 *addr = (uint32_t) (*addr + offset64);
4160 regcache_raw_read_unsigned (irp->regcache,
4161 irp->regmap[X86_RECORD_RESI_REGNUM],
4163 *addr = (uint32_t) (*addr + offset64);
4166 regcache_raw_read_unsigned (irp->regcache,
4167 irp->regmap[X86_RECORD_REBP_REGNUM],
4169 *addr = (uint32_t) (*addr + offset64);
4170 regcache_raw_read_unsigned (irp->regcache,
4171 irp->regmap[X86_RECORD_REDI_REGNUM],
4173 *addr = (uint32_t) (*addr + offset64);
4176 regcache_raw_read_unsigned (irp->regcache,
4177 irp->regmap[X86_RECORD_RESI_REGNUM],
4179 *addr = (uint32_t) (*addr + offset64);
4182 regcache_raw_read_unsigned (irp->regcache,
4183 irp->regmap[X86_RECORD_REDI_REGNUM],
4185 *addr = (uint32_t) (*addr + offset64);
4188 regcache_raw_read_unsigned (irp->regcache,
4189 irp->regmap[X86_RECORD_REBP_REGNUM],
4191 *addr = (uint32_t) (*addr + offset64);
4194 regcache_raw_read_unsigned (irp->regcache,
4195 irp->regmap[X86_RECORD_REBX_REGNUM],
4197 *addr = (uint32_t) (*addr + offset64);
4207 /* Record the address and contents of the memory that will be changed
4208 by the current instruction. Return -1 if something goes wrong, 0
4212 i386_record_lea_modrm (struct i386_record_s *irp)
4214 struct gdbarch *gdbarch = irp->gdbarch;
4217 if (irp->override >= 0)
4219 if (record_full_memory_query)
4223 target_terminal_ours ();
4225 Process record ignores the memory change of instruction at address %s\n\
4226 because it can't get the value of the segment register.\n\
4227 Do you want to stop the program?"),
4228 paddress (gdbarch, irp->orig_addr));
4229 target_terminal_inferior ();
4237 if (i386_record_lea_modrm_addr (irp, &addr))
4240 if (record_full_arch_list_add_mem (addr, 1 << irp->ot))
4246 /* Record the effects of a push operation. Return -1 if something
4247 goes wrong, 0 otherwise. */
4250 i386_record_push (struct i386_record_s *irp, int size)
4254 if (record_full_arch_list_add_reg (irp->regcache,
4255 irp->regmap[X86_RECORD_RESP_REGNUM]))
4257 regcache_raw_read_unsigned (irp->regcache,
4258 irp->regmap[X86_RECORD_RESP_REGNUM],
4260 if (record_full_arch_list_add_mem ((CORE_ADDR) addr - size, size))
4267 /* Defines contents to record. */
4268 #define I386_SAVE_FPU_REGS 0xfffd
4269 #define I386_SAVE_FPU_ENV 0xfffe
4270 #define I386_SAVE_FPU_ENV_REG_STACK 0xffff
4272 /* Record the values of the floating point registers which will be
4273 changed by the current instruction. Returns -1 if something is
4274 wrong, 0 otherwise. */
4276 static int i386_record_floats (struct gdbarch *gdbarch,
4277 struct i386_record_s *ir,
4280 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4283 /* Oza: Because of floating point insn push/pop of fpu stack is going to
4284 happen. Currently we store st0-st7 registers, but we need not store all
4285 registers all the time, in future we use ftag register and record only
4286 those who are not marked as an empty. */
4288 if (I386_SAVE_FPU_REGS == iregnum)
4290 for (i = I387_ST0_REGNUM (tdep); i <= I387_ST0_REGNUM (tdep) + 7; i++)
4292 if (record_full_arch_list_add_reg (ir->regcache, i))
4296 else if (I386_SAVE_FPU_ENV == iregnum)
4298 for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
4300 if (record_full_arch_list_add_reg (ir->regcache, i))
4304 else if (I386_SAVE_FPU_ENV_REG_STACK == iregnum)
4306 for (i = I387_ST0_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
4308 if (record_full_arch_list_add_reg (ir->regcache, i))
4312 else if ((iregnum >= I387_ST0_REGNUM (tdep)) &&
4313 (iregnum <= I387_FOP_REGNUM (tdep)))
4315 if (record_full_arch_list_add_reg (ir->regcache,iregnum))
4320 /* Parameter error. */
4323 if(I386_SAVE_FPU_ENV != iregnum)
4325 for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
4327 if (record_full_arch_list_add_reg (ir->regcache, i))
4334 /* Parse the current instruction, and record the values of the
4335 registers and memory that will be changed by the current
4336 instruction. Returns -1 if something goes wrong, 0 otherwise. */
4338 #define I386_RECORD_FULL_ARCH_LIST_ADD_REG(regnum) \
4339 record_full_arch_list_add_reg (ir.regcache, ir.regmap[(regnum)])
4342 i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
4343 CORE_ADDR input_addr)
4345 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4351 gdb_byte buf[MAX_REGISTER_SIZE];
4352 struct i386_record_s ir;
4353 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4357 memset (&ir, 0, sizeof (struct i386_record_s));
4358 ir.regcache = regcache;
4359 ir.addr = input_addr;
4360 ir.orig_addr = input_addr;
4364 ir.popl_esp_hack = 0;
4365 ir.regmap = tdep->record_regmap;
4366 ir.gdbarch = gdbarch;
4368 if (record_debug > 1)
4369 fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
4371 paddress (gdbarch, ir.addr));
4376 if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
4379 switch (opcode8) /* Instruction prefixes */
4381 case REPE_PREFIX_OPCODE:
4382 prefixes |= PREFIX_REPZ;
4384 case REPNE_PREFIX_OPCODE:
4385 prefixes |= PREFIX_REPNZ;
4387 case LOCK_PREFIX_OPCODE:
4388 prefixes |= PREFIX_LOCK;
4390 case CS_PREFIX_OPCODE:
4391 ir.override = X86_RECORD_CS_REGNUM;
4393 case SS_PREFIX_OPCODE:
4394 ir.override = X86_RECORD_SS_REGNUM;
4396 case DS_PREFIX_OPCODE:
4397 ir.override = X86_RECORD_DS_REGNUM;
4399 case ES_PREFIX_OPCODE:
4400 ir.override = X86_RECORD_ES_REGNUM;
4402 case FS_PREFIX_OPCODE:
4403 ir.override = X86_RECORD_FS_REGNUM;
4405 case GS_PREFIX_OPCODE:
4406 ir.override = X86_RECORD_GS_REGNUM;
4408 case DATA_PREFIX_OPCODE:
4409 prefixes |= PREFIX_DATA;
4411 case ADDR_PREFIX_OPCODE:
4412 prefixes |= PREFIX_ADDR;
4414 case 0x40: /* i386 inc %eax */
4415 case 0x41: /* i386 inc %ecx */
4416 case 0x42: /* i386 inc %edx */
4417 case 0x43: /* i386 inc %ebx */
4418 case 0x44: /* i386 inc %esp */
4419 case 0x45: /* i386 inc %ebp */
4420 case 0x46: /* i386 inc %esi */
4421 case 0x47: /* i386 inc %edi */
4422 case 0x48: /* i386 dec %eax */
4423 case 0x49: /* i386 dec %ecx */
4424 case 0x4a: /* i386 dec %edx */
4425 case 0x4b: /* i386 dec %ebx */
4426 case 0x4c: /* i386 dec %esp */
4427 case 0x4d: /* i386 dec %ebp */
4428 case 0x4e: /* i386 dec %esi */
4429 case 0x4f: /* i386 dec %edi */
4430 if (ir.regmap[X86_RECORD_R8_REGNUM]) /* 64 bit target */
4433 rex_w = (opcode8 >> 3) & 1;
4434 rex_r = (opcode8 & 0x4) << 1;
4435 ir.rex_x = (opcode8 & 0x2) << 2;
4436 ir.rex_b = (opcode8 & 0x1) << 3;
4438 else /* 32 bit target */
4447 if (ir.regmap[X86_RECORD_R8_REGNUM] && rex_w == 1)
4453 if (prefixes & PREFIX_DATA)
4456 if (prefixes & PREFIX_ADDR)
4458 else if (ir.regmap[X86_RECORD_R8_REGNUM])
4461 /* Now check op code. */
4462 opcode = (uint32_t) opcode8;
4467 if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
4470 opcode = (uint32_t) opcode8 | 0x0f00;
4474 case 0x00: /* arith & logic */
4522 if (((opcode >> 3) & 7) != OP_CMPL)
4524 if ((opcode & 1) == 0)
4527 ir.ot = ir.dflag + OT_WORD;
4529 switch ((opcode >> 1) & 3)
4531 case 0: /* OP Ev, Gv */
4532 if (i386_record_modrm (&ir))
4536 if (i386_record_lea_modrm (&ir))
4542 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4544 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
4547 case 1: /* OP Gv, Ev */
4548 if (i386_record_modrm (&ir))
4551 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4553 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
4555 case 2: /* OP A, Iv */
4556 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4560 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4563 case 0x80: /* GRP1 */
4567 if (i386_record_modrm (&ir))
4570 if (ir.reg != OP_CMPL)
4572 if ((opcode & 1) == 0)
4575 ir.ot = ir.dflag + OT_WORD;
4582 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4583 if (i386_record_lea_modrm (&ir))
4587 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4589 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4592 case 0x40: /* inc */
4601 case 0x48: /* dec */
4610 I386_RECORD_FULL_ARCH_LIST_ADD_REG (opcode & 7);
4611 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4614 case 0xf6: /* GRP3 */
4616 if ((opcode & 1) == 0)
4619 ir.ot = ir.dflag + OT_WORD;
4620 if (i386_record_modrm (&ir))
4623 if (ir.mod != 3 && ir.reg == 0)
4624 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4629 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4635 if (i386_record_lea_modrm (&ir))
4641 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4643 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
4645 if (ir.reg == 3) /* neg */
4646 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4652 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4653 if (ir.ot != OT_BYTE)
4654 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4655 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4659 opcode = opcode << 8 | ir.modrm;
4665 case 0xfe: /* GRP4 */
4666 case 0xff: /* GRP5 */
4667 if (i386_record_modrm (&ir))
4669 if (ir.reg >= 2 && opcode == 0xfe)
4672 opcode = opcode << 8 | ir.modrm;
4679 if ((opcode & 1) == 0)
4682 ir.ot = ir.dflag + OT_WORD;
4685 if (i386_record_lea_modrm (&ir))
4691 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4693 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
4695 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4698 if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4700 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4702 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4705 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
4706 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4708 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4712 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4715 if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4717 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4722 opcode = opcode << 8 | ir.modrm;
4728 case 0x84: /* test */
4732 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4735 case 0x98: /* CWDE/CBW */
4736 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4739 case 0x99: /* CDQ/CWD */
4740 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4741 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4744 case 0x0faf: /* imul */
4747 ir.ot = ir.dflag + OT_WORD;
4748 if (i386_record_modrm (&ir))
4751 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4752 else if (opcode == 0x6b)
4755 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4757 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
4758 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4761 case 0x0fc0: /* xadd */
4763 if ((opcode & 1) == 0)
4766 ir.ot = ir.dflag + OT_WORD;
4767 if (i386_record_modrm (&ir))
4772 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4774 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
4775 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4777 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
4781 if (i386_record_lea_modrm (&ir))
4783 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4785 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
4787 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4790 case 0x0fb0: /* cmpxchg */
4792 if ((opcode & 1) == 0)
4795 ir.ot = ir.dflag + OT_WORD;
4796 if (i386_record_modrm (&ir))
4801 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4802 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
4804 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
4808 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4809 if (i386_record_lea_modrm (&ir))
4812 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4815 case 0x0fc7: /* cmpxchg8b */
4816 if (i386_record_modrm (&ir))
4821 opcode = opcode << 8 | ir.modrm;
4824 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
4825 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
4826 if (i386_record_lea_modrm (&ir))
4828 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4831 case 0x50: /* push */
4841 if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4843 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4847 case 0x06: /* push es */
4848 case 0x0e: /* push cs */
4849 case 0x16: /* push ss */
4850 case 0x1e: /* push ds */
4851 if (ir.regmap[X86_RECORD_R8_REGNUM])
4856 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4860 case 0x0fa0: /* push fs */
4861 case 0x0fa8: /* push gs */
4862 if (ir.regmap[X86_RECORD_R8_REGNUM])
4867 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4871 case 0x60: /* pusha */
4872 if (ir.regmap[X86_RECORD_R8_REGNUM])
4877 if (i386_record_push (&ir, 1 << (ir.dflag + 4)))
4881 case 0x58: /* pop */
4889 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4890 I386_RECORD_FULL_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
4893 case 0x61: /* popa */
4894 if (ir.regmap[X86_RECORD_R8_REGNUM])
4899 for (regnum = X86_RECORD_REAX_REGNUM;
4900 regnum <= X86_RECORD_REDI_REGNUM;
4902 I386_RECORD_FULL_ARCH_LIST_ADD_REG (regnum);
4905 case 0x8f: /* pop */
4906 if (ir.regmap[X86_RECORD_R8_REGNUM])
4907 ir.ot = ir.dflag ? OT_QUAD : OT_WORD;
4909 ir.ot = ir.dflag + OT_WORD;
4910 if (i386_record_modrm (&ir))
4913 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
4916 ir.popl_esp_hack = 1 << ir.ot;
4917 if (i386_record_lea_modrm (&ir))
4920 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4923 case 0xc8: /* enter */
4924 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
4925 if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
4927 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
4931 case 0xc9: /* leave */
4932 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4933 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
4936 case 0x07: /* pop es */
4937 if (ir.regmap[X86_RECORD_R8_REGNUM])
4942 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4943 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_ES_REGNUM);
4944 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4947 case 0x17: /* pop ss */
4948 if (ir.regmap[X86_RECORD_R8_REGNUM])
4953 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4954 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_SS_REGNUM);
4955 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4958 case 0x1f: /* pop ds */
4959 if (ir.regmap[X86_RECORD_R8_REGNUM])
4964 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4965 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_DS_REGNUM);
4966 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4969 case 0x0fa1: /* pop fs */
4970 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4971 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_FS_REGNUM);
4972 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4975 case 0x0fa9: /* pop gs */
4976 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
4977 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
4978 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
4981 case 0x88: /* mov */
4985 if ((opcode & 1) == 0)
4988 ir.ot = ir.dflag + OT_WORD;
4990 if (i386_record_modrm (&ir))
4995 if (opcode == 0xc6 || opcode == 0xc7)
4996 ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
4997 if (i386_record_lea_modrm (&ir))
5002 if (opcode == 0xc6 || opcode == 0xc7)
5004 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
5006 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
5010 case 0x8a: /* mov */
5012 if ((opcode & 1) == 0)
5015 ir.ot = ir.dflag + OT_WORD;
5016 if (i386_record_modrm (&ir))
5019 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
5021 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
5024 case 0x8c: /* mov seg */
5025 if (i386_record_modrm (&ir))
5030 opcode = opcode << 8 | ir.modrm;
5035 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
5039 if (i386_record_lea_modrm (&ir))
5044 case 0x8e: /* mov seg */
5045 if (i386_record_modrm (&ir))
5050 regnum = X86_RECORD_ES_REGNUM;
5053 regnum = X86_RECORD_SS_REGNUM;
5056 regnum = X86_RECORD_DS_REGNUM;
5059 regnum = X86_RECORD_FS_REGNUM;
5062 regnum = X86_RECORD_GS_REGNUM;
5066 opcode = opcode << 8 | ir.modrm;
5070 I386_RECORD_FULL_ARCH_LIST_ADD_REG (regnum);
5071 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5074 case 0x0fb6: /* movzbS */
5075 case 0x0fb7: /* movzwS */
5076 case 0x0fbe: /* movsbS */
5077 case 0x0fbf: /* movswS */
5078 if (i386_record_modrm (&ir))
5080 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
5083 case 0x8d: /* lea */
5084 if (i386_record_modrm (&ir))
5089 opcode = opcode << 8 | ir.modrm;
5094 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
5096 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
5099 case 0xa0: /* mov EAX */
5102 case 0xd7: /* xlat */
5103 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5106 case 0xa2: /* mov EAX */
5108 if (ir.override >= 0)
5110 if (record_full_memory_query)
5114 target_terminal_ours ();
5116 Process record ignores the memory change of instruction at address %s\n\
5117 because it can't get the value of the segment register.\n\
5118 Do you want to stop the program?"),
5119 paddress (gdbarch, ir.orig_addr));
5120 target_terminal_inferior ();
5127 if ((opcode & 1) == 0)
5130 ir.ot = ir.dflag + OT_WORD;
5133 if (record_read_memory (gdbarch, ir.addr, buf, 8))
5136 addr = extract_unsigned_integer (buf, 8, byte_order);
5140 if (record_read_memory (gdbarch, ir.addr, buf, 4))
5143 addr = extract_unsigned_integer (buf, 4, byte_order);
5147 if (record_read_memory (gdbarch, ir.addr, buf, 2))
5150 addr = extract_unsigned_integer (buf, 2, byte_order);
5152 if (record_full_arch_list_add_mem (addr, 1 << ir.ot))
5157 case 0xb0: /* mov R, Ib */
5165 I386_RECORD_FULL_ARCH_LIST_ADD_REG ((ir.regmap[X86_RECORD_R8_REGNUM])
5166 ? ((opcode & 0x7) | ir.rex_b)
5167 : ((opcode & 0x7) & 0x3));
5170 case 0xb8: /* mov R, Iv */
5178 I386_RECORD_FULL_ARCH_LIST_ADD_REG ((opcode & 0x7) | ir.rex_b);
5181 case 0x91: /* xchg R, EAX */
5188 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5189 I386_RECORD_FULL_ARCH_LIST_ADD_REG (opcode & 0x7);
5192 case 0x86: /* xchg Ev, Gv */
5194 if ((opcode & 1) == 0)
5197 ir.ot = ir.dflag + OT_WORD;
5198 if (i386_record_modrm (&ir))
5203 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
5205 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
5209 if (i386_record_lea_modrm (&ir))
5213 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
5215 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
5218 case 0xc4: /* les Gv */
5219 case 0xc5: /* lds Gv */
5220 if (ir.regmap[X86_RECORD_R8_REGNUM])
5226 case 0x0fb2: /* lss Gv */
5227 case 0x0fb4: /* lfs Gv */
5228 case 0x0fb5: /* lgs Gv */
5229 if (i386_record_modrm (&ir))
5237 opcode = opcode << 8 | ir.modrm;
5242 case 0xc4: /* les Gv */
5243 regnum = X86_RECORD_ES_REGNUM;
5245 case 0xc5: /* lds Gv */
5246 regnum = X86_RECORD_DS_REGNUM;
5248 case 0x0fb2: /* lss Gv */
5249 regnum = X86_RECORD_SS_REGNUM;
5251 case 0x0fb4: /* lfs Gv */
5252 regnum = X86_RECORD_FS_REGNUM;
5254 case 0x0fb5: /* lgs Gv */
5255 regnum = X86_RECORD_GS_REGNUM;
5258 I386_RECORD_FULL_ARCH_LIST_ADD_REG (regnum);
5259 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
5260 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5263 case 0xc0: /* shifts */
5269 if ((opcode & 1) == 0)
5272 ir.ot = ir.dflag + OT_WORD;
5273 if (i386_record_modrm (&ir))
5275 if (ir.mod != 3 && (opcode == 0xd2 || opcode == 0xd3))
5277 if (i386_record_lea_modrm (&ir))
5283 if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
5285 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
5287 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5294 if (i386_record_modrm (&ir))
5298 if (record_full_arch_list_add_reg (ir.regcache, ir.rm))
5303 if (i386_record_lea_modrm (&ir))
5308 case 0xd8: /* Floats. */
5316 if (i386_record_modrm (&ir))
5318 ir.reg |= ((opcode & 7) << 3);
5324 if (i386_record_lea_modrm_addr (&ir, &addr64))
5332 /* For fcom, ficom nothing to do. */
5338 /* For fcomp, ficomp pop FPU stack, store all. */
5339 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5366 /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,
5367 fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension
5368 of code, always affects st(0) register. */
5369 if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
5393 /* Handling fld, fild. */
5394 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5398 switch (ir.reg >> 4)
5401 if (record_full_arch_list_add_mem (addr64, 4))
5405 if (record_full_arch_list_add_mem (addr64, 8))
5411 if (record_full_arch_list_add_mem (addr64, 2))
5417 switch (ir.reg >> 4)
5420 if (record_full_arch_list_add_mem (addr64, 4))
5422 if (3 == (ir.reg & 7))
5424 /* For fstp m32fp. */
5425 if (i386_record_floats (gdbarch, &ir,
5426 I386_SAVE_FPU_REGS))
5431 if (record_full_arch_list_add_mem (addr64, 4))
5433 if ((3 == (ir.reg & 7))
5434 || (5 == (ir.reg & 7))
5435 || (7 == (ir.reg & 7)))
5437 /* For fstp insn. */
5438 if (i386_record_floats (gdbarch, &ir,
5439 I386_SAVE_FPU_REGS))
5444 if (record_full_arch_list_add_mem (addr64, 8))
5446 if (3 == (ir.reg & 7))
5448 /* For fstp m64fp. */
5449 if (i386_record_floats (gdbarch, &ir,
5450 I386_SAVE_FPU_REGS))
5455 if ((3 <= (ir.reg & 7)) && (6 <= (ir.reg & 7)))
5457 /* For fistp, fbld, fild, fbstp. */
5458 if (i386_record_floats (gdbarch, &ir,
5459 I386_SAVE_FPU_REGS))
5464 if (record_full_arch_list_add_mem (addr64, 2))
5473 if (i386_record_floats (gdbarch, &ir,
5474 I386_SAVE_FPU_ENV_REG_STACK))
5479 if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep)))
5484 if (i386_record_floats (gdbarch, &ir,
5485 I386_SAVE_FPU_ENV_REG_STACK))
5491 if (record_full_arch_list_add_mem (addr64, 28))
5496 if (record_full_arch_list_add_mem (addr64, 14))
5502 if (record_full_arch_list_add_mem (addr64, 2))
5504 /* Insn fstp, fbstp. */
5505 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5510 if (record_full_arch_list_add_mem (addr64, 10))
5516 if (record_full_arch_list_add_mem (addr64, 28))
5522 if (record_full_arch_list_add_mem (addr64, 14))
5526 if (record_full_arch_list_add_mem (addr64, 80))
5529 if (i386_record_floats (gdbarch, &ir,
5530 I386_SAVE_FPU_ENV_REG_STACK))
5534 if (record_full_arch_list_add_mem (addr64, 8))
5537 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5542 opcode = opcode << 8 | ir.modrm;
5547 /* Opcode is an extension of modR/M byte. */
5553 if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
5557 if (0x0c == (ir.modrm >> 4))
5559 if ((ir.modrm & 0x0f) <= 7)
5561 if (i386_record_floats (gdbarch, &ir,
5562 I386_SAVE_FPU_REGS))
5567 if (i386_record_floats (gdbarch, &ir,
5568 I387_ST0_REGNUM (tdep)))
5570 /* If only st(0) is changing, then we have already
5572 if ((ir.modrm & 0x0f) - 0x08)
5574 if (i386_record_floats (gdbarch, &ir,
5575 I387_ST0_REGNUM (tdep) +
5576 ((ir.modrm & 0x0f) - 0x08)))
5594 if (i386_record_floats (gdbarch, &ir,
5595 I387_ST0_REGNUM (tdep)))
5613 if (i386_record_floats (gdbarch, &ir,
5614 I386_SAVE_FPU_REGS))
5618 if (i386_record_floats (gdbarch, &ir,
5619 I387_ST0_REGNUM (tdep)))
5621 if (i386_record_floats (gdbarch, &ir,
5622 I387_ST0_REGNUM (tdep) + 1))
5629 if (0xe9 == ir.modrm)
5631 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5634 else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
5636 if (i386_record_floats (gdbarch, &ir,
5637 I387_ST0_REGNUM (tdep)))
5639 if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
5641 if (i386_record_floats (gdbarch, &ir,
5642 I387_ST0_REGNUM (tdep) +
5646 else if ((ir.modrm & 0x0f) - 0x08)
5648 if (i386_record_floats (gdbarch, &ir,
5649 I387_ST0_REGNUM (tdep) +
5650 ((ir.modrm & 0x0f) - 0x08)))
5656 if (0xe3 == ir.modrm)
5658 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV))
5661 else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
5663 if (i386_record_floats (gdbarch, &ir,
5664 I387_ST0_REGNUM (tdep)))
5666 if (((ir.modrm & 0x0f) > 0) && ((ir.modrm & 0x0f) <= 7))
5668 if (i386_record_floats (gdbarch, &ir,
5669 I387_ST0_REGNUM (tdep) +
5673 else if ((ir.modrm & 0x0f) - 0x08)
5675 if (i386_record_floats (gdbarch, &ir,
5676 I387_ST0_REGNUM (tdep) +
5677 ((ir.modrm & 0x0f) - 0x08)))
5683 if ((0x0c == ir.modrm >> 4)
5684 || (0x0d == ir.modrm >> 4)
5685 || (0x0f == ir.modrm >> 4))
5687 if ((ir.modrm & 0x0f) <= 7)
5689 if (i386_record_floats (gdbarch, &ir,
5690 I387_ST0_REGNUM (tdep) +
5696 if (i386_record_floats (gdbarch, &ir,
5697 I387_ST0_REGNUM (tdep) +
5698 ((ir.modrm & 0x0f) - 0x08)))
5704 if (0x0c == ir.modrm >> 4)
5706 if (i386_record_floats (gdbarch, &ir,
5707 I387_FTAG_REGNUM (tdep)))
5710 else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
5712 if ((ir.modrm & 0x0f) <= 7)
5714 if (i386_record_floats (gdbarch, &ir,
5715 I387_ST0_REGNUM (tdep) +
5721 if (i386_record_floats (gdbarch, &ir,
5722 I386_SAVE_FPU_REGS))
5728 if ((0x0c == ir.modrm >> 4)
5729 || (0x0e == ir.modrm >> 4)
5730 || (0x0f == ir.modrm >> 4)
5731 || (0xd9 == ir.modrm))
5733 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5738 if (0xe0 == ir.modrm)
5740 if (record_full_arch_list_add_reg (ir.regcache,
5744 else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
5746 if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
5754 case 0xa4: /* movsS */
5756 case 0xaa: /* stosS */
5758 case 0x6c: /* insS */
5760 regcache_raw_read_unsigned (ir.regcache,
5761 ir.regmap[X86_RECORD_RECX_REGNUM],
5767 if ((opcode & 1) == 0)
5770 ir.ot = ir.dflag + OT_WORD;
5771 regcache_raw_read_unsigned (ir.regcache,
5772 ir.regmap[X86_RECORD_REDI_REGNUM],
5775 regcache_raw_read_unsigned (ir.regcache,
5776 ir.regmap[X86_RECORD_ES_REGNUM],
5778 regcache_raw_read_unsigned (ir.regcache,
5779 ir.regmap[X86_RECORD_DS_REGNUM],
5781 if (ir.aflag && (es != ds))
5783 /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */
5784 if (record_full_memory_query)
5788 target_terminal_ours ();
5790 Process record ignores the memory change of instruction at address %s\n\
5791 because it can't get the value of the segment register.\n\
5792 Do you want to stop the program?"),
5793 paddress (gdbarch, ir.orig_addr));
5794 target_terminal_inferior ();
5801 if (record_full_arch_list_add_mem (addr, 1 << ir.ot))
5805 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5806 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5807 if (opcode == 0xa4 || opcode == 0xa5)
5808 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5809 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5810 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5814 case 0xa6: /* cmpsS */
5816 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5817 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5818 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5819 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5820 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5823 case 0xac: /* lodsS */
5825 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5826 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5827 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5828 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5829 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5832 case 0xae: /* scasS */
5834 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
5835 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5836 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5837 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5840 case 0x6e: /* outsS */
5842 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
5843 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
5844 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
5845 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5848 case 0xe4: /* port I/O */
5852 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5853 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
5863 case 0xc2: /* ret im */
5864 case 0xc3: /* ret */
5865 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5866 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5869 case 0xca: /* lret im */
5870 case 0xcb: /* lret */
5871 case 0xcf: /* iret */
5872 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
5873 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5874 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5877 case 0xe8: /* call im */
5878 if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
5880 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5884 case 0x9a: /* lcall im */
5885 if (ir.regmap[X86_RECORD_R8_REGNUM])
5890 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
5891 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5895 case 0xe9: /* jmp im */
5896 case 0xea: /* ljmp im */
5897 case 0xeb: /* jmp Jb */
5898 case 0x70: /* jcc Jb */
5914 case 0x0f80: /* jcc Jv */
5932 case 0x0f90: /* setcc Gv */
5948 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5950 if (i386_record_modrm (&ir))
5953 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b)
5957 if (i386_record_lea_modrm (&ir))
5962 case 0x0f40: /* cmov Gv, Ev */
5978 if (i386_record_modrm (&ir))
5981 if (ir.dflag == OT_BYTE)
5983 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
5987 case 0x9c: /* pushf */
5988 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
5989 if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
5991 if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
5995 case 0x9d: /* popf */
5996 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
5997 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6000 case 0x9e: /* sahf */
6001 if (ir.regmap[X86_RECORD_R8_REGNUM])
6007 case 0xf5: /* cmc */
6008 case 0xf8: /* clc */
6009 case 0xf9: /* stc */
6010 case 0xfc: /* cld */
6011 case 0xfd: /* std */
6012 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6015 case 0x9f: /* lahf */
6016 if (ir.regmap[X86_RECORD_R8_REGNUM])
6021 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6022 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6025 /* bit operations */
6026 case 0x0fba: /* bt/bts/btr/btc Gv, im */
6027 ir.ot = ir.dflag + OT_WORD;
6028 if (i386_record_modrm (&ir))
6033 opcode = opcode << 8 | ir.modrm;
6039 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6042 if (i386_record_lea_modrm (&ir))
6046 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6049 case 0x0fa3: /* bt Gv, Ev */
6050 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6053 case 0x0fab: /* bts */
6054 case 0x0fb3: /* btr */
6055 case 0x0fbb: /* btc */
6056 ir.ot = ir.dflag + OT_WORD;
6057 if (i386_record_modrm (&ir))
6060 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6064 if (i386_record_lea_modrm_addr (&ir, &addr64))
6066 regcache_raw_read_unsigned (ir.regcache,
6067 ir.regmap[ir.reg | rex_r],
6072 addr64 += ((int16_t) addr >> 4) << 4;
6075 addr64 += ((int32_t) addr >> 5) << 5;
6078 addr64 += ((int64_t) addr >> 6) << 6;
6081 if (record_full_arch_list_add_mem (addr64, 1 << ir.ot))
6083 if (i386_record_lea_modrm (&ir))
6086 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6089 case 0x0fbc: /* bsf */
6090 case 0x0fbd: /* bsr */
6091 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
6092 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6096 case 0x27: /* daa */
6097 case 0x2f: /* das */
6098 case 0x37: /* aaa */
6099 case 0x3f: /* aas */
6100 case 0xd4: /* aam */
6101 case 0xd5: /* aad */
6102 if (ir.regmap[X86_RECORD_R8_REGNUM])
6107 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6108 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6112 case 0x90: /* nop */
6113 if (prefixes & PREFIX_LOCK)
6120 case 0x9b: /* fwait */
6121 if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
6123 opcode = (uint32_t) opcode8;
6129 case 0xcc: /* int3 */
6130 printf_unfiltered (_("Process record does not support instruction "
6137 case 0xcd: /* int */
6141 if (record_read_memory (gdbarch, ir.addr, &interrupt, 1))
6144 if (interrupt != 0x80
6145 || tdep->i386_intx80_record == NULL)
6147 printf_unfiltered (_("Process record does not support "
6148 "instruction int 0x%02x.\n"),
6153 ret = tdep->i386_intx80_record (ir.regcache);
6160 case 0xce: /* into */
6161 printf_unfiltered (_("Process record does not support "
6162 "instruction into.\n"));
6167 case 0xfa: /* cli */
6168 case 0xfb: /* sti */
6171 case 0x62: /* bound */
6172 printf_unfiltered (_("Process record does not support "
6173 "instruction bound.\n"));
6178 case 0x0fc8: /* bswap reg */
6186 I386_RECORD_FULL_ARCH_LIST_ADD_REG ((opcode & 7) | ir.rex_b);
6189 case 0xd6: /* salc */
6190 if (ir.regmap[X86_RECORD_R8_REGNUM])
6195 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6196 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6199 case 0xe0: /* loopnz */
6200 case 0xe1: /* loopz */
6201 case 0xe2: /* loop */
6202 case 0xe3: /* jecxz */
6203 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
6204 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6207 case 0x0f30: /* wrmsr */
6208 printf_unfiltered (_("Process record does not support "
6209 "instruction wrmsr.\n"));
6214 case 0x0f32: /* rdmsr */
6215 printf_unfiltered (_("Process record does not support "
6216 "instruction rdmsr.\n"));
6221 case 0x0f31: /* rdtsc */
6222 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6223 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6226 case 0x0f34: /* sysenter */
6229 if (ir.regmap[X86_RECORD_R8_REGNUM])
6234 if (tdep->i386_sysenter_record == NULL)
6236 printf_unfiltered (_("Process record does not support "
6237 "instruction sysenter.\n"));
6241 ret = tdep->i386_sysenter_record (ir.regcache);
6247 case 0x0f35: /* sysexit */
6248 printf_unfiltered (_("Process record does not support "
6249 "instruction sysexit.\n"));
6254 case 0x0f05: /* syscall */
6257 if (tdep->i386_syscall_record == NULL)
6259 printf_unfiltered (_("Process record does not support "
6260 "instruction syscall.\n"));
6264 ret = tdep->i386_syscall_record (ir.regcache);
6270 case 0x0f07: /* sysret */
6271 printf_unfiltered (_("Process record does not support "
6272 "instruction sysret.\n"));
6277 case 0x0fa2: /* cpuid */
6278 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6279 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
6280 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6281 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
6284 case 0xf4: /* hlt */
6285 printf_unfiltered (_("Process record does not support "
6286 "instruction hlt.\n"));
6292 if (i386_record_modrm (&ir))
6299 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6303 if (i386_record_lea_modrm (&ir))
6312 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6316 opcode = opcode << 8 | ir.modrm;
6323 if (i386_record_modrm (&ir))
6334 opcode = opcode << 8 | ir.modrm;
6337 if (ir.override >= 0)
6339 if (record_full_memory_query)
6343 target_terminal_ours ();
6345 Process record ignores the memory change of instruction at address %s\n\
6346 because it can't get the value of the segment register.\n\
6347 Do you want to stop the program?"),
6348 paddress (gdbarch, ir.orig_addr));
6349 target_terminal_inferior ();
6356 if (i386_record_lea_modrm_addr (&ir, &addr64))
6358 if (record_full_arch_list_add_mem (addr64, 2))
6361 if (ir.regmap[X86_RECORD_R8_REGNUM])
6363 if (record_full_arch_list_add_mem (addr64, 8))
6368 if (record_full_arch_list_add_mem (addr64, 4))
6379 case 0: /* monitor */
6382 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6386 opcode = opcode << 8 | ir.modrm;
6394 if (ir.override >= 0)
6396 if (record_full_memory_query)
6400 target_terminal_ours ();
6402 Process record ignores the memory change of instruction at address %s\n\
6403 because it can't get the value of the segment register.\n\
6404 Do you want to stop the program?"),
6405 paddress (gdbarch, ir.orig_addr));
6406 target_terminal_inferior ();
6415 if (i386_record_lea_modrm_addr (&ir, &addr64))
6417 if (record_full_arch_list_add_mem (addr64, 2))
6420 if (ir.regmap[X86_RECORD_R8_REGNUM])
6422 if (record_full_arch_list_add_mem (addr64, 8))
6427 if (record_full_arch_list_add_mem (addr64, 4))
6439 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6440 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6444 else if (ir.rm == 1)
6451 opcode = opcode << 8 | ir.modrm;
6458 if (record_full_arch_list_add_reg (ir.regcache, ir.rm | ir.rex_b))
6464 if (i386_record_lea_modrm (&ir))
6467 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6470 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6472 case 7: /* invlpg */
6475 if (ir.rm == 0 && ir.regmap[X86_RECORD_R8_REGNUM])
6476 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
6480 opcode = opcode << 8 | ir.modrm;
6485 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6489 opcode = opcode << 8 | ir.modrm;
6495 case 0x0f08: /* invd */
6496 case 0x0f09: /* wbinvd */
6499 case 0x63: /* arpl */
6500 if (i386_record_modrm (&ir))
6502 if (ir.mod == 3 || ir.regmap[X86_RECORD_R8_REGNUM])
6504 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM]
6505 ? (ir.reg | rex_r) : ir.rm);
6509 ir.ot = ir.dflag ? OT_LONG : OT_WORD;
6510 if (i386_record_lea_modrm (&ir))
6513 if (!ir.regmap[X86_RECORD_R8_REGNUM])
6514 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6517 case 0x0f02: /* lar */
6518 case 0x0f03: /* lsl */
6519 if (i386_record_modrm (&ir))
6521 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
6522 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6526 if (i386_record_modrm (&ir))
6528 if (ir.mod == 3 && ir.reg == 3)
6531 opcode = opcode << 8 | ir.modrm;
6543 /* nop (multi byte) */
6546 case 0x0f20: /* mov reg, crN */
6547 case 0x0f22: /* mov crN, reg */
6548 if (i386_record_modrm (&ir))
6550 if ((ir.modrm & 0xc0) != 0xc0)
6553 opcode = opcode << 8 | ir.modrm;
6564 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6566 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6570 opcode = opcode << 8 | ir.modrm;
6576 case 0x0f21: /* mov reg, drN */
6577 case 0x0f23: /* mov drN, reg */
6578 if (i386_record_modrm (&ir))
6580 if ((ir.modrm & 0xc0) != 0xc0 || ir.reg == 4
6581 || ir.reg == 5 || ir.reg >= 8)
6584 opcode = opcode << 8 | ir.modrm;
6588 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6590 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
6593 case 0x0f06: /* clts */
6594 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6597 /* MMX 3DNow! SSE SSE2 SSE3 SSSE3 SSE4 */
6599 case 0x0f0d: /* 3DNow! prefetch */
6602 case 0x0f0e: /* 3DNow! femms */
6603 case 0x0f77: /* emms */
6604 if (i386_fpc_regnum_p (gdbarch, I387_FTAG_REGNUM(tdep)))
6606 record_full_arch_list_add_reg (ir.regcache, I387_FTAG_REGNUM(tdep));
6609 case 0x0f0f: /* 3DNow! data */
6610 if (i386_record_modrm (&ir))
6612 if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
6617 case 0x0c: /* 3DNow! pi2fw */
6618 case 0x0d: /* 3DNow! pi2fd */
6619 case 0x1c: /* 3DNow! pf2iw */
6620 case 0x1d: /* 3DNow! pf2id */
6621 case 0x8a: /* 3DNow! pfnacc */
6622 case 0x8e: /* 3DNow! pfpnacc */
6623 case 0x90: /* 3DNow! pfcmpge */
6624 case 0x94: /* 3DNow! pfmin */
6625 case 0x96: /* 3DNow! pfrcp */
6626 case 0x97: /* 3DNow! pfrsqrt */
6627 case 0x9a: /* 3DNow! pfsub */
6628 case 0x9e: /* 3DNow! pfadd */
6629 case 0xa0: /* 3DNow! pfcmpgt */
6630 case 0xa4: /* 3DNow! pfmax */
6631 case 0xa6: /* 3DNow! pfrcpit1 */
6632 case 0xa7: /* 3DNow! pfrsqit1 */
6633 case 0xaa: /* 3DNow! pfsubr */
6634 case 0xae: /* 3DNow! pfacc */
6635 case 0xb0: /* 3DNow! pfcmpeq */
6636 case 0xb4: /* 3DNow! pfmul */
6637 case 0xb6: /* 3DNow! pfrcpit2 */
6638 case 0xb7: /* 3DNow! pmulhrw */
6639 case 0xbb: /* 3DNow! pswapd */
6640 case 0xbf: /* 3DNow! pavgusb */
6641 if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
6642 goto no_support_3dnow_data;
6643 record_full_arch_list_add_reg (ir.regcache, ir.reg);
6647 no_support_3dnow_data:
6648 opcode = (opcode << 8) | opcode8;
6654 case 0x0faa: /* rsm */
6655 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6656 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
6657 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
6658 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
6659 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBX_REGNUM);
6660 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESP_REGNUM);
6661 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
6662 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
6663 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
6667 if (i386_record_modrm (&ir))
6671 case 0: /* fxsave */
6675 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6676 if (i386_record_lea_modrm_addr (&ir, &tmpu64))
6678 if (record_full_arch_list_add_mem (tmpu64, 512))
6683 case 1: /* fxrstor */
6687 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
6689 for (i = I387_MM0_REGNUM (tdep);
6690 i386_mmx_regnum_p (gdbarch, i); i++)
6691 record_full_arch_list_add_reg (ir.regcache, i);
6693 for (i = I387_XMM0_REGNUM (tdep);
6694 i386_xmm_regnum_p (gdbarch, i); i++)
6695 record_full_arch_list_add_reg (ir.regcache, i);
6697 if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
6698 record_full_arch_list_add_reg (ir.regcache,
6699 I387_MXCSR_REGNUM(tdep));
6701 for (i = I387_ST0_REGNUM (tdep);
6702 i386_fp_regnum_p (gdbarch, i); i++)
6703 record_full_arch_list_add_reg (ir.regcache, i);
6705 for (i = I387_FCTRL_REGNUM (tdep);
6706 i386_fpc_regnum_p (gdbarch, i); i++)
6707 record_full_arch_list_add_reg (ir.regcache, i);
6711 case 2: /* ldmxcsr */
6712 if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
6714 record_full_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
6717 case 3: /* stmxcsr */
6719 if (i386_record_lea_modrm (&ir))
6723 case 5: /* lfence */
6724 case 6: /* mfence */
6725 case 7: /* sfence clflush */
6729 opcode = (opcode << 8) | ir.modrm;
6735 case 0x0fc3: /* movnti */
6736 ir.ot = (ir.dflag == 2) ? OT_QUAD : OT_LONG;
6737 if (i386_record_modrm (&ir))
6742 if (i386_record_lea_modrm (&ir))
6746 /* Add prefix to opcode. */
6873 reswitch_prefix_add:
6881 if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
6884 opcode = (uint32_t) opcode8 | opcode << 8;
6885 goto reswitch_prefix_add;
6888 case 0x0f10: /* movups */
6889 case 0x660f10: /* movupd */
6890 case 0xf30f10: /* movss */
6891 case 0xf20f10: /* movsd */
6892 case 0x0f12: /* movlps */
6893 case 0x660f12: /* movlpd */
6894 case 0xf30f12: /* movsldup */
6895 case 0xf20f12: /* movddup */
6896 case 0x0f14: /* unpcklps */
6897 case 0x660f14: /* unpcklpd */
6898 case 0x0f15: /* unpckhps */
6899 case 0x660f15: /* unpckhpd */
6900 case 0x0f16: /* movhps */
6901 case 0x660f16: /* movhpd */
6902 case 0xf30f16: /* movshdup */
6903 case 0x0f28: /* movaps */
6904 case 0x660f28: /* movapd */
6905 case 0x0f2a: /* cvtpi2ps */
6906 case 0x660f2a: /* cvtpi2pd */
6907 case 0xf30f2a: /* cvtsi2ss */
6908 case 0xf20f2a: /* cvtsi2sd */
6909 case 0x0f2c: /* cvttps2pi */
6910 case 0x660f2c: /* cvttpd2pi */
6911 case 0x0f2d: /* cvtps2pi */
6912 case 0x660f2d: /* cvtpd2pi */
6913 case 0x660f3800: /* pshufb */
6914 case 0x660f3801: /* phaddw */
6915 case 0x660f3802: /* phaddd */
6916 case 0x660f3803: /* phaddsw */
6917 case 0x660f3804: /* pmaddubsw */
6918 case 0x660f3805: /* phsubw */
6919 case 0x660f3806: /* phsubd */
6920 case 0x660f3807: /* phsubsw */
6921 case 0x660f3808: /* psignb */
6922 case 0x660f3809: /* psignw */
6923 case 0x660f380a: /* psignd */
6924 case 0x660f380b: /* pmulhrsw */
6925 case 0x660f3810: /* pblendvb */
6926 case 0x660f3814: /* blendvps */
6927 case 0x660f3815: /* blendvpd */
6928 case 0x660f381c: /* pabsb */
6929 case 0x660f381d: /* pabsw */
6930 case 0x660f381e: /* pabsd */
6931 case 0x660f3820: /* pmovsxbw */
6932 case 0x660f3821: /* pmovsxbd */
6933 case 0x660f3822: /* pmovsxbq */
6934 case 0x660f3823: /* pmovsxwd */
6935 case 0x660f3824: /* pmovsxwq */
6936 case 0x660f3825: /* pmovsxdq */
6937 case 0x660f3828: /* pmuldq */
6938 case 0x660f3829: /* pcmpeqq */
6939 case 0x660f382a: /* movntdqa */
6940 case 0x660f3a08: /* roundps */
6941 case 0x660f3a09: /* roundpd */
6942 case 0x660f3a0a: /* roundss */
6943 case 0x660f3a0b: /* roundsd */
6944 case 0x660f3a0c: /* blendps */
6945 case 0x660f3a0d: /* blendpd */
6946 case 0x660f3a0e: /* pblendw */
6947 case 0x660f3a0f: /* palignr */
6948 case 0x660f3a20: /* pinsrb */
6949 case 0x660f3a21: /* insertps */
6950 case 0x660f3a22: /* pinsrd pinsrq */
6951 case 0x660f3a40: /* dpps */
6952 case 0x660f3a41: /* dppd */
6953 case 0x660f3a42: /* mpsadbw */
6954 case 0x660f3a60: /* pcmpestrm */
6955 case 0x660f3a61: /* pcmpestri */
6956 case 0x660f3a62: /* pcmpistrm */
6957 case 0x660f3a63: /* pcmpistri */
6958 case 0x0f51: /* sqrtps */
6959 case 0x660f51: /* sqrtpd */
6960 case 0xf20f51: /* sqrtsd */
6961 case 0xf30f51: /* sqrtss */
6962 case 0x0f52: /* rsqrtps */
6963 case 0xf30f52: /* rsqrtss */
6964 case 0x0f53: /* rcpps */
6965 case 0xf30f53: /* rcpss */
6966 case 0x0f54: /* andps */
6967 case 0x660f54: /* andpd */
6968 case 0x0f55: /* andnps */
6969 case 0x660f55: /* andnpd */
6970 case 0x0f56: /* orps */
6971 case 0x660f56: /* orpd */
6972 case 0x0f57: /* xorps */
6973 case 0x660f57: /* xorpd */
6974 case 0x0f58: /* addps */
6975 case 0x660f58: /* addpd */
6976 case 0xf20f58: /* addsd */
6977 case 0xf30f58: /* addss */
6978 case 0x0f59: /* mulps */
6979 case 0x660f59: /* mulpd */
6980 case 0xf20f59: /* mulsd */
6981 case 0xf30f59: /* mulss */
6982 case 0x0f5a: /* cvtps2pd */
6983 case 0x660f5a: /* cvtpd2ps */
6984 case 0xf20f5a: /* cvtsd2ss */
6985 case 0xf30f5a: /* cvtss2sd */
6986 case 0x0f5b: /* cvtdq2ps */
6987 case 0x660f5b: /* cvtps2dq */
6988 case 0xf30f5b: /* cvttps2dq */
6989 case 0x0f5c: /* subps */
6990 case 0x660f5c: /* subpd */
6991 case 0xf20f5c: /* subsd */
6992 case 0xf30f5c: /* subss */
6993 case 0x0f5d: /* minps */
6994 case 0x660f5d: /* minpd */
6995 case 0xf20f5d: /* minsd */
6996 case 0xf30f5d: /* minss */
6997 case 0x0f5e: /* divps */
6998 case 0x660f5e: /* divpd */
6999 case 0xf20f5e: /* divsd */
7000 case 0xf30f5e: /* divss */
7001 case 0x0f5f: /* maxps */
7002 case 0x660f5f: /* maxpd */
7003 case 0xf20f5f: /* maxsd */
7004 case 0xf30f5f: /* maxss */
7005 case 0x660f60: /* punpcklbw */
7006 case 0x660f61: /* punpcklwd */
7007 case 0x660f62: /* punpckldq */
7008 case 0x660f63: /* packsswb */
7009 case 0x660f64: /* pcmpgtb */
7010 case 0x660f65: /* pcmpgtw */
7011 case 0x660f66: /* pcmpgtd */
7012 case 0x660f67: /* packuswb */
7013 case 0x660f68: /* punpckhbw */
7014 case 0x660f69: /* punpckhwd */
7015 case 0x660f6a: /* punpckhdq */
7016 case 0x660f6b: /* packssdw */
7017 case 0x660f6c: /* punpcklqdq */
7018 case 0x660f6d: /* punpckhqdq */
7019 case 0x660f6e: /* movd */
7020 case 0x660f6f: /* movdqa */
7021 case 0xf30f6f: /* movdqu */
7022 case 0x660f70: /* pshufd */
7023 case 0xf20f70: /* pshuflw */
7024 case 0xf30f70: /* pshufhw */
7025 case 0x660f74: /* pcmpeqb */
7026 case 0x660f75: /* pcmpeqw */
7027 case 0x660f76: /* pcmpeqd */
7028 case 0x660f7c: /* haddpd */
7029 case 0xf20f7c: /* haddps */
7030 case 0x660f7d: /* hsubpd */
7031 case 0xf20f7d: /* hsubps */
7032 case 0xf30f7e: /* movq */
7033 case 0x0fc2: /* cmpps */
7034 case 0x660fc2: /* cmppd */
7035 case 0xf20fc2: /* cmpsd */
7036 case 0xf30fc2: /* cmpss */
7037 case 0x660fc4: /* pinsrw */
7038 case 0x0fc6: /* shufps */
7039 case 0x660fc6: /* shufpd */
7040 case 0x660fd0: /* addsubpd */
7041 case 0xf20fd0: /* addsubps */
7042 case 0x660fd1: /* psrlw */
7043 case 0x660fd2: /* psrld */
7044 case 0x660fd3: /* psrlq */
7045 case 0x660fd4: /* paddq */
7046 case 0x660fd5: /* pmullw */
7047 case 0xf30fd6: /* movq2dq */
7048 case 0x660fd8: /* psubusb */
7049 case 0x660fd9: /* psubusw */
7050 case 0x660fda: /* pminub */
7051 case 0x660fdb: /* pand */
7052 case 0x660fdc: /* paddusb */
7053 case 0x660fdd: /* paddusw */
7054 case 0x660fde: /* pmaxub */
7055 case 0x660fdf: /* pandn */
7056 case 0x660fe0: /* pavgb */
7057 case 0x660fe1: /* psraw */
7058 case 0x660fe2: /* psrad */
7059 case 0x660fe3: /* pavgw */
7060 case 0x660fe4: /* pmulhuw */
7061 case 0x660fe5: /* pmulhw */
7062 case 0x660fe6: /* cvttpd2dq */
7063 case 0xf20fe6: /* cvtpd2dq */
7064 case 0xf30fe6: /* cvtdq2pd */
7065 case 0x660fe8: /* psubsb */
7066 case 0x660fe9: /* psubsw */
7067 case 0x660fea: /* pminsw */
7068 case 0x660feb: /* por */
7069 case 0x660fec: /* paddsb */
7070 case 0x660fed: /* paddsw */
7071 case 0x660fee: /* pmaxsw */
7072 case 0x660fef: /* pxor */
7073 case 0xf20ff0: /* lddqu */
7074 case 0x660ff1: /* psllw */
7075 case 0x660ff2: /* pslld */
7076 case 0x660ff3: /* psllq */
7077 case 0x660ff4: /* pmuludq */
7078 case 0x660ff5: /* pmaddwd */
7079 case 0x660ff6: /* psadbw */
7080 case 0x660ff8: /* psubb */
7081 case 0x660ff9: /* psubw */
7082 case 0x660ffa: /* psubd */
7083 case 0x660ffb: /* psubq */
7084 case 0x660ffc: /* paddb */
7085 case 0x660ffd: /* paddw */
7086 case 0x660ffe: /* paddd */
7087 if (i386_record_modrm (&ir))
7090 if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg))
7092 record_full_arch_list_add_reg (ir.regcache,
7093 I387_XMM0_REGNUM (tdep) + ir.reg);
7094 if ((opcode & 0xfffffffc) == 0x660f3a60)
7095 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
7098 case 0x0f11: /* movups */
7099 case 0x660f11: /* movupd */
7100 case 0xf30f11: /* movss */
7101 case 0xf20f11: /* movsd */
7102 case 0x0f13: /* movlps */
7103 case 0x660f13: /* movlpd */
7104 case 0x0f17: /* movhps */
7105 case 0x660f17: /* movhpd */
7106 case 0x0f29: /* movaps */
7107 case 0x660f29: /* movapd */
7108 case 0x660f3a14: /* pextrb */
7109 case 0x660f3a15: /* pextrw */
7110 case 0x660f3a16: /* pextrd pextrq */
7111 case 0x660f3a17: /* extractps */
7112 case 0x660f7f: /* movdqa */
7113 case 0xf30f7f: /* movdqu */
7114 if (i386_record_modrm (&ir))
7118 if (opcode == 0x0f13 || opcode == 0x660f13
7119 || opcode == 0x0f17 || opcode == 0x660f17)
7122 if (!i386_xmm_regnum_p (gdbarch,
7123 I387_XMM0_REGNUM (tdep) + ir.rm))
7125 record_full_arch_list_add_reg (ir.regcache,
7126 I387_XMM0_REGNUM (tdep) + ir.rm);
7148 if (i386_record_lea_modrm (&ir))
7153 case 0x0f2b: /* movntps */
7154 case 0x660f2b: /* movntpd */
7155 case 0x0fe7: /* movntq */
7156 case 0x660fe7: /* movntdq */
7159 if (opcode == 0x0fe7)
7163 if (i386_record_lea_modrm (&ir))
7167 case 0xf30f2c: /* cvttss2si */
7168 case 0xf20f2c: /* cvttsd2si */
7169 case 0xf30f2d: /* cvtss2si */
7170 case 0xf20f2d: /* cvtsd2si */
7171 case 0xf20f38f0: /* crc32 */
7172 case 0xf20f38f1: /* crc32 */
7173 case 0x0f50: /* movmskps */
7174 case 0x660f50: /* movmskpd */
7175 case 0x0fc5: /* pextrw */
7176 case 0x660fc5: /* pextrw */
7177 case 0x0fd7: /* pmovmskb */
7178 case 0x660fd7: /* pmovmskb */
7179 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
7182 case 0x0f3800: /* pshufb */
7183 case 0x0f3801: /* phaddw */
7184 case 0x0f3802: /* phaddd */
7185 case 0x0f3803: /* phaddsw */
7186 case 0x0f3804: /* pmaddubsw */
7187 case 0x0f3805: /* phsubw */
7188 case 0x0f3806: /* phsubd */
7189 case 0x0f3807: /* phsubsw */
7190 case 0x0f3808: /* psignb */
7191 case 0x0f3809: /* psignw */
7192 case 0x0f380a: /* psignd */
7193 case 0x0f380b: /* pmulhrsw */
7194 case 0x0f381c: /* pabsb */
7195 case 0x0f381d: /* pabsw */
7196 case 0x0f381e: /* pabsd */
7197 case 0x0f382b: /* packusdw */
7198 case 0x0f3830: /* pmovzxbw */
7199 case 0x0f3831: /* pmovzxbd */
7200 case 0x0f3832: /* pmovzxbq */
7201 case 0x0f3833: /* pmovzxwd */
7202 case 0x0f3834: /* pmovzxwq */
7203 case 0x0f3835: /* pmovzxdq */
7204 case 0x0f3837: /* pcmpgtq */
7205 case 0x0f3838: /* pminsb */
7206 case 0x0f3839: /* pminsd */
7207 case 0x0f383a: /* pminuw */
7208 case 0x0f383b: /* pminud */
7209 case 0x0f383c: /* pmaxsb */
7210 case 0x0f383d: /* pmaxsd */
7211 case 0x0f383e: /* pmaxuw */
7212 case 0x0f383f: /* pmaxud */
7213 case 0x0f3840: /* pmulld */
7214 case 0x0f3841: /* phminposuw */
7215 case 0x0f3a0f: /* palignr */
7216 case 0x0f60: /* punpcklbw */
7217 case 0x0f61: /* punpcklwd */
7218 case 0x0f62: /* punpckldq */
7219 case 0x0f63: /* packsswb */
7220 case 0x0f64: /* pcmpgtb */
7221 case 0x0f65: /* pcmpgtw */
7222 case 0x0f66: /* pcmpgtd */
7223 case 0x0f67: /* packuswb */
7224 case 0x0f68: /* punpckhbw */
7225 case 0x0f69: /* punpckhwd */
7226 case 0x0f6a: /* punpckhdq */
7227 case 0x0f6b: /* packssdw */
7228 case 0x0f6e: /* movd */
7229 case 0x0f6f: /* movq */
7230 case 0x0f70: /* pshufw */
7231 case 0x0f74: /* pcmpeqb */
7232 case 0x0f75: /* pcmpeqw */
7233 case 0x0f76: /* pcmpeqd */
7234 case 0x0fc4: /* pinsrw */
7235 case 0x0fd1: /* psrlw */
7236 case 0x0fd2: /* psrld */
7237 case 0x0fd3: /* psrlq */
7238 case 0x0fd4: /* paddq */
7239 case 0x0fd5: /* pmullw */
7240 case 0xf20fd6: /* movdq2q */
7241 case 0x0fd8: /* psubusb */
7242 case 0x0fd9: /* psubusw */
7243 case 0x0fda: /* pminub */
7244 case 0x0fdb: /* pand */
7245 case 0x0fdc: /* paddusb */
7246 case 0x0fdd: /* paddusw */
7247 case 0x0fde: /* pmaxub */
7248 case 0x0fdf: /* pandn */
7249 case 0x0fe0: /* pavgb */
7250 case 0x0fe1: /* psraw */
7251 case 0x0fe2: /* psrad */
7252 case 0x0fe3: /* pavgw */
7253 case 0x0fe4: /* pmulhuw */
7254 case 0x0fe5: /* pmulhw */
7255 case 0x0fe8: /* psubsb */
7256 case 0x0fe9: /* psubsw */
7257 case 0x0fea: /* pminsw */
7258 case 0x0feb: /* por */
7259 case 0x0fec: /* paddsb */
7260 case 0x0fed: /* paddsw */
7261 case 0x0fee: /* pmaxsw */
7262 case 0x0fef: /* pxor */
7263 case 0x0ff1: /* psllw */
7264 case 0x0ff2: /* pslld */
7265 case 0x0ff3: /* psllq */
7266 case 0x0ff4: /* pmuludq */
7267 case 0x0ff5: /* pmaddwd */
7268 case 0x0ff6: /* psadbw */
7269 case 0x0ff8: /* psubb */
7270 case 0x0ff9: /* psubw */
7271 case 0x0ffa: /* psubd */
7272 case 0x0ffb: /* psubq */
7273 case 0x0ffc: /* paddb */
7274 case 0x0ffd: /* paddw */
7275 case 0x0ffe: /* paddd */
7276 if (i386_record_modrm (&ir))
7278 if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
7280 record_full_arch_list_add_reg (ir.regcache,
7281 I387_MM0_REGNUM (tdep) + ir.reg);
7284 case 0x0f71: /* psllw */
7285 case 0x0f72: /* pslld */
7286 case 0x0f73: /* psllq */
7287 if (i386_record_modrm (&ir))
7289 if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
7291 record_full_arch_list_add_reg (ir.regcache,
7292 I387_MM0_REGNUM (tdep) + ir.rm);
7295 case 0x660f71: /* psllw */
7296 case 0x660f72: /* pslld */
7297 case 0x660f73: /* psllq */
7298 if (i386_record_modrm (&ir))
7301 if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm))
7303 record_full_arch_list_add_reg (ir.regcache,
7304 I387_XMM0_REGNUM (tdep) + ir.rm);
7307 case 0x0f7e: /* movd */
7308 case 0x660f7e: /* movd */
7309 if (i386_record_modrm (&ir))
7312 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
7319 if (i386_record_lea_modrm (&ir))
7324 case 0x0f7f: /* movq */
7325 if (i386_record_modrm (&ir))
7329 if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
7331 record_full_arch_list_add_reg (ir.regcache,
7332 I387_MM0_REGNUM (tdep) + ir.rm);
7337 if (i386_record_lea_modrm (&ir))
7342 case 0xf30fb8: /* popcnt */
7343 if (i386_record_modrm (&ir))
7345 I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
7346 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
7349 case 0x660fd6: /* movq */
7350 if (i386_record_modrm (&ir))
7355 if (!i386_xmm_regnum_p (gdbarch,
7356 I387_XMM0_REGNUM (tdep) + ir.rm))
7358 record_full_arch_list_add_reg (ir.regcache,
7359 I387_XMM0_REGNUM (tdep) + ir.rm);
7364 if (i386_record_lea_modrm (&ir))
7369 case 0x660f3817: /* ptest */
7370 case 0x0f2e: /* ucomiss */
7371 case 0x660f2e: /* ucomisd */
7372 case 0x0f2f: /* comiss */
7373 case 0x660f2f: /* comisd */
7374 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
7377 case 0x0ff7: /* maskmovq */
7378 regcache_raw_read_unsigned (ir.regcache,
7379 ir.regmap[X86_RECORD_REDI_REGNUM],
7381 if (record_full_arch_list_add_mem (addr, 64))
7385 case 0x660ff7: /* maskmovdqu */
7386 regcache_raw_read_unsigned (ir.regcache,
7387 ir.regmap[X86_RECORD_REDI_REGNUM],
7389 if (record_full_arch_list_add_mem (addr, 128))
7404 /* In the future, maybe still need to deal with need_dasm. */
7405 I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REIP_REGNUM);
7406 if (record_full_arch_list_add_end ())
7412 printf_unfiltered (_("Process record does not support instruction 0x%02x "
7413 "at address %s.\n"),
7414 (unsigned int) (opcode),
7415 paddress (gdbarch, ir.orig_addr));
7419 static const int i386_record_regmap[] =
7421 I386_EAX_REGNUM, I386_ECX_REGNUM, I386_EDX_REGNUM, I386_EBX_REGNUM,
7422 I386_ESP_REGNUM, I386_EBP_REGNUM, I386_ESI_REGNUM, I386_EDI_REGNUM,
7423 0, 0, 0, 0, 0, 0, 0, 0,
7424 I386_EIP_REGNUM, I386_EFLAGS_REGNUM, I386_CS_REGNUM, I386_SS_REGNUM,
7425 I386_DS_REGNUM, I386_ES_REGNUM, I386_FS_REGNUM, I386_GS_REGNUM
7428 /* Check that the given address appears suitable for a fast
7429 tracepoint, which on x86-64 means that we need an instruction of at
7430 least 5 bytes, so that we can overwrite it with a 4-byte-offset
7431 jump and not have to worry about program jumps to an address in the
7432 middle of the tracepoint jump. On x86, it may be possible to use
7433 4-byte jumps with a 2-byte offset to a trampoline located in the
7434 bottom 64 KiB of memory. Returns 1 if OK, and writes a size
7435 of instruction to replace, and 0 if not, plus an explanatory
7439 i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
7440 CORE_ADDR addr, int *isize, char **msg)
7443 static struct ui_file *gdb_null = NULL;
7445 /* Ask the target for the minimum instruction length supported. */
7446 jumplen = target_get_min_fast_tracepoint_insn_len ();
7450 /* If the target does not support the get_min_fast_tracepoint_insn_len
7451 operation, assume that fast tracepoints will always be implemented
7452 using 4-byte relative jumps on both x86 and x86-64. */
7455 else if (jumplen == 0)
7457 /* If the target does support get_min_fast_tracepoint_insn_len but
7458 returns zero, then the IPA has not loaded yet. In this case,
7459 we optimistically assume that truncated 2-byte relative jumps
7460 will be available on x86, and compensate later if this assumption
7461 turns out to be incorrect. On x86-64 architectures, 4-byte relative
7462 jumps will always be used. */
7463 jumplen = (register_size (gdbarch, 0) == 8) ? 5 : 4;
7466 /* Dummy file descriptor for the disassembler. */
7468 gdb_null = ui_file_new ();
7470 /* Check for fit. */
7471 len = gdb_print_insn (gdbarch, addr, gdb_null, NULL);
7477 /* Return a bit of target-specific detail to add to the caller's
7478 generic failure message. */
7480 *msg = xstrprintf (_("; instruction is only %d bytes long, "
7481 "need at least %d bytes for the jump"),
7494 i386_validate_tdesc_p (struct gdbarch_tdep *tdep,
7495 struct tdesc_arch_data *tdesc_data)
7497 const struct target_desc *tdesc = tdep->tdesc;
7498 const struct tdesc_feature *feature_core;
7499 const struct tdesc_feature *feature_sse, *feature_avx;
7500 int i, num_regs, valid_p;
7502 if (! tdesc_has_registers (tdesc))
7505 /* Get core registers. */
7506 feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
7507 if (feature_core == NULL)
7510 /* Get SSE registers. */
7511 feature_sse = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.sse");
7513 /* Try AVX registers. */
7514 feature_avx = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx");
7518 /* The XCR0 bits. */
7521 /* AVX register description requires SSE register description. */
7525 tdep->xcr0 = I386_XSTATE_AVX_MASK;
7527 /* It may have been set by OSABI initialization function. */
7528 if (tdep->num_ymm_regs == 0)
7530 tdep->ymmh_register_names = i386_ymmh_names;
7531 tdep->num_ymm_regs = 8;
7532 tdep->ymm0h_regnum = I386_YMM0H_REGNUM;
7535 for (i = 0; i < tdep->num_ymm_regs; i++)
7536 valid_p &= tdesc_numbered_register (feature_avx, tdesc_data,
7537 tdep->ymm0h_regnum + i,
7538 tdep->ymmh_register_names[i]);
7540 else if (feature_sse)
7541 tdep->xcr0 = I386_XSTATE_SSE_MASK;
7544 tdep->xcr0 = I386_XSTATE_X87_MASK;
7545 tdep->num_xmm_regs = 0;
7548 num_regs = tdep->num_core_regs;
7549 for (i = 0; i < num_regs; i++)
7550 valid_p &= tdesc_numbered_register (feature_core, tdesc_data, i,
7551 tdep->register_names[i]);
7555 /* Need to include %mxcsr, so add one. */
7556 num_regs += tdep->num_xmm_regs + 1;
7557 for (; i < num_regs; i++)
7558 valid_p &= tdesc_numbered_register (feature_sse, tdesc_data, i,
7559 tdep->register_names[i]);
7566 static struct gdbarch *
7567 i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
7569 struct gdbarch_tdep *tdep;
7570 struct gdbarch *gdbarch;
7571 struct tdesc_arch_data *tdesc_data;
7572 const struct target_desc *tdesc;
7576 /* If there is already a candidate, use it. */
7577 arches = gdbarch_list_lookup_by_info (arches, &info);
7579 return arches->gdbarch;
7581 /* Allocate space for the new architecture. */
7582 tdep = XCALLOC (1, struct gdbarch_tdep);
7583 gdbarch = gdbarch_alloc (&info, tdep);
7585 /* General-purpose registers. */
7586 tdep->gregset = NULL;
7587 tdep->gregset_reg_offset = NULL;
7588 tdep->gregset_num_regs = I386_NUM_GREGS;
7589 tdep->sizeof_gregset = 0;
7591 /* Floating-point registers. */
7592 tdep->fpregset = NULL;
7593 tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
7595 tdep->xstateregset = NULL;
7597 /* The default settings include the FPU registers, the MMX registers
7598 and the SSE registers. This can be overridden for a specific ABI
7599 by adjusting the members `st0_regnum', `mm0_regnum' and
7600 `num_xmm_regs' of `struct gdbarch_tdep', otherwise the registers
7601 will show up in the output of "info all-registers". */
7603 tdep->st0_regnum = I386_ST0_REGNUM;
7605 /* I386_NUM_XREGS includes %mxcsr, so substract one. */
7606 tdep->num_xmm_regs = I386_NUM_XREGS - 1;
7608 tdep->jb_pc_offset = -1;
7609 tdep->struct_return = pcc_struct_return;
7610 tdep->sigtramp_start = 0;
7611 tdep->sigtramp_end = 0;
7612 tdep->sigtramp_p = i386_sigtramp_p;
7613 tdep->sigcontext_addr = NULL;
7614 tdep->sc_reg_offset = NULL;
7615 tdep->sc_pc_offset = -1;
7616 tdep->sc_sp_offset = -1;
7618 tdep->xsave_xcr0_offset = -1;
7620 tdep->record_regmap = i386_record_regmap;
7622 set_gdbarch_long_long_align_bit (gdbarch, 32);
7624 /* The format used for `long double' on almost all i386 targets is
7625 the i387 extended floating-point format. In fact, of all targets
7626 in the GCC 2.95 tree, only OSF/1 does it different, and insists
7627 on having a `long double' that's not `long' at all. */
7628 set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
7630 /* Although the i387 extended floating-point has only 80 significant
7631 bits, a `long double' actually takes up 96, probably to enforce
7633 set_gdbarch_long_double_bit (gdbarch, 96);
7635 /* Register numbers of various important registers. */
7636 set_gdbarch_sp_regnum (gdbarch, I386_ESP_REGNUM); /* %esp */
7637 set_gdbarch_pc_regnum (gdbarch, I386_EIP_REGNUM); /* %eip */
7638 set_gdbarch_ps_regnum (gdbarch, I386_EFLAGS_REGNUM); /* %eflags */
7639 set_gdbarch_fp0_regnum (gdbarch, I386_ST0_REGNUM); /* %st(0) */
7641 /* NOTE: kettenis/20040418: GCC does have two possible register
7642 numbering schemes on the i386: dbx and SVR4. These schemes
7643 differ in how they number %ebp, %esp, %eflags, and the
7644 floating-point registers, and are implemented by the arrays
7645 dbx_register_map[] and svr4_dbx_register_map in
7646 gcc/config/i386.c. GCC also defines a third numbering scheme in
7647 gcc/config/i386.c, which it designates as the "default" register
7648 map used in 64bit mode. This last register numbering scheme is
7649 implemented in dbx64_register_map, and is used for AMD64; see
7652 Currently, each GCC i386 target always uses the same register
7653 numbering scheme across all its supported debugging formats
7654 i.e. SDB (COFF), stabs and DWARF 2. This is because
7655 gcc/sdbout.c, gcc/dbxout.c and gcc/dwarf2out.c all use the
7656 DBX_REGISTER_NUMBER macro which is defined by each target's
7657 respective config header in a manner independent of the requested
7658 output debugging format.
7660 This does not match the arrangement below, which presumes that
7661 the SDB and stabs numbering schemes differ from the DWARF and
7662 DWARF 2 ones. The reason for this arrangement is that it is
7663 likely to get the numbering scheme for the target's
7664 default/native debug format right. For targets where GCC is the
7665 native compiler (FreeBSD, NetBSD, OpenBSD, GNU/Linux) or for
7666 targets where the native toolchain uses a different numbering
7667 scheme for a particular debug format (stabs-in-ELF on Solaris)
7668 the defaults below will have to be overridden, like
7669 i386_elf_init_abi() does. */
7671 /* Use the dbx register numbering scheme for stabs and COFF. */
7672 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
7673 set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
7675 /* Use the SVR4 register numbering scheme for DWARF 2. */
7676 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
7678 /* We don't set gdbarch_stab_reg_to_regnum, since ECOFF doesn't seem to
7679 be in use on any of the supported i386 targets. */
7681 set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
7683 set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
7685 /* Call dummy code. */
7686 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
7687 set_gdbarch_push_dummy_code (gdbarch, i386_push_dummy_code);
7688 set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
7689 set_gdbarch_frame_align (gdbarch, i386_frame_align);
7691 set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
7692 set_gdbarch_register_to_value (gdbarch, i386_register_to_value);
7693 set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
7695 set_gdbarch_return_value (gdbarch, i386_return_value);
7697 set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
7699 /* Stack grows downward. */
7700 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
7702 set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
7703 set_gdbarch_decr_pc_after_break (gdbarch, 1);
7704 set_gdbarch_max_insn_length (gdbarch, I386_MAX_INSN_LEN);
7706 set_gdbarch_frame_args_skip (gdbarch, 8);
7708 set_gdbarch_print_insn (gdbarch, i386_print_insn);
7710 set_gdbarch_dummy_id (gdbarch, i386_dummy_id);
7712 set_gdbarch_unwind_pc (gdbarch, i386_unwind_pc);
7714 /* Add the i386 register groups. */
7715 i386_add_reggroups (gdbarch);
7716 tdep->register_reggroup_p = i386_register_reggroup_p;
7718 /* Helper for function argument information. */
7719 set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
7721 /* Hook the function epilogue frame unwinder. This unwinder is
7722 appended to the list first, so that it supercedes the DWARF
7723 unwinder in function epilogues (where the DWARF unwinder
7724 currently fails). */
7725 frame_unwind_append_unwinder (gdbarch, &i386_epilogue_frame_unwind);
7727 /* Hook in the DWARF CFI frame unwinder. This unwinder is appended
7728 to the list before the prologue-based unwinders, so that DWARF
7729 CFI info will be used if it is available. */
7730 dwarf2_append_unwinders (gdbarch);
7732 frame_base_set_default (gdbarch, &i386_frame_base);
7734 /* Pseudo registers may be changed by amd64_init_abi. */
7735 set_gdbarch_pseudo_register_read_value (gdbarch,
7736 i386_pseudo_register_read_value);
7737 set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
7739 set_tdesc_pseudo_register_type (gdbarch, i386_pseudo_register_type);
7740 set_tdesc_pseudo_register_name (gdbarch, i386_pseudo_register_name);
7742 /* Override the normal target description method to make the AVX
7743 upper halves anonymous. */
7744 set_gdbarch_register_name (gdbarch, i386_register_name);
7746 /* Even though the default ABI only includes general-purpose registers,
7747 floating-point registers and the SSE registers, we have to leave a
7748 gap for the upper AVX registers. */
7749 set_gdbarch_num_regs (gdbarch, I386_AVX_NUM_REGS);
7751 /* Get the x86 target description from INFO. */
7752 tdesc = info.target_desc;
7753 if (! tdesc_has_registers (tdesc))
7755 tdep->tdesc = tdesc;
7757 tdep->num_core_regs = I386_NUM_GREGS + I387_NUM_REGS;
7758 tdep->register_names = i386_register_names;
7760 /* No upper YMM registers. */
7761 tdep->ymmh_register_names = NULL;
7762 tdep->ymm0h_regnum = -1;
7764 tdep->num_byte_regs = 8;
7765 tdep->num_word_regs = 8;
7766 tdep->num_dword_regs = 0;
7767 tdep->num_mmx_regs = 8;
7768 tdep->num_ymm_regs = 0;
7770 tdesc_data = tdesc_data_alloc ();
7772 set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction);
7774 set_gdbarch_gen_return_address (gdbarch, i386_gen_return_address);
7776 /* Hook in ABI-specific overrides, if they have been registered. */
7777 info.tdep_info = (void *) tdesc_data;
7778 gdbarch_init_osabi (info, gdbarch);
7780 if (!i386_validate_tdesc_p (tdep, tdesc_data))
7782 tdesc_data_cleanup (tdesc_data);
7784 gdbarch_free (gdbarch);
7788 /* Wire in pseudo registers. Number of pseudo registers may be
7790 set_gdbarch_num_pseudo_regs (gdbarch, (tdep->num_byte_regs
7791 + tdep->num_word_regs
7792 + tdep->num_dword_regs
7793 + tdep->num_mmx_regs
7794 + tdep->num_ymm_regs));
7796 /* Target description may be changed. */
7797 tdesc = tdep->tdesc;
7799 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
7801 /* Override gdbarch_register_reggroup_p set in tdesc_use_registers. */
7802 set_gdbarch_register_reggroup_p (gdbarch, tdep->register_reggroup_p);
7804 /* Make %al the first pseudo-register. */
7805 tdep->al_regnum = gdbarch_num_regs (gdbarch);
7806 tdep->ax_regnum = tdep->al_regnum + tdep->num_byte_regs;
7808 ymm0_regnum = tdep->ax_regnum + tdep->num_word_regs;
7809 if (tdep->num_dword_regs)
7811 /* Support dword pseudo-register if it hasn't been disabled. */
7812 tdep->eax_regnum = ymm0_regnum;
7813 ymm0_regnum += tdep->num_dword_regs;
7816 tdep->eax_regnum = -1;
7818 mm0_regnum = ymm0_regnum;
7819 if (tdep->num_ymm_regs)
7821 /* Support YMM pseudo-register if it is available. */
7822 tdep->ymm0_regnum = ymm0_regnum;
7823 mm0_regnum += tdep->num_ymm_regs;
7826 tdep->ymm0_regnum = -1;
7828 if (tdep->num_mmx_regs != 0)
7830 /* Support MMX pseudo-register if MMX hasn't been disabled. */
7831 tdep->mm0_regnum = mm0_regnum;
7834 tdep->mm0_regnum = -1;
7836 /* Hook in the legacy prologue-based unwinders last (fallback). */
7837 frame_unwind_append_unwinder (gdbarch, &i386_stack_tramp_frame_unwind);
7838 frame_unwind_append_unwinder (gdbarch, &i386_sigtramp_frame_unwind);
7839 frame_unwind_append_unwinder (gdbarch, &i386_frame_unwind);
7841 /* If we have a register mapping, enable the generic core file
7842 support, unless it has already been enabled. */
7843 if (tdep->gregset_reg_offset
7844 && !gdbarch_regset_from_core_section_p (gdbarch))
7845 set_gdbarch_regset_from_core_section (gdbarch,
7846 i386_regset_from_core_section);
7848 set_gdbarch_skip_permanent_breakpoint (gdbarch,
7849 i386_skip_permanent_breakpoint);
7851 set_gdbarch_fast_tracepoint_valid_at (gdbarch,
7852 i386_fast_tracepoint_valid_at);
7857 static enum gdb_osabi
7858 i386_coff_osabi_sniffer (bfd *abfd)
7860 if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
7861 || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
7862 return GDB_OSABI_GO32;
7864 return GDB_OSABI_UNKNOWN;
7868 /* Provide a prototype to silence -Wmissing-prototypes. */
7869 void _initialize_i386_tdep (void);
7872 _initialize_i386_tdep (void)
7874 register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
7876 /* Add the variable that controls the disassembly flavor. */
7877 add_setshow_enum_cmd ("disassembly-flavor", no_class, valid_flavors,
7878 &disassembly_flavor, _("\
7879 Set the disassembly flavor."), _("\
7880 Show the disassembly flavor."), _("\
7881 The valid values are \"att\" and \"intel\", and the default value is \"att\"."),
7883 NULL, /* FIXME: i18n: */
7884 &setlist, &showlist);
7886 /* Add the variable that controls the convention for returning
7888 add_setshow_enum_cmd ("struct-convention", no_class, valid_conventions,
7889 &struct_convention, _("\
7890 Set the convention for returning small structs."), _("\
7891 Show the convention for returning small structs."), _("\
7892 Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n\
7895 NULL, /* FIXME: i18n: */
7896 &setlist, &showlist);
7898 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
7899 i386_coff_osabi_sniffer);
7901 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
7902 i386_svr4_init_abi);
7903 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
7904 i386_go32_init_abi);
7906 /* Initialize the i386-specific register groups. */
7907 i386_init_reggroups ();
7909 /* Initialize the standard target descriptions. */
7910 initialize_tdesc_i386 ();
7911 initialize_tdesc_i386_mmx ();
7912 initialize_tdesc_i386_avx ();
7914 /* Tell remote stub that we support XML target description. */
7915 register_remote_support_xml ("i386");