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