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