2002-11-08 Andrew Cagney <ac131313@redhat.com>
[deliverable/binutils-gdb.git] / gdb / i386-tdep.c
1 /* Intel 386 target-dependent stuff.
2
3 Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23 #include "defs.h"
24 #include "gdb_string.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "gdbcore.h"
28 #include "objfiles.h"
29 #include "target.h"
30 #include "floatformat.h"
31 #include "symfile.h"
32 #include "symtab.h"
33 #include "gdbcmd.h"
34 #include "command.h"
35 #include "arch-utils.h"
36 #include "regcache.h"
37 #include "doublest.h"
38 #include "value.h"
39 #include "gdb_assert.h"
40 #include "reggroups.h"
41
42 #include "i386-tdep.h"
43 #include "i387-tdep.h"
44
45 /* Names of the registers. The first 10 registers match the register
46 numbering scheme used by GCC for stabs and DWARF. */
47 static char *i386_register_names[] =
48 {
49 "eax", "ecx", "edx", "ebx",
50 "esp", "ebp", "esi", "edi",
51 "eip", "eflags", "cs", "ss",
52 "ds", "es", "fs", "gs",
53 "st0", "st1", "st2", "st3",
54 "st4", "st5", "st6", "st7",
55 "fctrl", "fstat", "ftag", "fiseg",
56 "fioff", "foseg", "fooff", "fop",
57 "xmm0", "xmm1", "xmm2", "xmm3",
58 "xmm4", "xmm5", "xmm6", "xmm7",
59 "mxcsr"
60 };
61
62 /* MMX registers. */
63
64 static char *i386_mmx_names[] =
65 {
66 "mm0", "mm1", "mm2", "mm3",
67 "mm4", "mm5", "mm6", "mm7"
68 };
69 static const int mmx_num_regs = (sizeof (i386_mmx_names)
70 / sizeof (i386_mmx_names[0]));
71 #define MM0_REGNUM (NUM_REGS)
72
73 static int
74 i386_mmx_regnum_p (int reg)
75 {
76 return (reg >= MM0_REGNUM && reg < MM0_REGNUM + mmx_num_regs);
77 }
78
79 /* FP register? */
80
81 int
82 i386_fp_regnum_p (int regnum)
83 {
84 return (regnum < NUM_REGS
85 && (FP0_REGNUM && FP0_REGNUM <= (regnum) && (regnum) < FPC_REGNUM));
86 }
87
88 int
89 i386_fpc_regnum_p (int regnum)
90 {
91 return (regnum < NUM_REGS
92 && (FPC_REGNUM <= (regnum) && (regnum) < XMM0_REGNUM));
93 }
94
95 /* SSE register? */
96
97 int
98 i386_sse_regnum_p (int regnum)
99 {
100 return (regnum < NUM_REGS
101 && (XMM0_REGNUM <= (regnum) && (regnum) < MXCSR_REGNUM));
102 }
103
104 int
105 i386_mxcsr_regnum_p (int regnum)
106 {
107 return (regnum < NUM_REGS
108 && (regnum == MXCSR_REGNUM));
109 }
110
111 /* Return the name of register REG. */
112
113 const char *
114 i386_register_name (int reg)
115 {
116 if (reg < 0)
117 return NULL;
118 if (i386_mmx_regnum_p (reg))
119 return i386_mmx_names[reg - MM0_REGNUM];
120 if (reg >= sizeof (i386_register_names) / sizeof (*i386_register_names))
121 return NULL;
122
123 return i386_register_names[reg];
124 }
125
126 /* Convert stabs register number REG to the appropriate register
127 number used by GDB. */
128
129 static int
130 i386_stab_reg_to_regnum (int reg)
131 {
132 /* This implements what GCC calls the "default" register map. */
133 if (reg >= 0 && reg <= 7)
134 {
135 /* General registers. */
136 return reg;
137 }
138 else if (reg >= 12 && reg <= 19)
139 {
140 /* Floating-point registers. */
141 return reg - 12 + FP0_REGNUM;
142 }
143 else if (reg >= 21 && reg <= 28)
144 {
145 /* SSE registers. */
146 return reg - 21 + XMM0_REGNUM;
147 }
148 else if (reg >= 29 && reg <= 36)
149 {
150 /* MMX registers. */
151 return reg - 29 + MM0_REGNUM;
152 }
153
154 /* This will hopefully provoke a warning. */
155 return NUM_REGS + NUM_PSEUDO_REGS;
156 }
157
158 /* Convert DWARF register number REG to the appropriate register
159 number used by GDB. */
160
161 static int
162 i386_dwarf_reg_to_regnum (int reg)
163 {
164 /* The DWARF register numbering includes %eip and %eflags, and
165 numbers the floating point registers differently. */
166 if (reg >= 0 && reg <= 9)
167 {
168 /* General registers. */
169 return reg;
170 }
171 else if (reg >= 11 && reg <= 18)
172 {
173 /* Floating-point registers. */
174 return reg - 11 + FP0_REGNUM;
175 }
176 else if (reg >= 21)
177 {
178 /* The SSE and MMX registers have identical numbers as in stabs. */
179 return i386_stab_reg_to_regnum (reg);
180 }
181
182 /* This will hopefully provoke a warning. */
183 return NUM_REGS + NUM_PSEUDO_REGS;
184 }
185 \f
186
187 /* This is the variable that is set with "set disassembly-flavor", and
188 its legitimate values. */
189 static const char att_flavor[] = "att";
190 static const char intel_flavor[] = "intel";
191 static const char *valid_flavors[] =
192 {
193 att_flavor,
194 intel_flavor,
195 NULL
196 };
197 static const char *disassembly_flavor = att_flavor;
198
199 /* Stdio style buffering was used to minimize calls to ptrace, but
200 this buffering did not take into account that the code section
201 being accessed may not be an even number of buffers long (even if
202 the buffer is only sizeof(int) long). In cases where the code
203 section size happened to be a non-integral number of buffers long,
204 attempting to read the last buffer would fail. Simply using
205 target_read_memory and ignoring errors, rather than read_memory, is
206 not the correct solution, since legitimate access errors would then
207 be totally ignored. To properly handle this situation and continue
208 to use buffering would require that this code be able to determine
209 the minimum code section size granularity (not the alignment of the
210 section itself, since the actual failing case that pointed out this
211 problem had a section alignment of 4 but was not a multiple of 4
212 bytes long), on a target by target basis, and then adjust it's
213 buffer size accordingly. This is messy, but potentially feasible.
214 It probably needs the bfd library's help and support. For now, the
215 buffer size is set to 1. (FIXME -fnf) */
216
217 #define CODESTREAM_BUFSIZ 1 /* Was sizeof(int), see note above. */
218 static CORE_ADDR codestream_next_addr;
219 static CORE_ADDR codestream_addr;
220 static unsigned char codestream_buf[CODESTREAM_BUFSIZ];
221 static int codestream_off;
222 static int codestream_cnt;
223
224 #define codestream_tell() (codestream_addr + codestream_off)
225 #define codestream_peek() \
226 (codestream_cnt == 0 ? \
227 codestream_fill(1) : codestream_buf[codestream_off])
228 #define codestream_get() \
229 (codestream_cnt-- == 0 ? \
230 codestream_fill(0) : codestream_buf[codestream_off++])
231
232 static unsigned char
233 codestream_fill (int peek_flag)
234 {
235 codestream_addr = codestream_next_addr;
236 codestream_next_addr += CODESTREAM_BUFSIZ;
237 codestream_off = 0;
238 codestream_cnt = CODESTREAM_BUFSIZ;
239 read_memory (codestream_addr, (char *) codestream_buf, CODESTREAM_BUFSIZ);
240
241 if (peek_flag)
242 return (codestream_peek ());
243 else
244 return (codestream_get ());
245 }
246
247 static void
248 codestream_seek (CORE_ADDR place)
249 {
250 codestream_next_addr = place / CODESTREAM_BUFSIZ;
251 codestream_next_addr *= CODESTREAM_BUFSIZ;
252 codestream_cnt = 0;
253 codestream_fill (1);
254 while (codestream_tell () != place)
255 codestream_get ();
256 }
257
258 static void
259 codestream_read (unsigned char *buf, int count)
260 {
261 unsigned char *p;
262 int i;
263 p = buf;
264 for (i = 0; i < count; i++)
265 *p++ = codestream_get ();
266 }
267 \f
268
269 /* If the next instruction is a jump, move to its target. */
270
271 static void
272 i386_follow_jump (void)
273 {
274 unsigned char buf[4];
275 long delta;
276
277 int data16;
278 CORE_ADDR pos;
279
280 pos = codestream_tell ();
281
282 data16 = 0;
283 if (codestream_peek () == 0x66)
284 {
285 codestream_get ();
286 data16 = 1;
287 }
288
289 switch (codestream_get ())
290 {
291 case 0xe9:
292 /* Relative jump: if data16 == 0, disp32, else disp16. */
293 if (data16)
294 {
295 codestream_read (buf, 2);
296 delta = extract_signed_integer (buf, 2);
297
298 /* Include the size of the jmp instruction (including the
299 0x66 prefix). */
300 pos += delta + 4;
301 }
302 else
303 {
304 codestream_read (buf, 4);
305 delta = extract_signed_integer (buf, 4);
306
307 pos += delta + 5;
308 }
309 break;
310 case 0xeb:
311 /* Relative jump, disp8 (ignore data16). */
312 codestream_read (buf, 1);
313 /* Sign-extend it. */
314 delta = extract_signed_integer (buf, 1);
315
316 pos += delta + 2;
317 break;
318 }
319 codestream_seek (pos);
320 }
321
322 /* Find & return the amount a local space allocated, and advance the
323 codestream to the first register push (if any).
324
325 If the entry sequence doesn't make sense, return -1, and leave
326 codestream pointer at a random spot. */
327
328 static long
329 i386_get_frame_setup (CORE_ADDR pc)
330 {
331 unsigned char op;
332
333 codestream_seek (pc);
334
335 i386_follow_jump ();
336
337 op = codestream_get ();
338
339 if (op == 0x58) /* popl %eax */
340 {
341 /* This function must start with
342
343 popl %eax 0x58
344 xchgl %eax, (%esp) 0x87 0x04 0x24
345 or xchgl %eax, 0(%esp) 0x87 0x44 0x24 0x00
346
347 (the System V compiler puts out the second `xchg'
348 instruction, and the assembler doesn't try to optimize it, so
349 the 'sib' form gets generated). This sequence is used to get
350 the address of the return buffer for a function that returns
351 a structure. */
352 int pos;
353 unsigned char buf[4];
354 static unsigned char proto1[3] = { 0x87, 0x04, 0x24 };
355 static unsigned char proto2[4] = { 0x87, 0x44, 0x24, 0x00 };
356
357 pos = codestream_tell ();
358 codestream_read (buf, 4);
359 if (memcmp (buf, proto1, 3) == 0)
360 pos += 3;
361 else if (memcmp (buf, proto2, 4) == 0)
362 pos += 4;
363
364 codestream_seek (pos);
365 op = codestream_get (); /* Update next opcode. */
366 }
367
368 if (op == 0x68 || op == 0x6a)
369 {
370 /* This function may start with
371
372 pushl constant
373 call _probe
374 addl $4, %esp
375
376 followed by
377
378 pushl %ebp
379
380 etc. */
381 int pos;
382 unsigned char buf[8];
383
384 /* Skip past the `pushl' instruction; it has either a one-byte
385 or a four-byte operand, depending on the opcode. */
386 pos = codestream_tell ();
387 if (op == 0x68)
388 pos += 4;
389 else
390 pos += 1;
391 codestream_seek (pos);
392
393 /* Read the following 8 bytes, which should be "call _probe" (6
394 bytes) followed by "addl $4,%esp" (2 bytes). */
395 codestream_read (buf, sizeof (buf));
396 if (buf[0] == 0xe8 && buf[6] == 0xc4 && buf[7] == 0x4)
397 pos += sizeof (buf);
398 codestream_seek (pos);
399 op = codestream_get (); /* Update next opcode. */
400 }
401
402 if (op == 0x55) /* pushl %ebp */
403 {
404 /* Check for "movl %esp, %ebp" -- can be written in two ways. */
405 switch (codestream_get ())
406 {
407 case 0x8b:
408 if (codestream_get () != 0xec)
409 return -1;
410 break;
411 case 0x89:
412 if (codestream_get () != 0xe5)
413 return -1;
414 break;
415 default:
416 return -1;
417 }
418 /* Check for stack adjustment
419
420 subl $XXX, %esp
421
422 NOTE: You can't subtract a 16 bit immediate from a 32 bit
423 reg, so we don't have to worry about a data16 prefix. */
424 op = codestream_peek ();
425 if (op == 0x83)
426 {
427 /* `subl' with 8 bit immediate. */
428 codestream_get ();
429 if (codestream_get () != 0xec)
430 /* Some instruction starting with 0x83 other than `subl'. */
431 {
432 codestream_seek (codestream_tell () - 2);
433 return 0;
434 }
435 /* `subl' with signed byte immediate (though it wouldn't
436 make sense to be negative). */
437 return (codestream_get ());
438 }
439 else if (op == 0x81)
440 {
441 char buf[4];
442 /* Maybe it is `subl' with a 32 bit immedediate. */
443 codestream_get ();
444 if (codestream_get () != 0xec)
445 /* Some instruction starting with 0x81 other than `subl'. */
446 {
447 codestream_seek (codestream_tell () - 2);
448 return 0;
449 }
450 /* It is `subl' with a 32 bit immediate. */
451 codestream_read ((unsigned char *) buf, 4);
452 return extract_signed_integer (buf, 4);
453 }
454 else
455 {
456 return 0;
457 }
458 }
459 else if (op == 0xc8)
460 {
461 char buf[2];
462 /* `enter' with 16 bit unsigned immediate. */
463 codestream_read ((unsigned char *) buf, 2);
464 codestream_get (); /* Flush final byte of enter instruction. */
465 return extract_unsigned_integer (buf, 2);
466 }
467 return (-1);
468 }
469
470 /* Signal trampolines don't have a meaningful frame. The frame
471 pointer value we use is actually the frame pointer of the calling
472 frame -- that is, the frame which was in progress when the signal
473 trampoline was entered. GDB mostly treats this frame pointer value
474 as a magic cookie. We detect the case of a signal trampoline by
475 looking at the SIGNAL_HANDLER_CALLER field, which is set based on
476 PC_IN_SIGTRAMP.
477
478 When a signal trampoline is invoked from a frameless function, we
479 essentially have two frameless functions in a row. In this case,
480 we use the same magic cookie for three frames in a row. We detect
481 this case by seeing whether the next frame has
482 SIGNAL_HANDLER_CALLER set, and, if it does, checking whether the
483 current frame is actually frameless. In this case, we need to get
484 the PC by looking at the SP register value stored in the signal
485 context.
486
487 This should work in most cases except in horrible situations where
488 a signal occurs just as we enter a function but before the frame
489 has been set up. Incidentally, that's just what happens when we
490 call a function from GDB with a signal pending (there's a test in
491 the testsuite that makes this happen). Therefore we pretend that
492 we have a frameless function if we're stopped at the start of a
493 function. */
494
495 /* Return non-zero if we're dealing with a frameless signal, that is,
496 a signal trampoline invoked from a frameless function. */
497
498 int
499 i386_frameless_signal_p (struct frame_info *frame)
500 {
501 return (frame->next && frame->next->signal_handler_caller
502 && (frameless_look_for_prologue (frame)
503 || frame->pc == get_pc_function_start (frame->pc)));
504 }
505
506 /* Return the chain-pointer for FRAME. In the case of the i386, the
507 frame's nominal address is the address of a 4-byte word containing
508 the calling frame's address. */
509
510 static CORE_ADDR
511 i386_frame_chain (struct frame_info *frame)
512 {
513 if (PC_IN_CALL_DUMMY (frame->pc, 0, 0))
514 return frame->frame;
515
516 if (frame->signal_handler_caller
517 || i386_frameless_signal_p (frame))
518 return frame->frame;
519
520 if (! inside_entry_file (frame->pc))
521 return read_memory_unsigned_integer (frame->frame, 4);
522
523 return 0;
524 }
525
526 /* Determine whether the function invocation represented by FRAME does
527 not have a from on the stack associated with it. If it does not,
528 return non-zero, otherwise return zero. */
529
530 static int
531 i386_frameless_function_invocation (struct frame_info *frame)
532 {
533 if (frame->signal_handler_caller)
534 return 0;
535
536 return frameless_look_for_prologue (frame);
537 }
538
539 /* Assuming FRAME is for a sigtramp routine, return the saved program
540 counter. */
541
542 static CORE_ADDR
543 i386_sigtramp_saved_pc (struct frame_info *frame)
544 {
545 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
546 CORE_ADDR addr;
547
548 addr = tdep->sigcontext_addr (frame);
549 return read_memory_unsigned_integer (addr + tdep->sc_pc_offset, 4);
550 }
551
552 /* Assuming FRAME is for a sigtramp routine, return the saved stack
553 pointer. */
554
555 static CORE_ADDR
556 i386_sigtramp_saved_sp (struct frame_info *frame)
557 {
558 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
559 CORE_ADDR addr;
560
561 addr = tdep->sigcontext_addr (frame);
562 return read_memory_unsigned_integer (addr + tdep->sc_sp_offset, 4);
563 }
564
565 /* Return the saved program counter for FRAME. */
566
567 static CORE_ADDR
568 i386_frame_saved_pc (struct frame_info *frame)
569 {
570 if (PC_IN_CALL_DUMMY (frame->pc, 0, 0))
571 {
572 ULONGEST pc;
573
574 frame_unwind_unsigned_register (frame, PC_REGNUM, &pc);
575 return pc;
576 }
577
578 if (frame->signal_handler_caller)
579 return i386_sigtramp_saved_pc (frame);
580
581 if (i386_frameless_signal_p (frame))
582 {
583 CORE_ADDR sp = i386_sigtramp_saved_sp (frame->next);
584 return read_memory_unsigned_integer (sp, 4);
585 }
586
587 return read_memory_unsigned_integer (frame->frame + 4, 4);
588 }
589
590 /* Immediately after a function call, return the saved pc. */
591
592 static CORE_ADDR
593 i386_saved_pc_after_call (struct frame_info *frame)
594 {
595 if (frame->signal_handler_caller)
596 return i386_sigtramp_saved_pc (frame);
597
598 return read_memory_unsigned_integer (read_register (SP_REGNUM), 4);
599 }
600
601 /* Return number of args passed to a frame.
602 Can return -1, meaning no way to tell. */
603
604 static int
605 i386_frame_num_args (struct frame_info *fi)
606 {
607 #if 1
608 return -1;
609 #else
610 /* This loses because not only might the compiler not be popping the
611 args right after the function call, it might be popping args from
612 both this call and a previous one, and we would say there are
613 more args than there really are. */
614
615 int retpc;
616 unsigned char op;
617 struct frame_info *pfi;
618
619 /* On the i386, the instruction following the call could be:
620 popl %ecx - one arg
621 addl $imm, %esp - imm/4 args; imm may be 8 or 32 bits
622 anything else - zero args. */
623
624 int frameless;
625
626 frameless = FRAMELESS_FUNCTION_INVOCATION (fi);
627 if (frameless)
628 /* In the absence of a frame pointer, GDB doesn't get correct
629 values for nameless arguments. Return -1, so it doesn't print
630 any nameless arguments. */
631 return -1;
632
633 pfi = get_prev_frame (fi);
634 if (pfi == 0)
635 {
636 /* NOTE: This can happen if we are looking at the frame for
637 main, because FRAME_CHAIN_VALID won't let us go into start.
638 If we have debugging symbols, that's not really a big deal;
639 it just means it will only show as many arguments to main as
640 are declared. */
641 return -1;
642 }
643 else
644 {
645 retpc = pfi->pc;
646 op = read_memory_integer (retpc, 1);
647 if (op == 0x59) /* pop %ecx */
648 return 1;
649 else if (op == 0x83)
650 {
651 op = read_memory_integer (retpc + 1, 1);
652 if (op == 0xc4)
653 /* addl $<signed imm 8 bits>, %esp */
654 return (read_memory_integer (retpc + 2, 1) & 0xff) / 4;
655 else
656 return 0;
657 }
658 else if (op == 0x81) /* `add' with 32 bit immediate. */
659 {
660 op = read_memory_integer (retpc + 1, 1);
661 if (op == 0xc4)
662 /* addl $<imm 32>, %esp */
663 return read_memory_integer (retpc + 2, 4) / 4;
664 else
665 return 0;
666 }
667 else
668 {
669 return 0;
670 }
671 }
672 #endif
673 }
674
675 /* Parse the first few instructions the function to see what registers
676 were stored.
677
678 We handle these cases:
679
680 The startup sequence can be at the start of the function, or the
681 function can start with a branch to startup code at the end.
682
683 %ebp can be set up with either the 'enter' instruction, or "pushl
684 %ebp, movl %esp, %ebp" (`enter' is too slow to be useful, but was
685 once used in the System V compiler).
686
687 Local space is allocated just below the saved %ebp by either the
688 'enter' instruction, or by "subl $<size>, %esp". 'enter' has a 16
689 bit unsigned argument for space to allocate, and the 'addl'
690 instruction could have either a signed byte, or 32 bit immediate.
691
692 Next, the registers used by this function are pushed. With the
693 System V compiler they will always be in the order: %edi, %esi,
694 %ebx (and sometimes a harmless bug causes it to also save but not
695 restore %eax); however, the code below is willing to see the pushes
696 in any order, and will handle up to 8 of them.
697
698 If the setup sequence is at the end of the function, then the next
699 instruction will be a branch back to the start. */
700
701 static void
702 i386_frame_init_saved_regs (struct frame_info *fip)
703 {
704 long locals = -1;
705 unsigned char op;
706 CORE_ADDR addr;
707 CORE_ADDR pc;
708 int i;
709
710 if (fip->saved_regs)
711 return;
712
713 frame_saved_regs_zalloc (fip);
714
715 pc = get_pc_function_start (fip->pc);
716 if (pc != 0)
717 locals = i386_get_frame_setup (pc);
718
719 if (locals >= 0)
720 {
721 addr = fip->frame - 4 - locals;
722 for (i = 0; i < 8; i++)
723 {
724 op = codestream_get ();
725 if (op < 0x50 || op > 0x57)
726 break;
727 #ifdef I386_REGNO_TO_SYMMETRY
728 /* Dynix uses different internal numbering. Ick. */
729 fip->saved_regs[I386_REGNO_TO_SYMMETRY (op - 0x50)] = addr;
730 #else
731 fip->saved_regs[op - 0x50] = addr;
732 #endif
733 addr -= 4;
734 }
735 }
736
737 fip->saved_regs[PC_REGNUM] = fip->frame + 4;
738 fip->saved_regs[FP_REGNUM] = fip->frame;
739 }
740
741 /* Return PC of first real instruction. */
742
743 static CORE_ADDR
744 i386_skip_prologue (CORE_ADDR pc)
745 {
746 unsigned char op;
747 int i;
748 static unsigned char pic_pat[6] =
749 { 0xe8, 0, 0, 0, 0, /* call 0x0 */
750 0x5b, /* popl %ebx */
751 };
752 CORE_ADDR pos;
753
754 if (i386_get_frame_setup (pc) < 0)
755 return (pc);
756
757 /* Found valid frame setup -- codestream now points to start of push
758 instructions for saving registers. */
759
760 /* Skip over register saves. */
761 for (i = 0; i < 8; i++)
762 {
763 op = codestream_peek ();
764 /* Break if not `pushl' instrunction. */
765 if (op < 0x50 || op > 0x57)
766 break;
767 codestream_get ();
768 }
769
770 /* The native cc on SVR4 in -K PIC mode inserts the following code
771 to get the address of the global offset table (GOT) into register
772 %ebx
773
774 call 0x0
775 popl %ebx
776 movl %ebx,x(%ebp) (optional)
777 addl y,%ebx
778
779 This code is with the rest of the prologue (at the end of the
780 function), so we have to skip it to get to the first real
781 instruction at the start of the function. */
782
783 pos = codestream_tell ();
784 for (i = 0; i < 6; i++)
785 {
786 op = codestream_get ();
787 if (pic_pat[i] != op)
788 break;
789 }
790 if (i == 6)
791 {
792 unsigned char buf[4];
793 long delta = 6;
794
795 op = codestream_get ();
796 if (op == 0x89) /* movl %ebx, x(%ebp) */
797 {
798 op = codestream_get ();
799 if (op == 0x5d) /* One byte offset from %ebp. */
800 {
801 delta += 3;
802 codestream_read (buf, 1);
803 }
804 else if (op == 0x9d) /* Four byte offset from %ebp. */
805 {
806 delta += 6;
807 codestream_read (buf, 4);
808 }
809 else /* Unexpected instruction. */
810 delta = -1;
811 op = codestream_get ();
812 }
813 /* addl y,%ebx */
814 if (delta > 0 && op == 0x81 && codestream_get () == 0xc3)
815 {
816 pos += delta + 6;
817 }
818 }
819 codestream_seek (pos);
820
821 i386_follow_jump ();
822
823 return (codestream_tell ());
824 }
825
826 /* Use the program counter to determine the contents and size of a
827 breakpoint instruction. Return a pointer to a string of bytes that
828 encode a breakpoint instruction, store the length of the string in
829 *LEN and optionally adjust *PC to point to the correct memory
830 location for inserting the breakpoint.
831
832 On the i386 we have a single breakpoint that fits in a single byte
833 and can be inserted anywhere. */
834
835 static const unsigned char *
836 i386_breakpoint_from_pc (CORE_ADDR *pc, int *len)
837 {
838 static unsigned char break_insn[] = { 0xcc }; /* int 3 */
839
840 *len = sizeof (break_insn);
841 return break_insn;
842 }
843
844 /* Push the return address (pointing to the call dummy) onto the stack
845 and return the new value for the stack pointer. */
846
847 static CORE_ADDR
848 i386_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
849 {
850 char buf[4];
851
852 store_unsigned_integer (buf, 4, CALL_DUMMY_ADDRESS ());
853 write_memory (sp - 4, buf, 4);
854 return sp - 4;
855 }
856
857 static void
858 i386_do_pop_frame (struct frame_info *frame)
859 {
860 CORE_ADDR fp;
861 int regnum;
862 char regbuf[I386_MAX_REGISTER_SIZE];
863
864 fp = FRAME_FP (frame);
865 i386_frame_init_saved_regs (frame);
866
867 for (regnum = 0; regnum < NUM_REGS; regnum++)
868 {
869 CORE_ADDR addr;
870 addr = frame->saved_regs[regnum];
871 if (addr)
872 {
873 read_memory (addr, regbuf, REGISTER_RAW_SIZE (regnum));
874 deprecated_write_register_gen (regnum, regbuf);
875 }
876 }
877 write_register (FP_REGNUM, read_memory_integer (fp, 4));
878 write_register (PC_REGNUM, read_memory_integer (fp + 4, 4));
879 write_register (SP_REGNUM, fp + 8);
880 flush_cached_frames ();
881 }
882
883 static void
884 i386_pop_frame (void)
885 {
886 generic_pop_current_frame (i386_do_pop_frame);
887 }
888 \f
889
890 /* Figure out where the longjmp will land. Slurp the args out of the
891 stack. We expect the first arg to be a pointer to the jmp_buf
892 structure from which we extract the address that we will land at.
893 This address is copied into PC. This routine returns true on
894 success. */
895
896 static int
897 i386_get_longjmp_target (CORE_ADDR *pc)
898 {
899 char buf[4];
900 CORE_ADDR sp, jb_addr;
901 int jb_pc_offset = gdbarch_tdep (current_gdbarch)->jb_pc_offset;
902
903 /* If JB_PC_OFFSET is -1, we have no way to find out where the
904 longjmp will land. */
905 if (jb_pc_offset == -1)
906 return 0;
907
908 sp = read_register (SP_REGNUM);
909 if (target_read_memory (sp + 4, buf, 4))
910 return 0;
911
912 jb_addr = extract_address (buf, 4);
913 if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
914 return 0;
915
916 *pc = extract_address (buf, 4);
917 return 1;
918 }
919 \f
920
921 static CORE_ADDR
922 i386_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
923 int struct_return, CORE_ADDR struct_addr)
924 {
925 sp = default_push_arguments (nargs, args, sp, struct_return, struct_addr);
926
927 if (struct_return)
928 {
929 char buf[4];
930
931 sp -= 4;
932 store_address (buf, 4, struct_addr);
933 write_memory (sp, buf, 4);
934 }
935
936 return sp;
937 }
938
939 static void
940 i386_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
941 {
942 /* Do nothing. Everything was already done by i386_push_arguments. */
943 }
944
945 /* These registers are used for returning integers (and on some
946 targets also for returning `struct' and `union' values when their
947 size and alignment match an integer type). */
948 #define LOW_RETURN_REGNUM 0 /* %eax */
949 #define HIGH_RETURN_REGNUM 2 /* %edx */
950
951 /* Extract from an array REGBUF containing the (raw) register state, a
952 function return value of TYPE, and copy that, in virtual format,
953 into VALBUF. */
954
955 static void
956 i386_extract_return_value (struct type *type, struct regcache *regcache,
957 void *dst)
958 {
959 bfd_byte *valbuf = dst;
960 int len = TYPE_LENGTH (type);
961 char buf[I386_MAX_REGISTER_SIZE];
962
963 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
964 && TYPE_NFIELDS (type) == 1)
965 {
966 i386_extract_return_value (TYPE_FIELD_TYPE (type, 0), regcache, valbuf);
967 return;
968 }
969
970 if (TYPE_CODE (type) == TYPE_CODE_FLT)
971 {
972 if (FP0_REGNUM == 0)
973 {
974 warning ("Cannot find floating-point return value.");
975 memset (valbuf, 0, len);
976 return;
977 }
978
979 /* Floating-point return values can be found in %st(0). Convert
980 its contents to the desired type. This is probably not
981 exactly how it would happen on the target itself, but it is
982 the best we can do. */
983 regcache_raw_read (regcache, FP0_REGNUM, buf);
984 convert_typed_floating (buf, builtin_type_i387_ext, valbuf, type);
985 }
986 else
987 {
988 int low_size = REGISTER_RAW_SIZE (LOW_RETURN_REGNUM);
989 int high_size = REGISTER_RAW_SIZE (HIGH_RETURN_REGNUM);
990
991 if (len <= low_size)
992 {
993 regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
994 memcpy (valbuf, buf, len);
995 }
996 else if (len <= (low_size + high_size))
997 {
998 regcache_raw_read (regcache, LOW_RETURN_REGNUM, buf);
999 memcpy (valbuf, buf, low_size);
1000 regcache_raw_read (regcache, HIGH_RETURN_REGNUM, buf);
1001 memcpy (valbuf + low_size, buf, len - low_size);
1002 }
1003 else
1004 internal_error (__FILE__, __LINE__,
1005 "Cannot extract return value of %d bytes long.", len);
1006 }
1007 }
1008
1009 /* Write into the appropriate registers a function return value stored
1010 in VALBUF of type TYPE, given in virtual format. */
1011
1012 static void
1013 i386_store_return_value (struct type *type, struct regcache *regcache,
1014 const void *valbuf)
1015 {
1016 int len = TYPE_LENGTH (type);
1017
1018 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1019 && TYPE_NFIELDS (type) == 1)
1020 {
1021 i386_store_return_value (TYPE_FIELD_TYPE (type, 0), regcache, valbuf);
1022 return;
1023 }
1024
1025 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1026 {
1027 ULONGEST fstat;
1028 char buf[FPU_REG_RAW_SIZE];
1029
1030 if (FP0_REGNUM == 0)
1031 {
1032 warning ("Cannot set floating-point return value.");
1033 return;
1034 }
1035
1036 /* Returning floating-point values is a bit tricky. Apart from
1037 storing the return value in %st(0), we have to simulate the
1038 state of the FPU at function return point. */
1039
1040 /* Convert the value found in VALBUF to the extended
1041 floating-point format used by the FPU. This is probably
1042 not exactly how it would happen on the target itself, but
1043 it is the best we can do. */
1044 convert_typed_floating (valbuf, type, buf, builtin_type_i387_ext);
1045 regcache_raw_write (regcache, FP0_REGNUM, buf);
1046
1047 /* Set the top of the floating-point register stack to 7. The
1048 actual value doesn't really matter, but 7 is what a normal
1049 function return would end up with if the program started out
1050 with a freshly initialized FPU. */
1051 regcache_raw_read_unsigned (regcache, FSTAT_REGNUM, &fstat);
1052 fstat |= (7 << 11);
1053 regcache_raw_write_unsigned (regcache, FSTAT_REGNUM, fstat);
1054
1055 /* Mark %st(1) through %st(7) as empty. Since we set the top of
1056 the floating-point register stack to 7, the appropriate value
1057 for the tag word is 0x3fff. */
1058 regcache_raw_write_unsigned (regcache, FTAG_REGNUM, 0x3fff);
1059 }
1060 else
1061 {
1062 int low_size = REGISTER_RAW_SIZE (LOW_RETURN_REGNUM);
1063 int high_size = REGISTER_RAW_SIZE (HIGH_RETURN_REGNUM);
1064
1065 if (len <= low_size)
1066 regcache_raw_write_part (regcache, LOW_RETURN_REGNUM, 0, len, valbuf);
1067 else if (len <= (low_size + high_size))
1068 {
1069 regcache_raw_write (regcache, LOW_RETURN_REGNUM, valbuf);
1070 regcache_raw_write_part (regcache, HIGH_RETURN_REGNUM, 0,
1071 len - low_size, (char *) valbuf + low_size);
1072 }
1073 else
1074 internal_error (__FILE__, __LINE__,
1075 "Cannot store return value of %d bytes long.", len);
1076 }
1077 }
1078
1079 /* Extract from REGCACHE, which contains the (raw) register state, the
1080 address in which a function should return its structure value, as a
1081 CORE_ADDR. */
1082
1083 static CORE_ADDR
1084 i386_extract_struct_value_address (struct regcache *regcache)
1085 {
1086 ULONGEST addr;
1087
1088 regcache_raw_read_unsigned (regcache, LOW_RETURN_REGNUM, &addr);
1089 return addr;
1090 }
1091 \f
1092
1093 /* This is the variable that is set with "set struct-convention", and
1094 its legitimate values. */
1095 static const char default_struct_convention[] = "default";
1096 static const char pcc_struct_convention[] = "pcc";
1097 static const char reg_struct_convention[] = "reg";
1098 static const char *valid_conventions[] =
1099 {
1100 default_struct_convention,
1101 pcc_struct_convention,
1102 reg_struct_convention,
1103 NULL
1104 };
1105 static const char *struct_convention = default_struct_convention;
1106
1107 static int
1108 i386_use_struct_convention (int gcc_p, struct type *type)
1109 {
1110 enum struct_return struct_return;
1111
1112 if (struct_convention == default_struct_convention)
1113 struct_return = gdbarch_tdep (current_gdbarch)->struct_return;
1114 else if (struct_convention == pcc_struct_convention)
1115 struct_return = pcc_struct_return;
1116 else
1117 struct_return = reg_struct_return;
1118
1119 return generic_use_struct_convention (struct_return == reg_struct_return,
1120 type);
1121 }
1122 \f
1123
1124 /* Return the GDB type object for the "standard" data type of data in
1125 register REGNUM. Perhaps %esi and %edi should go here, but
1126 potentially they could be used for things other than address. */
1127
1128 static struct type *
1129 i386_register_virtual_type (int regnum)
1130 {
1131 if (regnum == PC_REGNUM || regnum == FP_REGNUM || regnum == SP_REGNUM)
1132 return lookup_pointer_type (builtin_type_void);
1133
1134 if (i386_fp_regnum_p (regnum))
1135 return builtin_type_i387_ext;
1136
1137 if (i386_sse_regnum_p (regnum))
1138 return builtin_type_vec128i;
1139
1140 if (i386_mmx_regnum_p (regnum))
1141 return builtin_type_vec64i;
1142
1143 return builtin_type_int;
1144 }
1145
1146 /* Map a cooked register onto a raw register or memory. For the i386,
1147 the MMX registers need to be mapped onto floating point registers. */
1148
1149 static int
1150 mmx_regnum_to_fp_regnum (struct regcache *regcache, int regnum)
1151 {
1152 int mmxi;
1153 ULONGEST fstat;
1154 int tos;
1155 int fpi;
1156 mmxi = regnum - MM0_REGNUM;
1157 regcache_raw_read_unsigned (regcache, FSTAT_REGNUM, &fstat);
1158 tos = (fstat >> 11) & 0x7;
1159 fpi = (mmxi + tos) % 8;
1160 return (FP0_REGNUM + fpi);
1161 }
1162
1163 static void
1164 i386_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
1165 int regnum, void *buf)
1166 {
1167 if (i386_mmx_regnum_p (regnum))
1168 {
1169 char *mmx_buf = alloca (MAX_REGISTER_RAW_SIZE);
1170 int fpnum = mmx_regnum_to_fp_regnum (regcache, regnum);
1171 regcache_raw_read (regcache, fpnum, mmx_buf);
1172 /* Extract (always little endian). */
1173 memcpy (buf, mmx_buf, REGISTER_RAW_SIZE (regnum));
1174 }
1175 else
1176 regcache_raw_read (regcache, regnum, buf);
1177 }
1178
1179 static void
1180 i386_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
1181 int regnum, const void *buf)
1182 {
1183 if (i386_mmx_regnum_p (regnum))
1184 {
1185 char *mmx_buf = alloca (MAX_REGISTER_RAW_SIZE);
1186 int fpnum = mmx_regnum_to_fp_regnum (regcache, regnum);
1187 /* Read ... */
1188 regcache_raw_read (regcache, fpnum, mmx_buf);
1189 /* ... Modify ... (always little endian). */
1190 memcpy (mmx_buf, buf, REGISTER_RAW_SIZE (regnum));
1191 /* ... Write. */
1192 regcache_raw_write (regcache, fpnum, mmx_buf);
1193 }
1194 else
1195 regcache_raw_write (regcache, regnum, buf);
1196 }
1197
1198 /* Return true iff register REGNUM's virtual format is different from
1199 its raw format. Note that this definition assumes that the host
1200 supports IEEE 32-bit floats, since it doesn't say that SSE
1201 registers need conversion. Even if we can't find a counterexample,
1202 this is still sloppy. */
1203
1204 static int
1205 i386_register_convertible (int regnum)
1206 {
1207 return i386_fp_regnum_p (regnum);
1208 }
1209
1210 /* Convert data from raw format for register REGNUM in buffer FROM to
1211 virtual format with type TYPE in buffer TO. */
1212
1213 static void
1214 i386_register_convert_to_virtual (int regnum, struct type *type,
1215 char *from, char *to)
1216 {
1217 gdb_assert (i386_fp_regnum_p (regnum));
1218
1219 /* We only support floating-point values. */
1220 if (TYPE_CODE (type) != TYPE_CODE_FLT)
1221 {
1222 warning ("Cannot convert floating-point register value "
1223 "to non-floating-point type.");
1224 memset (to, 0, TYPE_LENGTH (type));
1225 return;
1226 }
1227
1228 /* Convert to TYPE. This should be a no-op if TYPE is equivalent to
1229 the extended floating-point format used by the FPU. */
1230 convert_typed_floating (from, builtin_type_i387_ext, to, type);
1231 }
1232
1233 /* Convert data from virtual format with type TYPE in buffer FROM to
1234 raw format for register REGNUM in buffer TO. */
1235
1236 static void
1237 i386_register_convert_to_raw (struct type *type, int regnum,
1238 char *from, char *to)
1239 {
1240 gdb_assert (i386_fp_regnum_p (regnum));
1241
1242 /* We only support floating-point values. */
1243 if (TYPE_CODE (type) != TYPE_CODE_FLT)
1244 {
1245 warning ("Cannot convert non-floating-point type "
1246 "to floating-point register value.");
1247 memset (to, 0, TYPE_LENGTH (type));
1248 return;
1249 }
1250
1251 /* Convert from TYPE. This should be a no-op if TYPE is equivalent
1252 to the extended floating-point format used by the FPU. */
1253 convert_typed_floating (from, type, to, builtin_type_i387_ext);
1254 }
1255 \f
1256
1257 #ifdef STATIC_TRANSFORM_NAME
1258 /* SunPRO encodes the static variables. This is not related to C++
1259 mangling, it is done for C too. */
1260
1261 char *
1262 sunpro_static_transform_name (char *name)
1263 {
1264 char *p;
1265 if (IS_STATIC_TRANSFORM_NAME (name))
1266 {
1267 /* For file-local statics there will be a period, a bunch of
1268 junk (the contents of which match a string given in the
1269 N_OPT), a period and the name. For function-local statics
1270 there will be a bunch of junk (which seems to change the
1271 second character from 'A' to 'B'), a period, the name of the
1272 function, and the name. So just skip everything before the
1273 last period. */
1274 p = strrchr (name, '.');
1275 if (p != NULL)
1276 name = p + 1;
1277 }
1278 return name;
1279 }
1280 #endif /* STATIC_TRANSFORM_NAME */
1281 \f
1282
1283 /* Stuff for WIN32 PE style DLL's but is pretty generic really. */
1284
1285 CORE_ADDR
1286 i386_pe_skip_trampoline_code (CORE_ADDR pc, char *name)
1287 {
1288 if (pc && read_memory_unsigned_integer (pc, 2) == 0x25ff) /* jmp *(dest) */
1289 {
1290 unsigned long indirect = read_memory_unsigned_integer (pc + 2, 4);
1291 struct minimal_symbol *indsym =
1292 indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
1293 char *symname = indsym ? SYMBOL_NAME (indsym) : 0;
1294
1295 if (symname)
1296 {
1297 if (strncmp (symname, "__imp_", 6) == 0
1298 || strncmp (symname, "_imp_", 5) == 0)
1299 return name ? 1 : read_memory_unsigned_integer (indirect, 4);
1300 }
1301 }
1302 return 0; /* Not a trampoline. */
1303 }
1304 \f
1305
1306 /* Return non-zero if PC and NAME show that we are in a signal
1307 trampoline. */
1308
1309 static int
1310 i386_pc_in_sigtramp (CORE_ADDR pc, char *name)
1311 {
1312 return (name && strcmp ("_sigtramp", name) == 0);
1313 }
1314 \f
1315
1316 /* We have two flavours of disassembly. The machinery on this page
1317 deals with switching between those. */
1318
1319 static int
1320 i386_print_insn (bfd_vma pc, disassemble_info *info)
1321 {
1322 gdb_assert (disassembly_flavor == att_flavor
1323 || disassembly_flavor == intel_flavor);
1324
1325 /* FIXME: kettenis/20020915: Until disassembler_options is properly
1326 constified, cast to prevent a compiler warning. */
1327 info->disassembler_options = (char *) disassembly_flavor;
1328 info->mach = gdbarch_bfd_arch_info (current_gdbarch)->mach;
1329
1330 return print_insn_i386 (pc, info);
1331 }
1332 \f
1333
1334 /* There are a few i386 architecture variants that differ only
1335 slightly from the generic i386 target. For now, we don't give them
1336 their own source file, but include them here. As a consequence,
1337 they'll always be included. */
1338
1339 /* System V Release 4 (SVR4). */
1340
1341 static int
1342 i386_svr4_pc_in_sigtramp (CORE_ADDR pc, char *name)
1343 {
1344 return (name && (strcmp ("_sigreturn", name) == 0
1345 || strcmp ("_sigacthandler", name) == 0
1346 || strcmp ("sigvechandler", name) == 0));
1347 }
1348
1349 /* Get address of the pushed ucontext (sigcontext) on the stack for
1350 all three variants of SVR4 sigtramps. */
1351
1352 static CORE_ADDR
1353 i386_svr4_sigcontext_addr (struct frame_info *frame)
1354 {
1355 int sigcontext_offset = -1;
1356 char *name = NULL;
1357
1358 find_pc_partial_function (frame->pc, &name, NULL, NULL);
1359 if (name)
1360 {
1361 if (strcmp (name, "_sigreturn") == 0)
1362 sigcontext_offset = 132;
1363 else if (strcmp (name, "_sigacthandler") == 0)
1364 sigcontext_offset = 80;
1365 else if (strcmp (name, "sigvechandler") == 0)
1366 sigcontext_offset = 120;
1367 }
1368
1369 gdb_assert (sigcontext_offset != -1);
1370
1371 if (frame->next)
1372 return frame->next->frame + sigcontext_offset;
1373 return read_register (SP_REGNUM) + sigcontext_offset;
1374 }
1375 \f
1376
1377 /* DJGPP. */
1378
1379 static int
1380 i386_go32_pc_in_sigtramp (CORE_ADDR pc, char *name)
1381 {
1382 /* DJGPP doesn't have any special frames for signal handlers. */
1383 return 0;
1384 }
1385 \f
1386
1387 /* Generic ELF. */
1388
1389 void
1390 i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1391 {
1392 /* We typically use stabs-in-ELF with the DWARF register numbering. */
1393 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_dwarf_reg_to_regnum);
1394 }
1395
1396 /* System V Release 4 (SVR4). */
1397
1398 void
1399 i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1400 {
1401 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1402
1403 /* System V Release 4 uses ELF. */
1404 i386_elf_init_abi (info, gdbarch);
1405
1406 /* System V Release 4 has shared libraries. */
1407 set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
1408 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1409
1410 /* FIXME: kettenis/20020511: Why do we override this function here? */
1411 set_gdbarch_frame_chain_valid (gdbarch, generic_func_frame_chain_valid);
1412
1413 set_gdbarch_pc_in_sigtramp (gdbarch, i386_svr4_pc_in_sigtramp);
1414 tdep->sigcontext_addr = i386_svr4_sigcontext_addr;
1415 tdep->sc_pc_offset = 14 * 4;
1416 tdep->sc_sp_offset = 7 * 4;
1417
1418 tdep->jb_pc_offset = 20;
1419 }
1420
1421 /* DJGPP. */
1422
1423 static void
1424 i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1425 {
1426 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1427
1428 set_gdbarch_pc_in_sigtramp (gdbarch, i386_go32_pc_in_sigtramp);
1429
1430 tdep->jb_pc_offset = 36;
1431 }
1432
1433 /* NetWare. */
1434
1435 static void
1436 i386_nw_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1437 {
1438 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1439
1440 /* FIXME: kettenis/20020511: Why do we override this function here? */
1441 set_gdbarch_frame_chain_valid (gdbarch, generic_func_frame_chain_valid);
1442
1443 tdep->jb_pc_offset = 24;
1444 }
1445 \f
1446
1447 /* i386 register groups. In addition to the normal groups, add "mmx"
1448 and "sse". */
1449
1450 static struct reggroup *i386_sse_reggroup;
1451 static struct reggroup *i386_mmx_reggroup;
1452
1453 static void
1454 i386_init_reggroups (void)
1455 {
1456 i386_sse_reggroup = reggroup_new ("sse", USER_REGGROUP);
1457 i386_mmx_reggroup = reggroup_new ("mmx", USER_REGGROUP);
1458 }
1459
1460 static void
1461 i386_add_reggroups (struct gdbarch *gdbarch)
1462 {
1463 reggroup_add (gdbarch, i386_sse_reggroup);
1464 reggroup_add (gdbarch, i386_mmx_reggroup);
1465 reggroup_add (gdbarch, general_reggroup);
1466 reggroup_add (gdbarch, float_reggroup);
1467 reggroup_add (gdbarch, all_reggroup);
1468 reggroup_add (gdbarch, save_reggroup);
1469 reggroup_add (gdbarch, restore_reggroup);
1470 reggroup_add (gdbarch, vector_reggroup);
1471 reggroup_add (gdbarch, system_reggroup);
1472 }
1473
1474 int
1475 i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
1476 struct reggroup *group)
1477 {
1478 int sse_regnum_p = (i386_sse_regnum_p (regnum)
1479 || i386_mxcsr_regnum_p (regnum));
1480 int fp_regnum_p = (i386_fp_regnum_p (regnum)
1481 || i386_fpc_regnum_p (regnum));
1482 int mmx_regnum_p = (i386_mmx_regnum_p (regnum));
1483 if (group == i386_mmx_reggroup)
1484 return mmx_regnum_p;
1485 if (group == i386_sse_reggroup)
1486 return sse_regnum_p;
1487 if (group == vector_reggroup)
1488 return (mmx_regnum_p || sse_regnum_p);
1489 if (group == float_reggroup)
1490 return fp_regnum_p;
1491 if (group == general_reggroup)
1492 return (!fp_regnum_p && !mmx_regnum_p && !sse_regnum_p);
1493 return default_register_reggroup_p (gdbarch, regnum, group);
1494 }
1495
1496 \f
1497 static struct gdbarch *
1498 i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1499 {
1500 struct gdbarch_tdep *tdep;
1501 struct gdbarch *gdbarch;
1502 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
1503
1504 /* Try to determine the OS ABI of the object we're loading. */
1505 if (info.abfd != NULL)
1506 osabi = gdbarch_lookup_osabi (info.abfd);
1507
1508 /* Find a candidate among extant architectures. */
1509 for (arches = gdbarch_list_lookup_by_info (arches, &info);
1510 arches != NULL;
1511 arches = gdbarch_list_lookup_by_info (arches->next, &info))
1512 {
1513 /* Make sure the OS ABI selection matches. */
1514 tdep = gdbarch_tdep (arches->gdbarch);
1515 if (tdep && tdep->osabi == osabi)
1516 return arches->gdbarch;
1517 }
1518
1519 /* Allocate space for the new architecture. */
1520 tdep = XMALLOC (struct gdbarch_tdep);
1521 gdbarch = gdbarch_alloc (&info, tdep);
1522
1523 tdep->osabi = osabi;
1524
1525 /* The i386 default settings don't include the SSE registers.
1526 FIXME: kettenis/20020614: They do include the FPU registers for
1527 now, which probably is not quite right. */
1528 tdep->num_xmm_regs = 0;
1529
1530 tdep->jb_pc_offset = -1;
1531 tdep->struct_return = pcc_struct_return;
1532 tdep->sigtramp_start = 0;
1533 tdep->sigtramp_end = 0;
1534 tdep->sigcontext_addr = NULL;
1535 tdep->sc_pc_offset = -1;
1536 tdep->sc_sp_offset = -1;
1537
1538 /* The format used for `long double' on almost all i386 targets is
1539 the i387 extended floating-point format. In fact, of all targets
1540 in the GCC 2.95 tree, only OSF/1 does it different, and insists
1541 on having a `long double' that's not `long' at all. */
1542 set_gdbarch_long_double_format (gdbarch, &floatformat_i387_ext);
1543
1544 /* Although the i387 extended floating-point has only 80 significant
1545 bits, a `long double' actually takes up 96, probably to enforce
1546 alignment. */
1547 set_gdbarch_long_double_bit (gdbarch, 96);
1548
1549 /* NOTE: tm-i386aix.h, tm-i386bsd.h, tm-i386os9k.h, tm-ptx.h,
1550 tm-symmetry.h currently override this. Sigh. */
1551 set_gdbarch_num_regs (gdbarch, I386_NUM_GREGS + I386_NUM_FREGS);
1552
1553 set_gdbarch_sp_regnum (gdbarch, 4); /* %esp */
1554 set_gdbarch_fp_regnum (gdbarch, 5); /* %ebp */
1555 set_gdbarch_pc_regnum (gdbarch, 8); /* %eip */
1556 set_gdbarch_ps_regnum (gdbarch, 9); /* %eflags */
1557 set_gdbarch_fp0_regnum (gdbarch, 16); /* %st(0) */
1558
1559 /* Use the "default" register numbering scheme for stabs and COFF. */
1560 set_gdbarch_stab_reg_to_regnum (gdbarch, i386_stab_reg_to_regnum);
1561 set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_stab_reg_to_regnum);
1562
1563 /* Use the DWARF register numbering scheme for DWARF and DWARF 2. */
1564 set_gdbarch_dwarf_reg_to_regnum (gdbarch, i386_dwarf_reg_to_regnum);
1565 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, i386_dwarf_reg_to_regnum);
1566
1567 /* We don't define ECOFF_REG_TO_REGNUM, since ECOFF doesn't seem to
1568 be in use on any of the supported i386 targets. */
1569
1570 set_gdbarch_register_name (gdbarch, i386_register_name);
1571 set_gdbarch_register_size (gdbarch, 4);
1572 set_gdbarch_register_bytes (gdbarch, I386_SIZEOF_GREGS + I386_SIZEOF_FREGS);
1573 set_gdbarch_max_register_raw_size (gdbarch, I386_MAX_REGISTER_SIZE);
1574 set_gdbarch_max_register_virtual_size (gdbarch, I386_MAX_REGISTER_SIZE);
1575 set_gdbarch_register_virtual_type (gdbarch, i386_register_virtual_type);
1576
1577 set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
1578
1579 set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
1580
1581 set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
1582
1583 /* Call dummy code. */
1584 set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
1585 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
1586 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
1587 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
1588 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
1589 set_gdbarch_call_dummy_length (gdbarch, 0);
1590 set_gdbarch_call_dummy_p (gdbarch, 1);
1591 set_gdbarch_call_dummy_words (gdbarch, NULL);
1592 set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
1593 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
1594 set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
1595
1596 set_gdbarch_register_convertible (gdbarch, i386_register_convertible);
1597 set_gdbarch_register_convert_to_virtual (gdbarch,
1598 i386_register_convert_to_virtual);
1599 set_gdbarch_register_convert_to_raw (gdbarch, i386_register_convert_to_raw);
1600
1601 set_gdbarch_get_saved_register (gdbarch, generic_unwind_get_saved_register);
1602
1603 set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
1604
1605 /* "An argument's size is increased, if necessary, to make it a
1606 multiple of [32-bit] words. This may require tail padding,
1607 depending on the size of the argument" -- from the x86 ABI. */
1608 set_gdbarch_parm_boundary (gdbarch, 32);
1609
1610 set_gdbarch_extract_return_value (gdbarch, i386_extract_return_value);
1611 set_gdbarch_push_arguments (gdbarch, i386_push_arguments);
1612 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
1613 set_gdbarch_push_return_address (gdbarch, i386_push_return_address);
1614 set_gdbarch_pop_frame (gdbarch, i386_pop_frame);
1615 set_gdbarch_store_struct_return (gdbarch, i386_store_struct_return);
1616 set_gdbarch_store_return_value (gdbarch, i386_store_return_value);
1617 set_gdbarch_extract_struct_value_address (gdbarch,
1618 i386_extract_struct_value_address);
1619 set_gdbarch_use_struct_convention (gdbarch, i386_use_struct_convention);
1620
1621 set_gdbarch_frame_init_saved_regs (gdbarch, i386_frame_init_saved_regs);
1622 set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
1623
1624 /* Stack grows downward. */
1625 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1626
1627 set_gdbarch_breakpoint_from_pc (gdbarch, i386_breakpoint_from_pc);
1628 set_gdbarch_decr_pc_after_break (gdbarch, 1);
1629 set_gdbarch_function_start_offset (gdbarch, 0);
1630
1631 /* The following redefines make backtracing through sigtramp work.
1632 They manufacture a fake sigtramp frame and obtain the saved pc in
1633 sigtramp from the sigcontext structure which is pushed by the
1634 kernel on the user stack, along with a pointer to it. */
1635
1636 set_gdbarch_frame_args_skip (gdbarch, 8);
1637 set_gdbarch_frameless_function_invocation (gdbarch,
1638 i386_frameless_function_invocation);
1639 set_gdbarch_frame_chain (gdbarch, i386_frame_chain);
1640 set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
1641 set_gdbarch_frame_saved_pc (gdbarch, i386_frame_saved_pc);
1642 set_gdbarch_frame_args_address (gdbarch, default_frame_address);
1643 set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
1644 set_gdbarch_saved_pc_after_call (gdbarch, i386_saved_pc_after_call);
1645 set_gdbarch_frame_num_args (gdbarch, i386_frame_num_args);
1646 set_gdbarch_pc_in_sigtramp (gdbarch, i386_pc_in_sigtramp);
1647
1648 /* Wire in the MMX registers. */
1649 set_gdbarch_num_pseudo_regs (gdbarch, mmx_num_regs);
1650 set_gdbarch_pseudo_register_read (gdbarch, i386_pseudo_register_read);
1651 set_gdbarch_pseudo_register_write (gdbarch, i386_pseudo_register_write);
1652
1653 set_gdbarch_print_insn (gdbarch, i386_print_insn);
1654
1655 /* Add the i386 register groups. */
1656 i386_add_reggroups (gdbarch);
1657 set_gdbarch_register_reggroup_p (gdbarch, i386_register_reggroup_p);
1658
1659 /* Hook in ABI-specific overrides, if they have been registered. */
1660 gdbarch_init_osabi (info, gdbarch, osabi);
1661
1662 return gdbarch;
1663 }
1664
1665 static enum gdb_osabi
1666 i386_coff_osabi_sniffer (bfd *abfd)
1667 {
1668 if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
1669 || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
1670 return GDB_OSABI_GO32;
1671
1672 return GDB_OSABI_UNKNOWN;
1673 }
1674
1675 static enum gdb_osabi
1676 i386_nlm_osabi_sniffer (bfd *abfd)
1677 {
1678 return GDB_OSABI_NETWARE;
1679 }
1680 \f
1681
1682 /* Provide a prototype to silence -Wmissing-prototypes. */
1683 void _initialize_i386_tdep (void);
1684
1685 void
1686 _initialize_i386_tdep (void)
1687 {
1688 register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
1689
1690 /* Add the variable that controls the disassembly flavor. */
1691 {
1692 struct cmd_list_element *new_cmd;
1693
1694 new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
1695 valid_flavors,
1696 &disassembly_flavor,
1697 "\
1698 Set the disassembly flavor, the valid values are \"att\" and \"intel\", \
1699 and the default value is \"att\".",
1700 &setlist);
1701 add_show_from_set (new_cmd, &showlist);
1702 }
1703
1704 /* Add the variable that controls the convention for returning
1705 structs. */
1706 {
1707 struct cmd_list_element *new_cmd;
1708
1709 new_cmd = add_set_enum_cmd ("struct-convention", no_class,
1710 valid_conventions,
1711 &struct_convention, "\
1712 Set the convention for returning small structs, valid values \
1713 are \"default\", \"pcc\" and \"reg\", and the default value is \"default\".",
1714 &setlist);
1715 add_show_from_set (new_cmd, &showlist);
1716 }
1717
1718 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
1719 i386_coff_osabi_sniffer);
1720 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_nlm_flavour,
1721 i386_nlm_osabi_sniffer);
1722
1723 gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_SVR4,
1724 i386_svr4_init_abi);
1725 gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_GO32,
1726 i386_go32_init_abi);
1727 gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETWARE,
1728 i386_nw_init_abi);
1729
1730 /* Initialize the i386 specific register groups. */
1731 i386_init_reggroups ();
1732 }
This page took 0.116698 seconds and 4 git commands to generate.