]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/i386-tdep.c
a5b1b497c8a608f8a7a46f360332b9aa56478789
[thirdparty/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, i387_ext_type (gdbarch), 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, i387_ext_type (gdbarch));
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 /* Construct types for ISA-specific registers. */
1998 struct type *
1999 i386_eflags_type (struct gdbarch *gdbarch)
2000 {
2001 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2002
2003 if (!tdep->i386_eflags_type)
2004 {
2005 struct type *type;
2006
2007 type = init_flags_type ("builtin_type_i386_eflags", 4);
2008 append_flags_type_flag (type, 0, "CF");
2009 append_flags_type_flag (type, 1, NULL);
2010 append_flags_type_flag (type, 2, "PF");
2011 append_flags_type_flag (type, 4, "AF");
2012 append_flags_type_flag (type, 6, "ZF");
2013 append_flags_type_flag (type, 7, "SF");
2014 append_flags_type_flag (type, 8, "TF");
2015 append_flags_type_flag (type, 9, "IF");
2016 append_flags_type_flag (type, 10, "DF");
2017 append_flags_type_flag (type, 11, "OF");
2018 append_flags_type_flag (type, 14, "NT");
2019 append_flags_type_flag (type, 16, "RF");
2020 append_flags_type_flag (type, 17, "VM");
2021 append_flags_type_flag (type, 18, "AC");
2022 append_flags_type_flag (type, 19, "VIF");
2023 append_flags_type_flag (type, 20, "VIP");
2024 append_flags_type_flag (type, 21, "ID");
2025
2026 tdep->i386_eflags_type = type;
2027 }
2028
2029 return tdep->i386_eflags_type;
2030 }
2031
2032 struct type *
2033 i386_mxcsr_type (struct gdbarch *gdbarch)
2034 {
2035 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2036
2037 if (!tdep->i386_mxcsr_type)
2038 {
2039 struct type *type;
2040
2041 type = init_flags_type ("builtin_type_i386_mxcsr", 4);
2042 append_flags_type_flag (type, 0, "IE");
2043 append_flags_type_flag (type, 1, "DE");
2044 append_flags_type_flag (type, 2, "ZE");
2045 append_flags_type_flag (type, 3, "OE");
2046 append_flags_type_flag (type, 4, "UE");
2047 append_flags_type_flag (type, 5, "PE");
2048 append_flags_type_flag (type, 6, "DAZ");
2049 append_flags_type_flag (type, 7, "IM");
2050 append_flags_type_flag (type, 8, "DM");
2051 append_flags_type_flag (type, 9, "ZM");
2052 append_flags_type_flag (type, 10, "OM");
2053 append_flags_type_flag (type, 11, "UM");
2054 append_flags_type_flag (type, 12, "PM");
2055 append_flags_type_flag (type, 15, "FZ");
2056
2057 tdep->i386_mxcsr_type = type;
2058 }
2059
2060 return tdep->i386_mxcsr_type;
2061 }
2062
2063 struct type *
2064 i387_ext_type (struct gdbarch *gdbarch)
2065 {
2066 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2067
2068 if (!tdep->i387_ext_type)
2069 tdep->i387_ext_type
2070 = init_float_type (-1, "builtin_type_i387_ext",
2071 floatformats_i387_ext);
2072
2073 return tdep->i387_ext_type;
2074 }
2075
2076 /* Construct vector type for MMX registers. */
2077 struct type *
2078 i386_mmx_type (struct gdbarch *gdbarch)
2079 {
2080 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2081
2082 if (!tdep->i386_mmx_type)
2083 {
2084 const struct builtin_type *bt = builtin_type (gdbarch);
2085
2086 /* The type we're building is this: */
2087 #if 0
2088 union __gdb_builtin_type_vec64i
2089 {
2090 int64_t uint64;
2091 int32_t v2_int32[2];
2092 int16_t v4_int16[4];
2093 int8_t v8_int8[8];
2094 };
2095 #endif
2096
2097 struct type *t;
2098
2099 t = init_composite_type ("__gdb_builtin_type_vec64i", TYPE_CODE_UNION);
2100
2101 append_composite_type_field (t, "uint64", bt->builtin_int64);
2102 append_composite_type_field (t, "v2_int32",
2103 init_vector_type (bt->builtin_int32, 2));
2104 append_composite_type_field (t, "v4_int16",
2105 init_vector_type (bt->builtin_int16, 4));
2106 append_composite_type_field (t, "v8_int8",
2107 init_vector_type (bt->builtin_int8, 8));
2108
2109 TYPE_VECTOR (t) = 1;
2110 TYPE_NAME (t) = "builtin_type_vec64i";
2111 tdep->i386_mmx_type = t;
2112 }
2113
2114 return tdep->i386_mmx_type;
2115 }
2116
2117 struct type *
2118 i386_sse_type (struct gdbarch *gdbarch)
2119 {
2120 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2121
2122 if (!tdep->i386_sse_type)
2123 {
2124 const struct builtin_type *bt = builtin_type (gdbarch);
2125
2126 /* The type we're building is this: */
2127 #if 0
2128 union __gdb_builtin_type_vec128i
2129 {
2130 int128_t uint128;
2131 int64_t v2_int64[2];
2132 int32_t v4_int32[4];
2133 int16_t v8_int16[8];
2134 int8_t v16_int8[16];
2135 double v2_double[2];
2136 float v4_float[4];
2137 };
2138 #endif
2139
2140 struct type *t;
2141
2142 t = init_composite_type ("__gdb_builtin_type_vec128i", TYPE_CODE_UNION);
2143 append_composite_type_field (t, "v4_float",
2144 init_vector_type (bt->builtin_float, 4));
2145 append_composite_type_field (t, "v2_double",
2146 init_vector_type (bt->builtin_double, 2));
2147 append_composite_type_field (t, "v16_int8",
2148 init_vector_type (bt->builtin_int8, 16));
2149 append_composite_type_field (t, "v8_int16",
2150 init_vector_type (bt->builtin_int16, 8));
2151 append_composite_type_field (t, "v4_int32",
2152 init_vector_type (bt->builtin_int32, 4));
2153 append_composite_type_field (t, "v2_int64",
2154 init_vector_type (bt->builtin_int64, 2));
2155 append_composite_type_field (t, "uint128", bt->builtin_int128);
2156
2157 TYPE_VECTOR (t) = 1;
2158 TYPE_NAME (t) = "builtin_type_vec128i";
2159 tdep->i386_sse_type = t;
2160 }
2161
2162 return tdep->i386_sse_type;
2163 }
2164
2165 /* Return the GDB type object for the "standard" data type of data in
2166 register REGNUM. Perhaps %esi and %edi should go here, but
2167 potentially they could be used for things other than address. */
2168
2169 static struct type *
2170 i386_register_type (struct gdbarch *gdbarch, int regnum)
2171 {
2172 if (regnum == I386_EIP_REGNUM)
2173 return builtin_type (gdbarch)->builtin_func_ptr;
2174
2175 if (regnum == I386_EFLAGS_REGNUM)
2176 return i386_eflags_type (gdbarch);
2177
2178 if (regnum == I386_EBP_REGNUM || regnum == I386_ESP_REGNUM)
2179 return builtin_type (gdbarch)->builtin_data_ptr;
2180
2181 if (i386_fp_regnum_p (gdbarch, regnum))
2182 return i387_ext_type (gdbarch);
2183
2184 if (i386_mmx_regnum_p (gdbarch, regnum))
2185 return i386_mmx_type (gdbarch);
2186
2187 if (i386_sse_regnum_p (gdbarch, regnum))
2188 return i386_sse_type (gdbarch);
2189
2190 if (regnum == I387_MXCSR_REGNUM (gdbarch_tdep (gdbarch)))
2191 return i386_mxcsr_type (gdbarch);
2192
2193 return builtin_type (gdbarch)->builtin_int;
2194 }
2195
2196 /* Map a cooked register onto a raw register or memory. For the i386,
2197 the MMX registers need to be mapped onto floating point registers. */
2198
2199 static int
2200 i386_mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
2201 {
2202 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
2203 int mmxreg, fpreg;
2204 ULONGEST fstat;
2205 int tos;
2206
2207 mmxreg = regnum - tdep->mm0_regnum;
2208 regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
2209 tos = (fstat >> 11) & 0x7;
2210 fpreg = (mmxreg + tos) % 8;
2211
2212 return (I387_ST0_REGNUM (tdep) + fpreg);
2213 }
2214
2215 static void
2216 i386_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
2217 int regnum, gdb_byte *buf)
2218 {
2219 if (i386_mmx_regnum_p (gdbarch, regnum))
2220 {
2221 gdb_byte mmx_buf[MAX_REGISTER_SIZE];
2222 int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2223
2224 /* Extract (always little endian). */
2225 regcache_raw_read (regcache, fpnum, mmx_buf);
2226 memcpy (buf, mmx_buf, register_size (gdbarch, regnum));
2227 }
2228 else
2229 regcache_raw_read (regcache, regnum, buf);
2230 }
2231
2232 static void
2233 i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
2234 int regnum, const gdb_byte *buf)
2235 {
2236 if (i386_mmx_regnum_p (gdbarch, regnum))
2237 {
2238 gdb_byte mmx_buf[MAX_REGISTER_SIZE];
2239 int fpnum = i386_mmx_regnum_to_fp_regnum (regcache, regnum);
2240
2241 /* Read ... */
2242 regcache_raw_read (regcache, fpnum, mmx_buf);
2243 /* ... Modify ... (always little endian). */
2244 memcpy (mmx_buf, buf, register_size (gdbarch, regnum));
2245 /* ... Write. */
2246 regcache_raw_write (regcache, fpnum, mmx_buf);
2247 }
2248 else
2249 regcache_raw_write (regcache, regnum, buf);
2250 }
2251 \f
2252
2253 /* Return the register number of the register allocated by GCC after
2254 REGNUM, or -1 if there is no such register. */
2255
2256 static int
2257 i386_next_regnum (int regnum)
2258 {
2259 /* GCC allocates the registers in the order:
2260
2261 %eax, %edx, %ecx, %ebx, %esi, %edi, %ebp, %esp, ...
2262
2263 Since storing a variable in %esp doesn't make any sense we return
2264 -1 for %ebp and for %esp itself. */
2265 static int next_regnum[] =
2266 {
2267 I386_EDX_REGNUM, /* Slot for %eax. */
2268 I386_EBX_REGNUM, /* Slot for %ecx. */
2269 I386_ECX_REGNUM, /* Slot for %edx. */
2270 I386_ESI_REGNUM, /* Slot for %ebx. */
2271 -1, -1, /* Slots for %esp and %ebp. */
2272 I386_EDI_REGNUM, /* Slot for %esi. */
2273 I386_EBP_REGNUM /* Slot for %edi. */
2274 };
2275
2276 if (regnum >= 0 && regnum < sizeof (next_regnum) / sizeof (next_regnum[0]))
2277 return next_regnum[regnum];
2278
2279 return -1;
2280 }
2281
2282 /* Return nonzero if a value of type TYPE stored in register REGNUM
2283 needs any special handling. */
2284
2285 static int
2286 i386_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type)
2287 {
2288 int len = TYPE_LENGTH (type);
2289
2290 /* Values may be spread across multiple registers. Most debugging
2291 formats aren't expressive enough to specify the locations, so
2292 some heuristics is involved. Right now we only handle types that
2293 have a length that is a multiple of the word size, since GCC
2294 doesn't seem to put any other types into registers. */
2295 if (len > 4 && len % 4 == 0)
2296 {
2297 int last_regnum = regnum;
2298
2299 while (len > 4)
2300 {
2301 last_regnum = i386_next_regnum (last_regnum);
2302 len -= 4;
2303 }
2304
2305 if (last_regnum != -1)
2306 return 1;
2307 }
2308
2309 return i387_convert_register_p (gdbarch, regnum, type);
2310 }
2311
2312 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
2313 return its contents in TO. */
2314
2315 static void
2316 i386_register_to_value (struct frame_info *frame, int regnum,
2317 struct type *type, gdb_byte *to)
2318 {
2319 struct gdbarch *gdbarch = get_frame_arch (frame);
2320 int len = TYPE_LENGTH (type);
2321
2322 /* FIXME: kettenis/20030609: What should we do if REGNUM isn't
2323 available in FRAME (i.e. if it wasn't saved)? */
2324
2325 if (i386_fp_regnum_p (gdbarch, regnum))
2326 {
2327 i387_register_to_value (frame, regnum, type, to);
2328 return;
2329 }
2330
2331 /* Read a value spread across multiple registers. */
2332
2333 gdb_assert (len > 4 && len % 4 == 0);
2334
2335 while (len > 0)
2336 {
2337 gdb_assert (regnum != -1);
2338 gdb_assert (register_size (gdbarch, regnum) == 4);
2339
2340 get_frame_register (frame, regnum, to);
2341 regnum = i386_next_regnum (regnum);
2342 len -= 4;
2343 to += 4;
2344 }
2345 }
2346
2347 /* Write the contents FROM of a value of type TYPE into register
2348 REGNUM in frame FRAME. */
2349
2350 static void
2351 i386_value_to_register (struct frame_info *frame, int regnum,
2352 struct type *type, const gdb_byte *from)
2353 {
2354 int len = TYPE_LENGTH (type);
2355
2356 if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
2357 {
2358 i387_value_to_register (frame, regnum, type, from);
2359 return;
2360 }
2361
2362 /* Write a value spread across multiple registers. */
2363
2364 gdb_assert (len > 4 && len % 4 == 0);
2365
2366 while (len > 0)
2367 {
2368 gdb_assert (regnum != -1);
2369 gdb_assert (register_size (get_frame_arch (frame), regnum) == 4);
2370
2371 put_frame_register (frame, regnum, from);
2372 regnum = i386_next_regnum (regnum);
2373 len -= 4;
2374 from += 4;
2375 }
2376 }
2377 \f
2378 /* Supply register REGNUM from the buffer specified by GREGS and LEN
2379 in the general-purpose register set REGSET to register cache
2380 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
2381
2382 void
2383 i386_supply_gregset (const struct regset *regset, struct regcache *regcache,
2384 int regnum, const void *gregs, size_t len)
2385 {
2386 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2387 const gdb_byte *regs = gregs;
2388 int i;
2389
2390 gdb_assert (len == tdep->sizeof_gregset);
2391
2392 for (i = 0; i < tdep->gregset_num_regs; i++)
2393 {
2394 if ((regnum == i || regnum == -1)
2395 && tdep->gregset_reg_offset[i] != -1)
2396 regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]);
2397 }
2398 }
2399
2400 /* Collect register REGNUM from the register cache REGCACHE and store
2401 it in the buffer specified by GREGS and LEN as described by the
2402 general-purpose register set REGSET. If REGNUM is -1, do this for
2403 all registers in REGSET. */
2404
2405 void
2406 i386_collect_gregset (const struct regset *regset,
2407 const struct regcache *regcache,
2408 int regnum, void *gregs, size_t len)
2409 {
2410 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2411 gdb_byte *regs = gregs;
2412 int i;
2413
2414 gdb_assert (len == tdep->sizeof_gregset);
2415
2416 for (i = 0; i < tdep->gregset_num_regs; i++)
2417 {
2418 if ((regnum == i || regnum == -1)
2419 && tdep->gregset_reg_offset[i] != -1)
2420 regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]);
2421 }
2422 }
2423
2424 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
2425 in the floating-point register set REGSET to register cache
2426 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
2427
2428 static void
2429 i386_supply_fpregset (const struct regset *regset, struct regcache *regcache,
2430 int regnum, const void *fpregs, size_t len)
2431 {
2432 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2433
2434 if (len == I387_SIZEOF_FXSAVE)
2435 {
2436 i387_supply_fxsave (regcache, regnum, fpregs);
2437 return;
2438 }
2439
2440 gdb_assert (len == tdep->sizeof_fpregset);
2441 i387_supply_fsave (regcache, regnum, fpregs);
2442 }
2443
2444 /* Collect register REGNUM from the register cache REGCACHE and store
2445 it in the buffer specified by FPREGS and LEN as described by the
2446 floating-point register set REGSET. If REGNUM is -1, do this for
2447 all registers in REGSET. */
2448
2449 static void
2450 i386_collect_fpregset (const struct regset *regset,
2451 const struct regcache *regcache,
2452 int regnum, void *fpregs, size_t len)
2453 {
2454 const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2455
2456 if (len == I387_SIZEOF_FXSAVE)
2457 {
2458 i387_collect_fxsave (regcache, regnum, fpregs);
2459 return;
2460 }
2461
2462 gdb_assert (len == tdep->sizeof_fpregset);
2463 i387_collect_fsave (regcache, regnum, fpregs);
2464 }
2465
2466 /* Return the appropriate register set for the core section identified
2467 by SECT_NAME and SECT_SIZE. */
2468
2469 const struct regset *
2470 i386_regset_from_core_section (struct gdbarch *gdbarch,
2471 const char *sect_name, size_t sect_size)
2472 {
2473 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2474
2475 if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
2476 {
2477 if (tdep->gregset == NULL)
2478 tdep->gregset = regset_alloc (gdbarch, i386_supply_gregset,
2479 i386_collect_gregset);
2480 return tdep->gregset;
2481 }
2482
2483 if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
2484 || (strcmp (sect_name, ".reg-xfp") == 0
2485 && sect_size == I387_SIZEOF_FXSAVE))
2486 {
2487 if (tdep->fpregset == NULL)
2488 tdep->fpregset = regset_alloc (gdbarch, i386_supply_fpregset,
2489 i386_collect_fpregset);
2490 return tdep->fpregset;
2491 }
2492
2493 return NULL;
2494 }
2495 \f
2496
2497 /* Stuff for WIN32 PE style DLL's but is pretty generic really. */
2498
2499 CORE_ADDR
2500 i386_pe_skip_trampoline_code (CORE_ADDR pc, char *name)
2501 {
2502 if (pc && read_memory_unsigned_integer (pc, 2) == 0x25ff) /* jmp *(dest) */
2503 {
2504 unsigned long indirect = read_memory_unsigned_integer (pc + 2, 4);
2505 struct minimal_symbol *indsym =
2506 indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
2507 char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
2508
2509 if (symname)
2510 {
2511 if (strncmp (symname, "__imp_", 6) == 0
2512 || strncmp (symname, "_imp_", 5) == 0)
2513 return name ? 1 : read_memory_unsigned_integer (indirect, 4);
2514 }
2515 }
2516 return 0; /* Not a trampoline. */
2517 }
2518 \f
2519
2520 /* Return whether the THIS_FRAME corresponds to a sigtramp
2521 routine. */
2522
2523 int
2524 i386_sigtramp_p (struct frame_info *this_frame)
2525 {
2526 CORE_ADDR pc = get_frame_pc (this_frame);
2527 char *name;
2528
2529 find_pc_partial_function (pc, &name, NULL, NULL);
2530 return (name && strcmp ("_sigtramp", name) == 0);
2531 }
2532 \f
2533
2534 /* We have two flavours of disassembly. The machinery on this page
2535 deals with switching between those. */
2536
2537 static int
2538 i386_print_insn (bfd_vma pc, struct disassemble_info *info)
2539 {
2540 gdb_assert (disassembly_flavor == att_flavor
2541 || disassembly_flavor == intel_flavor);
2542
2543 /* FIXME: kettenis/20020915: Until disassembler_options is properly
2544 constified, cast to prevent a compiler warning. */
2545 info->disassembler_options = (char *) disassembly_flavor;
2546
2547 return print_insn_i386 (pc, info);
2548 }
2549 \f
2550
2551 /* There are a few i386 architecture variants that differ only
2552 slightly from the generic i386 target. For now, we don't give them
2553 their own source file, but include them here. As a consequence,
2554 they'll always be included. */
2555
2556 /* System V Release 4 (SVR4). */
2557
2558 /* Return whether THIS_FRAME corresponds to a SVR4 sigtramp
2559 routine. */
2560
2561 static int
2562 i386_svr4_sigtramp_p (struct frame_info *this_frame)
2563 {
2564 CORE_ADDR pc = get_frame_pc (this_frame);
2565 char *name;
2566
2567 /* UnixWare uses _sigacthandler. The origin of the other symbols is
2568 currently unknown. */
2569 find_pc_partial_function (pc, &name, NULL, NULL);
2570 return (name && (strcmp ("_sigreturn", name) == 0
2571 || strcmp ("_sigacthandler", name) == 0
2572 || strcmp ("sigvechandler", name) == 0));
2573 }
2574
2575 /* Assuming THIS_FRAME is for a SVR4 sigtramp routine, return the
2576 address of the associated sigcontext (ucontext) structure. */
2577
2578 static CORE_ADDR
2579 i386_svr4_sigcontext_addr (struct frame_info *this_frame)
2580 {
2581 gdb_byte buf[4];
2582 CORE_ADDR sp;
2583
2584 get_frame_register (this_frame, I386_ESP_REGNUM, buf);
2585 sp = extract_unsigned_integer (buf, 4);
2586
2587 return read_memory_unsigned_integer (sp + 8, 4);
2588 }
2589 \f
2590
2591 /* Generic ELF. */
2592
2593 void
2594 i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2595 {
2596 /* We typically use stabs-in-ELF with the SVR4 register numbering. */
2597 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
2598 }
2599
2600 /* System V Release 4 (SVR4). */
2601
2602 void
2603 i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2604 {
2605 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2606
2607 /* System V Release 4 uses ELF. */
2608 i386_elf_init_abi (info, gdbarch);
2609
2610 /* System V Release 4 has shared libraries. */
2611 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
2612
2613 tdep->sigtramp_p = i386_svr4_sigtramp_p;
2614 tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
2615 tdep->sc_pc_offset = 36 + 14 * 4;
2616 tdep->sc_sp_offset = 36 + 17 * 4;
2617
2618 tdep->jb_pc_offset = 20;
2619 }
2620
2621 /* DJGPP. */
2622
2623 static void
2624 i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2625 {
2626 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2627
2628 /* DJGPP doesn't have any special frames for signal handlers. */
2629 tdep->sigtramp_p = NULL;
2630
2631 tdep->jb_pc_offset = 36;
2632
2633 /* DJGPP does not support the SSE registers. */
2634 tdep->num_xmm_regs = 0;
2635 set_gdbarch_num_regs (gdbarch, I386_NUM_GREGS + I386_NUM_FREGS);
2636
2637 /* Native compiler is GCC, which uses the SVR4 register numbering
2638 even in COFF and STABS. See the comment in i386_gdbarch_init,
2639 before the calls to set_gdbarch_stab_reg_to_regnum and
2640 set_gdbarch_sdb_reg_to_regnum. */
2641 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
2642 set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
2643 }
2644 \f
2645
2646 /* i386 register groups. In addition to the normal groups, add "mmx"
2647 and "sse". */
2648
2649 static struct reggroup *i386_sse_reggroup;
2650 static struct reggroup *i386_mmx_reggroup;
2651
2652 static void
2653 i386_init_reggroups (void)
2654 {
2655 i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
2656 i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
2657 }
2658
2659 static void
2660 i386_add_reggroups (struct gdbarch *gdbarch)
2661 {
2662 reggroup_add (gdbarch, i386_sse_reggroup);
2663 reggroup_add (gdbarch, i386_mmx_reggroup);
2664 reggroup_add (gdbarch, general_reggroup);
2665 reggroup_add (gdbarch, float_reggroup);
2666 reggroup_add (gdbarch, all_reggroup);
2667 reggroup_add (gdbarch, save_reggroup);
2668 reggroup_add (gdbarch, restore_reggroup);
2669 reggroup_add (gdbarch, vector_reggroup);
2670 reggroup_add (gdbarch, system_reggroup);
2671 }
2672
2673 int
2674 i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
2675 struct reggroup *group)
2676 {
2677 int sse_regnum_p = (i386_sse_regnum_p (gdbarch, regnum)
2678 || i386_mxcsr_regnum_p (gdbarch, regnum));
2679 int fp_regnum_p = (i386_fp_regnum_p (gdbarch, regnum)
2680 || i386_fpc_regnum_p (gdbarch, regnum));
2681 int mmx_regnum_p = (i386_mmx_regnum_p (gdbarch, regnum));
2682
2683 if (group == i386_mmx_reggroup)
2684 return mmx_regnum_p;
2685 if (group == i386_sse_reggroup)
2686 return sse_regnum_p;
2687 if (group == vector_reggroup)
2688 return (mmx_regnum_p || sse_regnum_p);
2689 if (group == float_reggroup)
2690 return fp_regnum_p;
2691 if (group == general_reggroup)
2692 return (!fp_regnum_p && !mmx_regnum_p && !sse_regnum_p);
2693
2694 return default_register_reggroup_p (gdbarch, regnum, group);
2695 }
2696 \f
2697
2698 /* Get the ARGIth function argument for the current function. */
2699
2700 static CORE_ADDR
2701 i386_fetch_pointer_argument (struct frame_info *frame, int argi,
2702 struct type *type)
2703 {
2704 CORE_ADDR sp = get_frame_register_unsigned (frame, I386_ESP_REGNUM);
2705 return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4);
2706 }
2707
2708 static void
2709 i386_skip_permanent_breakpoint (struct regcache *regcache)
2710 {
2711 CORE_ADDR current_pc = regcache_read_pc (regcache);
2712
2713 /* On i386, breakpoint is exactly 1 byte long, so we just
2714 adjust the PC in the regcache. */
2715 current_pc += 1;
2716 regcache_write_pc (regcache, current_pc);
2717 }
2718
2719
2720 #define PREFIX_REPZ 0x01
2721 #define PREFIX_REPNZ 0x02
2722 #define PREFIX_LOCK 0x04
2723 #define PREFIX_DATA 0x08
2724 #define PREFIX_ADDR 0x10
2725
2726 /* operand size */
2727 enum
2728 {
2729 OT_BYTE = 0,
2730 OT_WORD,
2731 OT_LONG,
2732 };
2733
2734 /* i386 arith/logic operations */
2735 enum
2736 {
2737 OP_ADDL,
2738 OP_ORL,
2739 OP_ADCL,
2740 OP_SBBL,
2741 OP_ANDL,
2742 OP_SUBL,
2743 OP_XORL,
2744 OP_CMPL,
2745 };
2746
2747 struct i386_record_s
2748 {
2749 struct regcache *regcache;
2750 CORE_ADDR addr;
2751 int aflag;
2752 int dflag;
2753 int override;
2754 uint8_t modrm;
2755 uint8_t mod, reg, rm;
2756 int ot;
2757 };
2758
2759 /* Parse "modrm" part in current memory address that irp->addr point to
2760 Return -1 if something wrong. */
2761
2762 static int
2763 i386_record_modrm (struct i386_record_s *irp)
2764 {
2765 if (target_read_memory (irp->addr, &irp->modrm, 1))
2766 {
2767 if (record_debug)
2768 printf_unfiltered (_("Process record: error reading memory at "
2769 "addr 0x%s len = 1.\n"),
2770 paddr_nz (irp->addr));
2771 return -1;
2772 }
2773 irp->addr++;
2774 irp->mod = (irp->modrm >> 6) & 3;
2775 irp->reg = (irp->modrm >> 3) & 7;
2776 irp->rm = irp->modrm & 7;
2777
2778 return 0;
2779 }
2780
2781 /* Get the memory address that current instruction write to and set it to
2782 the argument "addr".
2783 Return -1 if something wrong. */
2784
2785 static int
2786 i386_record_lea_modrm_addr (struct i386_record_s *irp, uint32_t * addr)
2787 {
2788 uint8_t tmpu8;
2789 uint16_t tmpu16;
2790 uint32_t tmpu32;
2791
2792 *addr = 0;
2793 if (irp->aflag)
2794 {
2795 /* 32 bits */
2796 int havesib = 0;
2797 uint8_t scale = 0;
2798 uint8_t index = 0;
2799 uint8_t base = irp->rm;
2800
2801 if (base == 4)
2802 {
2803 havesib = 1;
2804 if (target_read_memory (irp->addr, &tmpu8, 1))
2805 {
2806 if (record_debug)
2807 printf_unfiltered (_("Process record: error reading memory "
2808 "at addr 0x%s len = 1.\n"),
2809 paddr_nz (irp->addr));
2810 return -1;
2811 }
2812 irp->addr++;
2813 scale = (tmpu8 >> 6) & 3;
2814 index = ((tmpu8 >> 3) & 7);
2815 base = (tmpu8 & 7);
2816 }
2817
2818 switch (irp->mod)
2819 {
2820 case 0:
2821 if ((base & 7) == 5)
2822 {
2823 base = 0xff;
2824 if (target_read_memory (irp->addr, (gdb_byte *) addr, 4))
2825 {
2826 if (record_debug)
2827 printf_unfiltered (_("Process record: error reading "
2828 "memory at addr 0x%s len = 4.\n"),
2829 paddr_nz (irp->addr));
2830 return -1;
2831 }
2832 irp->addr += 4;
2833 }
2834 else
2835 {
2836 *addr = 0;
2837 }
2838 break;
2839 case 1:
2840 if (target_read_memory (irp->addr, &tmpu8, 1))
2841 {
2842 if (record_debug)
2843 printf_unfiltered (_("Process record: error reading memory "
2844 "at addr 0x%s len = 1.\n"),
2845 paddr_nz (irp->addr));
2846 return -1;
2847 }
2848 irp->addr++;
2849 *addr = (int8_t) tmpu8;
2850 break;
2851 case 2:
2852 if (target_read_memory (irp->addr, (gdb_byte *) addr, 4))
2853 {
2854 if (record_debug)
2855 printf_unfiltered (_("Process record: error reading memory "
2856 "at addr 0x%s len = 4.\n"),
2857 paddr_nz (irp->addr));
2858 return -1;
2859 }
2860 irp->addr += 4;
2861 break;
2862 }
2863
2864 if (base != 0xff)
2865 {
2866 regcache_raw_read (irp->regcache, base, (gdb_byte *) & tmpu32);
2867 *addr += tmpu32;
2868 }
2869
2870 /* XXX: index == 4 is always invalid */
2871 if (havesib && (index != 4 || scale != 0))
2872 {
2873 regcache_raw_read (irp->regcache, index, (gdb_byte *) & tmpu32);
2874 *addr += tmpu32 << scale;
2875 }
2876 }
2877 else
2878 {
2879 /* 16 bits */
2880 switch (irp->mod)
2881 {
2882 case 0:
2883 if (irp->rm == 6)
2884 {
2885 if (target_read_memory
2886 (irp->addr, (gdb_byte *) & tmpu16, 2))
2887 {
2888 if (record_debug)
2889 printf_unfiltered (_("Process record: error reading "
2890 "memory at addr 0x%s len = 2.\n"),
2891 paddr_nz (irp->addr));
2892 return -1;
2893 }
2894 irp->addr += 2;
2895 *addr = (int16_t) tmpu16;
2896 irp->rm = 0;
2897 goto no_rm;
2898 }
2899 else
2900 {
2901 *addr = 0;
2902 }
2903 break;
2904 case 1:
2905 if (target_read_memory (irp->addr, &tmpu8, 1))
2906 {
2907 if (record_debug)
2908 printf_unfiltered (_("Process record: error reading memory "
2909 "at addr 0x%s len = 1.\n"),
2910 paddr_nz (irp->addr));
2911 return -1;
2912 }
2913 irp->addr++;
2914 *addr = (int8_t) tmpu8;
2915 break;
2916 case 2:
2917 if (target_read_memory (irp->addr, (gdb_byte *) & tmpu16, 2))
2918 {
2919 if (record_debug)
2920 printf_unfiltered (_("Process record: error reading memory "
2921 "at addr 0x%s len = 2.\n"),
2922 paddr_nz (irp->addr));
2923 return -1;
2924 }
2925 irp->addr += 2;
2926 *addr = (int16_t) tmpu16;
2927 break;
2928 }
2929
2930 switch (irp->rm)
2931 {
2932 case 0:
2933 regcache_raw_read (irp->regcache, I386_EBX_REGNUM,
2934 (gdb_byte *) & tmpu32);
2935 *addr += tmpu32;
2936 regcache_raw_read (irp->regcache, I386_ESI_REGNUM,
2937 (gdb_byte *) & tmpu32);
2938 *addr += tmpu32;
2939 break;
2940 case 1:
2941 regcache_raw_read (irp->regcache, I386_EBX_REGNUM,
2942 (gdb_byte *) & tmpu32);
2943 *addr += tmpu32;
2944 regcache_raw_read (irp->regcache, I386_EDI_REGNUM,
2945 (gdb_byte *) & tmpu32);
2946 *addr += tmpu32;
2947 break;
2948 case 2:
2949 regcache_raw_read (irp->regcache, I386_EBP_REGNUM,
2950 (gdb_byte *) & tmpu32);
2951 *addr += tmpu32;
2952 regcache_raw_read (irp->regcache, I386_ESI_REGNUM,
2953 (gdb_byte *) & tmpu32);
2954 *addr += tmpu32;
2955 break;
2956 case 3:
2957 regcache_raw_read (irp->regcache, I386_EBP_REGNUM,
2958 (gdb_byte *) & tmpu32);
2959 *addr += tmpu32;
2960 regcache_raw_read (irp->regcache, I386_EDI_REGNUM,
2961 (gdb_byte *) & tmpu32);
2962 *addr += tmpu32;
2963 break;
2964 case 4:
2965 regcache_raw_read (irp->regcache, I386_ESI_REGNUM,
2966 (gdb_byte *) & tmpu32);
2967 *addr += tmpu32;
2968 break;
2969 case 5:
2970 regcache_raw_read (irp->regcache, I386_EDI_REGNUM,
2971 (gdb_byte *) & tmpu32);
2972 *addr += tmpu32;
2973 break;
2974 case 6:
2975 regcache_raw_read (irp->regcache, I386_EBP_REGNUM,
2976 (gdb_byte *) & tmpu32);
2977 *addr += tmpu32;
2978 break;
2979 case 7:
2980 regcache_raw_read (irp->regcache, I386_EBX_REGNUM,
2981 (gdb_byte *) & tmpu32);
2982 *addr += tmpu32;
2983 break;
2984 }
2985 *addr &= 0xffff;
2986 }
2987
2988 no_rm:
2989 return 0;
2990 }
2991
2992 /* Record the value of the memory that willbe changed in current instruction
2993 to "record_arch_list".
2994 Return -1 if something wrong. */
2995
2996 static int
2997 i386_record_lea_modrm (struct i386_record_s *irp)
2998 {
2999 uint32_t addr;
3000
3001 if (irp->override)
3002 {
3003 if (record_debug)
3004 printf_unfiltered (_("Process record ignores the memory change "
3005 "of instruction at address 0x%s because it "
3006 "can't get the value of the segment register.\n"),
3007 paddr_nz (irp->addr));
3008 return 0;
3009 }
3010
3011 if (i386_record_lea_modrm_addr (irp, &addr))
3012 return -1;
3013
3014 if (record_arch_list_add_mem (addr, 1 << irp->ot))
3015 return -1;
3016
3017 return 0;
3018 }
3019
3020 /* Parse the current instruction and record the values of the registers and
3021 memory that will be changed in current instruction to "record_arch_list".
3022 Return -1 if something wrong. */
3023
3024 int
3025 i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
3026 CORE_ADDR addr)
3027 {
3028 int prefixes = 0;
3029 uint8_t tmpu8;
3030 uint16_t tmpu16;
3031 uint32_t tmpu32;
3032 uint32_t opcode;
3033 struct i386_record_s ir;
3034
3035 memset (&ir, 0, sizeof (struct i386_record_s));
3036 ir.regcache = regcache;
3037 ir.addr = addr;
3038 ir.aflag = 1;
3039 ir.dflag = 1;
3040
3041 if (record_debug > 1)
3042 fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
3043 "addr = 0x%s\n",
3044 paddr_nz (ir.addr));
3045
3046 /* prefixes */
3047 while (1)
3048 {
3049 if (target_read_memory (ir.addr, &tmpu8, 1))
3050 {
3051 if (record_debug)
3052 printf_unfiltered (_("Process record: error reading memory at "
3053 "addr 0x%s len = 1.\n"),
3054 paddr_nz (ir.addr));
3055 return -1;
3056 }
3057 ir.addr++;
3058 switch (tmpu8)
3059 {
3060 case 0xf3:
3061 prefixes |= PREFIX_REPZ;
3062 break;
3063 case 0xf2:
3064 prefixes |= PREFIX_REPNZ;
3065 break;
3066 case 0xf0:
3067 prefixes |= PREFIX_LOCK;
3068 break;
3069 case 0x2e:
3070 ir.override = I386_CS_REGNUM;
3071 break;
3072 case 0x36:
3073 ir.override = I386_SS_REGNUM;
3074 break;
3075 case 0x3e:
3076 ir.override = I386_DS_REGNUM;
3077 break;
3078 case 0x26:
3079 ir.override = I386_ES_REGNUM;
3080 break;
3081 case 0x64:
3082 ir.override = I386_FS_REGNUM;
3083 break;
3084 case 0x65:
3085 ir.override = I386_GS_REGNUM;
3086 break;
3087 case 0x66:
3088 prefixes |= PREFIX_DATA;
3089 break;
3090 case 0x67:
3091 prefixes |= PREFIX_ADDR;
3092 break;
3093 default:
3094 goto out_prefixes;
3095 break;
3096 }
3097 }
3098 out_prefixes:
3099 if (prefixes & PREFIX_DATA)
3100 ir.dflag ^= 1;
3101 if (prefixes & PREFIX_ADDR)
3102 ir.aflag ^= 1;
3103
3104 /* now check op code */
3105 opcode = (uint32_t) tmpu8;
3106 reswitch:
3107 switch (opcode)
3108 {
3109 case 0x0f:
3110 if (target_read_memory (ir.addr, &tmpu8, 1))
3111 {
3112 if (record_debug)
3113 printf_unfiltered (_("Process record: error reading memory at "
3114 "addr 0x%s len = 1.\n"),
3115 paddr_nz (ir.addr));
3116 return -1;
3117 }
3118 ir.addr++;
3119 opcode = (uint16_t) tmpu8 | 0x0f00;
3120 goto reswitch;
3121 break;
3122
3123 /* arith & logic */
3124 case 0x00:
3125 case 0x01:
3126 case 0x02:
3127 case 0x03:
3128 case 0x04:
3129 case 0x05:
3130 case 0x08:
3131 case 0x09:
3132 case 0x0a:
3133 case 0x0b:
3134 case 0x0c:
3135 case 0x0d:
3136 case 0x10:
3137 case 0x11:
3138 case 0x12:
3139 case 0x13:
3140 case 0x14:
3141 case 0x15:
3142 case 0x18:
3143 case 0x19:
3144 case 0x1a:
3145 case 0x1b:
3146 case 0x1c:
3147 case 0x1d:
3148 case 0x20:
3149 case 0x21:
3150 case 0x22:
3151 case 0x23:
3152 case 0x24:
3153 case 0x25:
3154 case 0x28:
3155 case 0x29:
3156 case 0x2a:
3157 case 0x2b:
3158 case 0x2c:
3159 case 0x2d:
3160 case 0x30:
3161 case 0x31:
3162 case 0x32:
3163 case 0x33:
3164 case 0x34:
3165 case 0x35:
3166 case 0x38:
3167 case 0x39:
3168 case 0x3a:
3169 case 0x3b:
3170 case 0x3c:
3171 case 0x3d:
3172 if (((opcode >> 3) & 7) != OP_CMPL)
3173 {
3174 if ((opcode & 1) == 0)
3175 ir.ot = OT_BYTE;
3176 else
3177 ir.ot = ir.dflag + OT_WORD;
3178
3179 switch ((opcode >> 1) & 3)
3180 {
3181 /* OP Ev, Gv */
3182 case 0:
3183 if (i386_record_modrm (&ir))
3184 return -1;
3185 if (ir.mod != 3)
3186 {
3187 if (i386_record_lea_modrm (&ir))
3188 return -1;
3189 }
3190 else
3191 {
3192 if (ir.ot == OT_BYTE)
3193 ir.rm &= 0x3;
3194 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3195 return -1;
3196 }
3197 break;
3198 /* OP Gv, Ev */
3199 case 1:
3200 if (i386_record_modrm (&ir))
3201 return -1;
3202 if (ir.ot == OT_BYTE)
3203 ir.reg &= 0x3;
3204 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3205 return -1;
3206 break;
3207 /* OP A, Iv */
3208 case 2:
3209 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3210 return -1;
3211 break;
3212 }
3213 }
3214 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3215 return -1;
3216 break;
3217
3218 /* GRP1 */
3219 case 0x80:
3220 case 0x81:
3221 case 0x82:
3222 case 0x83:
3223 if (i386_record_modrm (&ir))
3224 return -1;
3225
3226 if (ir.reg != OP_CMPL)
3227 {
3228 if ((opcode & 1) == 0)
3229 ir.ot = OT_BYTE;
3230 else
3231 ir.ot = ir.dflag + OT_WORD;
3232
3233 if (ir.mod != 3)
3234 {
3235 if (i386_record_lea_modrm (&ir))
3236 return -1;
3237 }
3238 else
3239 {
3240 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3241 return -1;
3242 }
3243 }
3244 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3245 return -1;
3246 break;
3247
3248 /* inv */
3249 case 0x40:
3250 case 0x41:
3251 case 0x42:
3252 case 0x43:
3253 case 0x44:
3254 case 0x45:
3255 case 0x46:
3256 case 0x47:
3257 /* dec */
3258 case 0x48:
3259 case 0x49:
3260 case 0x4a:
3261 case 0x4b:
3262 case 0x4c:
3263 case 0x4d:
3264 case 0x4e:
3265 case 0x4f:
3266 if (record_arch_list_add_reg (ir.regcache, opcode & 7))
3267 return -1;
3268 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3269 return -1;
3270 break;
3271
3272 /* GRP3 */
3273 case 0xf6:
3274 case 0xf7:
3275 if ((opcode & 1) == 0)
3276 ir.ot = OT_BYTE;
3277 else
3278 ir.ot = ir.dflag + OT_WORD;
3279 if (i386_record_modrm (&ir))
3280 return -1;
3281
3282 switch (ir.reg)
3283 {
3284 /* test */
3285 case 0:
3286 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3287 return -1;
3288 break;
3289 /* not */
3290 case 2:
3291 if (ir.mod != 3)
3292 {
3293 if (i386_record_lea_modrm (&ir))
3294 return -1;
3295 }
3296 else
3297 {
3298 if (ir.ot == OT_BYTE)
3299 ir.rm &= 0x3;
3300 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3301 return -1;
3302 }
3303 break;
3304 /* neg */
3305 case 3:
3306 if (ir.mod != 3)
3307 {
3308 if (i386_record_lea_modrm (&ir))
3309 return -1;
3310 }
3311 else
3312 {
3313 if (ir.ot == OT_BYTE)
3314 ir.rm &= 0x3;
3315 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3316 return -1;
3317 }
3318 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3319 return -1;
3320 break;
3321 /* mul */
3322 case 4:
3323 /* imul */
3324 case 5:
3325 /* div */
3326 case 6:
3327 /* idiv */
3328 case 7:
3329 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3330 return -1;
3331 if (ir.ot != OT_BYTE)
3332 {
3333 if (record_arch_list_add_reg (ir.regcache, I386_EDX_REGNUM))
3334 return -1;
3335 }
3336 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3337 return -1;
3338 break;
3339 default:
3340 ir.addr -= 2;
3341 opcode = opcode << 8 | ir.modrm;
3342 goto no_support;
3343 break;
3344 }
3345 break;
3346
3347 /* GRP4 */
3348 case 0xfe:
3349 /* GRP5 */
3350 case 0xff:
3351 if ((opcode & 1) == 0)
3352 ir.ot = OT_BYTE;
3353 else
3354 ir.ot = ir.dflag + OT_WORD;
3355 if (i386_record_modrm (&ir))
3356 return -1;
3357 if (ir.reg >= 2 && opcode == 0xfe)
3358 {
3359 ir.addr -= 2;
3360 opcode = opcode << 8 | ir.modrm;
3361 goto no_support;
3362 }
3363
3364 switch (ir.reg)
3365 {
3366 /* inc */
3367 case 0:
3368 /* dec */
3369 case 1:
3370 if (ir.mod != 3)
3371 {
3372 if (i386_record_lea_modrm (&ir))
3373 return -1;
3374 }
3375 else
3376 {
3377 if (ir.ot == OT_BYTE)
3378 ir.rm &= 0x3;
3379 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3380 return -1;
3381 }
3382 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3383 return -1;
3384 break;
3385 /* call */
3386 case 2:
3387 /* push */
3388 case 6:
3389 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3390 return -1;
3391 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
3392 (gdb_byte *) & tmpu32);
3393 if (record_arch_list_add_mem
3394 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 1)), (1 << (ir.dflag + 1))))
3395 return -1;
3396 break;
3397 /* lcall */
3398 case 3:
3399 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3400 return -1;
3401 if (record_arch_list_add_reg (ir.regcache, I386_CS_REGNUM))
3402 return -1;
3403 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
3404 (gdb_byte *) & tmpu32);
3405 if (record_arch_list_add_mem
3406 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 2)), (1 << (ir.dflag + 2))))
3407 return -1;
3408 break;
3409 /* jmp */
3410 case 4:
3411 /* ljmp */
3412 case 5:
3413 break;
3414 default:
3415 ir.addr -= 2;
3416 opcode = opcode << 8 | ir.modrm;
3417 goto no_support;
3418 break;
3419 }
3420 break;
3421
3422 /* test */
3423 case 0x84:
3424 case 0x85:
3425 case 0xa8:
3426 case 0xa9:
3427 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3428 return -1;
3429 break;
3430
3431 /* CWDE/CBW */
3432 case 0x98:
3433 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3434 return -1;
3435 break;
3436
3437 /* CDQ/CWD */
3438 case 0x99:
3439 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3440 return -1;
3441 if (record_arch_list_add_reg (ir.regcache, I386_EDX_REGNUM))
3442 return -1;
3443 break;
3444
3445 /* imul */
3446 case 0x0faf:
3447 case 0x69:
3448 case 0x6b:
3449 ir.ot = ir.dflag + OT_WORD;
3450 if (i386_record_modrm (&ir))
3451 return -1;
3452 if (ir.ot == OT_BYTE)
3453 ir.reg &= 0x3;
3454 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3455 return -1;
3456 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3457 return -1;
3458 break;
3459
3460 /* xadd */
3461 case 0x0fc0:
3462 case 0x0fc1:
3463 if ((opcode & 1) == 0)
3464 ir.ot = OT_BYTE;
3465 else
3466 ir.ot = ir.dflag + OT_WORD;
3467 if (i386_record_modrm (&ir))
3468 return -1;
3469 if (ir.mod == 3)
3470 {
3471 if (ir.ot == OT_BYTE)
3472 ir.reg &= 0x3;
3473 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3474 return -1;
3475 if (ir.ot == OT_BYTE)
3476 ir.rm &= 0x3;
3477 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3478 return -1;
3479 }
3480 else
3481 {
3482 if (i386_record_lea_modrm (&ir))
3483 return -1;
3484 if (ir.ot == OT_BYTE)
3485 ir.reg &= 0x3;
3486 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3487 return -1;
3488 }
3489 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3490 return -1;
3491 break;
3492
3493 /* cmpxchg */
3494 case 0x0fb0:
3495 case 0x0fb1:
3496 if ((opcode & 1) == 0)
3497 ir.ot = OT_BYTE;
3498 else
3499 ir.ot = ir.dflag + OT_WORD;
3500 if (i386_record_modrm (&ir))
3501 return -1;
3502 if (ir.mod == 3)
3503 {
3504 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3505 return -1;
3506 if (ir.ot == OT_BYTE)
3507 ir.reg &= 0x3;
3508 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3509 return -1;
3510 }
3511 else
3512 {
3513 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3514 return -1;
3515 if (i386_record_lea_modrm (&ir))
3516 return -1;
3517 }
3518 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3519 return -1;
3520 break;
3521
3522 /* cmpxchg8b */
3523 case 0x0fc7:
3524 if (i386_record_modrm (&ir))
3525 return -1;
3526 if (ir.mod == 3)
3527 {
3528 ir.addr -= 2;
3529 opcode = opcode << 8 | ir.modrm;
3530 goto no_support;
3531 }
3532 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3533 return -1;
3534 if (record_arch_list_add_reg (ir.regcache, I386_EDX_REGNUM))
3535 return -1;
3536 if (i386_record_lea_modrm (&ir))
3537 return -1;
3538 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3539 return -1;
3540 break;
3541
3542 /* push */
3543 case 0x50:
3544 case 0x51:
3545 case 0x52:
3546 case 0x53:
3547 case 0x54:
3548 case 0x55:
3549 case 0x56:
3550 case 0x57:
3551 case 0x68:
3552 case 0x6a:
3553 /* push es */
3554 case 0x06:
3555 /* push cs */
3556 case 0x0e:
3557 /* push ss */
3558 case 0x16:
3559 /* push ds */
3560 case 0x1e:
3561 /* push fs */
3562 case 0x0fa0:
3563 /* push gs */
3564 case 0x0fa8:
3565 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3566 return -1;
3567 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
3568 (gdb_byte *) & tmpu32);
3569 if (record_arch_list_add_mem
3570 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 1)), (1 << (ir.dflag + 1))))
3571 return -1;
3572 break;
3573
3574 /* pop */
3575 case 0x58:
3576 case 0x59:
3577 case 0x5a:
3578 case 0x5b:
3579 case 0x5c:
3580 case 0x5d:
3581 case 0x5e:
3582 case 0x5f:
3583 ir.ot = ir.dflag + OT_WORD;
3584 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3585 return -1;
3586 if (ir.ot == OT_BYTE)
3587 opcode &= 0x3;
3588 if (record_arch_list_add_reg (ir.regcache, opcode & 0x7))
3589 return -1;
3590 break;
3591
3592 /* pusha */
3593 case 0x60:
3594 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3595 return -1;
3596 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
3597 (gdb_byte *) & tmpu32);
3598 if (record_arch_list_add_mem
3599 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 4)), (1 << (ir.dflag + 4))))
3600 return -1;
3601 break;
3602
3603 /* popa */
3604 case 0x61:
3605 for (tmpu8 = I386_EAX_REGNUM; tmpu8 <= I386_EDI_REGNUM; tmpu8++)
3606 {
3607 if (record_arch_list_add_reg (ir.regcache, tmpu8))
3608 return -1;
3609 }
3610 break;
3611
3612 /* pop */
3613 case 0x8f:
3614 ir.ot = ir.dflag + OT_WORD;
3615 if (i386_record_modrm (&ir))
3616 return -1;
3617 if (ir.mod == 3)
3618 {
3619 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3620 return -1;
3621 }
3622 else
3623 {
3624 if (i386_record_lea_modrm (&ir))
3625 return -1;
3626 }
3627 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3628 return -1;
3629 break;
3630
3631 /* enter */
3632 case 0xc8:
3633 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3634 return -1;
3635 if (record_arch_list_add_reg (ir.regcache, I386_EBP_REGNUM))
3636 return -1;
3637 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
3638 (gdb_byte *) & tmpu32);
3639 if (record_arch_list_add_mem
3640 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 1)), (1 << (ir.dflag + 1))))
3641 return -1;
3642 break;
3643
3644 /* leave */
3645 case 0xc9:
3646 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3647 return -1;
3648 if (record_arch_list_add_reg (ir.regcache, I386_EBP_REGNUM))
3649 return -1;
3650 break;
3651
3652 /* pop es */
3653 case 0x07:
3654 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3655 return -1;
3656 if (record_arch_list_add_reg (ir.regcache, I386_ES_REGNUM))
3657 return -1;
3658 break;
3659
3660 /* pop ss */
3661 case 0x17:
3662 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3663 return -1;
3664 if (record_arch_list_add_reg (ir.regcache, I386_SS_REGNUM))
3665 return -1;
3666 break;
3667
3668 /* pop ds */
3669 case 0x1f:
3670 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3671 return -1;
3672 if (record_arch_list_add_reg (ir.regcache, I386_DS_REGNUM))
3673 return -1;
3674 break;
3675
3676 /* pop fs */
3677 case 0x0fa1:
3678 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3679 return -1;
3680 if (record_arch_list_add_reg (ir.regcache, I386_FS_REGNUM))
3681 return -1;
3682 break;
3683
3684 /* pop gs */
3685 case 0x0fa9:
3686 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
3687 return -1;
3688 if (record_arch_list_add_reg (ir.regcache, I386_GS_REGNUM))
3689 return -1;
3690 break;
3691
3692 /* mov */
3693 case 0x88:
3694 case 0x89:
3695 case 0xc6:
3696 case 0xc7:
3697 if ((opcode & 1) == 0)
3698 ir.ot = OT_BYTE;
3699 else
3700 ir.ot = ir.dflag + OT_WORD;
3701
3702 if (i386_record_modrm (&ir))
3703 return -1;
3704
3705 if (ir.mod != 3)
3706 {
3707 if (i386_record_lea_modrm (&ir))
3708 return -1;
3709 }
3710 else
3711 {
3712 if (ir.ot == OT_BYTE)
3713 ir.rm &= 0x3;
3714 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3715 return -1;
3716 }
3717 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3718 return -1;
3719 break;
3720 /* mov */
3721 case 0x8a:
3722 case 0x8b:
3723 if ((opcode & 1) == 0)
3724 ir.ot = OT_BYTE;
3725 else
3726 ir.ot = ir.dflag + OT_WORD;
3727
3728 if (i386_record_modrm (&ir))
3729 return -1;
3730
3731 if (ir.ot == OT_BYTE)
3732 ir.reg &= 0x3;
3733 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3734 return -1;
3735
3736 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3737 return -1;
3738 break;
3739
3740 /* mov seg */
3741 case 0x8e:
3742 if (i386_record_modrm (&ir))
3743 return -1;
3744
3745 switch (ir.reg)
3746 {
3747 case 0:
3748 tmpu8 = I386_ES_REGNUM;
3749 break;
3750 case 2:
3751 tmpu8 = I386_SS_REGNUM;
3752 break;
3753 case 3:
3754 tmpu8 = I386_DS_REGNUM;
3755 break;
3756 case 4:
3757 tmpu8 = I386_FS_REGNUM;
3758 break;
3759 case 5:
3760 tmpu8 = I386_GS_REGNUM;
3761 break;
3762 default:
3763 ir.addr -= 2;
3764 opcode = opcode << 8 | ir.modrm;
3765 goto no_support;
3766 break;
3767 }
3768 if (record_arch_list_add_reg (ir.regcache, tmpu8))
3769 return -1;
3770
3771 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3772 return -1;
3773 break;
3774
3775 /* mov seg */
3776 case 0x8c:
3777 if (i386_record_modrm (&ir))
3778 return -1;
3779 if (ir.reg > 5)
3780 {
3781 ir.addr -= 2;
3782 opcode = opcode << 8 | ir.modrm;
3783 goto no_support;
3784 }
3785
3786 if (ir.mod == 3)
3787 {
3788 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3789 return -1;
3790 }
3791 else
3792 {
3793 ir.ot = OT_WORD;
3794 if (i386_record_lea_modrm (&ir))
3795 return -1;
3796 }
3797
3798 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
3799 return -1;
3800 break;
3801
3802 /* movzbS */
3803 case 0x0fb6:
3804 /* movzwS */
3805 case 0x0fb7:
3806 /* movsbS */
3807 case 0x0fbe:
3808 /* movswS */
3809 case 0x0fbf:
3810 if (i386_record_modrm (&ir))
3811 return -1;
3812 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3813 return -1;
3814 break;
3815
3816 /* lea */
3817 case 0x8d:
3818 if (i386_record_modrm (&ir))
3819 return -1;
3820 if (ir.mod == 3)
3821 {
3822 ir.addr -= 2;
3823 opcode = opcode << 8 | ir.modrm;
3824 goto no_support;
3825 }
3826
3827 ir.ot = ir.dflag;
3828 if (ir.ot == OT_BYTE)
3829 ir.reg &= 0x3;
3830 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3831 return -1;
3832 break;
3833
3834 /* mov EAX */
3835 case 0xa0:
3836 case 0xa1:
3837 /* xlat */
3838 case 0xd7:
3839 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3840 return -1;
3841 break;
3842
3843 /* mov EAX */
3844 case 0xa2:
3845 case 0xa3:
3846 {
3847 uint32_t addr;
3848
3849 if (ir.override)
3850 {
3851 if (record_debug)
3852 printf_unfiltered (_("Process record ignores the memory change "
3853 "of instruction at address 0x%s because "
3854 "it can't get the value of the segment "
3855 "register.\n"),
3856 paddr_nz (ir.addr));
3857 }
3858 else
3859 {
3860 if ((opcode & 1) == 0)
3861 ir.ot = OT_BYTE;
3862 else
3863 ir.ot = ir.dflag + OT_WORD;
3864 if (ir.aflag)
3865 {
3866 if (target_read_memory
3867 (ir.addr, (gdb_byte *) & addr, 4))
3868 {
3869 if (record_debug)
3870 printf_unfiltered (_("Process record: error reading "
3871 "memory at addr 0x%s len = 4.\n"),
3872 paddr_nz (ir.addr));
3873 return -1;
3874 }
3875 ir.addr += 4;
3876 }
3877 else
3878 {
3879 if (target_read_memory
3880 (ir.addr, (gdb_byte *) & tmpu16, 4))
3881 {
3882 if (record_debug)
3883 printf_unfiltered (_("Process record: error reading "
3884 "memory at addr 0x%s len = 4.\n"),
3885 paddr_nz (ir.addr));
3886 return -1;
3887 }
3888 ir.addr += 2;
3889 addr = tmpu16;
3890 }
3891 if (record_arch_list_add_mem (addr, 1 << ir.ot))
3892 return -1;
3893 }
3894 }
3895 break;
3896
3897 /* mov R, Ib */
3898 case 0xb0:
3899 case 0xb1:
3900 case 0xb2:
3901 case 0xb3:
3902 case 0xb4:
3903 case 0xb5:
3904 case 0xb6:
3905 case 0xb7:
3906 if (record_arch_list_add_reg (ir.regcache, (opcode & 0x7) & 0x3))
3907 return -1;
3908 break;
3909
3910 /* mov R, Iv */
3911 case 0xb8:
3912 case 0xb9:
3913 case 0xba:
3914 case 0xbb:
3915 case 0xbc:
3916 case 0xbd:
3917 case 0xbe:
3918 case 0xbf:
3919 if (record_arch_list_add_reg (ir.regcache, opcode & 0x7))
3920 return -1;
3921 break;
3922
3923 /* xchg R, EAX */
3924 case 0x91:
3925 case 0x92:
3926 case 0x93:
3927 case 0x94:
3928 case 0x95:
3929 case 0x96:
3930 case 0x97:
3931 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
3932 return -1;
3933 if (record_arch_list_add_reg (ir.regcache, opcode & 0x7))
3934 return -1;
3935 break;
3936
3937 /* xchg Ev, Gv */
3938 case 0x86:
3939 case 0x87:
3940 if ((opcode & 1) == 0)
3941 ir.ot = OT_BYTE;
3942 else
3943 ir.ot = ir.dflag + OT_WORD;
3944
3945 if (i386_record_modrm (&ir))
3946 return -1;
3947
3948 if (ir.mod == 3)
3949 {
3950 if (ir.ot == OT_BYTE)
3951 ir.rm &= 0x3;
3952 if (record_arch_list_add_reg (ir.regcache, ir.rm))
3953 return -1;
3954 }
3955 else
3956 {
3957 if (i386_record_lea_modrm (&ir))
3958 return -1;
3959 }
3960
3961 if (ir.ot == OT_BYTE)
3962 ir.reg &= 0x3;
3963 if (record_arch_list_add_reg (ir.regcache, ir.reg))
3964 return -1;
3965 break;
3966
3967 /* les Gv */
3968 case 0xc4:
3969 /* lds Gv */
3970 case 0xc5:
3971 /* lss Gv */
3972 case 0x0fb2:
3973 /* lfs Gv */
3974 case 0x0fb4:
3975 /* lgs Gv */
3976 case 0x0fb5:
3977 if (i386_record_modrm (&ir))
3978 return -1;
3979 if (ir.mod == 3)
3980 {
3981 if (opcode > 0xff)
3982 ir.addr -= 3;
3983 else
3984 ir.addr -= 2;
3985 opcode = opcode << 8 | ir.modrm;
3986 goto no_support;
3987 }
3988
3989 switch (opcode)
3990 {
3991 /* les Gv */
3992 case 0xc4:
3993 tmpu8 = I386_ES_REGNUM;
3994 break;
3995 /* lds Gv */
3996 case 0xc5:
3997 tmpu8 = I386_DS_REGNUM;
3998 break;
3999 /* lss Gv */
4000 case 0x0fb2:
4001 tmpu8 = I386_SS_REGNUM;
4002 break;
4003 /* lfs Gv */
4004 case 0x0fb4:
4005 tmpu8 = I386_FS_REGNUM;
4006 break;
4007 /* lgs Gv */
4008 case 0x0fb5:
4009 tmpu8 = I386_GS_REGNUM;
4010 break;
4011 }
4012 if (record_arch_list_add_reg (ir.regcache, tmpu8))
4013 return -1;
4014
4015 if (record_arch_list_add_reg (ir.regcache, ir.reg))
4016 return -1;
4017 break;
4018
4019 /* shifts */
4020 case 0xc0:
4021 case 0xc1:
4022 case 0xd0:
4023 case 0xd1:
4024 case 0xd2:
4025 case 0xd3:
4026 if ((opcode & 1) == 0)
4027 ir.ot = OT_BYTE;
4028 else
4029 ir.ot = ir.dflag + OT_WORD;
4030
4031 if (i386_record_modrm (&ir))
4032 return -1;
4033
4034 if (ir.mod != 3 && (opcode == 0xd2 || opcode == 0xd3))
4035 {
4036 if (i386_record_lea_modrm (&ir))
4037 return -1;
4038 }
4039 else
4040 {
4041 if (ir.ot == OT_BYTE)
4042 ir.rm &= 0x3;
4043 if (record_arch_list_add_reg (ir.regcache, ir.rm))
4044 return -1;
4045 }
4046
4047 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4048 return -1;
4049 break;
4050
4051 case 0x0fa4:
4052 case 0x0fa5:
4053 case 0x0fac:
4054 case 0x0fad:
4055 if (i386_record_modrm (&ir))
4056 return -1;
4057 if (ir.mod == 3)
4058 {
4059 if (record_arch_list_add_reg (ir.regcache, ir.rm))
4060 return -1;
4061 }
4062 else
4063 {
4064 if (i386_record_lea_modrm (&ir))
4065 return -1;
4066 }
4067 break;
4068
4069 /* floats */
4070 /* It just record the memory change of instrcution. */
4071 case 0xd8:
4072 case 0xd9:
4073 case 0xda:
4074 case 0xdb:
4075 case 0xdc:
4076 case 0xdd:
4077 case 0xde:
4078 case 0xdf:
4079 if (i386_record_modrm (&ir))
4080 return -1;
4081 ir.reg |= ((opcode & 7) << 3);
4082 if (ir.mod != 3)
4083 {
4084 /* memory */
4085 uint32_t addr;
4086
4087 if (i386_record_lea_modrm_addr (&ir, &addr))
4088 return -1;
4089 switch (ir.reg)
4090 {
4091 case 0x00:
4092 case 0x01:
4093 case 0x02:
4094 case 0x03:
4095 case 0x04:
4096 case 0x05:
4097 case 0x06:
4098 case 0x07:
4099 case 0x10:
4100 case 0x11:
4101 case 0x12:
4102 case 0x13:
4103 case 0x14:
4104 case 0x15:
4105 case 0x16:
4106 case 0x17:
4107 case 0x20:
4108 case 0x21:
4109 case 0x22:
4110 case 0x23:
4111 case 0x24:
4112 case 0x25:
4113 case 0x26:
4114 case 0x27:
4115 case 0x30:
4116 case 0x31:
4117 case 0x32:
4118 case 0x33:
4119 case 0x34:
4120 case 0x35:
4121 case 0x36:
4122 case 0x37:
4123 break;
4124 case 0x08:
4125 case 0x0a:
4126 case 0x0b:
4127 case 0x18:
4128 case 0x19:
4129 case 0x1a:
4130 case 0x1b:
4131 case 0x28:
4132 case 0x29:
4133 case 0x2a:
4134 case 0x2b:
4135 case 0x38:
4136 case 0x39:
4137 case 0x3a:
4138 case 0x3b:
4139 switch (ir.reg & 7)
4140 {
4141 case 0:
4142 break;
4143 case 1:
4144 switch (ir.reg >> 4)
4145 {
4146 case 0:
4147 if (record_arch_list_add_mem (addr, 4))
4148 return -1;
4149 break;
4150 case 2:
4151 if (record_arch_list_add_mem (addr, 8))
4152 return -1;
4153 break;
4154 case 3:
4155 default:
4156 if (record_arch_list_add_mem (addr, 2))
4157 return -1;
4158 break;
4159 }
4160 break;
4161 default:
4162 switch (ir.reg >> 4)
4163 {
4164 case 0:
4165 case 1:
4166 if (record_arch_list_add_mem (addr, 4))
4167 return -1;
4168 break;
4169 case 2:
4170 if (record_arch_list_add_mem (addr, 8))
4171 return -1;
4172 break;
4173 case 3:
4174 default:
4175 if (record_arch_list_add_mem (addr, 2))
4176 return -1;
4177 break;
4178 }
4179 break;
4180 }
4181 break;
4182 case 0x0c:
4183 case 0x0d:
4184 case 0x1d:
4185 case 0x2c:
4186 case 0x3c:
4187 case 0x3d:
4188 break;
4189 case 0x0e:
4190 if (ir.dflag)
4191 {
4192 if (record_arch_list_add_mem (addr, 28))
4193 return -1;
4194 }
4195 else
4196 {
4197 if (record_arch_list_add_mem (addr, 14))
4198 return -1;
4199 }
4200 break;
4201 case 0x0f:
4202 case 0x2f:
4203 if (record_arch_list_add_mem (addr, 2))
4204 return -1;
4205 break;
4206 case 0x1f:
4207 case 0x3e:
4208 if (record_arch_list_add_mem (addr, 10))
4209 return -1;
4210 break;
4211 case 0x2e:
4212 if (ir.dflag)
4213 {
4214 if (record_arch_list_add_mem (addr, 28))
4215 return -1;
4216 addr += 28;
4217 }
4218 else
4219 {
4220 if (record_arch_list_add_mem (addr, 14))
4221 return -1;
4222 addr += 14;
4223 }
4224 if (record_arch_list_add_mem (addr, 80))
4225 return -1;
4226 break;
4227 case 0x3f:
4228 if (record_arch_list_add_mem (addr, 8))
4229 return -1;
4230 break;
4231 default:
4232 ir.addr -= 2;
4233 opcode = opcode << 8 | ir.modrm;
4234 goto no_support;
4235 break;
4236 }
4237 }
4238 break;
4239
4240 /* string ops */
4241 /* movsS */
4242 case 0xa4:
4243 case 0xa5:
4244 /* stosS */
4245 case 0xaa:
4246 case 0xab:
4247 /* insS */
4248 case 0x6c:
4249 case 0x6d:
4250 {
4251 uint32_t addr;
4252
4253 if ((opcode & 1) == 0)
4254 ir.ot = OT_BYTE;
4255 else
4256 ir.ot = ir.dflag + OT_WORD;
4257 if (opcode == 0xa4 || opcode == 0xa5)
4258 {
4259 if (record_arch_list_add_reg (ir.regcache, I386_ESI_REGNUM))
4260 return -1;
4261 }
4262 if (record_arch_list_add_reg (ir.regcache, I386_EDI_REGNUM))
4263 return -1;
4264
4265 regcache_raw_read (ir.regcache, I386_EDI_REGNUM,
4266 (gdb_byte *) & addr);
4267 if (!ir.aflag)
4268 {
4269 addr &= 0xffff;
4270 /* addr += ((uint32_t)read_register (I386_ES_REGNUM)) << 4; */
4271 if (record_debug)
4272 printf_unfiltered (_("Process record ignores the memory change "
4273 "of instruction at address 0x%s because "
4274 "it can't get the value of the segment "
4275 "register.\n"),
4276 paddr_nz (ir.addr));
4277 }
4278
4279 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4280 {
4281 uint32_t count;
4282
4283 regcache_raw_read (ir.regcache, I386_ECX_REGNUM,
4284 (gdb_byte *) & count);
4285 if (!ir.aflag)
4286 count &= 0xffff;
4287
4288 regcache_raw_read (ir.regcache, I386_EFLAGS_REGNUM,
4289 (gdb_byte *) & tmpu32);
4290 if ((tmpu32 >> 10) & 0x1)
4291 addr -= (count - 1) * (1 << ir.ot);
4292
4293 if (ir.aflag)
4294 {
4295 if (record_arch_list_add_mem (addr, count * (1 << ir.ot)))
4296 return -1;
4297 }
4298
4299 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4300 return -1;
4301 }
4302 else
4303 {
4304 if (ir.aflag)
4305 {
4306 if (record_arch_list_add_mem (addr, 1 << ir.ot))
4307 return -1;
4308 }
4309 }
4310 }
4311 break;
4312
4313 /* lodsS */
4314 case 0xac:
4315 case 0xad:
4316 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4317 return -1;
4318 if (record_arch_list_add_reg (ir.regcache, I386_ESI_REGNUM))
4319 return -1;
4320 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4321 {
4322 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4323 return -1;
4324 }
4325 break;
4326
4327 /* outsS */
4328 case 0x6e:
4329 case 0x6f:
4330 if (record_arch_list_add_reg (ir.regcache, I386_ESI_REGNUM))
4331 return -1;
4332 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4333 {
4334 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4335 return -1;
4336 }
4337 break;
4338
4339 /* scasS */
4340 case 0xae:
4341 case 0xaf:
4342 if (record_arch_list_add_reg (ir.regcache, I386_EDI_REGNUM))
4343 return -1;
4344 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4345 {
4346 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4347 return -1;
4348 }
4349 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4350 return -1;
4351 break;
4352
4353 /* cmpsS */
4354 case 0xa6:
4355 case 0xa7:
4356 if (record_arch_list_add_reg (ir.regcache, I386_EDI_REGNUM))
4357 return -1;
4358 if (record_arch_list_add_reg (ir.regcache, I386_ESI_REGNUM))
4359 return -1;
4360 if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
4361 {
4362 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4363 return -1;
4364 }
4365 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4366 return -1;
4367 break;
4368
4369 /* port I/O */
4370 case 0xe4:
4371 case 0xe5:
4372 case 0xec:
4373 case 0xed:
4374 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4375 return -1;
4376 break;
4377
4378 case 0xe6:
4379 case 0xe7:
4380 case 0xee:
4381 case 0xef:
4382 break;
4383
4384 /* control */
4385 /* ret im */
4386 case 0xc2:
4387 /* ret */
4388 case 0xc3:
4389 /* lret im */
4390 case 0xca:
4391 /* lret */
4392 case 0xcb:
4393 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
4394 return -1;
4395 if (record_arch_list_add_reg (ir.regcache, I386_CS_REGNUM))
4396 return -1;
4397 break;
4398
4399 /* iret */
4400 case 0xcf:
4401 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
4402 return -1;
4403 if (record_arch_list_add_reg (ir.regcache, I386_CS_REGNUM))
4404 return -1;
4405 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4406 return -1;
4407 break;
4408
4409 /* call im */
4410 case 0xe8:
4411 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
4412 return -1;
4413 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
4414 (gdb_byte *) & tmpu32);
4415 if (record_arch_list_add_mem
4416 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 1)), (1 << (ir.dflag + 1))))
4417 return -1;
4418 break;
4419
4420 /* lcall im */
4421 case 0x9a:
4422 if (record_arch_list_add_reg (ir.regcache, I386_CS_REGNUM))
4423 return -1;
4424 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
4425 return -1;
4426 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
4427 (gdb_byte *) & tmpu32);
4428 if (record_arch_list_add_mem
4429 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 2)), (1 << (ir.dflag + 2))))
4430 return -1;
4431 break;
4432
4433 /* jmp im */
4434 case 0xe9:
4435 /* ljmp im */
4436 case 0xea:
4437 /* jmp Jb */
4438 case 0xeb:
4439 /* jcc Jb */
4440 case 0x70:
4441 case 0x71:
4442 case 0x72:
4443 case 0x73:
4444 case 0x74:
4445 case 0x75:
4446 case 0x76:
4447 case 0x77:
4448 case 0x78:
4449 case 0x79:
4450 case 0x7a:
4451 case 0x7b:
4452 case 0x7c:
4453 case 0x7d:
4454 case 0x7e:
4455 case 0x7f:
4456 /* jcc Jv */
4457 case 0x0f80:
4458 case 0x0f81:
4459 case 0x0f82:
4460 case 0x0f83:
4461 case 0x0f84:
4462 case 0x0f85:
4463 case 0x0f86:
4464 case 0x0f87:
4465 case 0x0f88:
4466 case 0x0f89:
4467 case 0x0f8a:
4468 case 0x0f8b:
4469 case 0x0f8c:
4470 case 0x0f8d:
4471 case 0x0f8e:
4472 case 0x0f8f:
4473 break;
4474
4475 /* setcc Gv */
4476 case 0x0f90:
4477 case 0x0f91:
4478 case 0x0f92:
4479 case 0x0f93:
4480 case 0x0f94:
4481 case 0x0f95:
4482 case 0x0f96:
4483 case 0x0f97:
4484 case 0x0f98:
4485 case 0x0f99:
4486 case 0x0f9a:
4487 case 0x0f9b:
4488 case 0x0f9c:
4489 case 0x0f9d:
4490 case 0x0f9e:
4491 case 0x0f9f:
4492 ir.ot = OT_BYTE;
4493 if (i386_record_modrm (&ir))
4494 return -1;
4495 if (ir.mod == 3)
4496 {
4497 if (record_arch_list_add_reg (ir.regcache, ir.rm & 0x3))
4498 return -1;
4499 }
4500 else
4501 {
4502 if (i386_record_lea_modrm (&ir))
4503 return -1;
4504 }
4505 break;
4506
4507 /* cmov Gv, Ev */
4508 case 0x0f40:
4509 case 0x0f41:
4510 case 0x0f42:
4511 case 0x0f43:
4512 case 0x0f44:
4513 case 0x0f45:
4514 case 0x0f46:
4515 case 0x0f47:
4516 case 0x0f48:
4517 case 0x0f49:
4518 case 0x0f4a:
4519 case 0x0f4b:
4520 case 0x0f4c:
4521 case 0x0f4d:
4522 case 0x0f4e:
4523 case 0x0f4f:
4524 if (i386_record_modrm (&ir))
4525 return -1;
4526 if (ir.dflag == OT_BYTE)
4527 ir.reg &= 0x3;
4528 if (record_arch_list_add_reg (ir.regcache, ir.reg & 0x3))
4529 return -1;
4530 break;
4531
4532 /* flags */
4533 /* pushf */
4534 case 0x9c:
4535 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
4536 return -1;
4537 regcache_raw_read (ir.regcache, I386_ESP_REGNUM,
4538 (gdb_byte *) & tmpu32);
4539 if (record_arch_list_add_mem
4540 ((CORE_ADDR) tmpu32 - (1 << (ir.dflag + 1)), (1 << (ir.dflag + 1))))
4541 return -1;
4542 break;
4543
4544 /* popf */
4545 case 0x9d:
4546 if (record_arch_list_add_reg (ir.regcache, I386_ESP_REGNUM))
4547 return -1;
4548 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4549 return -1;
4550 break;
4551
4552 /* sahf */
4553 case 0x9e:
4554 /* cmc */
4555 case 0xf5:
4556 /* clc */
4557 case 0xf8:
4558 /* stc */
4559 case 0xf9:
4560 /* cld */
4561 case 0xfc:
4562 /* std */
4563 case 0xfd:
4564 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4565 return -1;
4566 break;
4567
4568 /* lahf */
4569 case 0x9f:
4570 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4571 return -1;
4572 break;
4573
4574 /* bit operations */
4575 /* bt/bts/btr/btc Gv, im */
4576 case 0x0fba:
4577 /* bts */
4578 case 0x0fab:
4579 /* btr */
4580 case 0x0fb3:
4581 /* btc */
4582 case 0x0fbb:
4583 ir.ot = ir.dflag + OT_WORD;
4584 if (i386_record_modrm (&ir))
4585 return -1;
4586 if (ir.reg < 4)
4587 {
4588 ir.addr -= 3;
4589 opcode = opcode << 8 | ir.modrm;
4590 goto no_support;
4591 }
4592 ir.reg -= 4;
4593 if (ir.reg != 0)
4594 {
4595 if (ir.mod != 3)
4596 {
4597 if (i386_record_lea_modrm (&ir))
4598 return -1;
4599 }
4600 else
4601 {
4602 if (record_arch_list_add_reg (ir.regcache, ir.rm))
4603 return -1;
4604 }
4605 }
4606 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4607 return -1;
4608 break;
4609
4610 /* bt Gv, Ev */
4611 case 0x0fa3:
4612 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4613 return -1;
4614 break;
4615
4616 /* bsf */
4617 case 0x0fbc:
4618 /* bsr */
4619 case 0x0fbd:
4620 if (record_arch_list_add_reg (ir.regcache, ir.reg))
4621 return -1;
4622 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4623 return -1;
4624 break;
4625
4626 /* bcd */
4627 /* daa */
4628 case 0x27:
4629 /* das */
4630 case 0x2f:
4631 /* aaa */
4632 case 0x37:
4633 /* aas */
4634 case 0x3f:
4635 /* aam */
4636 case 0xd4:
4637 /* aad */
4638 case 0xd5:
4639 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4640 return -1;
4641 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4642 return -1;
4643 break;
4644
4645 /* misc */
4646 /* nop */
4647 case 0x90:
4648 if (prefixes & PREFIX_LOCK)
4649 {
4650 ir.addr -= 1;
4651 goto no_support;
4652 }
4653 break;
4654
4655 /* fwait */
4656 /* XXX */
4657 case 0x9b:
4658 printf_unfiltered (_("Process record doesn't support instruction "
4659 "fwait.\n"));
4660 ir.addr -= 1;
4661 goto no_support;
4662 break;
4663
4664 /* int3 */
4665 /* XXX */
4666 case 0xcc:
4667 printf_unfiltered (_("Process record doesn't support instruction "
4668 "int3.\n"));
4669 ir.addr -= 1;
4670 goto no_support;
4671 break;
4672
4673 /* int */
4674 /* XXX */
4675 case 0xcd:
4676 {
4677 int ret;
4678 if (target_read_memory (ir.addr, &tmpu8, 1))
4679 {
4680 if (record_debug)
4681 printf_unfiltered (_("Process record: error reading memory "
4682 "at addr 0x%s len = 1.\n"),
4683 paddr_nz (ir.addr));
4684 return -1;
4685 }
4686 ir.addr++;
4687 if (tmpu8 != 0x80
4688 || gdbarch_tdep (gdbarch)->i386_intx80_record == NULL)
4689 {
4690 printf_unfiltered (_("Process record doesn't support "
4691 "instruction int 0x%02x.\n"),
4692 tmpu8);
4693 ir.addr -= 2;
4694 goto no_support;
4695 }
4696 ret = gdbarch_tdep (gdbarch)->i386_intx80_record (ir.regcache);
4697 if (ret)
4698 return ret;
4699 }
4700 break;
4701
4702 /* into */
4703 /* XXX */
4704 case 0xce:
4705 printf_unfiltered (_("Process record doesn't support "
4706 "instruction into.\n"));
4707 ir.addr -= 1;
4708 goto no_support;
4709 break;
4710
4711 /* cli */
4712 case 0xfa:
4713 /* sti */
4714 case 0xfb:
4715 break;
4716
4717 /* bound */
4718 case 0x62:
4719 printf_unfiltered (_("Process record doesn't support "
4720 "instruction bound.\n"));
4721 ir.addr -= 1;
4722 goto no_support;
4723 break;
4724
4725 /* bswap reg */
4726 case 0x0fc8:
4727 case 0x0fc9:
4728 case 0x0fca:
4729 case 0x0fcb:
4730 case 0x0fcc:
4731 case 0x0fcd:
4732 case 0x0fce:
4733 case 0x0fcf:
4734 if (record_arch_list_add_reg (ir.regcache, opcode & 7))
4735 return -1;
4736 break;
4737
4738 /* salc */
4739 case 0xd6:
4740 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4741 return -1;
4742 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4743 return -1;
4744 break;
4745
4746 /* loopnz */
4747 case 0xe0:
4748 /* loopz */
4749 case 0xe1:
4750 /* loop */
4751 case 0xe2:
4752 /* jecxz */
4753 case 0xe3:
4754 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4755 return -1;
4756 break;
4757
4758 /* wrmsr */
4759 case 0x0f30:
4760 printf_unfiltered (_("Process record doesn't support "
4761 "instruction wrmsr.\n"));
4762 ir.addr -= 2;
4763 goto no_support;
4764 break;
4765
4766 /* rdmsr */
4767 case 0x0f32:
4768 printf_unfiltered (_("Process record doesn't support "
4769 "instruction rdmsr.\n"));
4770 ir.addr -= 2;
4771 goto no_support;
4772 break;
4773
4774 /* rdtsc */
4775 case 0x0f31:
4776 printf_unfiltered (_("Process record doesn't support "
4777 "instruction rdtsc.\n"));
4778 ir.addr -= 2;
4779 goto no_support;
4780 break;
4781
4782 /* sysenter */
4783 case 0x0f34:
4784 {
4785 int ret;
4786 if (gdbarch_tdep (gdbarch)->i386_sysenter_record == NULL)
4787 {
4788 printf_unfiltered (_("Process record doesn't support "
4789 "instruction sysenter.\n"));
4790 ir.addr -= 2;
4791 goto no_support;
4792 }
4793 ret = gdbarch_tdep (gdbarch)->i386_sysenter_record (ir.regcache);
4794 if (ret)
4795 return ret;
4796 }
4797 break;
4798
4799 /* sysexit */
4800 case 0x0f35:
4801 printf_unfiltered (_("Process record doesn't support "
4802 "instruction sysexit.\n"));
4803 ir.addr -= 2;
4804 goto no_support;
4805 break;
4806
4807 /* cpuid */
4808 case 0x0fa2:
4809 if (record_arch_list_add_reg (ir.regcache, I386_EAX_REGNUM))
4810 return -1;
4811 if (record_arch_list_add_reg (ir.regcache, I386_ECX_REGNUM))
4812 return -1;
4813 if (record_arch_list_add_reg (ir.regcache, I386_EDX_REGNUM))
4814 return -1;
4815 if (record_arch_list_add_reg (ir.regcache, I386_EBX_REGNUM))
4816 return -1;
4817 break;
4818
4819 /* hlt */
4820 case 0xf4:
4821 printf_unfiltered (_("Process record doesn't support "
4822 "instruction hlt.\n"));
4823 ir.addr -= 1;
4824 goto no_support;
4825 break;
4826
4827 case 0x0f00:
4828 if (i386_record_modrm (&ir))
4829 return -1;
4830 switch (ir.reg)
4831 {
4832 /* sldt */
4833 case 0:
4834 /* str */
4835 case 1:
4836 if (ir.mod == 3)
4837 {
4838 if (record_arch_list_add_reg (ir.regcache, ir.rm))
4839 return -1;
4840 }
4841 else
4842 {
4843 ir.ot = OT_WORD;
4844 if (i386_record_lea_modrm (&ir))
4845 return -1;
4846 }
4847 break;
4848 /* lldt */
4849 case 2:
4850 /* ltr */
4851 case 3:
4852 break;
4853 /* verr */
4854 case 4:
4855 /* verw */
4856 case 5:
4857 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4858 return -1;
4859 break;
4860 default:
4861 ir.addr -= 3;
4862 opcode = opcode << 8 | ir.modrm;
4863 goto no_support;
4864 break;
4865 }
4866 break;
4867
4868 case 0x0f01:
4869 if (i386_record_modrm (&ir))
4870 return -1;
4871 switch (ir.reg)
4872 {
4873 /* sgdt */
4874 case 0:
4875 {
4876 uint32_t addr;
4877
4878 if (ir.mod == 3)
4879 {
4880 ir.addr -= 3;
4881 opcode = opcode << 8 | ir.modrm;
4882 goto no_support;
4883 }
4884
4885 if (ir.override)
4886 {
4887 if (record_debug)
4888 printf_unfiltered (_("Process record ignores the memory "
4889 "change of instruction at "
4890 "address 0x%s because it can't get "
4891 "the value of the segment "
4892 "register.\n"),
4893 paddr_nz (ir.addr));
4894 }
4895 else
4896 {
4897 if (i386_record_lea_modrm_addr (&ir, &addr))
4898 return -1;
4899 if (record_arch_list_add_mem (addr, 2))
4900 return -1;
4901 addr += 2;
4902 if (record_arch_list_add_mem (addr, 4))
4903 return -1;
4904 }
4905 }
4906 break;
4907 case 1:
4908 if (ir.mod == 3)
4909 {
4910 switch (ir.rm)
4911 {
4912 /* monitor */
4913 case 0:
4914 break;
4915 /* mwait */
4916 case 1:
4917 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
4918 return -1;
4919 break;
4920 default:
4921 ir.addr -= 3;
4922 opcode = opcode << 8 | ir.modrm;
4923 goto no_support;
4924 break;
4925 }
4926 }
4927 else
4928 {
4929 /* sidt */
4930 if (ir.override)
4931 {
4932 if (record_debug)
4933 printf_unfiltered (_("Process record ignores the memory "
4934 "change of instruction at "
4935 "address 0x%s because it can't get "
4936 "the value of the segment "
4937 "register.\n"),
4938 paddr_nz (ir.addr));
4939 }
4940 else
4941 {
4942 uint32_t addr;
4943
4944 if (i386_record_lea_modrm_addr (&ir, &addr))
4945 return -1;
4946 if (record_arch_list_add_mem (addr, 2))
4947 return -1;
4948 addr += 2;
4949 if (record_arch_list_add_mem (addr, 4))
4950 return -1;
4951 }
4952 }
4953 break;
4954 /* lgdt */
4955 case 2:
4956 /* lidt */
4957 case 3:
4958 /* invlpg */
4959 case 7:
4960 default:
4961 if (ir.mod == 3)
4962 {
4963 ir.addr -= 3;
4964 opcode = opcode << 8 | ir.modrm;
4965 goto no_support;
4966 }
4967 break;
4968 /* smsw */
4969 case 4:
4970 if (ir.mod == 3)
4971 {
4972 if (record_arch_list_add_reg (ir.regcache, ir.rm))
4973 return -1;
4974 }
4975 else
4976 {
4977 ir.ot = OT_WORD;
4978 if (i386_record_lea_modrm (&ir))
4979 return -1;
4980 }
4981 break;
4982 /* lmsw */
4983 case 6:
4984 break;
4985 }
4986 break;
4987
4988 /* invd */
4989 case 0x0f08:
4990 /* wbinvd */
4991 case 0x0f09:
4992 break;
4993
4994 /* arpl */
4995 case 0x63:
4996 ir.ot = ir.dflag ? OT_LONG : OT_WORD;
4997 if (i386_record_modrm (&ir))
4998 return -1;
4999 if (ir.mod != 3)
5000 {
5001 if (i386_record_lea_modrm (&ir))
5002 return -1;
5003 }
5004 else
5005 {
5006 if (record_arch_list_add_reg (ir.regcache, ir.rm))
5007 return -1;
5008 }
5009 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
5010 return -1;
5011 break;
5012
5013 /* lar */
5014 case 0x0f02:
5015 /* lsl */
5016 case 0x0f03:
5017 if (i386_record_modrm (&ir))
5018 return -1;
5019 if (record_arch_list_add_reg (ir.regcache, ir.reg))
5020 return -1;
5021 if (record_arch_list_add_reg (ir.regcache, I386_EFLAGS_REGNUM))
5022 return -1;
5023 break;
5024
5025 case 0x0f18:
5026 break;
5027
5028 /* nop (multi byte) */
5029 case 0x0f19:
5030 case 0x0f1a:
5031 case 0x0f1b:
5032 case 0x0f1c:
5033 case 0x0f1d:
5034 case 0x0f1e:
5035 case 0x0f1f:
5036 break;
5037
5038 /* mov reg, crN */
5039 case 0x0f20:
5040 /* mov crN, reg */
5041 case 0x0f22:
5042 if (i386_record_modrm (&ir))
5043 return -1;
5044 if ((ir.modrm & 0xc0) != 0xc0)
5045 {
5046 ir.addr -= 2;
5047 opcode = opcode << 8 | ir.modrm;
5048 goto no_support;
5049 }
5050 switch (ir.reg)
5051 {
5052 case 0:
5053 case 2:
5054 case 3:
5055 case 4:
5056 case 8:
5057 if (opcode & 2)
5058 {
5059 }
5060 else
5061 {
5062 if (record_arch_list_add_reg (ir.regcache, ir.rm))
5063 return -1;
5064 }
5065 break;
5066 default:
5067 ir.addr -= 2;
5068 opcode = opcode << 8 | ir.modrm;
5069 goto no_support;
5070 break;
5071 }
5072 break;
5073
5074 /* mov reg, drN */
5075 case 0x0f21:
5076 /* mov drN, reg */
5077 case 0x0f23:
5078 if (i386_record_modrm (&ir))
5079 return -1;
5080 if ((ir.modrm & 0xc0) != 0xc0 || ir.reg == 4
5081 || ir.reg == 5 || ir.reg >= 8)
5082 {
5083 ir.addr -= 2;
5084 opcode = opcode << 8 | ir.modrm;
5085 goto no_support;
5086 }
5087 if (opcode & 2)
5088 {
5089 }
5090 else
5091 {
5092 if (record_arch_list_add_reg (ir.regcache, ir.rm))
5093 return -1;
5094 }
5095 break;
5096
5097 /* clts */
5098 case 0x0f06:
5099 break;
5100
5101 /* MMX/SSE/SSE2/PNI support */
5102 /* XXX */
5103
5104 default:
5105 if (opcode > 0xff)
5106 ir.addr -= 2;
5107 else
5108 ir.addr -= 1;
5109 goto no_support;
5110 break;
5111 }
5112
5113 /* In the future, Maybe still need to deal with need_dasm */
5114 if (record_arch_list_add_reg (ir.regcache, I386_EIP_REGNUM))
5115 return -1;
5116 if (record_arch_list_add_end ())
5117 return -1;
5118
5119 return 0;
5120
5121 no_support:
5122 printf_unfiltered (_("Process record doesn't support instruction 0x%02x "
5123 "at address 0x%s.\n"),
5124 (unsigned int) (opcode), paddr_nz (ir.addr));
5125 return -1;
5126 }
5127
5128 \f
5129 static struct gdbarch *
5130 i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
5131 {
5132 struct gdbarch_tdep *tdep;
5133 struct gdbarch *gdbarch;
5134
5135 /* If there is already a candidate, use it. */
5136 arches = gdbarch_list_lookup_by_info (arches, &info);
5137 if (arches != NULL)
5138 return arches->gdbarch;
5139
5140 /* Allocate space for the new architecture. */
5141 tdep = XCALLOC (1, struct gdbarch_tdep);
5142 gdbarch = gdbarch_alloc (&info, tdep);
5143
5144 /* General-purpose registers. */
5145 tdep->gregset = NULL;
5146 tdep->gregset_reg_offset = NULL;
5147 tdep->gregset_num_regs = I386_NUM_GREGS;
5148 tdep->sizeof_gregset = 0;
5149
5150 /* Floating-point registers. */
5151 tdep->fpregset = NULL;
5152 tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
5153
5154 /* The default settings include the FPU registers, the MMX registers
5155 and the SSE registers. This can be overridden for a specific ABI
5156 by adjusting the members `st0_regnum', `mm0_regnum' and
5157 `num_xmm_regs' of `struct gdbarch_tdep', otherwise the registers
5158 will show up in the output of "info all-registers". Ideally we
5159 should try to autodetect whether they are available, such that we
5160 can prevent "info all-registers" from displaying registers that
5161 aren't available.
5162
5163 NOTE: kevinb/2003-07-13: ... if it's a choice between printing
5164 [the SSE registers] always (even when they don't exist) or never
5165 showing them to the user (even when they do exist), I prefer the
5166 former over the latter. */
5167
5168 tdep->st0_regnum = I386_ST0_REGNUM;
5169
5170 /* The MMX registers are implemented as pseudo-registers. Put off
5171 calculating the register number for %mm0 until we know the number
5172 of raw registers. */
5173 tdep->mm0_regnum = 0;
5174
5175 /* I386_NUM_XREGS includes %mxcsr, so substract one. */
5176 tdep->num_xmm_regs = I386_NUM_XREGS - 1;
5177
5178 tdep->jb_pc_offset = -1;
5179 tdep->struct_return = pcc_struct_return;
5180 tdep->sigtramp_start = 0;
5181 tdep->sigtramp_end = 0;
5182 tdep->sigtramp_p = i386_sigtramp_p;
5183 tdep->sigcontext_addr = NULL;
5184 tdep->sc_reg_offset = NULL;
5185 tdep->sc_pc_offset = -1;
5186 tdep->sc_sp_offset = -1;
5187
5188 /* The format used for `long double' on almost all i386 targets is
5189 the i387 extended floating-point format. In fact, of all targets
5190 in the GCC 2.95 tree, only OSF/1 does it different, and insists
5191 on having a `long double' that's not `long' at all. */
5192 set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
5193
5194 /* Although the i387 extended floating-point has only 80 significant
5195 bits, a `long double' actually takes up 96, probably to enforce
5196 alignment. */
5197 set_gdbarch_long_double_bit (gdbarch, 96);
5198
5199 /* The default ABI includes general-purpose registers,
5200 floating-point registers, and the SSE registers. */
5201 set_gdbarch_num_regs (gdbarch, I386_SSE_NUM_REGS);
5202 set_gdbarch_register_name (gdbarch, i386_register_name);
5203 set_gdbarch_register_type (gdbarch, i386_register_type);
5204
5205 /* Register numbers of various important registers. */
5206 set_gdbarch_sp_regnum (gdbarch, I386_ESP_REGNUM); /* %esp */
5207 set_gdbarch_pc_regnum (gdbarch, I386_EIP_REGNUM); /* %eip */
5208 set_gdbarch_ps_regnum (gdbarch, I386_EFLAGS_REGNUM); /* %eflags */
5209 set_gdbarch_fp0_regnum (gdbarch, I386_ST0_REGNUM); /* %st(0) */
5210
5211 /* NOTE: kettenis/20040418: GCC does have two possible register
5212 numbering schemes on the i386: dbx and SVR4. These schemes
5213 differ in how they number %ebp, %esp, %eflags, and the
5214 floating-point registers, and are implemented by the arrays
5215 dbx_register_map[] and svr4_dbx_register_map in
5216 gcc/config/i386.c. GCC also defines a third numbering scheme in
5217 gcc/config/i386.c, which it designates as the "default" register
5218 map used in 64bit mode. This last register numbering scheme is
5219 implemented in dbx64_register_map, and is used for AMD64; see
5220 amd64-tdep.c.
5221
5222 Currently, each GCC i386 target always uses the same register
5223 numbering scheme across all its supported debugging formats
5224 i.e. SDB (COFF), stabs and DWARF 2. This is because
5225 gcc/sdbout.c, gcc/dbxout.c and gcc/dwarf2out.c all use the
5226 DBX_REGISTER_NUMBER macro which is defined by each target's
5227 respective config header in a manner independent of the requested
5228 output debugging format.
5229
5230 This does not match the arrangement below, which presumes that
5231 the SDB and stabs numbering schemes differ from the DWARF and
5232 DWARF 2 ones. The reason for this arrangement is that it is
5233 likely to get the numbering scheme for the target's
5234 default/native debug format right. For targets where GCC is the
5235 native compiler (FreeBSD, NetBSD, OpenBSD, GNU/Linux) or for
5236 targets where the native toolchain uses a different numbering
5237 scheme for a particular debug format (stabs-in-ELF on Solaris)
5238 the defaults below will have to be overridden, like
5239 i386_elf_init_abi() does. */
5240
5241 /* Use the dbx register numbering scheme for stabs and COFF. */
5242 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
5243 set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_dbx_reg_to_regnum);
5244
5245 /* Use the SVR4 register numbering scheme for DWARF 2. */
5246 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
5247
5248 /* We don't set gdbarch_stab_reg_to_regnum, since ECOFF doesn't seem to
5249 be in use on any of the supported i386 targets. */
5250
5251 set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
5252
5253 set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
5254
5255 /* Call dummy code. */
5256 set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
5257
5258 set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
5259 set_gdbarch_register_to_value (gdbarch, i386_register_to_value);
5260 set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
5261
5262 set_gdbarch_return_value (gdbarch, i386_return_value);
5263
5264 set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
5265
5266 /* Stack grows downward. */
5267 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
5268
5269 set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
5270 set_gdbarch_decr_pc_after_break (gdbarch, 1);
5271 set_gdbarch_max_insn_length (gdbarch, I386_MAX_INSN_LEN);
5272
5273 set_gdbarch_frame_args_skip (gdbarch, 8);
5274
5275 /* Wire in the MMX registers. */
5276 set_gdbarch_num_pseudo_regs (gdbarch, i386_num_mmx_regs);
5277 set_gdbarch_pseudo_register_read (gdbarch, i386_pseudo_register_read);
5278 set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
5279
5280 set_gdbarch_print_insn (gdbarch, i386_print_insn);
5281
5282 set_gdbarch_dummy_id (gdbarch, i386_dummy_id);
5283
5284 set_gdbarch_unwind_pc (gdbarch, i386_unwind_pc);
5285
5286 /* Add the i386 register groups. */
5287 i386_add_reggroups (gdbarch);
5288 set_gdbarch_register_reggroup_p (gdbarch, i386_register_reggroup_p);
5289
5290 /* Helper for function argument information. */
5291 set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
5292
5293 /* Hook in the DWARF CFI frame unwinder. */
5294 dwarf2_append_unwinders (gdbarch);
5295
5296 frame_base_set_default (gdbarch, &i386_frame_base);
5297
5298 /* Hook in ABI-specific overrides, if they have been registered. */
5299 gdbarch_init_osabi (info, gdbarch);
5300
5301 frame_unwind_append_unwinder (gdbarch, &i386_sigtramp_frame_unwind);
5302 frame_unwind_append_unwinder (gdbarch, &i386_frame_unwind);
5303
5304 /* If we have a register mapping, enable the generic core file
5305 support, unless it has already been enabled. */
5306 if (tdep->gregset_reg_offset
5307 && !gdbarch_regset_from_core_section_p (gdbarch))
5308 set_gdbarch_regset_from_core_section (gdbarch,
5309 i386_regset_from_core_section);
5310
5311 /* Unless support for MMX has been disabled, make %mm0 the first
5312 pseudo-register. */
5313 if (tdep->mm0_regnum == 0)
5314 tdep->mm0_regnum = gdbarch_num_regs (gdbarch);
5315
5316 set_gdbarch_skip_permanent_breakpoint (gdbarch,
5317 i386_skip_permanent_breakpoint);
5318
5319 return gdbarch;
5320 }
5321
5322 static enum gdb_osabi
5323 i386_coff_osabi_sniffer (bfd *abfd)
5324 {
5325 if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
5326 || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
5327 return GDB_OSABI_GO32;
5328
5329 return GDB_OSABI_UNKNOWN;
5330 }
5331 \f
5332
5333 /* Provide a prototype to silence -Wmissing-prototypes. */
5334 void _initialize_i386_tdep (void);
5335
5336 void
5337 _initialize_i386_tdep (void)
5338 {
5339 register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
5340
5341 /* Add the variable that controls the disassembly flavor. */
5342 add_setshow_enum_cmd ("disassembly-flavor", no_class, valid_flavors,
5343 &disassembly_flavor, _("\
5344 Set the disassembly flavor."), _("\
5345 Show the disassembly flavor."), _("\
5346 The valid values are \"att\" and \"intel\", and the default value is \"att\"."),
5347 NULL,
5348 NULL, /* FIXME: i18n: */
5349 &setlist, &showlist);
5350
5351 /* Add the variable that controls the convention for returning
5352 structs. */
5353 add_setshow_enum_cmd ("struct-convention", no_class, valid_conventions,
5354 &struct_convention, _("\
5355 Set the convention for returning small structs."), _("\
5356 Show the convention for returning small structs."), _("\
5357 Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n\
5358 is \"default\"."),
5359 NULL,
5360 NULL, /* FIXME: i18n: */
5361 &setlist, &showlist);
5362
5363 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
5364 i386_coff_osabi_sniffer);
5365
5366 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
5367 i386_svr4_init_abi);
5368 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
5369 i386_go32_init_abi);
5370
5371 /* Initialize the i386-specific register groups. */
5372 i386_init_reggroups ();
5373 }