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