1 /* Target-dependent code for the x86-64 for GDB, the GNU debugger.
3 Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
4 Contributed by Jiri Smid, SuSE Labs.
6 This file is part of GDB.
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.
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.
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. */
27 #include "arch-utils.h"
31 #include "x86-64-tdep.h"
32 #include "dwarf2cfi.h"
33 #include "gdb_assert.h"
36 /* Register numbers of various important registers. */
40 #define EFLAGS_REGNUM 17
42 #define XMM1_REGNUM 39
51 /* x86_64_register_raw_size_table[i] is the number of bytes of storage in
52 GDB's register array occupied by register i. */
53 static struct register_info x86_64_register_info_table[] = {
54 /* 0 */ {8, "rax", &builtin_type_int64},
55 /* 1 */ {8, "rbx", &builtin_type_int64},
56 /* 2 */ {8, "rcx", &builtin_type_int64},
57 /* 3 */ {8, "rdx", &builtin_type_int64},
58 /* 4 */ {8, "rsi", &builtin_type_int64},
59 /* 5 */ {8, "rdi", &builtin_type_int64},
60 /* 6 */ {8, "rbp", &builtin_type_void_func_ptr},
61 /* 7 */ {8, "rsp", &builtin_type_void_func_ptr},
62 /* 8 */ {8, "r8", &builtin_type_int64},
63 /* 9 */ {8, "r9", &builtin_type_int64},
64 /* 10 */ {8, "r10", &builtin_type_int64},
65 /* 11 */ {8, "r11", &builtin_type_int64},
66 /* 12 */ {8, "r12", &builtin_type_int64},
67 /* 13 */ {8, "r13", &builtin_type_int64},
68 /* 14 */ {8, "r14", &builtin_type_int64},
69 /* 15 */ {8, "r15", &builtin_type_int64},
70 /* 16 */ {8, "rip", &builtin_type_void_func_ptr},
71 /* 17 */ {4, "eflags", &builtin_type_int32},
72 /* 18 */ {4, "ds", &builtin_type_int32},
73 /* 19 */ {4, "es", &builtin_type_int32},
74 /* 20 */ {4, "fs", &builtin_type_int32},
75 /* 21 */ {4, "gs", &builtin_type_int32},
76 /* 22 */ {10, "st0", &builtin_type_i387_ext},
77 /* 23 */ {10, "st1", &builtin_type_i387_ext},
78 /* 24 */ {10, "st2", &builtin_type_i387_ext},
79 /* 25 */ {10, "st3", &builtin_type_i387_ext},
80 /* 26 */ {10, "st4", &builtin_type_i387_ext},
81 /* 27 */ {10, "st5", &builtin_type_i387_ext},
82 /* 28 */ {10, "st6", &builtin_type_i387_ext},
83 /* 29 */ {10, "st7", &builtin_type_i387_ext},
84 /* 30 */ {4, "fctrl", &builtin_type_int32},
85 /* 31 */ {4, "fstat", &builtin_type_int32},
86 /* 32 */ {4, "ftag", &builtin_type_int32},
87 /* 33 */ {4, "fiseg", &builtin_type_int32},
88 /* 34 */ {4, "fioff", &builtin_type_int32},
89 /* 35 */ {4, "foseg", &builtin_type_int32},
90 /* 36 */ {4, "fooff", &builtin_type_int32},
91 /* 37 */ {4, "fop", &builtin_type_int32},
92 /* 38 */ {16, "xmm0", &builtin_type_v4sf},
93 /* 39 */ {16, "xmm1", &builtin_type_v4sf},
94 /* 40 */ {16, "xmm2", &builtin_type_v4sf},
95 /* 41 */ {16, "xmm3", &builtin_type_v4sf},
96 /* 42 */ {16, "xmm4", &builtin_type_v4sf},
97 /* 43 */ {16, "xmm5", &builtin_type_v4sf},
98 /* 44 */ {16, "xmm6", &builtin_type_v4sf},
99 /* 45 */ {16, "xmm7", &builtin_type_v4sf},
100 /* 46 */ {16, "xmm8", &builtin_type_v4sf},
101 /* 47 */ {16, "xmm9", &builtin_type_v4sf},
102 /* 48 */ {16, "xmm10", &builtin_type_v4sf},
103 /* 49 */ {16, "xmm11", &builtin_type_v4sf},
104 /* 50 */ {16, "xmm12", &builtin_type_v4sf},
105 /* 51 */ {16, "xmm13", &builtin_type_v4sf},
106 /* 52 */ {16, "xmm14", &builtin_type_v4sf},
107 /* 53 */ {16, "xmm15", &builtin_type_v4sf},
108 /* 54 */ {4, "mxcsr", &builtin_type_int32}
111 /* This array is a mapping from Dwarf-2 register
112 numbering to GDB's one. Dwarf-2 numbering is
113 defined in x86-64 ABI, section 3.6. */
114 static int x86_64_dwarf2gdb_regno_map[] = {
115 0, 1, 2, 3, /* RAX - RDX */
116 4, 5, 6, 7, /* RSI, RDI, RBP, RSP */
117 8, 9, 10, 11, /* R8 - R11 */
118 12, 13, 14, 15, /* R12 - R15 */
119 -1, /* RA - not mapped */
120 XMM1_REGNUM - 1, XMM1_REGNUM, /* XMM0 ... */
121 XMM1_REGNUM + 1, XMM1_REGNUM + 2,
122 XMM1_REGNUM + 3, XMM1_REGNUM + 4,
123 XMM1_REGNUM + 5, XMM1_REGNUM + 6,
124 XMM1_REGNUM + 7, XMM1_REGNUM + 8,
125 XMM1_REGNUM + 9, XMM1_REGNUM + 10,
126 XMM1_REGNUM + 11, XMM1_REGNUM + 12,
127 XMM1_REGNUM + 13, XMM1_REGNUM + 14, /* ... XMM15 */
128 ST0_REGNUM + 0, ST0_REGNUM + 1, /* ST0 ... */
129 ST0_REGNUM + 2, ST0_REGNUM + 3,
130 ST0_REGNUM + 4, ST0_REGNUM + 5,
131 ST0_REGNUM + 6, ST0_REGNUM + 7 /* ... ST7 */
134 static int x86_64_dwarf2gdb_regno_map_length =
135 sizeof (x86_64_dwarf2gdb_regno_map) /
136 sizeof (x86_64_dwarf2gdb_regno_map[0]);
138 /* Number of all registers */
139 #define X86_64_NUM_REGS (sizeof (x86_64_register_info_table) / \
140 sizeof (x86_64_register_info_table[0]))
142 /* Number of general registers. */
143 #define X86_64_NUM_GREGS (22)
145 int x86_64_num_regs = X86_64_NUM_REGS;
146 int x86_64_num_gregs = X86_64_NUM_GREGS;
148 /* Did we already print a note about frame pointer? */
149 int omit_fp_note_printed = 0;
151 /* Number of bytes of storage in the actual machine representation for
154 x86_64_register_raw_size (int regno)
156 return x86_64_register_info_table[regno].size;
159 /* x86_64_register_byte_table[i] is the offset into the register file of the
160 start of register number i. We initialize this from
161 x86_64_register_info_table. */
162 int x86_64_register_byte_table[X86_64_NUM_REGS];
164 /* Index within `registers' of the first byte of the space for register REGNO. */
166 x86_64_register_byte (int regno)
168 return x86_64_register_byte_table[regno];
171 /* Return the GDB type object for the "standard" data type of data in
174 x86_64_register_virtual_type (int regno)
176 return *x86_64_register_info_table[regno].type;
179 /* x86_64_register_convertible is true if register N's virtual format is
180 different from its raw format. Note that this definition assumes
181 that the host supports IEEE 32-bit floats, since it doesn't say
182 that SSE registers need conversion. Even if we can't find a
183 counterexample, this is still sloppy. */
185 x86_64_register_convertible (int regno)
187 return IS_FP_REGNUM (regno);
190 /* Convert data from raw format for register REGNUM in buffer FROM to
191 virtual format with type TYPE in buffer TO. In principle both
192 formats are identical except that the virtual format has two extra
193 bytes appended that aren't used. We set these to zero. */
195 x86_64_register_convert_to_virtual (int regnum, struct type *type,
196 char *from, char *to)
200 /* We only support floating-point values. */
201 if (TYPE_CODE (type) != TYPE_CODE_FLT)
203 warning ("Cannot convert floating-point register value "
204 "to non-floating-point type.");
205 memset (to, 0, TYPE_LENGTH (type));
208 /* First add the necessary padding. */
209 memcpy (buf, from, FPU_REG_RAW_SIZE);
210 memset (buf + FPU_REG_RAW_SIZE, 0, sizeof buf - FPU_REG_RAW_SIZE);
211 /* Convert to TYPE. This should be a no-op, if TYPE is equivalent
212 to the extended floating-point format used by the FPU. */
213 convert_typed_floating (to, type, buf,
214 x86_64_register_virtual_type (regnum));
217 /* Convert data from virtual format with type TYPE in buffer FROM to
218 raw format for register REGNUM in buffer TO. Simply omit the two
222 x86_64_register_convert_to_raw (struct type *type, int regnum,
223 char *from, char *to)
225 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12);
226 /* Simply omit the two unused bytes. */
227 memcpy (to, from, FPU_REG_RAW_SIZE);
230 /* Dwarf-2 <-> GDB register numbers mapping. */
232 x86_64_dwarf2_reg_to_regnum (int dw_reg)
234 if (dw_reg < 0 || dw_reg > x86_64_dwarf2gdb_regno_map_length)
236 warning ("Dwarf-2 uses unmapped register #%d\n", dw_reg);
240 return x86_64_dwarf2gdb_regno_map[dw_reg];
243 /* Push the return address (pointing to the call dummy) onto the stack
244 and return the new value for the stack pointer. */
247 x86_64_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
251 store_unsigned_integer (buf, 8, CALL_DUMMY_ADDRESS ());
252 write_memory (sp - 8, buf, 8);
257 x86_64_pop_frame (void)
259 generic_pop_current_frame (cfi_pop_frame);
263 /* The returning of values is done according to the special algorithm.
264 Some types are returned in registers an some (big structures) in memory.
268 #define MAX_CLASSES 4
270 enum x86_64_reg_class
273 X86_64_INTEGER_CLASS,
274 X86_64_INTEGERSI_CLASS,
284 /* Return the union class of CLASS1 and CLASS2.
285 See the x86-64 ABI for details. */
287 static enum x86_64_reg_class
288 merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2)
290 /* Rule #1: If both classes are equal, this is the resulting class. */
291 if (class1 == class2)
294 /* Rule #2: If one of the classes is NO_CLASS, the resulting class
295 is the other class. */
296 if (class1 == X86_64_NO_CLASS)
298 if (class2 == X86_64_NO_CLASS)
301 /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */
302 if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS)
303 return X86_64_MEMORY_CLASS;
305 /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */
306 if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS)
307 || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS))
308 return X86_64_INTEGERSI_CLASS;
309 if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS
310 || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS)
311 return X86_64_INTEGER_CLASS;
313 /* Rule #5: If one of the classes is X87 or X87UP class, MEMORY is used. */
314 if (class1 == X86_64_X87_CLASS || class1 == X86_64_X87UP_CLASS
315 || class2 == X86_64_X87_CLASS || class2 == X86_64_X87UP_CLASS)
316 return X86_64_MEMORY_CLASS;
318 /* Rule #6: Otherwise class SSE is used. */
319 return X86_64_SSE_CLASS;
322 /* Classify the argument type. CLASSES will be filled by the register
323 class used to pass each word of the operand. The number of words
324 is returned. In case the parameter should be passed in memory, 0
325 is returned. As a special case for zero sized containers,
326 classes[0] will be NO_CLASS and 1 is returned.
328 See the x86-64 psABI for details. */
331 classify_argument (struct type *type,
332 enum x86_64_reg_class classes[MAX_CLASSES], int bit_offset)
334 int bytes = TYPE_LENGTH (type);
335 int words = (bytes + 8 - 1) / 8;
337 switch (TYPE_CODE (type))
339 case TYPE_CODE_ARRAY:
340 case TYPE_CODE_STRUCT:
341 case TYPE_CODE_UNION:
344 enum x86_64_reg_class subclasses[MAX_CLASSES];
346 /* On x86-64 we pass structures larger than 16 bytes on the stack. */
350 for (i = 0; i < words; i++)
351 classes[i] = X86_64_NO_CLASS;
353 /* Zero sized arrays or structures are NO_CLASS. We return 0
354 to signalize memory class, so handle it as special case. */
357 classes[0] = X86_64_NO_CLASS;
360 switch (TYPE_CODE (type))
362 case TYPE_CODE_STRUCT:
365 for (j = 0; j < TYPE_NFIELDS (type); ++j)
367 int num = classify_argument (TYPE_FIELDS (type)[j].type,
369 (TYPE_FIELDS (type)[j].loc.
370 bitpos + bit_offset) % 256);
373 for (i = 0; i < num; i++)
376 (TYPE_FIELDS (type)[j].loc.bitpos +
379 merge_classes (subclasses[i], classes[i + pos]);
384 case TYPE_CODE_ARRAY:
388 num = classify_argument (TYPE_TARGET_TYPE (type),
389 subclasses, bit_offset);
393 /* The partial classes are now full classes. */
394 if (subclasses[0] == X86_64_SSESF_CLASS && bytes != 4)
395 subclasses[0] = X86_64_SSE_CLASS;
396 if (subclasses[0] == X86_64_INTEGERSI_CLASS && bytes != 4)
397 subclasses[0] = X86_64_INTEGER_CLASS;
399 for (i = 0; i < words; i++)
400 classes[i] = subclasses[i % num];
403 case TYPE_CODE_UNION:
407 for (j = 0; j < TYPE_NFIELDS (type); ++j)
410 num = classify_argument (TYPE_FIELDS (type)[j].type,
411 subclasses, bit_offset);
414 for (i = 0; i < num; i++)
415 classes[i] = merge_classes (subclasses[i], classes[i]);
423 /* Final merger cleanup. */
424 for (i = 0; i < words; i++)
426 /* If one class is MEMORY, everything should be passed in
428 if (classes[i] == X86_64_MEMORY_CLASS)
431 /* The X86_64_SSEUP_CLASS should be always preceeded by
433 if (classes[i] == X86_64_SSEUP_CLASS
434 && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS))
435 classes[i] = X86_64_SSE_CLASS;
437 /* X86_64_X87UP_CLASS should be preceeded by X86_64_X87_CLASS. */
438 if (classes[i] == X86_64_X87UP_CLASS
439 && (i == 0 || classes[i - 1] != X86_64_X87_CLASS))
440 classes[i] = X86_64_SSE_CLASS;
449 if (!(bit_offset % 64))
450 classes[0] = X86_64_SSESF_CLASS;
452 classes[0] = X86_64_SSE_CLASS;
455 classes[0] = X86_64_SSEDF_CLASS;
458 classes[0] = X86_64_X87_CLASS;
459 classes[1] = X86_64_X87UP_CLASS;
473 if (bytes * 8 + bit_offset <= 32)
474 classes[0] = X86_64_INTEGERSI_CLASS;
476 classes[0] = X86_64_INTEGER_CLASS;
479 classes[0] = classes[1] = X86_64_INTEGER_CLASS;
486 default: /* Avoid warning. */
489 internal_error (__FILE__, __LINE__,
490 "classify_argument: unknown argument type");
493 /* Examine the argument and set *INT_NREGS and *SSE_NREGS to the
494 number of registers required based on the information passed in
495 CLASSES. Return 0 if parameter should be passed in memory. */
498 examine_argument (enum x86_64_reg_class classes[MAX_CLASSES],
499 int n, int *int_nregs, int *sse_nregs)
505 for (n--; n >= 0; n--)
508 case X86_64_INTEGER_CLASS:
509 case X86_64_INTEGERSI_CLASS:
512 case X86_64_SSE_CLASS:
513 case X86_64_SSESF_CLASS:
514 case X86_64_SSEDF_CLASS:
517 case X86_64_NO_CLASS:
518 case X86_64_SSEUP_CLASS:
519 case X86_64_X87_CLASS:
520 case X86_64_X87UP_CLASS:
522 case X86_64_MEMORY_CLASS:
523 internal_error (__FILE__, __LINE__,
524 "examine_argument: unexpected memory class");
529 #define RET_INT_REGS 2
530 #define RET_SSE_REGS 2
532 /* Check if the structure in value_type is returned in registers or in
533 memory. If this function returns 1, GDB will call
534 STORE_STRUCT_RETURN and EXTRACT_STRUCT_VALUE_ADDRESS else
535 STORE_RETURN_VALUE and EXTRACT_RETURN_VALUE will be used. */
537 x86_64_use_struct_convention (int gcc_p, struct type *value_type)
539 enum x86_64_reg_class class[MAX_CLASSES];
540 int n = classify_argument (value_type, class, 0);
545 !examine_argument (class, n, &needed_intregs, &needed_sseregs) ||
546 needed_intregs > RET_INT_REGS || needed_sseregs > RET_SSE_REGS);
549 /* Extract from an array REGBUF containing the (raw) register state, a
550 function return value of TYPE, and copy that, in virtual format,
554 x86_64_extract_return_value (struct type *type, struct regcache *regcache,
557 enum x86_64_reg_class class[MAX_CLASSES];
558 int n = classify_argument (type, class, 0);
564 int ret_int_r[RET_INT_REGS] = { RAX_REGNUM, RDX_REGNUM };
565 int ret_sse_r[RET_SSE_REGS] = { XMM0_REGNUM, XMM1_REGNUM };
568 !examine_argument (class, n, &needed_intregs, &needed_sseregs) ||
569 needed_intregs > RET_INT_REGS || needed_sseregs > RET_SSE_REGS)
572 regcache_cooked_read (regcache, RAX_REGNUM, &addr);
573 read_memory (addr, valbuf, TYPE_LENGTH (type));
579 for (i = 0; i < n; i++)
583 case X86_64_NO_CLASS:
585 case X86_64_INTEGER_CLASS:
586 regcache_cooked_read (regcache, ret_int_r[(intreg + 1) / 2],
587 (char *) valbuf + offset);
591 case X86_64_INTEGERSI_CLASS:
592 regcache_cooked_read_part (regcache, ret_int_r[intreg / 2],
593 0, 4, (char *) valbuf + offset);
597 case X86_64_SSEDF_CLASS:
598 case X86_64_SSESF_CLASS:
599 case X86_64_SSE_CLASS:
600 regcache_cooked_read_part (regcache,
601 ret_sse_r[(ssereg + 1) / 2], 0, 8,
602 (char *) valbuf + offset);
606 case X86_64_SSEUP_CLASS:
607 regcache_cooked_read_part (regcache, ret_sse_r[ssereg / 2],
608 0, 8, (char *) valbuf + offset);
612 case X86_64_X87_CLASS:
613 regcache_cooked_read_part (regcache, FP0_REGNUM,
614 0, 8, (char *) valbuf + offset);
617 case X86_64_X87UP_CLASS:
618 regcache_cooked_read_part (regcache, FP0_REGNUM,
619 8, 2, (char *) valbuf + offset);
622 case X86_64_MEMORY_CLASS:
624 internal_error (__FILE__, __LINE__,
625 "Unexpected argument class");
632 x86_64_frame_init_saved_regs (struct frame_info *fi)
634 /* Do nothing. Everything is handled by the stack unwinding code. */
641 x86_64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
642 int struct_return, CORE_ADDR struct_addr)
647 static int int_parameter_registers[INT_REGS] = {
648 5 /* RDI */ , 4 /* RSI */ ,
649 3 /* RDX */ , 2 /* RCX */ ,
650 8 /* R8 */ , 9 /* R9 */
653 static int sse_parameter_registers[SSE_REGS] = {
654 XMM1_REGNUM - 1, XMM1_REGNUM, XMM1_REGNUM + 1, XMM1_REGNUM + 2,
655 XMM1_REGNUM + 3, XMM1_REGNUM + 4, XMM1_REGNUM + 5, XMM1_REGNUM + 6,
656 XMM1_REGNUM + 7, XMM1_REGNUM + 8, XMM1_REGNUM + 9, XMM1_REGNUM + 10,
657 XMM1_REGNUM + 11, XMM1_REGNUM + 12, XMM1_REGNUM + 13, XMM1_REGNUM + 14
659 int stack_values_count = 0;
661 stack_values = alloca (nargs * sizeof (int));
662 for (i = 0; i < nargs; i++)
664 enum x86_64_reg_class class[MAX_CLASSES];
665 int n = classify_argument (args[i]->type, class, 0);
670 !examine_argument (class, n, &needed_intregs, &needed_sseregs)
671 || intreg / 2 + needed_intregs > INT_REGS
672 || ssereg / 2 + needed_sseregs > SSE_REGS)
674 stack_values[stack_values_count++] = i;
679 for (j = 0; j < n; j++)
684 case X86_64_NO_CLASS:
686 case X86_64_INTEGER_CLASS:
687 deprecated_write_register_gen (int_parameter_registers
689 VALUE_CONTENTS_ALL (args[i]) + offset);
693 case X86_64_INTEGERSI_CLASS:
696 = extract_signed_integer (VALUE_CONTENTS_ALL (args[i])
698 regcache_raw_write_signed (current_regcache,
699 int_parameter_registers[intreg / 2], num);
705 case X86_64_SSEDF_CLASS:
706 case X86_64_SSESF_CLASS:
707 case X86_64_SSE_CLASS:
708 deprecated_write_register_gen (sse_parameter_registers
710 VALUE_CONTENTS_ALL (args[i]) + offset);
714 case X86_64_SSEUP_CLASS:
715 deprecated_write_register_gen (sse_parameter_registers[ssereg / 2],
716 VALUE_CONTENTS_ALL (args[i]) + offset);
720 case X86_64_X87_CLASS:
721 case X86_64_MEMORY_CLASS:
722 stack_values[stack_values_count++] = i;
724 case X86_64_X87UP_CLASS:
727 internal_error (__FILE__, __LINE__,
728 "Unexpected argument class");
730 intreg += intreg % 2;
731 ssereg += ssereg % 2;
735 while (--stack_values_count >= 0)
737 struct value *arg = args[stack_values[stack_values_count]];
738 int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg));
742 write_memory (sp, VALUE_CONTENTS_ALL (arg), len);
747 /* Write into the appropriate registers a function return value stored
748 in VALBUF of type TYPE, given in virtual format. */
750 x86_64_store_return_value (struct type *type, struct regcache *regcache,
753 int len = TYPE_LENGTH (type);
755 if (TYPE_CODE_FLT == TYPE_CODE (type))
757 /* Floating-point return values can be found in %st(0). */
758 if (len == TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT
759 && TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext)
761 /* Copy straight over. */
762 regcache_cooked_write (regcache, FP0_REGNUM, valbuf);
766 char buf[FPU_REG_RAW_SIZE];
769 /* Convert the value found in VALBUF to the extended
770 floating point format used by the FPU. This is probably
771 not exactly how it would happen on the target itself, but
772 it is the best we can do. */
773 val = deprecated_extract_floating (valbuf, TYPE_LENGTH (type));
774 floatformat_from_doublest (&floatformat_i387_ext, &val, buf);
775 regcache_cooked_write_part (regcache, FP0_REGNUM,
776 0, FPU_REG_RAW_SIZE, buf);
781 int low_size = REGISTER_RAW_SIZE (0);
782 int high_size = REGISTER_RAW_SIZE (1);
785 regcache_cooked_write_part (regcache, 0, 0, len, valbuf);
786 else if (len <= (low_size + high_size))
788 regcache_cooked_write_part (regcache, 0, 0, low_size, valbuf);
789 regcache_cooked_write_part (regcache, 1, 0,
791 (const char *) valbuf + low_size);
794 internal_error (__FILE__, __LINE__,
795 "Cannot store return value of %d bytes long.", len);
801 x86_64_register_name (int reg_nr)
803 if (reg_nr < 0 || reg_nr >= X86_64_NUM_REGS)
805 return x86_64_register_info_table[reg_nr].name;
809 x86_64_register_number (const char *name)
813 for (reg_nr = 0; reg_nr < X86_64_NUM_REGS; reg_nr++)
814 if (strcmp (name, x86_64_register_info_table[reg_nr].name) == 0)
820 /* Store the address of the place in which to copy the structure the
821 subroutine will return. This is called from call_function. */
823 x86_64_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
825 write_register (RDI_REGNUM, addr);
829 x86_64_frameless_function_invocation (struct frame_info *frame)
834 /* We will handle only functions beginning with:
836 48 89 e5 movq %rsp,%rbp
837 Any function that doesn't start with this sequence
838 will be assumed to have no prologue and thus no valid
839 frame pointer in %rbp. */
840 #define PROLOG_BUFSIZE 4
842 x86_64_function_has_prologue (CORE_ADDR pc)
845 unsigned char prolog_expect[PROLOG_BUFSIZE] = { 0x55, 0x48, 0x89, 0xe5 },
846 prolog_buf[PROLOG_BUFSIZE];
848 read_memory (pc, (char *) prolog_buf, PROLOG_BUFSIZE);
850 /* First check, whether pc points to pushq %rbp, movq %rsp,%rbp. */
851 for (i = 0; i < PROLOG_BUFSIZE; i++)
852 if (prolog_expect[i] != prolog_buf[i])
853 return 0; /* ... no, it doesn't. Nothing to skip. */
858 /* If a function with debugging information and known beginning
859 is detected, we will return pc of the next line in the source
860 code. With this approach we effectively skip the prolog. */
863 x86_64_skip_prologue (CORE_ADDR pc)
866 struct symtab_and_line v_sal;
867 struct symbol *v_function;
870 if (! x86_64_function_has_prologue (pc))
873 /* OK, we have found the prologue and want PC of the first
874 non-prologue instruction. */
875 pc += PROLOG_BUFSIZE;
877 v_function = find_pc_function (pc);
878 v_sal = find_pc_line (pc, 0);
880 /* If pc doesn't point to a function with debuginfo, some of the
881 following may be NULL. */
882 if (!v_function || !v_function->ginfo.value.block || !v_sal.symtab)
885 endaddr = BLOCK_END (SYMBOL_BLOCK_VALUE (v_function));
887 for (i = 0; i < v_sal.symtab->linetable->nitems; i++)
888 if (v_sal.symtab->linetable->item[i].pc >= pc
889 && v_sal.symtab->linetable->item[i].pc < endaddr)
891 pc = v_sal.symtab->linetable->item[i].pc;
899 x86_64_save_dummy_frame_tos (CORE_ADDR sp)
901 /* We must add the size of the return address that is already
903 generic_save_dummy_frame_tos (sp +
904 TYPE_LENGTH (builtin_type_void_func_ptr));
907 static struct frame_id
908 x86_64_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *frame)
911 frame_unwind_unsigned_register (frame, SP_REGNUM, &base);
912 return frame_id_build (base, frame_pc_unwind (frame));
916 x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
918 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
921 /* The x86-64 has 16 SSE registers. */
922 tdep->num_xmm_regs = 16;
924 /* This is what all the fuss is about. */
925 set_gdbarch_long_bit (gdbarch, 64);
926 set_gdbarch_long_long_bit (gdbarch, 64);
927 set_gdbarch_ptr_bit (gdbarch, 64);
929 /* In contrast to the i386, on the x86-64 a `long double' actually
930 takes up 128 bits, even though it's still based on the i387
931 extended floating-point format which has only 80 significant bits. */
932 set_gdbarch_long_double_bit (gdbarch, 128);
934 set_gdbarch_num_regs (gdbarch, X86_64_NUM_REGS);
936 /* Register numbers of various important registers. */
937 set_gdbarch_sp_regnum (gdbarch, 7); /* %rsp */
938 set_gdbarch_deprecated_fp_regnum (gdbarch, 6); /* %rbp */
939 set_gdbarch_pc_regnum (gdbarch, 16); /* %rip */
940 set_gdbarch_ps_regnum (gdbarch, 17); /* %eflags */
941 set_gdbarch_fp0_regnum (gdbarch, X86_64_NUM_GREGS); /* %st(0) */
943 /* The "default" register numbering scheme for the x86-64 is
944 referred to as the "DWARF register number mapping" in the psABI.
945 The preferred debugging format for all known x86-64 targets is
946 actually DWARF2, and GCC doesn't seem to support DWARF (that is
947 DWARF-1), but we provide the same mapping just in case. This
948 mapping is also used for stabs, which GCC does support. */
949 set_gdbarch_stab_reg_to_regnum (gdbarch, x86_64_dwarf2_reg_to_regnum);
950 set_gdbarch_dwarf_reg_to_regnum (gdbarch, x86_64_dwarf2_reg_to_regnum);
951 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, x86_64_dwarf2_reg_to_regnum);
953 /* We don't override SDB_REG_RO_REGNUM, sice COFF doesn't seem to be
954 in use on any of the supported x86-64 targets. */
956 set_gdbarch_register_name (gdbarch, x86_64_register_name);
957 set_gdbarch_deprecated_register_size (gdbarch, 8);
959 /* Total amount of space needed to store our copies of the machine's
960 register (SIZEOF_GREGS + SIZEOF_FPU_REGS + SIZEOF_FPU_CTRL_REGS +
962 for (i = 0, sum = 0; i < X86_64_NUM_REGS; i++)
963 sum += x86_64_register_info_table[i].size;
964 set_gdbarch_register_bytes (gdbarch, sum);
966 set_gdbarch_register_raw_size (gdbarch, x86_64_register_raw_size);
967 set_gdbarch_register_byte (gdbarch, x86_64_register_byte);
968 set_gdbarch_register_virtual_type (gdbarch, x86_64_register_virtual_type);
970 set_gdbarch_register_convertible (gdbarch, x86_64_register_convertible);
971 set_gdbarch_register_convert_to_virtual (gdbarch,
972 x86_64_register_convert_to_virtual);
973 set_gdbarch_register_convert_to_raw (gdbarch,
974 x86_64_register_convert_to_raw);
976 /* Getting saved registers is handled by unwind information. */
977 set_gdbarch_deprecated_get_saved_register (gdbarch, cfi_get_saved_register);
979 /* FIXME: kettenis/20021026: Should we set parm_boundary to 64 here? */
980 set_gdbarch_deprecated_target_read_fp (gdbarch, cfi_read_fp);
982 set_gdbarch_extract_return_value (gdbarch, x86_64_extract_return_value);
984 set_gdbarch_deprecated_push_arguments (gdbarch, x86_64_push_arguments);
985 set_gdbarch_deprecated_push_return_address (gdbarch, x86_64_push_return_address);
986 set_gdbarch_deprecated_pop_frame (gdbarch, x86_64_pop_frame);
987 set_gdbarch_deprecated_store_struct_return (gdbarch, x86_64_store_struct_return);
988 set_gdbarch_store_return_value (gdbarch, x86_64_store_return_value);
989 /* Override, since this is handled by x86_64_extract_return_value. */
990 set_gdbarch_extract_struct_value_address (gdbarch, NULL);
991 set_gdbarch_use_struct_convention (gdbarch, x86_64_use_struct_convention);
993 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, x86_64_frame_init_saved_regs);
994 set_gdbarch_skip_prologue (gdbarch, x86_64_skip_prologue);
996 set_gdbarch_deprecated_frame_chain (gdbarch, x86_64_linux_frame_chain);
997 set_gdbarch_frameless_function_invocation (gdbarch,
998 x86_64_frameless_function_invocation);
999 /* FIXME: kettenis/20021026: These two are GNU/Linux-specific and
1000 should be moved elsewhere. */
1001 set_gdbarch_deprecated_frame_saved_pc (gdbarch, x86_64_linux_frame_saved_pc);
1002 set_gdbarch_deprecated_saved_pc_after_call (gdbarch, x86_64_linux_saved_pc_after_call);
1003 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1004 /* FIXME: kettenis/20021026: This one is GNU/Linux-specific too. */
1005 set_gdbarch_pc_in_sigtramp (gdbarch, x86_64_linux_in_sigtramp);
1007 set_gdbarch_num_pseudo_regs (gdbarch, 0);
1009 /* Build call frame information (CFI) from DWARF2 frame debug info. */
1010 set_gdbarch_dwarf2_build_frame_info (gdbarch, dwarf2_build_frame_info);
1012 /* Initialization of per-frame CFI. */
1013 set_gdbarch_deprecated_init_extra_frame_info (gdbarch, cfi_init_extra_frame_info);
1015 /* Frame PC initialization is handled by using CFI. */
1016 set_gdbarch_deprecated_init_frame_pc (gdbarch, x86_64_init_frame_pc);
1018 /* Cons up virtual frame pointer for trace. */
1019 set_gdbarch_virtual_frame_pointer (gdbarch, cfi_virtual_frame_pointer);
1021 /* FIXME: kettenis/20021026: This is ELF-specific. Fine for now,
1022 since all supported x86-64 targets are ELF, but that might change
1024 set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
1026 /* Dummy frame helper functions. */
1027 set_gdbarch_save_dummy_frame_tos (gdbarch, x86_64_save_dummy_frame_tos);
1028 set_gdbarch_unwind_dummy_id (gdbarch, x86_64_unwind_dummy_id);
1032 _initialize_x86_64_tdep (void)
1034 /* Initialize the table saying where each register starts in the
1040 for (i = 0; i < X86_64_NUM_REGS; i++)
1042 x86_64_register_byte_table[i] = offset;
1043 offset += x86_64_register_info_table[i].size;