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