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