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