daily update
[deliverable/binutils-gdb.git] / gdb / x86-64-tdep.c
1 /* Target-dependent code for the x86-64 for GDB, the GNU debugger.
2
3 Copyright 2001, 2002 Free Software Foundation, Inc.
4
5 Contributed by Jiri Smid, SuSE Labs.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
23
24 #include "defs.h"
25 #include "inferior.h"
26 #include "gdbcore.h"
27 #include "gdbcmd.h"
28 #include "arch-utils.h"
29 #include "regcache.h"
30 #include "symfile.h"
31 #include "x86-64-tdep.h"
32 #include "dwarf2cfi.h"
33 #include "gdb_assert.h"
34
35 /* Register numbers of various important registers. */
36 #define RAX_REGNUM 0
37 #define RDX_REGNUM 3
38 #define RDI_REGNUM 5
39 #define EFLAGS_REGNUM 17
40 #define ST0_REGNUM 22
41 #define XMM1_REGNUM 39
42
43 struct register_info
44 {
45 int size;
46 char *name;
47 struct type **type;
48 };
49
50 /* x86_64_register_raw_size_table[i] is the number of bytes of storage in
51 GDB's register array occupied by register i. */
52 static struct register_info x86_64_register_info_table[] = {
53 /* 0 */ {8, "rax", &builtin_type_int64},
54 /* 1 */ {8, "rbx", &builtin_type_int64},
55 /* 2 */ {8, "rcx", &builtin_type_int64},
56 /* 3 */ {8, "rdx", &builtin_type_int64},
57 /* 4 */ {8, "rsi", &builtin_type_int64},
58 /* 5 */ {8, "rdi", &builtin_type_int64},
59 /* 6 */ {8, "rbp", &builtin_type_void_func_ptr},
60 /* 7 */ {8, "rsp", &builtin_type_void_func_ptr},
61 /* 8 */ {8, "r8", &builtin_type_int64},
62 /* 9 */ {8, "r9", &builtin_type_int64},
63 /* 10 */ {8, "r10", &builtin_type_int64},
64 /* 11 */ {8, "r11", &builtin_type_int64},
65 /* 12 */ {8, "r12", &builtin_type_int64},
66 /* 13 */ {8, "r13", &builtin_type_int64},
67 /* 14 */ {8, "r14", &builtin_type_int64},
68 /* 15 */ {8, "r15", &builtin_type_int64},
69 /* 16 */ {8, "rip", &builtin_type_void_func_ptr},
70 /* 17 */ {4, "eflags", &builtin_type_int32},
71 /* 18 */ {4, "ds", &builtin_type_int32},
72 /* 19 */ {4, "es", &builtin_type_int32},
73 /* 20 */ {4, "fs", &builtin_type_int32},
74 /* 21 */ {4, "gs", &builtin_type_int32},
75 /* 22 */ {10, "st0", &builtin_type_i387_ext},
76 /* 23 */ {10, "st1", &builtin_type_i387_ext},
77 /* 24 */ {10, "st2", &builtin_type_i387_ext},
78 /* 25 */ {10, "st3", &builtin_type_i387_ext},
79 /* 26 */ {10, "st4", &builtin_type_i387_ext},
80 /* 27 */ {10, "st5", &builtin_type_i387_ext},
81 /* 28 */ {10, "st6", &builtin_type_i387_ext},
82 /* 29 */ {10, "st7", &builtin_type_i387_ext},
83 /* 30 */ {4, "fctrl", &builtin_type_int32},
84 /* 31 */ {4, "fstat", &builtin_type_int32},
85 /* 32 */ {4, "ftag", &builtin_type_int32},
86 /* 33 */ {4, "fiseg", &builtin_type_int32},
87 /* 34 */ {4, "fioff", &builtin_type_int32},
88 /* 35 */ {4, "foseg", &builtin_type_int32},
89 /* 36 */ {4, "fooff", &builtin_type_int32},
90 /* 37 */ {4, "fop", &builtin_type_int32},
91 /* 38 */ {16, "xmm0", &builtin_type_v4sf},
92 /* 39 */ {16, "xmm1", &builtin_type_v4sf},
93 /* 40 */ {16, "xmm2", &builtin_type_v4sf},
94 /* 41 */ {16, "xmm3", &builtin_type_v4sf},
95 /* 42 */ {16, "xmm4", &builtin_type_v4sf},
96 /* 43 */ {16, "xmm5", &builtin_type_v4sf},
97 /* 44 */ {16, "xmm6", &builtin_type_v4sf},
98 /* 45 */ {16, "xmm7", &builtin_type_v4sf},
99 /* 46 */ {16, "xmm8", &builtin_type_v4sf},
100 /* 47 */ {16, "xmm9", &builtin_type_v4sf},
101 /* 48 */ {16, "xmm10", &builtin_type_v4sf},
102 /* 49 */ {16, "xmm11", &builtin_type_v4sf},
103 /* 50 */ {16, "xmm12", &builtin_type_v4sf},
104 /* 51 */ {16, "xmm13", &builtin_type_v4sf},
105 /* 52 */ {16, "xmm14", &builtin_type_v4sf},
106 /* 53 */ {16, "xmm15", &builtin_type_v4sf},
107 /* 54 */ {4, "mxcsr", &builtin_type_int32}
108 };
109
110 /* This array is a mapping from Dwarf-2 register
111 numbering to GDB's one. Dwarf-2 numbering is
112 defined in x86-64 ABI, section 3.6. */
113 static int x86_64_dwarf2gdb_regno_map[] = {
114 0, 1, 2, 3, /* RAX - RDX */
115 4, 5, 6, 7, /* RSI, RDI, RBP, RSP */
116 8, 9, 10, 11, /* R8 - R11 */
117 12, 13, 14, 15, /* R12 - R15 */
118 -1, /* RA - not mapped */
119 XMM1_REGNUM - 1, XMM1_REGNUM, /* XMM0 ... */
120 XMM1_REGNUM + 1, XMM1_REGNUM + 2,
121 XMM1_REGNUM + 3, XMM1_REGNUM + 4,
122 XMM1_REGNUM + 5, XMM1_REGNUM + 6,
123 XMM1_REGNUM + 7, XMM1_REGNUM + 8,
124 XMM1_REGNUM + 9, XMM1_REGNUM + 10,
125 XMM1_REGNUM + 11, XMM1_REGNUM + 12,
126 XMM1_REGNUM + 13, XMM1_REGNUM + 14, /* ... XMM15 */
127 ST0_REGNUM + 0, ST0_REGNUM + 1, /* ST0 ... */
128 ST0_REGNUM + 2, ST0_REGNUM + 3,
129 ST0_REGNUM + 4, ST0_REGNUM + 5,
130 ST0_REGNUM + 6, ST0_REGNUM + 7 /* ... ST7 */
131 };
132
133 static int x86_64_dwarf2gdb_regno_map_length =
134 sizeof (x86_64_dwarf2gdb_regno_map) /
135 sizeof (x86_64_dwarf2gdb_regno_map[0]);
136
137 /* Number of all registers */
138 #define X86_64_NUM_REGS (sizeof (x86_64_register_info_table) / \
139 sizeof (x86_64_register_info_table[0]))
140
141 /* Number of general registers. */
142 #define X86_64_NUM_GREGS (22)
143
144 int x86_64_num_regs = X86_64_NUM_REGS;
145 int x86_64_num_gregs = X86_64_NUM_GREGS;
146
147 /* Did we already print a note about frame pointer? */
148 int omit_fp_note_printed = 0;
149
150 /* Number of bytes of storage in the actual machine representation for
151 register REGNO. */
152 int
153 x86_64_register_raw_size (int regno)
154 {
155 return x86_64_register_info_table[regno].size;
156 }
157
158 /* x86_64_register_byte_table[i] is the offset into the register file of the
159 start of register number i. We initialize this from
160 x86_64_register_info_table. */
161 int x86_64_register_byte_table[X86_64_NUM_REGS];
162
163 /* Index within `registers' of the first byte of the space for register REGNO. */
164 int
165 x86_64_register_byte (int regno)
166 {
167 return x86_64_register_byte_table[regno];
168 }
169
170 /* Return the GDB type object for the "standard" data type of data in
171 register N. */
172 static struct type *
173 x86_64_register_virtual_type (int regno)
174 {
175 return *x86_64_register_info_table[regno].type;
176 }
177
178 /* x86_64_register_convertible is true if register N's virtual format is
179 different from its raw format. Note that this definition assumes
180 that the host supports IEEE 32-bit floats, since it doesn't say
181 that SSE registers need conversion. Even if we can't find a
182 counterexample, this is still sloppy. */
183 int
184 x86_64_register_convertible (int regno)
185 {
186 return IS_FP_REGNUM (regno);
187 }
188
189 /* Convert data from raw format for register REGNUM in buffer FROM to
190 virtual format with type TYPE in buffer TO. In principle both
191 formats are identical except that the virtual format has two extra
192 bytes appended that aren't used. We set these to zero. */
193 void
194 x86_64_register_convert_to_virtual (int regnum, struct type *type,
195 char *from, char *to)
196 {
197 char buf[12];
198
199 /* We only support floating-point values. */
200 if (TYPE_CODE (type) != TYPE_CODE_FLT)
201 {
202 warning ("Cannot convert floating-point register value "
203 "to non-floating-point type.");
204 memset (to, 0, TYPE_LENGTH (type));
205 return;
206 }
207 /* First add the necessary padding. */
208 memcpy (buf, from, FPU_REG_RAW_SIZE);
209 memset (buf + FPU_REG_RAW_SIZE, 0, sizeof buf - FPU_REG_RAW_SIZE);
210 /* Convert to TYPE. This should be a no-op, if TYPE is equivalent
211 to the extended floating-point format used by the FPU. */
212 convert_typed_floating (to, type, buf,
213 x86_64_register_virtual_type (regnum));
214 }
215
216 /* Convert data from virtual format with type TYPE in buffer FROM to
217 raw format for register REGNUM in buffer TO. Simply omit the two
218 unused bytes. */
219
220 void
221 x86_64_register_convert_to_raw (struct type *type, int regnum,
222 char *from, char *to)
223 {
224 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12);
225 /* Simply omit the two unused bytes. */
226 memcpy (to, from, FPU_REG_RAW_SIZE);
227 }
228
229 /* Dwarf-2 <-> GDB register numbers mapping. */
230 int
231 x86_64_dwarf2_reg_to_regnum (int dw_reg)
232 {
233 if (dw_reg < 0 || dw_reg > x86_64_dwarf2gdb_regno_map_length)
234 {
235 warning ("Dwarf-2 uses unmapped register #%d\n", dw_reg);
236 return dw_reg;
237 }
238
239 return x86_64_dwarf2gdb_regno_map[dw_reg];
240 }
241
242 /* This is the variable that is set with "set disassembly-flavour", and
243 its legitimate values. */
244 static const char att_flavour[] = "att";
245 static const char intel_flavour[] = "intel";
246 static const char *valid_flavours[] = {
247 att_flavour,
248 intel_flavour,
249 NULL
250 };
251 static const char *disassembly_flavour = att_flavour;
252
253 static CORE_ADDR
254 x86_64_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
255 {
256 char buf[8];
257
258 store_unsigned_integer (buf, 8, CALL_DUMMY_ADDRESS ());
259
260 write_memory (sp - 8, buf, 8);
261 return sp - 8;
262 }
263
264 void
265 x86_64_pop_frame (void)
266 {
267 generic_pop_current_frame (cfi_pop_frame);
268 }
269 \f
270
271 /* The returning of values is done according to the special algorithm.
272 Some types are returned in registers an some (big structures) in memory.
273 See ABI for details.
274 */
275
276 #define MAX_CLASSES 4
277
278 enum x86_64_reg_class
279 {
280 X86_64_NO_CLASS,
281 X86_64_INTEGER_CLASS,
282 X86_64_INTEGERSI_CLASS,
283 X86_64_SSE_CLASS,
284 X86_64_SSESF_CLASS,
285 X86_64_SSEDF_CLASS,
286 X86_64_SSEUP_CLASS,
287 X86_64_X87_CLASS,
288 X86_64_X87UP_CLASS,
289 X86_64_MEMORY_CLASS
290 };
291
292 /* Return the union class of CLASS1 and CLASS2.
293 See the x86-64 ABI for details. */
294
295 static enum x86_64_reg_class
296 merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2)
297 {
298 /* Rule #1: If both classes are equal, this is the resulting class. */
299 if (class1 == class2)
300 return class1;
301
302 /* Rule #2: If one of the classes is NO_CLASS, the resulting class is
303 the other class. */
304 if (class1 == X86_64_NO_CLASS)
305 return class2;
306 if (class2 == X86_64_NO_CLASS)
307 return class1;
308
309 /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */
310 if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS)
311 return X86_64_MEMORY_CLASS;
312
313 /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */
314 if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS)
315 || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS))
316 return X86_64_INTEGERSI_CLASS;
317 if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS
318 || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS)
319 return X86_64_INTEGER_CLASS;
320
321 /* Rule #5: If one of the classes is X87 or X87UP class, MEMORY is used. */
322 if (class1 == X86_64_X87_CLASS || class1 == X86_64_X87UP_CLASS
323 || class2 == X86_64_X87_CLASS || class2 == X86_64_X87UP_CLASS)
324 return X86_64_MEMORY_CLASS;
325
326 /* Rule #6: Otherwise class SSE is used. */
327 return X86_64_SSE_CLASS;
328 }
329
330
331 /* Classify the argument type.
332 CLASSES will be filled by the register class used to pass each word
333 of the operand. The number of words is returned. In case the parameter
334 should be passed in memory, 0 is returned. As a special case for zero
335 sized containers, classes[0] will be NO_CLASS and 1 is returned.
336
337 See the x86-64 PS ABI for details.
338 */
339
340 static int
341 classify_argument (struct type *type,
342 enum x86_64_reg_class classes[MAX_CLASSES], int bit_offset)
343 {
344 int bytes = TYPE_LENGTH (type);
345 int words = (bytes + 8 - 1) / 8;
346
347 switch (TYPE_CODE (type))
348 {
349 case TYPE_CODE_ARRAY:
350 case TYPE_CODE_STRUCT:
351 case TYPE_CODE_UNION:
352 {
353 int i;
354 enum x86_64_reg_class subclasses[MAX_CLASSES];
355
356 /* On x86-64 we pass structures larger than 16 bytes on the stack. */
357 if (bytes > 16)
358 return 0;
359
360 for (i = 0; i < words; i++)
361 classes[i] = X86_64_NO_CLASS;
362
363 /* Zero sized arrays or structures are NO_CLASS. We return 0 to
364 signalize memory class, so handle it as special case. */
365 if (!words)
366 {
367 classes[0] = X86_64_NO_CLASS;
368 return 1;
369 }
370 switch (TYPE_CODE (type))
371 {
372 case TYPE_CODE_STRUCT:
373 {
374 int j;
375 for (j = 0; j < TYPE_NFIELDS (type); ++j)
376 {
377 int num = classify_argument (TYPE_FIELDS (type)[j].type,
378 subclasses,
379 (TYPE_FIELDS (type)[j].loc.
380 bitpos + bit_offset) % 256);
381 if (!num)
382 return 0;
383 for (i = 0; i < num; i++)
384 {
385 int pos =
386 (TYPE_FIELDS (type)[j].loc.bitpos +
387 bit_offset) / 8 / 8;
388 classes[i + pos] =
389 merge_classes (subclasses[i], classes[i + pos]);
390 }
391 }
392 }
393 break;
394 case TYPE_CODE_ARRAY:
395 {
396 int num;
397
398 num = classify_argument (TYPE_TARGET_TYPE (type),
399 subclasses, bit_offset);
400 if (!num)
401 return 0;
402
403 /* The partial classes are now full classes. */
404 if (subclasses[0] == X86_64_SSESF_CLASS && bytes != 4)
405 subclasses[0] = X86_64_SSE_CLASS;
406 if (subclasses[0] == X86_64_INTEGERSI_CLASS && bytes != 4)
407 subclasses[0] = X86_64_INTEGER_CLASS;
408
409 for (i = 0; i < words; i++)
410 classes[i] = subclasses[i % num];
411 }
412 break;
413 case TYPE_CODE_UNION:
414 {
415 int j;
416 {
417 for (j = 0; j < TYPE_NFIELDS (type); ++j)
418 {
419 int num;
420 num = classify_argument (TYPE_FIELDS (type)[j].type,
421 subclasses, bit_offset);
422 if (!num)
423 return 0;
424 for (i = 0; i < num; i++)
425 classes[i] = merge_classes (subclasses[i], classes[i]);
426 }
427 }
428 }
429 break;
430 default:
431 break;
432 }
433 /* Final merger cleanup. */
434 for (i = 0; i < words; i++)
435 {
436 /* If one class is MEMORY, everything should be passed in
437 memory. */
438 if (classes[i] == X86_64_MEMORY_CLASS)
439 return 0;
440
441 /* The X86_64_SSEUP_CLASS should be always preceeded by
442 X86_64_SSE_CLASS. */
443 if (classes[i] == X86_64_SSEUP_CLASS
444 && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS))
445 classes[i] = X86_64_SSE_CLASS;
446
447 /* X86_64_X87UP_CLASS should be preceeded by X86_64_X87_CLASS. */
448 if (classes[i] == X86_64_X87UP_CLASS
449 && (i == 0 || classes[i - 1] != X86_64_X87_CLASS))
450 classes[i] = X86_64_SSE_CLASS;
451 }
452 return words;
453 }
454 break;
455 case TYPE_CODE_FLT:
456 switch (bytes)
457 {
458 case 4:
459 if (!(bit_offset % 64))
460 classes[0] = X86_64_SSESF_CLASS;
461 else
462 classes[0] = X86_64_SSE_CLASS;
463 return 1;
464 case 8:
465 classes[0] = X86_64_SSEDF_CLASS;
466 return 1;
467 case 16:
468 classes[0] = X86_64_X87_CLASS;
469 classes[1] = X86_64_X87UP_CLASS;
470 return 2;
471 }
472 break;
473 case TYPE_CODE_INT:
474 case TYPE_CODE_PTR:
475 switch (bytes)
476 {
477 case 1:
478 case 2:
479 case 4:
480 case 8:
481 if (bytes * 8 + bit_offset <= 32)
482 classes[0] = X86_64_INTEGERSI_CLASS;
483 else
484 classes[0] = X86_64_INTEGER_CLASS;
485 return 1;
486 case 16:
487 classes[0] = classes[1] = X86_64_INTEGER_CLASS;
488 return 2;
489 default:
490 break;
491 }
492 case TYPE_CODE_VOID:
493 return 0;
494 default: /* Avoid warning. */
495 break;
496 }
497 internal_error (__FILE__, __LINE__,
498 "classify_argument: unknown argument type");
499 }
500
501 /* Examine the argument and return set number of register required in each
502 class. Return 0 ifif parameter should be passed in memory. */
503
504 static int
505 examine_argument (enum x86_64_reg_class classes[MAX_CLASSES],
506 int n, int *int_nregs, int *sse_nregs)
507 {
508 *int_nregs = 0;
509 *sse_nregs = 0;
510 if (!n)
511 return 0;
512 for (n--; n >= 0; n--)
513 switch (classes[n])
514 {
515 case X86_64_INTEGER_CLASS:
516 case X86_64_INTEGERSI_CLASS:
517 (*int_nregs)++;
518 break;
519 case X86_64_SSE_CLASS:
520 case X86_64_SSESF_CLASS:
521 case X86_64_SSEDF_CLASS:
522 (*sse_nregs)++;
523 break;
524 case X86_64_NO_CLASS:
525 case X86_64_SSEUP_CLASS:
526 case X86_64_X87_CLASS:
527 case X86_64_X87UP_CLASS:
528 break;
529 case X86_64_MEMORY_CLASS:
530 internal_error (__FILE__, __LINE__,
531 "examine_argument: unexpected memory class");
532 }
533 return 1;
534 }
535
536 #define RET_INT_REGS 2
537 #define RET_SSE_REGS 2
538
539 /* Check if the structure in value_type is returned in registers or in
540 memory. If this function returns 1, gdb will call STORE_STRUCT_RETURN and
541 EXTRACT_STRUCT_VALUE_ADDRESS else STORE_RETURN_VALUE and EXTRACT_RETURN_VALUE
542 will be used. */
543 int
544 x86_64_use_struct_convention (int gcc_p, struct type *value_type)
545 {
546 enum x86_64_reg_class class[MAX_CLASSES];
547 int n = classify_argument (value_type, class, 0);
548 int needed_intregs;
549 int needed_sseregs;
550
551 return (!n ||
552 !examine_argument (class, n, &needed_intregs, &needed_sseregs) ||
553 needed_intregs > RET_INT_REGS || needed_sseregs > RET_SSE_REGS);
554 }
555
556
557 /* Extract from an array REGBUF containing the (raw) register state, a
558 function return value of TYPE, and copy that, in virtual format,
559 into VALBUF. */
560
561 void
562 x86_64_extract_return_value (struct type *type, char *regbuf, char *valbuf)
563 {
564 enum x86_64_reg_class class[MAX_CLASSES];
565 int n = classify_argument (type, class, 0);
566 int needed_intregs;
567 int needed_sseregs;
568 int intreg = 0;
569 int ssereg = 0;
570 int offset = 0;
571 int ret_int_r[RET_INT_REGS] = { RAX_REGNUM, RDX_REGNUM };
572 int ret_sse_r[RET_SSE_REGS] = { XMM0_REGNUM, XMM1_REGNUM };
573
574 if (!n ||
575 !examine_argument (class, n, &needed_intregs, &needed_sseregs) ||
576 needed_intregs > RET_INT_REGS || needed_sseregs > RET_SSE_REGS)
577 { /* memory class */
578 CORE_ADDR addr;
579 memcpy (&addr, regbuf, REGISTER_RAW_SIZE (RAX_REGNUM));
580 read_memory (addr, valbuf, TYPE_LENGTH (type));
581 return;
582 }
583 else
584 {
585 int i;
586 for (i = 0; i < n; i++)
587 {
588 switch (class[i])
589 {
590 case X86_64_NO_CLASS:
591 break;
592 case X86_64_INTEGER_CLASS:
593 memcpy (valbuf + offset,
594 regbuf + REGISTER_BYTE (ret_int_r[(intreg + 1) / 2]),
595 8);
596 offset += 8;
597 intreg += 2;
598 break;
599 case X86_64_INTEGERSI_CLASS:
600 memcpy (valbuf + offset,
601 regbuf + REGISTER_BYTE (ret_int_r[intreg / 2]), 4);
602 offset += 8;
603 intreg++;
604 break;
605 case X86_64_SSEDF_CLASS:
606 case X86_64_SSESF_CLASS:
607 case X86_64_SSE_CLASS:
608 memcpy (valbuf + offset,
609 regbuf + REGISTER_BYTE (ret_sse_r[(ssereg + 1) / 2]),
610 8);
611 offset += 8;
612 ssereg += 2;
613 break;
614 case X86_64_SSEUP_CLASS:
615 memcpy (valbuf + offset + 8,
616 regbuf + REGISTER_BYTE (ret_sse_r[ssereg / 2]), 8);
617 offset += 8;
618 ssereg++;
619 break;
620 case X86_64_X87_CLASS:
621 memcpy (valbuf + offset, regbuf + REGISTER_BYTE (FP0_REGNUM),
622 8);
623 offset += 8;
624 break;
625 case X86_64_X87UP_CLASS:
626 memcpy (valbuf + offset,
627 regbuf + REGISTER_BYTE (FP0_REGNUM) + 8, 8);
628 offset += 8;
629 break;
630 case X86_64_MEMORY_CLASS:
631 default:
632 internal_error (__FILE__, __LINE__,
633 "Unexpected argument class");
634 }
635 }
636 }
637 }
638
639 /* Handled by unwind informations. */
640 static void
641 x86_64_frame_init_saved_regs (struct frame_info *fi)
642 {
643 }
644
645 #define INT_REGS 6
646 #define SSE_REGS 16
647
648 CORE_ADDR
649 x86_64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
650 int struct_return, CORE_ADDR struct_addr)
651 {
652 int intreg = 0;
653 int ssereg = 0;
654 int i;
655 static int int_parameter_registers[INT_REGS] = {
656 5 /* RDI */ , 4 /* RSI */ ,
657 3 /* RDX */ , 2 /* RCX */ ,
658 8 /* R8 */ , 9 /* R9 */
659 };
660 /* XMM0 - XMM15 */
661 static int sse_parameter_registers[SSE_REGS] = {
662 XMM1_REGNUM - 1, XMM1_REGNUM, XMM1_REGNUM + 1, XMM1_REGNUM + 2,
663 XMM1_REGNUM + 3, XMM1_REGNUM + 4, XMM1_REGNUM + 5, XMM1_REGNUM + 6,
664 XMM1_REGNUM + 7, XMM1_REGNUM + 8, XMM1_REGNUM + 9, XMM1_REGNUM + 10,
665 XMM1_REGNUM + 11, XMM1_REGNUM + 12, XMM1_REGNUM + 13, XMM1_REGNUM + 14
666 };
667 int stack_values_count = 0;
668 int *stack_values;
669 stack_values = alloca (nargs * sizeof (int));
670 for (i = 0; i < nargs; i++)
671 {
672 enum x86_64_reg_class class[MAX_CLASSES];
673 int n = classify_argument (args[i]->type, class, 0);
674 int needed_intregs;
675 int needed_sseregs;
676
677 if (!n ||
678 !examine_argument (class, n, &needed_intregs, &needed_sseregs)
679 || intreg / 2 + needed_intregs > INT_REGS
680 || ssereg / 2 + needed_sseregs > SSE_REGS)
681 { /* memory class */
682 stack_values[stack_values_count++] = i;
683 }
684 else
685 {
686 int j;
687 for (j = 0; j < n; j++)
688 {
689 int offset = 0;
690 switch (class[j])
691 {
692 case X86_64_NO_CLASS:
693 break;
694 case X86_64_INTEGER_CLASS:
695 write_register_gen (int_parameter_registers
696 [(intreg + 1) / 2],
697 VALUE_CONTENTS_ALL (args[i]) + offset);
698 offset += 8;
699 intreg += 2;
700 break;
701 case X86_64_INTEGERSI_CLASS:
702 write_register_gen (int_parameter_registers[intreg / 2],
703 VALUE_CONTENTS_ALL (args[i]) + offset);
704 offset += 8;
705 intreg++;
706 break;
707 case X86_64_SSEDF_CLASS:
708 case X86_64_SSESF_CLASS:
709 case X86_64_SSE_CLASS:
710 write_register_gen (sse_parameter_registers
711 [(ssereg + 1) / 2],
712 VALUE_CONTENTS_ALL (args[i]) + offset);
713 offset += 8;
714 ssereg += 2;
715 break;
716 case X86_64_SSEUP_CLASS:
717 write_register_gen (sse_parameter_registers[ssereg / 2],
718 VALUE_CONTENTS_ALL (args[i]) + offset);
719 offset += 8;
720 ssereg++;
721 break;
722 case X86_64_X87_CLASS:
723 case X86_64_MEMORY_CLASS:
724 stack_values[stack_values_count++] = i;
725 break;
726 case X86_64_X87UP_CLASS:
727 break;
728 default:
729 internal_error (__FILE__, __LINE__,
730 "Unexpected argument class");
731 }
732 intreg += intreg % 2;
733 ssereg += ssereg % 2;
734 }
735 }
736 }
737 while (--stack_values_count >= 0)
738 {
739 struct value *arg = args[stack_values[stack_values_count]];
740 int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg));
741 len += 7;
742 len -= len % 8;
743 sp -= len;
744 write_memory (sp, VALUE_CONTENTS_ALL (arg), len);
745 }
746 return sp;
747 }
748
749 /* Write into the appropriate registers a function return value stored
750 in VALBUF of type TYPE, given in virtual format. */
751 void
752 x86_64_store_return_value (struct type *type, char *valbuf)
753 {
754 int len = TYPE_LENGTH (type);
755
756 if (TYPE_CODE_FLT == TYPE_CODE (type))
757 {
758 /* Floating-point return values can be found in %st(0). */
759 if (len == TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT
760 && TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext)
761 {
762 /* Copy straight over. */
763 write_register_bytes (REGISTER_BYTE (FP0_REGNUM), valbuf,
764 FPU_REG_RAW_SIZE);
765 }
766 else
767 {
768 char buf[FPU_REG_RAW_SIZE];
769 DOUBLEST val;
770
771 /* Convert the value found in VALBUF to the extended
772 floating point format used by the FPU. This is probably
773 not exactly how it would happen on the target itself, but
774 it is the best we can do. */
775 val = extract_floating (valbuf, TYPE_LENGTH (type));
776 floatformat_from_doublest (&floatformat_i387_ext, &val, buf);
777 write_register_bytes (REGISTER_BYTE (FP0_REGNUM), buf,
778 FPU_REG_RAW_SIZE);
779 }
780 }
781 else
782 {
783 int low_size = REGISTER_RAW_SIZE (0);
784 int high_size = REGISTER_RAW_SIZE (1);
785
786 if (len <= low_size)
787 write_register_bytes (REGISTER_BYTE (0), valbuf, len);
788 else if (len <= (low_size + high_size))
789 {
790 write_register_bytes (REGISTER_BYTE (0), valbuf, low_size);
791 write_register_bytes (REGISTER_BYTE (1),
792 valbuf + low_size, len - low_size);
793 }
794 else
795 internal_error (__FILE__, __LINE__,
796 "Cannot store return value of %d bytes long.", len);
797 }
798 }
799 \f
800
801 const char *
802 x86_64_register_name (int reg_nr)
803 {
804 if (reg_nr < 0 || reg_nr >= X86_64_NUM_REGS)
805 return NULL;
806 return x86_64_register_info_table[reg_nr].name;
807 }
808
809 int
810 x86_64_register_number (const char *name)
811 {
812 int reg_nr;
813
814 for (reg_nr = 0; reg_nr < X86_64_NUM_REGS; reg_nr++)
815 if (strcmp (name, x86_64_register_info_table[reg_nr].name) == 0)
816 return reg_nr;
817 return -1;
818 }
819 \f
820
821
822 /* We have two flavours of disassembly. The machinery on this page
823 deals with switching between those. */
824
825 static int
826 gdb_print_insn_x86_64 (bfd_vma memaddr, disassemble_info * info)
827 {
828 if (disassembly_flavour == att_flavour)
829 return print_insn_i386_att (memaddr, info);
830 else if (disassembly_flavour == intel_flavour)
831 return print_insn_i386_intel (memaddr, info);
832 /* Never reached -- disassembly_flavour is always either att_flavour
833 or intel_flavour. */
834 internal_error (__FILE__, __LINE__, "failed internal consistency check");
835 }
836 \f
837
838 /* Store the address of the place in which to copy the structure the
839 subroutine will return. This is called from call_function. */
840 void
841 x86_64_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
842 {
843 write_register (RDI_REGNUM, addr);
844 }
845
846 int
847 x86_64_frameless_function_invocation (struct frame_info *frame)
848 {
849 return 0;
850 }
851
852 /* If a function with debugging information and known beginning
853 is detected, we will return pc of the next line in the source
854 code. With this approach we effectively skip the prolog. */
855
856 #define PROLOG_BUFSIZE 4
857 CORE_ADDR
858 x86_64_skip_prologue (CORE_ADDR pc)
859 {
860 int i;
861 struct symtab_and_line v_sal;
862 struct symbol *v_function;
863 CORE_ADDR endaddr;
864
865 /* We will handle only functions beginning with:
866 55 pushq %rbp
867 48 89 e5 movq %rsp,%rbp
868 */
869 unsigned char prolog_expect[PROLOG_BUFSIZE] = { 0x55, 0x48, 0x89, 0xe5 },
870 prolog_buf[PROLOG_BUFSIZE];
871
872 read_memory (pc, (char *) prolog_buf, PROLOG_BUFSIZE);
873
874 /* First check, whether pc points to pushq %rbp, movq %rsp,%rbp. */
875 for (i = 0; i < PROLOG_BUFSIZE; i++)
876 if (prolog_expect[i] != prolog_buf[i])
877 return pc; /* ... no, it doesn't. Nothing to skip. */
878
879 /* OK, we have found the prologue and want PC of the first
880 non-prologue instruction. */
881 pc += PROLOG_BUFSIZE;
882
883 v_function = find_pc_function (pc);
884 v_sal = find_pc_line (pc, 0);
885
886 /* If pc doesn't point to a function with debuginfo,
887 some of the following may be NULL. */
888 if (!v_function || !v_function->ginfo.value.block || !v_sal.symtab)
889 return pc;
890
891 endaddr = v_function->ginfo.value.block->endaddr;
892
893 for (i = 0; i < v_sal.symtab->linetable->nitems; i++)
894 if (v_sal.symtab->linetable->item[i].pc >= pc
895 && v_sal.symtab->linetable->item[i].pc < endaddr)
896 {
897 pc = v_sal.symtab->linetable->item[i].pc;
898 break;
899 }
900
901 return pc;
902 }
903
904 /* Sequence of bytes for breakpoint instruction. */
905 static unsigned char *
906 x86_64_breakpoint_from_pc (CORE_ADDR * pc, int *lenptr)
907 {
908 static unsigned char breakpoint[] = { 0xcc };
909 *lenptr = 1;
910 return breakpoint;
911 }
912
913 static struct gdbarch *
914 x86_64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
915 {
916 struct gdbarch *gdbarch;
917 struct gdbarch_tdep *tdep;
918 int i, sum;
919
920 /* Find a candidate among the list of pre-declared architectures. */
921 for (arches = gdbarch_list_lookup_by_info (arches, &info);
922 arches != NULL;
923 arches = gdbarch_list_lookup_by_info (arches->next, &info))
924 {
925 switch (info.bfd_arch_info->mach)
926 {
927 case bfd_mach_x86_64:
928 case bfd_mach_x86_64_intel_syntax:
929 switch (gdbarch_bfd_arch_info (arches->gdbarch)->mach)
930 {
931 case bfd_mach_x86_64:
932 case bfd_mach_x86_64_intel_syntax:
933 return arches->gdbarch;
934 case bfd_mach_i386_i386:
935 case bfd_mach_i386_i8086:
936 case bfd_mach_i386_i386_intel_syntax:
937 break;
938 default:
939 internal_error (__FILE__, __LINE__,
940 "x86_64_gdbarch_init: unknown machine type");
941 }
942 break;
943 case bfd_mach_i386_i386:
944 case bfd_mach_i386_i8086:
945 case bfd_mach_i386_i386_intel_syntax:
946 switch (gdbarch_bfd_arch_info (arches->gdbarch)->mach)
947 {
948 case bfd_mach_x86_64:
949 case bfd_mach_x86_64_intel_syntax:
950 break;
951 case bfd_mach_i386_i386:
952 case bfd_mach_i386_i8086:
953 case bfd_mach_i386_i386_intel_syntax:
954 return arches->gdbarch;
955 default:
956 internal_error (__FILE__, __LINE__,
957 "x86_64_gdbarch_init: unknown machine type");
958 }
959 break;
960 default:
961 internal_error (__FILE__, __LINE__,
962 "x86_64_gdbarch_init: unknown machine type");
963 }
964 }
965
966 tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
967 gdbarch = gdbarch_alloc (&info, tdep);
968
969 switch (info.bfd_arch_info->mach)
970 {
971 case bfd_mach_x86_64:
972 case bfd_mach_x86_64_intel_syntax:
973 tdep->num_xmm_regs = 16;
974 break;
975 case bfd_mach_i386_i386:
976 case bfd_mach_i386_i8086:
977 case bfd_mach_i386_i386_intel_syntax:
978 /* This is place for definition of i386 target vector. */
979 break;
980 default:
981 internal_error (__FILE__, __LINE__,
982 "x86_64_gdbarch_init: unknown machine type");
983 }
984
985 set_gdbarch_long_bit (gdbarch, 64);
986 set_gdbarch_long_long_bit (gdbarch, 64);
987 set_gdbarch_ptr_bit (gdbarch, 64);
988
989 set_gdbarch_long_double_format (gdbarch, &floatformat_i387_ext);
990
991 set_gdbarch_num_regs (gdbarch, X86_64_NUM_REGS);
992 set_gdbarch_register_name (gdbarch, x86_64_register_name);
993 set_gdbarch_register_size (gdbarch, 8);
994 set_gdbarch_register_raw_size (gdbarch, x86_64_register_raw_size);
995 set_gdbarch_max_register_raw_size (gdbarch, 16);
996 set_gdbarch_register_byte (gdbarch, x86_64_register_byte);
997
998 /* Total amount of space needed to store our copies of the machine's register
999 (SIZEOF_GREGS + SIZEOF_FPU_REGS + SIZEOF_FPU_CTRL_REGS + SIZEOF_SSE_REGS) */
1000 for (i = 0, sum = 0; i < X86_64_NUM_REGS; i++)
1001 sum += x86_64_register_info_table[i].size;
1002 set_gdbarch_register_bytes (gdbarch, sum);
1003 set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
1004 set_gdbarch_max_register_virtual_size (gdbarch, 16);
1005
1006 set_gdbarch_register_virtual_type (gdbarch, x86_64_register_virtual_type);
1007
1008 set_gdbarch_register_convertible (gdbarch, x86_64_register_convertible);
1009 set_gdbarch_register_convert_to_virtual (gdbarch,
1010 x86_64_register_convert_to_virtual);
1011 set_gdbarch_register_convert_to_raw (gdbarch,
1012 x86_64_register_convert_to_raw);
1013
1014 /* Register numbers of various important registers. */
1015 set_gdbarch_sp_regnum (gdbarch, 7); /* (rsp) Contains address of top of stack. */
1016 set_gdbarch_fp_regnum (gdbarch, 6); /* (rbp) */
1017 set_gdbarch_pc_regnum (gdbarch, 16); /* (rip) Contains program counter. */
1018
1019 set_gdbarch_fp0_regnum (gdbarch, X86_64_NUM_GREGS); /* First FPU floating-point register. */
1020
1021 set_gdbarch_read_fp (gdbarch, cfi_read_fp);
1022
1023 /* Discard from the stack the innermost frame, restoring all registers. */
1024 set_gdbarch_pop_frame (gdbarch, x86_64_pop_frame);
1025
1026 /* FRAME_CHAIN takes a frame's nominal address and produces the frame's
1027 chain-pointer. */
1028 set_gdbarch_frame_chain (gdbarch, cfi_frame_chain);
1029
1030 set_gdbarch_frameless_function_invocation (gdbarch,
1031 x86_64_frameless_function_invocation);
1032 set_gdbarch_frame_saved_pc (gdbarch, x86_64_linux_frame_saved_pc);
1033
1034 set_gdbarch_frame_args_address (gdbarch, default_frame_address);
1035 set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
1036
1037 /* Return number of bytes at start of arglist that are not really args. */
1038 set_gdbarch_frame_args_skip (gdbarch, 8);
1039
1040 set_gdbarch_frame_init_saved_regs (gdbarch, x86_64_frame_init_saved_regs);
1041
1042 /* Frame pc initialization is handled by unwind informations. */
1043 set_gdbarch_init_frame_pc (gdbarch, cfi_init_frame_pc);
1044
1045 /* Initialization of unwind informations. */
1046 set_gdbarch_init_extra_frame_info (gdbarch, cfi_init_extra_frame_info);
1047
1048 /* Getting saved registers is handled by unwind informations. */
1049 set_gdbarch_get_saved_register (gdbarch, cfi_get_saved_register);
1050
1051 set_gdbarch_frame_init_saved_regs (gdbarch, x86_64_frame_init_saved_regs);
1052
1053 /* Cons up virtual frame pointer for trace */
1054 set_gdbarch_virtual_frame_pointer (gdbarch, cfi_virtual_frame_pointer);
1055
1056
1057 set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
1058
1059 set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
1060 set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
1061 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
1062 set_gdbarch_call_dummy_length (gdbarch, 0);
1063 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
1064 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
1065 set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
1066 set_gdbarch_call_dummy_words (gdbarch, 0);
1067 set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
1068 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
1069 set_gdbarch_call_dummy_p (gdbarch, 1);
1070 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
1071 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
1072 set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
1073 set_gdbarch_push_return_address (gdbarch, x86_64_push_return_address);
1074 set_gdbarch_push_arguments (gdbarch, x86_64_push_arguments);
1075
1076 /* Return number of args passed to a frame, no way to tell. */
1077 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1078 /* Don't use default structure extract routine */
1079 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, 0);
1080
1081 /* If USE_STRUCT_CONVENTION retruns 0, then gdb uses STORE_RETURN_VALUE
1082 and EXTRACT_RETURN_VALUE to store/fetch the functions return value. It is
1083 the case when structure is returned in registers. */
1084 set_gdbarch_use_struct_convention (gdbarch, x86_64_use_struct_convention);
1085
1086 /* Store the address of the place in which to copy the structure the
1087 subroutine will return. This is called from call_function. */
1088 set_gdbarch_store_struct_return (gdbarch, x86_64_store_struct_return);
1089
1090 /* Extract from an array REGBUF containing the (raw) register state
1091 a function return value of type TYPE, and copy that, in virtual format,
1092 into VALBUF. */
1093 set_gdbarch_deprecated_extract_return_value (gdbarch, x86_64_extract_return_value);
1094
1095
1096 /* Write into the appropriate registers a function return value stored
1097 in VALBUF of type TYPE, given in virtual format. */
1098 set_gdbarch_store_return_value (gdbarch, x86_64_store_return_value);
1099 \f
1100
1101 /* Offset from address of function to start of its code. */
1102 set_gdbarch_function_start_offset (gdbarch, 0);
1103
1104 set_gdbarch_skip_prologue (gdbarch, x86_64_skip_prologue);
1105
1106 set_gdbarch_saved_pc_after_call (gdbarch, x86_64_linux_saved_pc_after_call);
1107
1108 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1109
1110 set_gdbarch_breakpoint_from_pc (gdbarch,
1111 (gdbarch_breakpoint_from_pc_ftype *)
1112 x86_64_breakpoint_from_pc);
1113
1114
1115 /* Amount PC must be decremented by after a breakpoint. This is often the
1116 number of bytes in BREAKPOINT but not always. */
1117 set_gdbarch_decr_pc_after_break (gdbarch, 1);
1118
1119 /* Use dwarf2 debug frame informations. */
1120 set_gdbarch_dwarf2_build_frame_info (gdbarch, dwarf2_build_frame_info);
1121 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, x86_64_dwarf2_reg_to_regnum);
1122
1123 return gdbarch;
1124 }
1125
1126 void
1127 _initialize_x86_64_tdep (void)
1128 {
1129 register_gdbarch_init (bfd_arch_i386, x86_64_gdbarch_init);
1130
1131 /* Initialize the table saying where each register starts in the
1132 register file. */
1133 {
1134 int i, offset;
1135
1136 offset = 0;
1137 for (i = 0; i < X86_64_NUM_REGS; i++)
1138 {
1139 x86_64_register_byte_table[i] = offset;
1140 offset += x86_64_register_info_table[i].size;
1141 }
1142 }
1143
1144 tm_print_insn = gdb_print_insn_x86_64;
1145 tm_print_insn_info.mach = bfd_lookup_arch (bfd_arch_i386, 3)->mach;
1146
1147 /* Add the variable that controls the disassembly flavour. */
1148 {
1149 struct cmd_list_element *new_cmd;
1150
1151 new_cmd = add_set_enum_cmd ("disassembly-flavour", no_class,
1152 valid_flavours, &disassembly_flavour, "\
1153 Set the disassembly flavour, the valid values are \"att\" and \"intel\", \
1154 and the default value is \"att\".", &setlist);
1155 add_show_from_set (new_cmd, &showlist);
1156 }
1157 }
This page took 0.054798 seconds and 4 git commands to generate.