gdb/
[external/binutils.git] / gdb / amd64-tdep.c
1 /* Target-dependent code for AMD64.
2
3    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4    2011 Free Software Foundation, Inc.
5
6    Contributed by Jiri Smid, SuSE Labs.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "opcode/i386.h"
25 #include "dis-asm.h"
26 #include "arch-utils.h"
27 #include "block.h"
28 #include "dummy-frame.h"
29 #include "frame.h"
30 #include "frame-base.h"
31 #include "frame-unwind.h"
32 #include "inferior.h"
33 #include "gdbcmd.h"
34 #include "gdbcore.h"
35 #include "objfiles.h"
36 #include "regcache.h"
37 #include "regset.h"
38 #include "symfile.h"
39 #include "disasm.h"
40 #include "gdb_assert.h"
41
42 #include "amd64-tdep.h"
43 #include "i387-tdep.h"
44
45 #include "features/i386/amd64.c"
46 #include "features/i386/amd64-avx.c"
47
48 /* Note that the AMD64 architecture was previously known as x86-64.
49    The latter is (forever) engraved into the canonical system name as
50    returned by config.guess, and used as the name for the AMD64 port
51    of GNU/Linux.  The BSD's have renamed their ports to amd64; they
52    don't like to shout.  For GDB we prefer the amd64_-prefix over the
53    x86_64_-prefix since it's so much easier to type.  */
54
55 /* Register information.  */
56
57 static const char *amd64_register_names[] = 
58 {
59   "rax", "rbx", "rcx", "rdx", "rsi", "rdi", "rbp", "rsp",
60
61   /* %r8 is indeed register number 8.  */
62   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
63   "rip", "eflags", "cs", "ss", "ds", "es", "fs", "gs",
64
65   /* %st0 is register number 24.  */
66   "st0", "st1", "st2", "st3", "st4", "st5", "st6", "st7",
67   "fctrl", "fstat", "ftag", "fiseg", "fioff", "foseg", "fooff", "fop",
68
69   /* %xmm0 is register number 40.  */
70   "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
71   "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15",
72   "mxcsr",
73 };
74
75 static const char *amd64_ymm_names[] = 
76 {
77   "ymm0", "ymm1", "ymm2", "ymm3",
78   "ymm4", "ymm5", "ymm6", "ymm7",
79   "ymm8", "ymm9", "ymm10", "ymm11",
80   "ymm12", "ymm13", "ymm14", "ymm15"
81 };
82
83 static const char *amd64_ymmh_names[] = 
84 {
85   "ymm0h", "ymm1h", "ymm2h", "ymm3h",
86   "ymm4h", "ymm5h", "ymm6h", "ymm7h",
87   "ymm8h", "ymm9h", "ymm10h", "ymm11h",
88   "ymm12h", "ymm13h", "ymm14h", "ymm15h"
89 };
90
91 /* The registers used to pass integer arguments during a function call.  */
92 static int amd64_dummy_call_integer_regs[] =
93 {
94   AMD64_RDI_REGNUM,             /* %rdi */
95   AMD64_RSI_REGNUM,             /* %rsi */
96   AMD64_RDX_REGNUM,             /* %rdx */
97   AMD64_RCX_REGNUM,             /* %rcx */
98   8,                            /* %r8 */
99   9                             /* %r9 */
100 };
101
102 /* DWARF Register Number Mapping as defined in the System V psABI,
103    section 3.6.  */
104
105 static int amd64_dwarf_regmap[] =
106 {
107   /* General Purpose Registers RAX, RDX, RCX, RBX, RSI, RDI.  */
108   AMD64_RAX_REGNUM, AMD64_RDX_REGNUM,
109   AMD64_RCX_REGNUM, AMD64_RBX_REGNUM,
110   AMD64_RSI_REGNUM, AMD64_RDI_REGNUM,
111
112   /* Frame Pointer Register RBP.  */
113   AMD64_RBP_REGNUM,
114
115   /* Stack Pointer Register RSP.  */
116   AMD64_RSP_REGNUM,
117
118   /* Extended Integer Registers 8 - 15.  */
119   8, 9, 10, 11, 12, 13, 14, 15,
120
121   /* Return Address RA.  Mapped to RIP.  */
122   AMD64_RIP_REGNUM,
123
124   /* SSE Registers 0 - 7.  */
125   AMD64_XMM0_REGNUM + 0, AMD64_XMM1_REGNUM,
126   AMD64_XMM0_REGNUM + 2, AMD64_XMM0_REGNUM + 3,
127   AMD64_XMM0_REGNUM + 4, AMD64_XMM0_REGNUM + 5,
128   AMD64_XMM0_REGNUM + 6, AMD64_XMM0_REGNUM + 7,
129
130   /* Extended SSE Registers 8 - 15.  */
131   AMD64_XMM0_REGNUM + 8, AMD64_XMM0_REGNUM + 9,
132   AMD64_XMM0_REGNUM + 10, AMD64_XMM0_REGNUM + 11,
133   AMD64_XMM0_REGNUM + 12, AMD64_XMM0_REGNUM + 13,
134   AMD64_XMM0_REGNUM + 14, AMD64_XMM0_REGNUM + 15,
135
136   /* Floating Point Registers 0-7.  */
137   AMD64_ST0_REGNUM + 0, AMD64_ST0_REGNUM + 1,
138   AMD64_ST0_REGNUM + 2, AMD64_ST0_REGNUM + 3,
139   AMD64_ST0_REGNUM + 4, AMD64_ST0_REGNUM + 5,
140   AMD64_ST0_REGNUM + 6, AMD64_ST0_REGNUM + 7,
141   
142   /* Control and Status Flags Register.  */
143   AMD64_EFLAGS_REGNUM,
144
145   /* Selector Registers.  */
146   AMD64_ES_REGNUM,
147   AMD64_CS_REGNUM,
148   AMD64_SS_REGNUM,
149   AMD64_DS_REGNUM,
150   AMD64_FS_REGNUM,
151   AMD64_GS_REGNUM,
152   -1,
153   -1,
154
155   /* Segment Base Address Registers.  */
156   -1,
157   -1,
158   -1,
159   -1,
160
161   /* Special Selector Registers.  */
162   -1,
163   -1,
164
165   /* Floating Point Control Registers.  */
166   AMD64_MXCSR_REGNUM,
167   AMD64_FCTRL_REGNUM,
168   AMD64_FSTAT_REGNUM
169 };
170
171 static const int amd64_dwarf_regmap_len =
172   (sizeof (amd64_dwarf_regmap) / sizeof (amd64_dwarf_regmap[0]));
173
174 /* Convert DWARF register number REG to the appropriate register
175    number used by GDB.  */
176
177 static int
178 amd64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
179 {
180   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
181   int ymm0_regnum = tdep->ymm0_regnum;
182   int regnum = -1;
183
184   if (reg >= 0 && reg < amd64_dwarf_regmap_len)
185     regnum = amd64_dwarf_regmap[reg];
186
187   if (regnum == -1)
188     warning (_("Unmapped DWARF Register #%d encountered."), reg);
189   else if (ymm0_regnum >= 0
190            && i386_xmm_regnum_p (gdbarch, regnum))
191     regnum += ymm0_regnum - I387_XMM0_REGNUM (tdep);
192
193   return regnum;
194 }
195
196 /* Map architectural register numbers to gdb register numbers.  */
197
198 static const int amd64_arch_regmap[16] =
199 {
200   AMD64_RAX_REGNUM,     /* %rax */
201   AMD64_RCX_REGNUM,     /* %rcx */
202   AMD64_RDX_REGNUM,     /* %rdx */
203   AMD64_RBX_REGNUM,     /* %rbx */
204   AMD64_RSP_REGNUM,     /* %rsp */
205   AMD64_RBP_REGNUM,     /* %rbp */
206   AMD64_RSI_REGNUM,     /* %rsi */
207   AMD64_RDI_REGNUM,     /* %rdi */
208   AMD64_R8_REGNUM,      /* %r8 */
209   AMD64_R9_REGNUM,      /* %r9 */
210   AMD64_R10_REGNUM,     /* %r10 */
211   AMD64_R11_REGNUM,     /* %r11 */
212   AMD64_R12_REGNUM,     /* %r12 */
213   AMD64_R13_REGNUM,     /* %r13 */
214   AMD64_R14_REGNUM,     /* %r14 */
215   AMD64_R15_REGNUM      /* %r15 */
216 };
217
218 static const int amd64_arch_regmap_len =
219   (sizeof (amd64_arch_regmap) / sizeof (amd64_arch_regmap[0]));
220
221 /* Convert architectural register number REG to the appropriate register
222    number used by GDB.  */
223
224 static int
225 amd64_arch_reg_to_regnum (int reg)
226 {
227   gdb_assert (reg >= 0 && reg < amd64_arch_regmap_len);
228
229   return amd64_arch_regmap[reg];
230 }
231
232 /* Register names for byte pseudo-registers.  */
233
234 static const char *amd64_byte_names[] =
235 {
236   "al", "bl", "cl", "dl", "sil", "dil", "bpl", "spl",
237   "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l",
238   "ah", "bh", "ch", "dh"
239 };
240
241 /* Number of lower byte registers.  */
242 #define AMD64_NUM_LOWER_BYTE_REGS 16
243
244 /* Register names for word pseudo-registers.  */
245
246 static const char *amd64_word_names[] =
247 {
248   "ax", "bx", "cx", "dx", "si", "di", "bp", "", 
249   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
250 };
251
252 /* Register names for dword pseudo-registers.  */
253
254 static const char *amd64_dword_names[] =
255 {
256   "eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp", 
257   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
258 };
259
260 /* Return the name of register REGNUM.  */
261
262 static const char *
263 amd64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
264 {
265   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
266   if (i386_byte_regnum_p (gdbarch, regnum))
267     return amd64_byte_names[regnum - tdep->al_regnum];
268   else if (i386_ymm_regnum_p (gdbarch, regnum))
269     return amd64_ymm_names[regnum - tdep->ymm0_regnum];
270   else if (i386_word_regnum_p (gdbarch, regnum))
271     return amd64_word_names[regnum - tdep->ax_regnum];
272   else if (i386_dword_regnum_p (gdbarch, regnum))
273     return amd64_dword_names[regnum - tdep->eax_regnum];
274   else
275     return i386_pseudo_register_name (gdbarch, regnum);
276 }
277
278 static enum register_status
279 amd64_pseudo_register_read (struct gdbarch *gdbarch,
280                             struct regcache *regcache,
281                             int regnum, gdb_byte *buf)
282 {
283   gdb_byte raw_buf[MAX_REGISTER_SIZE];
284   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
285   enum register_status status;
286
287   if (i386_byte_regnum_p (gdbarch, regnum))
288     {
289       int gpnum = regnum - tdep->al_regnum;
290
291       /* Extract (always little endian).  */
292       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
293         {
294           /* Special handling for AH, BH, CH, DH.  */
295           status = regcache_raw_read (regcache,
296                                       gpnum - AMD64_NUM_LOWER_BYTE_REGS,
297                                       raw_buf);
298           if (status == REG_VALID)
299             memcpy (buf, raw_buf + 1, 1);
300         }
301       else
302         {
303           status = regcache_raw_read (regcache, gpnum, raw_buf);
304           if (status == REG_VALID)
305             memcpy (buf, raw_buf, 1);
306         }
307
308       return status;
309     }
310   else if (i386_dword_regnum_p (gdbarch, regnum))
311     {
312       int gpnum = regnum - tdep->eax_regnum;
313       /* Extract (always little endian).  */
314       status = regcache_raw_read (regcache, gpnum, raw_buf);
315       if (status == REG_VALID)
316         memcpy (buf, raw_buf, 4);
317
318       return status;
319     }
320   else
321     return i386_pseudo_register_read (gdbarch, regcache, regnum, buf);
322 }
323
324 static void
325 amd64_pseudo_register_write (struct gdbarch *gdbarch,
326                              struct regcache *regcache,
327                              int regnum, const gdb_byte *buf)
328 {
329   gdb_byte raw_buf[MAX_REGISTER_SIZE];
330   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
331
332   if (i386_byte_regnum_p (gdbarch, regnum))
333     {
334       int gpnum = regnum - tdep->al_regnum;
335
336       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
337         {
338           /* Read ... AH, BH, CH, DH.  */
339           regcache_raw_read (regcache,
340                              gpnum - AMD64_NUM_LOWER_BYTE_REGS, raw_buf);
341           /* ... Modify ... (always little endian).  */
342           memcpy (raw_buf + 1, buf, 1);
343           /* ... Write.  */
344           regcache_raw_write (regcache,
345                               gpnum - AMD64_NUM_LOWER_BYTE_REGS, raw_buf);
346         }
347       else
348         {
349           /* Read ...  */
350           regcache_raw_read (regcache, gpnum, raw_buf);
351           /* ... Modify ... (always little endian).  */
352           memcpy (raw_buf, buf, 1);
353           /* ... Write.  */
354           regcache_raw_write (regcache, gpnum, raw_buf);
355         }
356     }
357   else if (i386_dword_regnum_p (gdbarch, regnum))
358     {
359       int gpnum = regnum - tdep->eax_regnum;
360
361       /* Read ...  */
362       regcache_raw_read (regcache, gpnum, raw_buf);
363       /* ... Modify ... (always little endian).  */
364       memcpy (raw_buf, buf, 4);
365       /* ... Write.  */
366       regcache_raw_write (regcache, gpnum, raw_buf);
367     }
368   else
369     i386_pseudo_register_write (gdbarch, regcache, regnum, buf);
370 }
371
372 \f
373
374 /* Return the union class of CLASS1 and CLASS2.  See the psABI for
375    details.  */
376
377 static enum amd64_reg_class
378 amd64_merge_classes (enum amd64_reg_class class1, enum amd64_reg_class class2)
379 {
380   /* Rule (a): If both classes are equal, this is the resulting class.  */
381   if (class1 == class2)
382     return class1;
383
384   /* Rule (b): If one of the classes is NO_CLASS, the resulting class
385      is the other class.  */
386   if (class1 == AMD64_NO_CLASS)
387     return class2;
388   if (class2 == AMD64_NO_CLASS)
389     return class1;
390
391   /* Rule (c): If one of the classes is MEMORY, the result is MEMORY.  */
392   if (class1 == AMD64_MEMORY || class2 == AMD64_MEMORY)
393     return AMD64_MEMORY;
394
395   /* Rule (d): If one of the classes is INTEGER, the result is INTEGER.  */
396   if (class1 == AMD64_INTEGER || class2 == AMD64_INTEGER)
397     return AMD64_INTEGER;
398
399   /* Rule (e): If one of the classes is X87, X87UP, COMPLEX_X87 class,
400      MEMORY is used as class.  */
401   if (class1 == AMD64_X87 || class1 == AMD64_X87UP
402       || class1 == AMD64_COMPLEX_X87 || class2 == AMD64_X87
403       || class2 == AMD64_X87UP || class2 == AMD64_COMPLEX_X87)
404     return AMD64_MEMORY;
405
406   /* Rule (f): Otherwise class SSE is used.  */
407   return AMD64_SSE;
408 }
409
410 /* Return non-zero if TYPE is a non-POD structure or union type.  */
411
412 static int
413 amd64_non_pod_p (struct type *type)
414 {
415   /* ??? A class with a base class certainly isn't POD, but does this
416      catch all non-POD structure types?  */
417   if (TYPE_CODE (type) == TYPE_CODE_STRUCT && TYPE_N_BASECLASSES (type) > 0)
418     return 1;
419
420   return 0;
421 }
422
423 /* Classify TYPE according to the rules for aggregate (structures and
424    arrays) and union types, and store the result in CLASS.  */
425
426 static void
427 amd64_classify_aggregate (struct type *type, enum amd64_reg_class class[2])
428 {
429   int len = TYPE_LENGTH (type);
430
431   /* 1. If the size of an object is larger than two eightbytes, or in
432         C++, is a non-POD structure or union type, or contains
433         unaligned fields, it has class memory.  */
434   if (len > 16 || amd64_non_pod_p (type))
435     {
436       class[0] = class[1] = AMD64_MEMORY;
437       return;
438     }
439
440   /* 2. Both eightbytes get initialized to class NO_CLASS.  */
441   class[0] = class[1] = AMD64_NO_CLASS;
442
443   /* 3. Each field of an object is classified recursively so that
444         always two fields are considered. The resulting class is
445         calculated according to the classes of the fields in the
446         eightbyte: */
447
448   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
449     {
450       struct type *subtype = check_typedef (TYPE_TARGET_TYPE (type));
451
452       /* All fields in an array have the same type.  */
453       amd64_classify (subtype, class);
454       if (len > 8 && class[1] == AMD64_NO_CLASS)
455         class[1] = class[0];
456     }
457   else
458     {
459       int i;
460
461       /* Structure or union.  */
462       gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
463                   || TYPE_CODE (type) == TYPE_CODE_UNION);
464
465       for (i = 0; i < TYPE_NFIELDS (type); i++)
466         {
467           struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
468           int pos = TYPE_FIELD_BITPOS (type, i) / 64;
469           enum amd64_reg_class subclass[2];
470           int bitsize = TYPE_FIELD_BITSIZE (type, i);
471           int endpos;
472
473           if (bitsize == 0)
474             bitsize = TYPE_LENGTH (subtype) * 8;
475           endpos = (TYPE_FIELD_BITPOS (type, i) + bitsize - 1) / 64;
476
477           /* Ignore static fields.  */
478           if (field_is_static (&TYPE_FIELD (type, i)))
479             continue;
480
481           gdb_assert (pos == 0 || pos == 1);
482
483           amd64_classify (subtype, subclass);
484           class[pos] = amd64_merge_classes (class[pos], subclass[0]);
485           if (bitsize <= 64 && pos == 0 && endpos == 1)
486             /* This is a bit of an odd case:  We have a field that would
487                normally fit in one of the two eightbytes, except that
488                it is placed in a way that this field straddles them.
489                This has been seen with a structure containing an array.
490
491                The ABI is a bit unclear in this case, but we assume that
492                this field's class (stored in subclass[0]) must also be merged
493                into class[1].  In other words, our field has a piece stored
494                in the second eight-byte, and thus its class applies to
495                the second eight-byte as well.
496
497                In the case where the field length exceeds 8 bytes,
498                it should not be necessary to merge the field class
499                into class[1].  As LEN > 8, subclass[1] is necessarily
500                different from AMD64_NO_CLASS.  If subclass[1] is equal
501                to subclass[0], then the normal class[1]/subclass[1]
502                merging will take care of everything.  For subclass[1]
503                to be different from subclass[0], I can only see the case
504                where we have a SSE/SSEUP or X87/X87UP pair, which both
505                use up all 16 bytes of the aggregate, and are already
506                handled just fine (because each portion sits on its own
507                8-byte).  */
508             class[1] = amd64_merge_classes (class[1], subclass[0]);
509           if (pos == 0)
510             class[1] = amd64_merge_classes (class[1], subclass[1]);
511         }
512     }
513
514   /* 4. Then a post merger cleanup is done:  */
515
516   /* Rule (a): If one of the classes is MEMORY, the whole argument is
517      passed in memory.  */
518   if (class[0] == AMD64_MEMORY || class[1] == AMD64_MEMORY)
519     class[0] = class[1] = AMD64_MEMORY;
520
521   /* Rule (b): If SSEUP is not preceeded by SSE, it is converted to
522      SSE.  */
523   if (class[0] == AMD64_SSEUP)
524     class[0] = AMD64_SSE;
525   if (class[1] == AMD64_SSEUP && class[0] != AMD64_SSE)
526     class[1] = AMD64_SSE;
527 }
528
529 /* Classify TYPE, and store the result in CLASS.  */
530
531 void
532 amd64_classify (struct type *type, enum amd64_reg_class class[2])
533 {
534   enum type_code code = TYPE_CODE (type);
535   int len = TYPE_LENGTH (type);
536
537   class[0] = class[1] = AMD64_NO_CLASS;
538
539   /* Arguments of types (signed and unsigned) _Bool, char, short, int,
540      long, long long, and pointers are in the INTEGER class.  Similarly,
541      range types, used by languages such as Ada, are also in the INTEGER
542      class.  */
543   if ((code == TYPE_CODE_INT || code == TYPE_CODE_ENUM
544        || code == TYPE_CODE_BOOL || code == TYPE_CODE_RANGE
545        || code == TYPE_CODE_CHAR
546        || code == TYPE_CODE_PTR || code == TYPE_CODE_REF)
547       && (len == 1 || len == 2 || len == 4 || len == 8))
548     class[0] = AMD64_INTEGER;
549
550   /* Arguments of types float, double, _Decimal32, _Decimal64 and __m64
551      are in class SSE.  */
552   else if ((code == TYPE_CODE_FLT || code == TYPE_CODE_DECFLOAT)
553            && (len == 4 || len == 8))
554     /* FIXME: __m64 .  */
555     class[0] = AMD64_SSE;
556
557   /* Arguments of types __float128, _Decimal128 and __m128 are split into
558      two halves.  The least significant ones belong to class SSE, the most
559      significant one to class SSEUP.  */
560   else if (code == TYPE_CODE_DECFLOAT && len == 16)
561     /* FIXME: __float128, __m128.  */
562     class[0] = AMD64_SSE, class[1] = AMD64_SSEUP;
563
564   /* The 64-bit mantissa of arguments of type long double belongs to
565      class X87, the 16-bit exponent plus 6 bytes of padding belongs to
566      class X87UP.  */
567   else if (code == TYPE_CODE_FLT && len == 16)
568     /* Class X87 and X87UP.  */
569     class[0] = AMD64_X87, class[1] = AMD64_X87UP;
570
571   /* Aggregates.  */
572   else if (code == TYPE_CODE_ARRAY || code == TYPE_CODE_STRUCT
573            || code == TYPE_CODE_UNION)
574     amd64_classify_aggregate (type, class);
575 }
576
577 static enum return_value_convention
578 amd64_return_value (struct gdbarch *gdbarch, struct type *func_type,
579                     struct type *type, struct regcache *regcache,
580                     gdb_byte *readbuf, const gdb_byte *writebuf)
581 {
582   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
583   enum amd64_reg_class class[2];
584   int len = TYPE_LENGTH (type);
585   static int integer_regnum[] = { AMD64_RAX_REGNUM, AMD64_RDX_REGNUM };
586   static int sse_regnum[] = { AMD64_XMM0_REGNUM, AMD64_XMM1_REGNUM };
587   int integer_reg = 0;
588   int sse_reg = 0;
589   int i;
590
591   gdb_assert (!(readbuf && writebuf));
592   gdb_assert (tdep->classify);
593
594   /* 1. Classify the return type with the classification algorithm.  */
595   tdep->classify (type, class);
596
597   /* 2. If the type has class MEMORY, then the caller provides space
598      for the return value and passes the address of this storage in
599      %rdi as if it were the first argument to the function.  In effect,
600      this address becomes a hidden first argument.
601
602      On return %rax will contain the address that has been passed in
603      by the caller in %rdi.  */
604   if (class[0] == AMD64_MEMORY)
605     {
606       /* As indicated by the comment above, the ABI guarantees that we
607          can always find the return value just after the function has
608          returned.  */
609
610       if (readbuf)
611         {
612           ULONGEST addr;
613
614           regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &addr);
615           read_memory (addr, readbuf, TYPE_LENGTH (type));
616         }
617
618       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
619     }
620
621   gdb_assert (class[1] != AMD64_MEMORY);
622   gdb_assert (len <= 16);
623
624   for (i = 0; len > 0; i++, len -= 8)
625     {
626       int regnum = -1;
627       int offset = 0;
628
629       switch (class[i])
630         {
631         case AMD64_INTEGER:
632           /* 3. If the class is INTEGER, the next available register
633              of the sequence %rax, %rdx is used.  */
634           regnum = integer_regnum[integer_reg++];
635           break;
636
637         case AMD64_SSE:
638           /* 4. If the class is SSE, the next available SSE register
639              of the sequence %xmm0, %xmm1 is used.  */
640           regnum = sse_regnum[sse_reg++];
641           break;
642
643         case AMD64_SSEUP:
644           /* 5. If the class is SSEUP, the eightbyte is passed in the
645              upper half of the last used SSE register.  */
646           gdb_assert (sse_reg > 0);
647           regnum = sse_regnum[sse_reg - 1];
648           offset = 8;
649           break;
650
651         case AMD64_X87:
652           /* 6. If the class is X87, the value is returned on the X87
653              stack in %st0 as 80-bit x87 number.  */
654           regnum = AMD64_ST0_REGNUM;
655           if (writebuf)
656             i387_return_value (gdbarch, regcache);
657           break;
658
659         case AMD64_X87UP:
660           /* 7. If the class is X87UP, the value is returned together
661              with the previous X87 value in %st0.  */
662           gdb_assert (i > 0 && class[0] == AMD64_X87);
663           regnum = AMD64_ST0_REGNUM;
664           offset = 8;
665           len = 2;
666           break;
667
668         case AMD64_NO_CLASS:
669           continue;
670
671         default:
672           gdb_assert (!"Unexpected register class.");
673         }
674
675       gdb_assert (regnum != -1);
676
677       if (readbuf)
678         regcache_raw_read_part (regcache, regnum, offset, min (len, 8),
679                                 readbuf + i * 8);
680       if (writebuf)
681         regcache_raw_write_part (regcache, regnum, offset, min (len, 8),
682                                  writebuf + i * 8);
683     }
684
685   return RETURN_VALUE_REGISTER_CONVENTION;
686 }
687 \f
688
689 static CORE_ADDR
690 amd64_push_arguments (struct regcache *regcache, int nargs,
691                       struct value **args, CORE_ADDR sp, int struct_return)
692 {
693   struct gdbarch *gdbarch = get_regcache_arch (regcache);
694   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
695   int *integer_regs = tdep->call_dummy_integer_regs;
696   int num_integer_regs = tdep->call_dummy_num_integer_regs;
697
698   static int sse_regnum[] =
699   {
700     /* %xmm0 ... %xmm7 */
701     AMD64_XMM0_REGNUM + 0, AMD64_XMM1_REGNUM,
702     AMD64_XMM0_REGNUM + 2, AMD64_XMM0_REGNUM + 3,
703     AMD64_XMM0_REGNUM + 4, AMD64_XMM0_REGNUM + 5,
704     AMD64_XMM0_REGNUM + 6, AMD64_XMM0_REGNUM + 7,
705   };
706   struct value **stack_args = alloca (nargs * sizeof (struct value *));
707   /* An array that mirrors the stack_args array.  For all arguments
708      that are passed by MEMORY, if that argument's address also needs
709      to be stored in a register, the ARG_ADDR_REGNO array will contain
710      that register number (or a negative value otherwise).  */
711   int *arg_addr_regno = alloca (nargs * sizeof (int));
712   int num_stack_args = 0;
713   int num_elements = 0;
714   int element = 0;
715   int integer_reg = 0;
716   int sse_reg = 0;
717   int i;
718
719   gdb_assert (tdep->classify);
720
721   /* Reserve a register for the "hidden" argument.  */
722   if (struct_return)
723     integer_reg++;
724
725   for (i = 0; i < nargs; i++)
726     {
727       struct type *type = value_type (args[i]);
728       int len = TYPE_LENGTH (type);
729       enum amd64_reg_class class[2];
730       int needed_integer_regs = 0;
731       int needed_sse_regs = 0;
732       int j;
733
734       /* Classify argument.  */
735       tdep->classify (type, class);
736
737       /* Calculate the number of integer and SSE registers needed for
738          this argument.  */
739       for (j = 0; j < 2; j++)
740         {
741           if (class[j] == AMD64_INTEGER)
742             needed_integer_regs++;
743           else if (class[j] == AMD64_SSE)
744             needed_sse_regs++;
745         }
746
747       /* Check whether enough registers are available, and if the
748          argument should be passed in registers at all.  */
749       if (integer_reg + needed_integer_regs > num_integer_regs
750           || sse_reg + needed_sse_regs > ARRAY_SIZE (sse_regnum)
751           || (needed_integer_regs == 0 && needed_sse_regs == 0))
752         {
753           /* The argument will be passed on the stack.  */
754           num_elements += ((len + 7) / 8);
755           stack_args[num_stack_args] = args[i];
756           /* If this is an AMD64_MEMORY argument whose address must also
757              be passed in one of the integer registers, reserve that
758              register and associate this value to that register so that
759              we can store the argument address as soon as we know it.  */
760           if (class[0] == AMD64_MEMORY
761               && tdep->memory_args_by_pointer
762               && integer_reg < tdep->call_dummy_num_integer_regs)
763             arg_addr_regno[num_stack_args] =
764               tdep->call_dummy_integer_regs[integer_reg++];
765           else
766             arg_addr_regno[num_stack_args] = -1;
767           num_stack_args++;
768         }
769       else
770         {
771           /* The argument will be passed in registers.  */
772           const gdb_byte *valbuf = value_contents (args[i]);
773           gdb_byte buf[8];
774
775           gdb_assert (len <= 16);
776
777           for (j = 0; len > 0; j++, len -= 8)
778             {
779               int regnum = -1;
780               int offset = 0;
781
782               switch (class[j])
783                 {
784                 case AMD64_INTEGER:
785                   regnum = integer_regs[integer_reg++];
786                   break;
787
788                 case AMD64_SSE:
789                   regnum = sse_regnum[sse_reg++];
790                   break;
791
792                 case AMD64_SSEUP:
793                   gdb_assert (sse_reg > 0);
794                   regnum = sse_regnum[sse_reg - 1];
795                   offset = 8;
796                   break;
797
798                 default:
799                   gdb_assert (!"Unexpected register class.");
800                 }
801
802               gdb_assert (regnum != -1);
803               memset (buf, 0, sizeof buf);
804               memcpy (buf, valbuf + j * 8, min (len, 8));
805               regcache_raw_write_part (regcache, regnum, offset, 8, buf);
806             }
807         }
808     }
809
810   /* Allocate space for the arguments on the stack.  */
811   sp -= num_elements * 8;
812
813   /* The psABI says that "The end of the input argument area shall be
814      aligned on a 16 byte boundary."  */
815   sp &= ~0xf;
816
817   /* Write out the arguments to the stack.  */
818   for (i = 0; i < num_stack_args; i++)
819     {
820       struct type *type = value_type (stack_args[i]);
821       const gdb_byte *valbuf = value_contents (stack_args[i]);
822       int len = TYPE_LENGTH (type);
823       CORE_ADDR arg_addr = sp + element * 8;
824
825       write_memory (arg_addr, valbuf, len);
826       if (arg_addr_regno[i] >= 0)
827         {
828           /* We also need to store the address of that argument in
829              the given register.  */
830           gdb_byte buf[8];
831           enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
832
833           store_unsigned_integer (buf, 8, byte_order, arg_addr);
834           regcache_cooked_write (regcache, arg_addr_regno[i], buf);
835         }
836       element += ((len + 7) / 8);
837     }
838
839   /* The psABI says that "For calls that may call functions that use
840      varargs or stdargs (prototype-less calls or calls to functions
841      containing ellipsis (...) in the declaration) %al is used as
842      hidden argument to specify the number of SSE registers used.  */
843   regcache_raw_write_unsigned (regcache, AMD64_RAX_REGNUM, sse_reg);
844   return sp; 
845 }
846
847 static CORE_ADDR
848 amd64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
849                        struct regcache *regcache, CORE_ADDR bp_addr,
850                        int nargs, struct value **args,  CORE_ADDR sp,
851                        int struct_return, CORE_ADDR struct_addr)
852 {
853   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
854   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
855   gdb_byte buf[8];
856
857   /* Pass arguments.  */
858   sp = amd64_push_arguments (regcache, nargs, args, sp, struct_return);
859
860   /* Pass "hidden" argument".  */
861   if (struct_return)
862     {
863       struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
864       /* The "hidden" argument is passed throught the first argument
865          register.  */
866       const int arg_regnum = tdep->call_dummy_integer_regs[0];
867
868       store_unsigned_integer (buf, 8, byte_order, struct_addr);
869       regcache_cooked_write (regcache, arg_regnum, buf);
870     }
871
872   /* Reserve some memory on the stack for the integer-parameter registers,
873      if required by the ABI.  */
874   if (tdep->integer_param_regs_saved_in_caller_frame)
875     sp -= tdep->call_dummy_num_integer_regs * 8;
876
877   /* Store return address.  */
878   sp -= 8;
879   store_unsigned_integer (buf, 8, byte_order, bp_addr);
880   write_memory (sp, buf, 8);
881
882   /* Finally, update the stack pointer...  */
883   store_unsigned_integer (buf, 8, byte_order, sp);
884   regcache_cooked_write (regcache, AMD64_RSP_REGNUM, buf);
885
886   /* ...and fake a frame pointer.  */
887   regcache_cooked_write (regcache, AMD64_RBP_REGNUM, buf);
888
889   return sp + 16;
890 }
891 \f
892 /* Displaced instruction handling.  */
893
894 /* A partially decoded instruction.
895    This contains enough details for displaced stepping purposes.  */
896
897 struct amd64_insn
898 {
899   /* The number of opcode bytes.  */
900   int opcode_len;
901   /* The offset of the rex prefix or -1 if not present.  */
902   int rex_offset;
903   /* The offset to the first opcode byte.  */
904   int opcode_offset;
905   /* The offset to the modrm byte or -1 if not present.  */
906   int modrm_offset;
907
908   /* The raw instruction.  */
909   gdb_byte *raw_insn;
910 };
911
912 struct displaced_step_closure
913 {
914   /* For rip-relative insns, saved copy of the reg we use instead of %rip.  */
915   int tmp_used;
916   int tmp_regno;
917   ULONGEST tmp_save;
918
919   /* Details of the instruction.  */
920   struct amd64_insn insn_details;
921
922   /* Amount of space allocated to insn_buf.  */
923   int max_len;
924
925   /* The possibly modified insn.
926      This is a variable-length field.  */
927   gdb_byte insn_buf[1];
928 };
929
930 /* WARNING: Keep onebyte_has_modrm, twobyte_has_modrm in sync with
931    ../opcodes/i386-dis.c (until libopcodes exports them, or an alternative,
932    at which point delete these in favor of libopcodes' versions).  */
933
934 static const unsigned char onebyte_has_modrm[256] = {
935   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
936   /*       -------------------------------        */
937   /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
938   /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
939   /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
940   /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
941   /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
942   /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
943   /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
944   /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
945   /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
946   /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
947   /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
948   /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
949   /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
950   /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
951   /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
952   /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
953   /*       -------------------------------        */
954   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
955 };
956
957 static const unsigned char twobyte_has_modrm[256] = {
958   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
959   /*       -------------------------------        */
960   /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
961   /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
962   /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
963   /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
964   /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
965   /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
966   /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
967   /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
968   /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
969   /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
970   /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
971   /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
972   /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
973   /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
974   /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
975   /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
976   /*       -------------------------------        */
977   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
978 };
979
980 static int amd64_syscall_p (const struct amd64_insn *insn, int *lengthp);
981
982 static int
983 rex_prefix_p (gdb_byte pfx)
984 {
985   return REX_PREFIX_P (pfx);
986 }
987
988 /* Skip the legacy instruction prefixes in INSN.
989    We assume INSN is properly sentineled so we don't have to worry
990    about falling off the end of the buffer.  */
991
992 static gdb_byte *
993 amd64_skip_prefixes (gdb_byte *insn)
994 {
995   while (1)
996     {
997       switch (*insn)
998         {
999         case DATA_PREFIX_OPCODE:
1000         case ADDR_PREFIX_OPCODE:
1001         case CS_PREFIX_OPCODE:
1002         case DS_PREFIX_OPCODE:
1003         case ES_PREFIX_OPCODE:
1004         case FS_PREFIX_OPCODE:
1005         case GS_PREFIX_OPCODE:
1006         case SS_PREFIX_OPCODE:
1007         case LOCK_PREFIX_OPCODE:
1008         case REPE_PREFIX_OPCODE:
1009         case REPNE_PREFIX_OPCODE:
1010           ++insn;
1011           continue;
1012         default:
1013           break;
1014         }
1015       break;
1016     }
1017
1018   return insn;
1019 }
1020
1021 /* Return an integer register (other than RSP) that is unused as an input
1022    operand in INSN.
1023    In order to not require adding a rex prefix if the insn doesn't already
1024    have one, the result is restricted to RAX ... RDI, sans RSP.
1025    The register numbering of the result follows architecture ordering,
1026    e.g. RDI = 7.  */
1027
1028 static int
1029 amd64_get_unused_input_int_reg (const struct amd64_insn *details)
1030 {
1031   /* 1 bit for each reg */
1032   int used_regs_mask = 0;
1033
1034   /* There can be at most 3 int regs used as inputs in an insn, and we have
1035      7 to choose from (RAX ... RDI, sans RSP).
1036      This allows us to take a conservative approach and keep things simple.
1037      E.g. By avoiding RAX, we don't have to specifically watch for opcodes
1038      that implicitly specify RAX.  */
1039
1040   /* Avoid RAX.  */
1041   used_regs_mask |= 1 << EAX_REG_NUM;
1042   /* Similarily avoid RDX, implicit operand in divides.  */
1043   used_regs_mask |= 1 << EDX_REG_NUM;
1044   /* Avoid RSP.  */
1045   used_regs_mask |= 1 << ESP_REG_NUM;
1046
1047   /* If the opcode is one byte long and there's no ModRM byte,
1048      assume the opcode specifies a register.  */
1049   if (details->opcode_len == 1 && details->modrm_offset == -1)
1050     used_regs_mask |= 1 << (details->raw_insn[details->opcode_offset] & 7);
1051
1052   /* Mark used regs in the modrm/sib bytes.  */
1053   if (details->modrm_offset != -1)
1054     {
1055       int modrm = details->raw_insn[details->modrm_offset];
1056       int mod = MODRM_MOD_FIELD (modrm);
1057       int reg = MODRM_REG_FIELD (modrm);
1058       int rm = MODRM_RM_FIELD (modrm);
1059       int have_sib = mod != 3 && rm == 4;
1060
1061       /* Assume the reg field of the modrm byte specifies a register.  */
1062       used_regs_mask |= 1 << reg;
1063
1064       if (have_sib)
1065         {
1066           int base = SIB_BASE_FIELD (details->raw_insn[details->modrm_offset + 1]);
1067           int index = SIB_INDEX_FIELD (details->raw_insn[details->modrm_offset + 1]);
1068           used_regs_mask |= 1 << base;
1069           used_regs_mask |= 1 << index;
1070         }
1071       else
1072         {
1073           used_regs_mask |= 1 << rm;
1074         }
1075     }
1076
1077   gdb_assert (used_regs_mask < 256);
1078   gdb_assert (used_regs_mask != 255);
1079
1080   /* Finally, find a free reg.  */
1081   {
1082     int i;
1083
1084     for (i = 0; i < 8; ++i)
1085       {
1086         if (! (used_regs_mask & (1 << i)))
1087           return i;
1088       }
1089
1090     /* We shouldn't get here.  */
1091     internal_error (__FILE__, __LINE__, _("unable to find free reg"));
1092   }
1093 }
1094
1095 /* Extract the details of INSN that we need.  */
1096
1097 static void
1098 amd64_get_insn_details (gdb_byte *insn, struct amd64_insn *details)
1099 {
1100   gdb_byte *start = insn;
1101   int need_modrm;
1102
1103   details->raw_insn = insn;
1104
1105   details->opcode_len = -1;
1106   details->rex_offset = -1;
1107   details->opcode_offset = -1;
1108   details->modrm_offset = -1;
1109
1110   /* Skip legacy instruction prefixes.  */
1111   insn = amd64_skip_prefixes (insn);
1112
1113   /* Skip REX instruction prefix.  */
1114   if (rex_prefix_p (*insn))
1115     {
1116       details->rex_offset = insn - start;
1117       ++insn;
1118     }
1119
1120   details->opcode_offset = insn - start;
1121
1122   if (*insn == TWO_BYTE_OPCODE_ESCAPE)
1123     {
1124       /* Two or three-byte opcode.  */
1125       ++insn;
1126       need_modrm = twobyte_has_modrm[*insn];
1127
1128       /* Check for three-byte opcode.  */
1129       switch (*insn)
1130         {
1131         case 0x24:
1132         case 0x25:
1133         case 0x38:
1134         case 0x3a:
1135         case 0x7a:
1136         case 0x7b:
1137           ++insn;
1138           details->opcode_len = 3;
1139           break;
1140         default:
1141           details->opcode_len = 2;
1142           break;
1143         }
1144     }
1145   else
1146     {
1147       /* One-byte opcode.  */
1148       need_modrm = onebyte_has_modrm[*insn];
1149       details->opcode_len = 1;
1150     }
1151
1152   if (need_modrm)
1153     {
1154       ++insn;
1155       details->modrm_offset = insn - start;
1156     }
1157 }
1158
1159 /* Update %rip-relative addressing in INSN.
1160
1161    %rip-relative addressing only uses a 32-bit displacement.
1162    32 bits is not enough to be guaranteed to cover the distance between where
1163    the real instruction is and where its copy is.
1164    Convert the insn to use base+disp addressing.
1165    We set base = pc + insn_length so we can leave disp unchanged.  */
1166
1167 static void
1168 fixup_riprel (struct gdbarch *gdbarch, struct displaced_step_closure *dsc,
1169               CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
1170 {
1171   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1172   const struct amd64_insn *insn_details = &dsc->insn_details;
1173   int modrm_offset = insn_details->modrm_offset;
1174   gdb_byte *insn = insn_details->raw_insn + modrm_offset;
1175   CORE_ADDR rip_base;
1176   int32_t disp;
1177   int insn_length;
1178   int arch_tmp_regno, tmp_regno;
1179   ULONGEST orig_value;
1180
1181   /* %rip+disp32 addressing mode, displacement follows ModRM byte.  */
1182   ++insn;
1183
1184   /* Compute the rip-relative address.  */
1185   disp = extract_signed_integer (insn, sizeof (int32_t), byte_order);
1186   insn_length = gdb_buffered_insn_length (gdbarch, dsc->insn_buf,
1187                                           dsc->max_len, from);
1188   rip_base = from + insn_length;
1189
1190   /* We need a register to hold the address.
1191      Pick one not used in the insn.
1192      NOTE: arch_tmp_regno uses architecture ordering, e.g. RDI = 7.  */
1193   arch_tmp_regno = amd64_get_unused_input_int_reg (insn_details);
1194   tmp_regno = amd64_arch_reg_to_regnum (arch_tmp_regno);
1195
1196   /* REX.B should be unset as we were using rip-relative addressing,
1197      but ensure it's unset anyway, tmp_regno is not r8-r15.  */
1198   if (insn_details->rex_offset != -1)
1199     dsc->insn_buf[insn_details->rex_offset] &= ~REX_B;
1200
1201   regcache_cooked_read_unsigned (regs, tmp_regno, &orig_value);
1202   dsc->tmp_regno = tmp_regno;
1203   dsc->tmp_save = orig_value;
1204   dsc->tmp_used = 1;
1205
1206   /* Convert the ModRM field to be base+disp.  */
1207   dsc->insn_buf[modrm_offset] &= ~0xc7;
1208   dsc->insn_buf[modrm_offset] |= 0x80 + arch_tmp_regno;
1209
1210   regcache_cooked_write_unsigned (regs, tmp_regno, rip_base);
1211
1212   if (debug_displaced)
1213     fprintf_unfiltered (gdb_stdlog, "displaced: %%rip-relative addressing used.\n"
1214                         "displaced: using temp reg %d, old value %s, new value %s\n",
1215                         dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save),
1216                         paddress (gdbarch, rip_base));
1217 }
1218
1219 static void
1220 fixup_displaced_copy (struct gdbarch *gdbarch,
1221                       struct displaced_step_closure *dsc,
1222                       CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
1223 {
1224   const struct amd64_insn *details = &dsc->insn_details;
1225
1226   if (details->modrm_offset != -1)
1227     {
1228       gdb_byte modrm = details->raw_insn[details->modrm_offset];
1229
1230       if ((modrm & 0xc7) == 0x05)
1231         {
1232           /* The insn uses rip-relative addressing.
1233              Deal with it.  */
1234           fixup_riprel (gdbarch, dsc, from, to, regs);
1235         }
1236     }
1237 }
1238
1239 struct displaced_step_closure *
1240 amd64_displaced_step_copy_insn (struct gdbarch *gdbarch,
1241                                 CORE_ADDR from, CORE_ADDR to,
1242                                 struct regcache *regs)
1243 {
1244   int len = gdbarch_max_insn_length (gdbarch);
1245   /* Extra space for sentinels so fixup_{riprel,displaced_copy don't have to
1246      continually watch for running off the end of the buffer.  */
1247   int fixup_sentinel_space = len;
1248   struct displaced_step_closure *dsc =
1249     xmalloc (sizeof (*dsc) + len + fixup_sentinel_space);
1250   gdb_byte *buf = &dsc->insn_buf[0];
1251   struct amd64_insn *details = &dsc->insn_details;
1252
1253   dsc->tmp_used = 0;
1254   dsc->max_len = len + fixup_sentinel_space;
1255
1256   read_memory (from, buf, len);
1257
1258   /* Set up the sentinel space so we don't have to worry about running
1259      off the end of the buffer.  An excessive number of leading prefixes
1260      could otherwise cause this.  */
1261   memset (buf + len, 0, fixup_sentinel_space);
1262
1263   amd64_get_insn_details (buf, details);
1264
1265   /* GDB may get control back after the insn after the syscall.
1266      Presumably this is a kernel bug.
1267      If this is a syscall, make sure there's a nop afterwards.  */
1268   {
1269     int syscall_length;
1270
1271     if (amd64_syscall_p (details, &syscall_length))
1272       buf[details->opcode_offset + syscall_length] = NOP_OPCODE;
1273   }
1274
1275   /* Modify the insn to cope with the address where it will be executed from.
1276      In particular, handle any rip-relative addressing.  */
1277   fixup_displaced_copy (gdbarch, dsc, from, to, regs);
1278
1279   write_memory (to, buf, len);
1280
1281   if (debug_displaced)
1282     {
1283       fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
1284                           paddress (gdbarch, from), paddress (gdbarch, to));
1285       displaced_step_dump_bytes (gdb_stdlog, buf, len);
1286     }
1287
1288   return dsc;
1289 }
1290
1291 static int
1292 amd64_absolute_jmp_p (const struct amd64_insn *details)
1293 {
1294   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1295
1296   if (insn[0] == 0xff)
1297     {
1298       /* jump near, absolute indirect (/4) */
1299       if ((insn[1] & 0x38) == 0x20)
1300         return 1;
1301
1302       /* jump far, absolute indirect (/5) */
1303       if ((insn[1] & 0x38) == 0x28)
1304         return 1;
1305     }
1306
1307   return 0;
1308 }
1309
1310 static int
1311 amd64_absolute_call_p (const struct amd64_insn *details)
1312 {
1313   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1314
1315   if (insn[0] == 0xff)
1316     {
1317       /* Call near, absolute indirect (/2) */
1318       if ((insn[1] & 0x38) == 0x10)
1319         return 1;
1320
1321       /* Call far, absolute indirect (/3) */
1322       if ((insn[1] & 0x38) == 0x18)
1323         return 1;
1324     }
1325
1326   return 0;
1327 }
1328
1329 static int
1330 amd64_ret_p (const struct amd64_insn *details)
1331 {
1332   /* NOTE: gcc can emit "repz ; ret".  */
1333   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1334
1335   switch (insn[0])
1336     {
1337     case 0xc2: /* ret near, pop N bytes */
1338     case 0xc3: /* ret near */
1339     case 0xca: /* ret far, pop N bytes */
1340     case 0xcb: /* ret far */
1341     case 0xcf: /* iret */
1342       return 1;
1343
1344     default:
1345       return 0;
1346     }
1347 }
1348
1349 static int
1350 amd64_call_p (const struct amd64_insn *details)
1351 {
1352   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1353
1354   if (amd64_absolute_call_p (details))
1355     return 1;
1356
1357   /* call near, relative */
1358   if (insn[0] == 0xe8)
1359     return 1;
1360
1361   return 0;
1362 }
1363
1364 /* Return non-zero if INSN is a system call, and set *LENGTHP to its
1365    length in bytes.  Otherwise, return zero.  */
1366
1367 static int
1368 amd64_syscall_p (const struct amd64_insn *details, int *lengthp)
1369 {
1370   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1371
1372   if (insn[0] == 0x0f && insn[1] == 0x05)
1373     {
1374       *lengthp = 2;
1375       return 1;
1376     }
1377
1378   return 0;
1379 }
1380
1381 /* Fix up the state of registers and memory after having single-stepped
1382    a displaced instruction.  */
1383
1384 void
1385 amd64_displaced_step_fixup (struct gdbarch *gdbarch,
1386                             struct displaced_step_closure *dsc,
1387                             CORE_ADDR from, CORE_ADDR to,
1388                             struct regcache *regs)
1389 {
1390   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1391   /* The offset we applied to the instruction's address.  */
1392   ULONGEST insn_offset = to - from;
1393   gdb_byte *insn = dsc->insn_buf;
1394   const struct amd64_insn *insn_details = &dsc->insn_details;
1395
1396   if (debug_displaced)
1397     fprintf_unfiltered (gdb_stdlog,
1398                         "displaced: fixup (%s, %s), "
1399                         "insn = 0x%02x 0x%02x ...\n",
1400                         paddress (gdbarch, from), paddress (gdbarch, to),
1401                         insn[0], insn[1]);
1402
1403   /* If we used a tmp reg, restore it.  */
1404
1405   if (dsc->tmp_used)
1406     {
1407       if (debug_displaced)
1408         fprintf_unfiltered (gdb_stdlog, "displaced: restoring reg %d to %s\n",
1409                             dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save));
1410       regcache_cooked_write_unsigned (regs, dsc->tmp_regno, dsc->tmp_save);
1411     }
1412
1413   /* The list of issues to contend with here is taken from
1414      resume_execution in arch/x86/kernel/kprobes.c, Linux 2.6.28.
1415      Yay for Free Software!  */
1416
1417   /* Relocate the %rip back to the program's instruction stream,
1418      if necessary.  */
1419
1420   /* Except in the case of absolute or indirect jump or call
1421      instructions, or a return instruction, the new rip is relative to
1422      the displaced instruction; make it relative to the original insn.
1423      Well, signal handler returns don't need relocation either, but we use the
1424      value of %rip to recognize those; see below.  */
1425   if (! amd64_absolute_jmp_p (insn_details)
1426       && ! amd64_absolute_call_p (insn_details)
1427       && ! amd64_ret_p (insn_details))
1428     {
1429       ULONGEST orig_rip;
1430       int insn_len;
1431
1432       regcache_cooked_read_unsigned (regs, AMD64_RIP_REGNUM, &orig_rip);
1433
1434       /* A signal trampoline system call changes the %rip, resuming
1435          execution of the main program after the signal handler has
1436          returned.  That makes them like 'return' instructions; we
1437          shouldn't relocate %rip.
1438
1439          But most system calls don't, and we do need to relocate %rip.
1440
1441          Our heuristic for distinguishing these cases: if stepping
1442          over the system call instruction left control directly after
1443          the instruction, the we relocate --- control almost certainly
1444          doesn't belong in the displaced copy.  Otherwise, we assume
1445          the instruction has put control where it belongs, and leave
1446          it unrelocated.  Goodness help us if there are PC-relative
1447          system calls.  */
1448       if (amd64_syscall_p (insn_details, &insn_len)
1449           && orig_rip != to + insn_len
1450           /* GDB can get control back after the insn after the syscall.
1451              Presumably this is a kernel bug.
1452              Fixup ensures its a nop, we add one to the length for it.  */
1453           && orig_rip != to + insn_len + 1)
1454         {
1455           if (debug_displaced)
1456             fprintf_unfiltered (gdb_stdlog,
1457                                 "displaced: syscall changed %%rip; "
1458                                 "not relocating\n");
1459         }
1460       else
1461         {
1462           ULONGEST rip = orig_rip - insn_offset;
1463
1464           /* If we just stepped over a breakpoint insn, we don't backup
1465              the pc on purpose; this is to match behaviour without
1466              stepping.  */
1467
1468           regcache_cooked_write_unsigned (regs, AMD64_RIP_REGNUM, rip);
1469
1470           if (debug_displaced)
1471             fprintf_unfiltered (gdb_stdlog,
1472                                 "displaced: "
1473                                 "relocated %%rip from %s to %s\n",
1474                                 paddress (gdbarch, orig_rip),
1475                                 paddress (gdbarch, rip));
1476         }
1477     }
1478
1479   /* If the instruction was PUSHFL, then the TF bit will be set in the
1480      pushed value, and should be cleared.  We'll leave this for later,
1481      since GDB already messes up the TF flag when stepping over a
1482      pushfl.  */
1483
1484   /* If the instruction was a call, the return address now atop the
1485      stack is the address following the copied instruction.  We need
1486      to make it the address following the original instruction.  */
1487   if (amd64_call_p (insn_details))
1488     {
1489       ULONGEST rsp;
1490       ULONGEST retaddr;
1491       const ULONGEST retaddr_len = 8;
1492
1493       regcache_cooked_read_unsigned (regs, AMD64_RSP_REGNUM, &rsp);
1494       retaddr = read_memory_unsigned_integer (rsp, retaddr_len, byte_order);
1495       retaddr = (retaddr - insn_offset) & 0xffffffffUL;
1496       write_memory_unsigned_integer (rsp, retaddr_len, byte_order, retaddr);
1497
1498       if (debug_displaced)
1499         fprintf_unfiltered (gdb_stdlog,
1500                             "displaced: relocated return addr at %s "
1501                             "to %s\n",
1502                             paddress (gdbarch, rsp),
1503                             paddress (gdbarch, retaddr));
1504     }
1505 }
1506
1507 /* If the instruction INSN uses RIP-relative addressing, return the
1508    offset into the raw INSN where the displacement to be adjusted is
1509    found.  Returns 0 if the instruction doesn't use RIP-relative
1510    addressing.  */
1511
1512 static int
1513 rip_relative_offset (struct amd64_insn *insn)
1514 {
1515   if (insn->modrm_offset != -1)
1516     {
1517       gdb_byte modrm = insn->raw_insn[insn->modrm_offset];
1518
1519       if ((modrm & 0xc7) == 0x05)
1520         {
1521           /* The displacement is found right after the ModRM byte.  */
1522           return insn->modrm_offset + 1;
1523         }
1524     }
1525
1526   return 0;
1527 }
1528
1529 static void
1530 append_insns (CORE_ADDR *to, ULONGEST len, const gdb_byte *buf)
1531 {
1532   target_write_memory (*to, buf, len);
1533   *to += len;
1534 }
1535
1536 void
1537 amd64_relocate_instruction (struct gdbarch *gdbarch,
1538                             CORE_ADDR *to, CORE_ADDR oldloc)
1539 {
1540   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1541   int len = gdbarch_max_insn_length (gdbarch);
1542   /* Extra space for sentinels.  */
1543   int fixup_sentinel_space = len;
1544   gdb_byte *buf = xmalloc (len + fixup_sentinel_space);
1545   struct amd64_insn insn_details;
1546   int offset = 0;
1547   LONGEST rel32, newrel;
1548   gdb_byte *insn;
1549   int insn_length;
1550
1551   read_memory (oldloc, buf, len);
1552
1553   /* Set up the sentinel space so we don't have to worry about running
1554      off the end of the buffer.  An excessive number of leading prefixes
1555      could otherwise cause this.  */
1556   memset (buf + len, 0, fixup_sentinel_space);
1557
1558   insn = buf;
1559   amd64_get_insn_details (insn, &insn_details);
1560
1561   insn_length = gdb_buffered_insn_length (gdbarch, insn, len, oldloc);
1562
1563   /* Skip legacy instruction prefixes.  */
1564   insn = amd64_skip_prefixes (insn);
1565
1566   /* Adjust calls with 32-bit relative addresses as push/jump, with
1567      the address pushed being the location where the original call in
1568      the user program would return to.  */
1569   if (insn[0] == 0xe8)
1570     {
1571       gdb_byte push_buf[16];
1572       unsigned int ret_addr;
1573
1574       /* Where "ret" in the original code will return to.  */
1575       ret_addr = oldloc + insn_length;
1576       push_buf[0] = 0x68; /* pushq $...  */
1577       memcpy (&push_buf[1], &ret_addr, 4);
1578       /* Push the push.  */
1579       append_insns (to, 5, push_buf);
1580
1581       /* Convert the relative call to a relative jump.  */
1582       insn[0] = 0xe9;
1583
1584       /* Adjust the destination offset.  */
1585       rel32 = extract_signed_integer (insn + 1, 4, byte_order);
1586       newrel = (oldloc - *to) + rel32;
1587       store_signed_integer (insn + 1, 4, byte_order, newrel);
1588
1589       if (debug_displaced)
1590         fprintf_unfiltered (gdb_stdlog,
1591                             "Adjusted insn rel32=%s at %s to"
1592                             " rel32=%s at %s\n",
1593                             hex_string (rel32), paddress (gdbarch, oldloc),
1594                             hex_string (newrel), paddress (gdbarch, *to));
1595
1596       /* Write the adjusted jump into its displaced location.  */
1597       append_insns (to, 5, insn);
1598       return;
1599     }
1600
1601   offset = rip_relative_offset (&insn_details);
1602   if (!offset)
1603     {
1604       /* Adjust jumps with 32-bit relative addresses.  Calls are
1605          already handled above.  */
1606       if (insn[0] == 0xe9)
1607         offset = 1;
1608       /* Adjust conditional jumps.  */
1609       else if (insn[0] == 0x0f && (insn[1] & 0xf0) == 0x80)
1610         offset = 2;
1611     }
1612
1613   if (offset)
1614     {
1615       rel32 = extract_signed_integer (insn + offset, 4, byte_order);
1616       newrel = (oldloc - *to) + rel32;
1617       store_signed_integer (insn + offset, 4, byte_order, newrel);
1618       if (debug_displaced)
1619         fprintf_unfiltered (gdb_stdlog,
1620                             "Adjusted insn rel32=%s at %s to"
1621                             " rel32=%s at %s\n",
1622                             hex_string (rel32), paddress (gdbarch, oldloc),
1623                             hex_string (newrel), paddress (gdbarch, *to));
1624     }
1625
1626   /* Write the adjusted instruction into its displaced location.  */
1627   append_insns (to, insn_length, buf);
1628 }
1629
1630 \f
1631 /* The maximum number of saved registers.  This should include %rip.  */
1632 #define AMD64_NUM_SAVED_REGS    AMD64_NUM_GREGS
1633
1634 struct amd64_frame_cache
1635 {
1636   /* Base address.  */
1637   CORE_ADDR base;
1638   CORE_ADDR sp_offset;
1639   CORE_ADDR pc;
1640
1641   /* Saved registers.  */
1642   CORE_ADDR saved_regs[AMD64_NUM_SAVED_REGS];
1643   CORE_ADDR saved_sp;
1644   int saved_sp_reg;
1645
1646   /* Do we have a frame?  */
1647   int frameless_p;
1648 };
1649
1650 /* Initialize a frame cache.  */
1651
1652 static void
1653 amd64_init_frame_cache (struct amd64_frame_cache *cache)
1654 {
1655   int i;
1656
1657   /* Base address.  */
1658   cache->base = 0;
1659   cache->sp_offset = -8;
1660   cache->pc = 0;
1661
1662   /* Saved registers.  We initialize these to -1 since zero is a valid
1663      offset (that's where %rbp is supposed to be stored).
1664      The values start out as being offsets, and are later converted to
1665      addresses (at which point -1 is interpreted as an address, still meaning
1666      "invalid").  */
1667   for (i = 0; i < AMD64_NUM_SAVED_REGS; i++)
1668     cache->saved_regs[i] = -1;
1669   cache->saved_sp = 0;
1670   cache->saved_sp_reg = -1;
1671
1672   /* Frameless until proven otherwise.  */
1673   cache->frameless_p = 1;
1674 }
1675
1676 /* Allocate and initialize a frame cache.  */
1677
1678 static struct amd64_frame_cache *
1679 amd64_alloc_frame_cache (void)
1680 {
1681   struct amd64_frame_cache *cache;
1682
1683   cache = FRAME_OBSTACK_ZALLOC (struct amd64_frame_cache);
1684   amd64_init_frame_cache (cache);
1685   return cache;
1686 }
1687
1688 /* GCC 4.4 and later, can put code in the prologue to realign the
1689    stack pointer.  Check whether PC points to such code, and update
1690    CACHE accordingly.  Return the first instruction after the code
1691    sequence or CURRENT_PC, whichever is smaller.  If we don't
1692    recognize the code, return PC.  */
1693
1694 static CORE_ADDR
1695 amd64_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
1696                            struct amd64_frame_cache *cache)
1697 {
1698   /* There are 2 code sequences to re-align stack before the frame
1699      gets set up:
1700
1701         1. Use a caller-saved saved register:
1702
1703                 leaq  8(%rsp), %reg
1704                 andq  $-XXX, %rsp
1705                 pushq -8(%reg)
1706
1707         2. Use a callee-saved saved register:
1708
1709                 pushq %reg
1710                 leaq  16(%rsp), %reg
1711                 andq  $-XXX, %rsp
1712                 pushq -8(%reg)
1713
1714      "andq $-XXX, %rsp" can be either 4 bytes or 7 bytes:
1715      
1716         0x48 0x83 0xe4 0xf0                     andq $-16, %rsp
1717         0x48 0x81 0xe4 0x00 0xff 0xff 0xff      andq $-256, %rsp
1718    */
1719
1720   gdb_byte buf[18];
1721   int reg, r;
1722   int offset, offset_and;
1723
1724   if (target_read_memory (pc, buf, sizeof buf))
1725     return pc;
1726
1727   /* Check caller-saved saved register.  The first instruction has
1728      to be "leaq 8(%rsp), %reg".  */
1729   if ((buf[0] & 0xfb) == 0x48
1730       && buf[1] == 0x8d
1731       && buf[3] == 0x24
1732       && buf[4] == 0x8)
1733     {
1734       /* MOD must be binary 10 and R/M must be binary 100.  */
1735       if ((buf[2] & 0xc7) != 0x44)
1736         return pc;
1737
1738       /* REG has register number.  */
1739       reg = (buf[2] >> 3) & 7;
1740
1741       /* Check the REX.R bit.  */
1742       if (buf[0] == 0x4c)
1743         reg += 8;
1744
1745       offset = 5;
1746     }
1747   else
1748     {
1749       /* Check callee-saved saved register.  The first instruction
1750          has to be "pushq %reg".  */
1751       reg = 0;
1752       if ((buf[0] & 0xf8) == 0x50)
1753         offset = 0;
1754       else if ((buf[0] & 0xf6) == 0x40
1755                && (buf[1] & 0xf8) == 0x50)
1756         {
1757           /* Check the REX.B bit.  */
1758           if ((buf[0] & 1) != 0)
1759             reg = 8;
1760
1761           offset = 1;
1762         }
1763       else
1764         return pc;
1765
1766       /* Get register.  */
1767       reg += buf[offset] & 0x7;
1768
1769       offset++;
1770
1771       /* The next instruction has to be "leaq 16(%rsp), %reg".  */
1772       if ((buf[offset] & 0xfb) != 0x48
1773           || buf[offset + 1] != 0x8d
1774           || buf[offset + 3] != 0x24
1775           || buf[offset + 4] != 0x10)
1776         return pc;
1777
1778       /* MOD must be binary 10 and R/M must be binary 100.  */
1779       if ((buf[offset + 2] & 0xc7) != 0x44)
1780         return pc;
1781       
1782       /* REG has register number.  */
1783       r = (buf[offset + 2] >> 3) & 7;
1784
1785       /* Check the REX.R bit.  */
1786       if (buf[offset] == 0x4c)
1787         r += 8;
1788
1789       /* Registers in pushq and leaq have to be the same.  */
1790       if (reg != r)
1791         return pc;
1792
1793       offset += 5;
1794     }
1795
1796   /* Rigister can't be %rsp nor %rbp.  */
1797   if (reg == 4 || reg == 5)
1798     return pc;
1799
1800   /* The next instruction has to be "andq $-XXX, %rsp".  */
1801   if (buf[offset] != 0x48
1802       || buf[offset + 2] != 0xe4
1803       || (buf[offset + 1] != 0x81 && buf[offset + 1] != 0x83))
1804     return pc;
1805
1806   offset_and = offset;
1807   offset += buf[offset + 1] == 0x81 ? 7 : 4;
1808
1809   /* The next instruction has to be "pushq -8(%reg)".  */
1810   r = 0;
1811   if (buf[offset] == 0xff)
1812     offset++;
1813   else if ((buf[offset] & 0xf6) == 0x40
1814            && buf[offset + 1] == 0xff)
1815     {
1816       /* Check the REX.B bit.  */
1817       if ((buf[offset] & 0x1) != 0)
1818         r = 8;
1819       offset += 2;
1820     }
1821   else
1822     return pc;
1823
1824   /* 8bit -8 is 0xf8.  REG must be binary 110 and MOD must be binary
1825      01.  */
1826   if (buf[offset + 1] != 0xf8
1827       || (buf[offset] & 0xf8) != 0x70)
1828     return pc;
1829
1830   /* R/M has register.  */
1831   r += buf[offset] & 7;
1832
1833   /* Registers in leaq and pushq have to be the same.  */
1834   if (reg != r)
1835     return pc;
1836
1837   if (current_pc > pc + offset_and)
1838     cache->saved_sp_reg = amd64_arch_reg_to_regnum (reg);
1839
1840   return min (pc + offset + 2, current_pc);
1841 }
1842
1843 /* Do a limited analysis of the prologue at PC and update CACHE
1844    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
1845    address where the analysis stopped.
1846
1847    We will handle only functions beginning with:
1848
1849       pushq %rbp        0x55
1850       movq %rsp, %rbp   0x48 0x89 0xe5
1851
1852    Any function that doesn't start with this sequence will be assumed
1853    to have no prologue and thus no valid frame pointer in %rbp.  */
1854
1855 static CORE_ADDR
1856 amd64_analyze_prologue (struct gdbarch *gdbarch,
1857                         CORE_ADDR pc, CORE_ADDR current_pc,
1858                         struct amd64_frame_cache *cache)
1859 {
1860   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1861   static gdb_byte proto[3] = { 0x48, 0x89, 0xe5 }; /* movq %rsp, %rbp */
1862   gdb_byte buf[3];
1863   gdb_byte op;
1864
1865   if (current_pc <= pc)
1866     return current_pc;
1867
1868   pc = amd64_analyze_stack_align (pc, current_pc, cache);
1869
1870   op = read_memory_unsigned_integer (pc, 1, byte_order);
1871
1872   if (op == 0x55)               /* pushq %rbp */
1873     {
1874       /* Take into account that we've executed the `pushq %rbp' that
1875          starts this instruction sequence.  */
1876       cache->saved_regs[AMD64_RBP_REGNUM] = 0;
1877       cache->sp_offset += 8;
1878
1879       /* If that's all, return now.  */
1880       if (current_pc <= pc + 1)
1881         return current_pc;
1882
1883       /* Check for `movq %rsp, %rbp'.  */
1884       read_memory (pc + 1, buf, 3);
1885       if (memcmp (buf, proto, 3) != 0)
1886         return pc + 1;
1887
1888       /* OK, we actually have a frame.  */
1889       cache->frameless_p = 0;
1890       return pc + 4;
1891     }
1892
1893   return pc;
1894 }
1895
1896 /* Return PC of first real instruction.  */
1897
1898 static CORE_ADDR
1899 amd64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1900 {
1901   struct amd64_frame_cache cache;
1902   CORE_ADDR pc;
1903
1904   amd64_init_frame_cache (&cache);
1905   pc = amd64_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffLL,
1906                                &cache);
1907   if (cache.frameless_p)
1908     return start_pc;
1909
1910   return pc;
1911 }
1912 \f
1913
1914 /* Normal frames.  */
1915
1916 static struct amd64_frame_cache *
1917 amd64_frame_cache (struct frame_info *this_frame, void **this_cache)
1918 {
1919   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1920   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1921   struct amd64_frame_cache *cache;
1922   gdb_byte buf[8];
1923   int i;
1924
1925   if (*this_cache)
1926     return *this_cache;
1927
1928   cache = amd64_alloc_frame_cache ();
1929   *this_cache = cache;
1930
1931   cache->pc = get_frame_func (this_frame);
1932   if (cache->pc != 0)
1933     amd64_analyze_prologue (gdbarch, cache->pc, get_frame_pc (this_frame),
1934                             cache);
1935
1936   if (cache->saved_sp_reg != -1)
1937     {
1938       /* Stack pointer has been saved.  */
1939       get_frame_register (this_frame, cache->saved_sp_reg, buf);
1940       cache->saved_sp = extract_unsigned_integer(buf, 8, byte_order);
1941     }
1942
1943   if (cache->frameless_p)
1944     {
1945       /* We didn't find a valid frame.  If we're at the start of a
1946          function, or somewhere half-way its prologue, the function's
1947          frame probably hasn't been fully setup yet.  Try to
1948          reconstruct the base address for the stack frame by looking
1949          at the stack pointer.  For truly "frameless" functions this
1950          might work too.  */
1951
1952       if (cache->saved_sp_reg != -1)
1953         {
1954           /* We're halfway aligning the stack.  */
1955           cache->base = ((cache->saved_sp - 8) & 0xfffffffffffffff0LL) - 8;
1956           cache->saved_regs[AMD64_RIP_REGNUM] = cache->saved_sp - 8;
1957
1958           /* This will be added back below.  */
1959           cache->saved_regs[AMD64_RIP_REGNUM] -= cache->base;
1960         }
1961       else
1962         {
1963           get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
1964           cache->base = extract_unsigned_integer (buf, 8, byte_order)
1965                         + cache->sp_offset;
1966         }
1967     }
1968   else
1969     {
1970       get_frame_register (this_frame, AMD64_RBP_REGNUM, buf);
1971       cache->base = extract_unsigned_integer (buf, 8, byte_order);
1972     }
1973
1974   /* Now that we have the base address for the stack frame we can
1975      calculate the value of %rsp in the calling frame.  */
1976   cache->saved_sp = cache->base + 16;
1977
1978   /* For normal frames, %rip is stored at 8(%rbp).  If we don't have a
1979      frame we find it at the same offset from the reconstructed base
1980      address.  If we're halfway aligning the stack, %rip is handled
1981      differently (see above).  */
1982   if (!cache->frameless_p || cache->saved_sp_reg == -1)
1983     cache->saved_regs[AMD64_RIP_REGNUM] = 8;
1984
1985   /* Adjust all the saved registers such that they contain addresses
1986      instead of offsets.  */
1987   for (i = 0; i < AMD64_NUM_SAVED_REGS; i++)
1988     if (cache->saved_regs[i] != -1)
1989       cache->saved_regs[i] += cache->base;
1990
1991   return cache;
1992 }
1993
1994 static void
1995 amd64_frame_this_id (struct frame_info *this_frame, void **this_cache,
1996                      struct frame_id *this_id)
1997 {
1998   struct amd64_frame_cache *cache =
1999     amd64_frame_cache (this_frame, this_cache);
2000
2001   /* This marks the outermost frame.  */
2002   if (cache->base == 0)
2003     return;
2004
2005   (*this_id) = frame_id_build (cache->base + 16, cache->pc);
2006 }
2007
2008 static struct value *
2009 amd64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
2010                            int regnum)
2011 {
2012   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2013   struct amd64_frame_cache *cache =
2014     amd64_frame_cache (this_frame, this_cache);
2015
2016   gdb_assert (regnum >= 0);
2017
2018   if (regnum == gdbarch_sp_regnum (gdbarch) && cache->saved_sp)
2019     return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
2020
2021   if (regnum < AMD64_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
2022     return frame_unwind_got_memory (this_frame, regnum,
2023                                     cache->saved_regs[regnum]);
2024
2025   return frame_unwind_got_register (this_frame, regnum, regnum);
2026 }
2027
2028 static const struct frame_unwind amd64_frame_unwind =
2029 {
2030   NORMAL_FRAME,
2031   amd64_frame_this_id,
2032   amd64_frame_prev_register,
2033   NULL,
2034   default_frame_sniffer
2035 };
2036 \f
2037
2038 /* Signal trampolines.  */
2039
2040 /* FIXME: kettenis/20030419: Perhaps, we can unify the 32-bit and
2041    64-bit variants.  This would require using identical frame caches
2042    on both platforms.  */
2043
2044 static struct amd64_frame_cache *
2045 amd64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
2046 {
2047   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2048   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2049   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2050   struct amd64_frame_cache *cache;
2051   CORE_ADDR addr;
2052   gdb_byte buf[8];
2053   int i;
2054
2055   if (*this_cache)
2056     return *this_cache;
2057
2058   cache = amd64_alloc_frame_cache ();
2059
2060   get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
2061   cache->base = extract_unsigned_integer (buf, 8, byte_order) - 8;
2062
2063   addr = tdep->sigcontext_addr (this_frame);
2064   gdb_assert (tdep->sc_reg_offset);
2065   gdb_assert (tdep->sc_num_regs <= AMD64_NUM_SAVED_REGS);
2066   for (i = 0; i < tdep->sc_num_regs; i++)
2067     if (tdep->sc_reg_offset[i] != -1)
2068       cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
2069
2070   *this_cache = cache;
2071   return cache;
2072 }
2073
2074 static void
2075 amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
2076                               void **this_cache, struct frame_id *this_id)
2077 {
2078   struct amd64_frame_cache *cache =
2079     amd64_sigtramp_frame_cache (this_frame, this_cache);
2080
2081   (*this_id) = frame_id_build (cache->base + 16, get_frame_pc (this_frame));
2082 }
2083
2084 static struct value *
2085 amd64_sigtramp_frame_prev_register (struct frame_info *this_frame,
2086                                     void **this_cache, int regnum)
2087 {
2088   /* Make sure we've initialized the cache.  */
2089   amd64_sigtramp_frame_cache (this_frame, this_cache);
2090
2091   return amd64_frame_prev_register (this_frame, this_cache, regnum);
2092 }
2093
2094 static int
2095 amd64_sigtramp_frame_sniffer (const struct frame_unwind *self,
2096                               struct frame_info *this_frame,
2097                               void **this_cache)
2098 {
2099   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2100
2101   /* We shouldn't even bother if we don't have a sigcontext_addr
2102      handler.  */
2103   if (tdep->sigcontext_addr == NULL)
2104     return 0;
2105
2106   if (tdep->sigtramp_p != NULL)
2107     {
2108       if (tdep->sigtramp_p (this_frame))
2109         return 1;
2110     }
2111
2112   if (tdep->sigtramp_start != 0)
2113     {
2114       CORE_ADDR pc = get_frame_pc (this_frame);
2115
2116       gdb_assert (tdep->sigtramp_end != 0);
2117       if (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end)
2118         return 1;
2119     }
2120
2121   return 0;
2122 }
2123
2124 static const struct frame_unwind amd64_sigtramp_frame_unwind =
2125 {
2126   SIGTRAMP_FRAME,
2127   amd64_sigtramp_frame_this_id,
2128   amd64_sigtramp_frame_prev_register,
2129   NULL,
2130   amd64_sigtramp_frame_sniffer
2131 };
2132 \f
2133
2134 static CORE_ADDR
2135 amd64_frame_base_address (struct frame_info *this_frame, void **this_cache)
2136 {
2137   struct amd64_frame_cache *cache =
2138     amd64_frame_cache (this_frame, this_cache);
2139
2140   return cache->base;
2141 }
2142
2143 static const struct frame_base amd64_frame_base =
2144 {
2145   &amd64_frame_unwind,
2146   amd64_frame_base_address,
2147   amd64_frame_base_address,
2148   amd64_frame_base_address
2149 };
2150
2151 /* Normal frames, but in a function epilogue.  */
2152
2153 /* The epilogue is defined here as the 'ret' instruction, which will
2154    follow any instruction such as 'leave' or 'pop %ebp' that destroys
2155    the function's stack frame.  */
2156
2157 static int
2158 amd64_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
2159 {
2160   gdb_byte insn;
2161
2162   if (target_read_memory (pc, &insn, 1))
2163     return 0;   /* Can't read memory at pc.  */
2164
2165   if (insn != 0xc3)     /* 'ret' instruction.  */
2166     return 0;
2167
2168   return 1;
2169 }
2170
2171 static int
2172 amd64_epilogue_frame_sniffer (const struct frame_unwind *self,
2173                               struct frame_info *this_frame,
2174                               void **this_prologue_cache)
2175 {
2176   if (frame_relative_level (this_frame) == 0)
2177     return amd64_in_function_epilogue_p (get_frame_arch (this_frame),
2178                                          get_frame_pc (this_frame));
2179   else
2180     return 0;
2181 }
2182
2183 static struct amd64_frame_cache *
2184 amd64_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
2185 {
2186   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2187   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2188   struct amd64_frame_cache *cache;
2189   gdb_byte buf[8];
2190
2191   if (*this_cache)
2192     return *this_cache;
2193
2194   cache = amd64_alloc_frame_cache ();
2195   *this_cache = cache;
2196
2197   /* Cache base will be %esp plus cache->sp_offset (-8).  */
2198   get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
2199   cache->base = extract_unsigned_integer (buf, 8, 
2200                                           byte_order) + cache->sp_offset;
2201
2202   /* Cache pc will be the frame func.  */
2203   cache->pc = get_frame_pc (this_frame);
2204
2205   /* The saved %esp will be at cache->base plus 16.  */
2206   cache->saved_sp = cache->base + 16;
2207
2208   /* The saved %eip will be at cache->base plus 8.  */
2209   cache->saved_regs[AMD64_RIP_REGNUM] = cache->base + 8;
2210
2211   return cache;
2212 }
2213
2214 static void
2215 amd64_epilogue_frame_this_id (struct frame_info *this_frame,
2216                               void **this_cache,
2217                               struct frame_id *this_id)
2218 {
2219   struct amd64_frame_cache *cache = amd64_epilogue_frame_cache (this_frame,
2220                                                                this_cache);
2221
2222   (*this_id) = frame_id_build (cache->base + 8, cache->pc);
2223 }
2224
2225 static const struct frame_unwind amd64_epilogue_frame_unwind =
2226 {
2227   NORMAL_FRAME,
2228   amd64_epilogue_frame_this_id,
2229   amd64_frame_prev_register,
2230   NULL, 
2231   amd64_epilogue_frame_sniffer
2232 };
2233
2234 static struct frame_id
2235 amd64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2236 {
2237   CORE_ADDR fp;
2238
2239   fp = get_frame_register_unsigned (this_frame, AMD64_RBP_REGNUM);
2240
2241   return frame_id_build (fp + 16, get_frame_pc (this_frame));
2242 }
2243
2244 /* 16 byte align the SP per frame requirements.  */
2245
2246 static CORE_ADDR
2247 amd64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
2248 {
2249   return sp & -(CORE_ADDR)16;
2250 }
2251 \f
2252
2253 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
2254    in the floating-point register set REGSET to register cache
2255    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
2256
2257 static void
2258 amd64_supply_fpregset (const struct regset *regset, struct regcache *regcache,
2259                        int regnum, const void *fpregs, size_t len)
2260 {
2261   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2262
2263   gdb_assert (len == tdep->sizeof_fpregset);
2264   amd64_supply_fxsave (regcache, regnum, fpregs);
2265 }
2266
2267 /* Collect register REGNUM from the register cache REGCACHE and store
2268    it in the buffer specified by FPREGS and LEN as described by the
2269    floating-point register set REGSET.  If REGNUM is -1, do this for
2270    all registers in REGSET.  */
2271
2272 static void
2273 amd64_collect_fpregset (const struct regset *regset,
2274                         const struct regcache *regcache,
2275                         int regnum, void *fpregs, size_t len)
2276 {
2277   const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
2278
2279   gdb_assert (len == tdep->sizeof_fpregset);
2280   amd64_collect_fxsave (regcache, regnum, fpregs);
2281 }
2282
2283 /* Similar to amd64_supply_fpregset, but use XSAVE extended state.  */
2284
2285 static void
2286 amd64_supply_xstateregset (const struct regset *regset,
2287                            struct regcache *regcache, int regnum,
2288                            const void *xstateregs, size_t len)
2289 {
2290   amd64_supply_xsave (regcache, regnum, xstateregs);
2291 }
2292
2293 /* Similar to amd64_collect_fpregset, but use XSAVE extended state.  */
2294
2295 static void
2296 amd64_collect_xstateregset (const struct regset *regset,
2297                             const struct regcache *regcache,
2298                             int regnum, void *xstateregs, size_t len)
2299 {
2300   amd64_collect_xsave (regcache, regnum, xstateregs, 1);
2301 }
2302
2303 /* Return the appropriate register set for the core section identified
2304    by SECT_NAME and SECT_SIZE.  */
2305
2306 static const struct regset *
2307 amd64_regset_from_core_section (struct gdbarch *gdbarch,
2308                                 const char *sect_name, size_t sect_size)
2309 {
2310   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2311
2312   if (strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
2313     {
2314       if (tdep->fpregset == NULL)
2315         tdep->fpregset = regset_alloc (gdbarch, amd64_supply_fpregset,
2316                                        amd64_collect_fpregset);
2317
2318       return tdep->fpregset;
2319     }
2320
2321   if (strcmp (sect_name, ".reg-xstate") == 0)
2322     {
2323       if (tdep->xstateregset == NULL)
2324         tdep->xstateregset = regset_alloc (gdbarch,
2325                                            amd64_supply_xstateregset,
2326                                            amd64_collect_xstateregset);
2327
2328       return tdep->xstateregset;
2329     }
2330
2331   return i386_regset_from_core_section (gdbarch, sect_name, sect_size);
2332 }
2333 \f
2334
2335 /* Figure out where the longjmp will land.  Slurp the jmp_buf out of
2336    %rdi.  We expect its value to be a pointer to the jmp_buf structure
2337    from which we extract the address that we will land at.  This
2338    address is copied into PC.  This routine returns non-zero on
2339    success.  */
2340
2341 static int
2342 amd64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
2343 {
2344   gdb_byte buf[8];
2345   CORE_ADDR jb_addr;
2346   struct gdbarch *gdbarch = get_frame_arch (frame);
2347   int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
2348   int len = TYPE_LENGTH (builtin_type (gdbarch)->builtin_func_ptr);
2349
2350   /* If JB_PC_OFFSET is -1, we have no way to find out where the
2351      longjmp will land.  */
2352   if (jb_pc_offset == -1)
2353     return 0;
2354
2355   get_frame_register (frame, AMD64_RDI_REGNUM, buf);
2356   jb_addr= extract_typed_address
2357             (buf, builtin_type (gdbarch)->builtin_data_ptr);
2358   if (target_read_memory (jb_addr + jb_pc_offset, buf, len))
2359     return 0;
2360
2361   *pc = extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
2362
2363   return 1;
2364 }
2365
2366 static const int amd64_record_regmap[] =
2367 {
2368   AMD64_RAX_REGNUM, AMD64_RCX_REGNUM, AMD64_RDX_REGNUM, AMD64_RBX_REGNUM,
2369   AMD64_RSP_REGNUM, AMD64_RBP_REGNUM, AMD64_RSI_REGNUM, AMD64_RDI_REGNUM,
2370   AMD64_R8_REGNUM, AMD64_R9_REGNUM, AMD64_R10_REGNUM, AMD64_R11_REGNUM,
2371   AMD64_R12_REGNUM, AMD64_R13_REGNUM, AMD64_R14_REGNUM, AMD64_R15_REGNUM,
2372   AMD64_RIP_REGNUM, AMD64_EFLAGS_REGNUM, AMD64_CS_REGNUM, AMD64_SS_REGNUM,
2373   AMD64_DS_REGNUM, AMD64_ES_REGNUM, AMD64_FS_REGNUM, AMD64_GS_REGNUM
2374 };
2375
2376 void
2377 amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2378 {
2379   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2380   const struct target_desc *tdesc = info.target_desc;
2381
2382   /* AMD64 generally uses `fxsave' instead of `fsave' for saving its
2383      floating-point registers.  */
2384   tdep->sizeof_fpregset = I387_SIZEOF_FXSAVE;
2385
2386   if (! tdesc_has_registers (tdesc))
2387     tdesc = tdesc_amd64;
2388   tdep->tdesc = tdesc;
2389
2390   tdep->num_core_regs = AMD64_NUM_GREGS + I387_NUM_REGS;
2391   tdep->register_names = amd64_register_names;
2392
2393   if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx") != NULL)
2394     {
2395       tdep->ymmh_register_names = amd64_ymmh_names;
2396       tdep->num_ymm_regs = 16;
2397       tdep->ymm0h_regnum = AMD64_YMM0H_REGNUM;
2398     }
2399
2400   tdep->num_byte_regs = 20;
2401   tdep->num_word_regs = 16;
2402   tdep->num_dword_regs = 16;
2403   /* Avoid wiring in the MMX registers for now.  */
2404   tdep->num_mmx_regs = 0;
2405
2406   set_gdbarch_pseudo_register_read (gdbarch,
2407                                     amd64_pseudo_register_read);
2408   set_gdbarch_pseudo_register_write (gdbarch,
2409                                      amd64_pseudo_register_write);
2410
2411   set_tdesc_pseudo_register_name (gdbarch, amd64_pseudo_register_name);
2412
2413   /* AMD64 has an FPU and 16 SSE registers.  */
2414   tdep->st0_regnum = AMD64_ST0_REGNUM;
2415   tdep->num_xmm_regs = 16;
2416
2417   /* This is what all the fuss is about.  */
2418   set_gdbarch_long_bit (gdbarch, 64);
2419   set_gdbarch_long_long_bit (gdbarch, 64);
2420   set_gdbarch_ptr_bit (gdbarch, 64);
2421
2422   /* In contrast to the i386, on AMD64 a `long double' actually takes
2423      up 128 bits, even though it's still based on the i387 extended
2424      floating-point format which has only 80 significant bits.  */
2425   set_gdbarch_long_double_bit (gdbarch, 128);
2426
2427   set_gdbarch_num_regs (gdbarch, AMD64_NUM_REGS);
2428
2429   /* Register numbers of various important registers.  */
2430   set_gdbarch_sp_regnum (gdbarch, AMD64_RSP_REGNUM); /* %rsp */
2431   set_gdbarch_pc_regnum (gdbarch, AMD64_RIP_REGNUM); /* %rip */
2432   set_gdbarch_ps_regnum (gdbarch, AMD64_EFLAGS_REGNUM); /* %eflags */
2433   set_gdbarch_fp0_regnum (gdbarch, AMD64_ST0_REGNUM); /* %st(0) */
2434
2435   /* The "default" register numbering scheme for AMD64 is referred to
2436      as the "DWARF Register Number Mapping" in the System V psABI.
2437      The preferred debugging format for all known AMD64 targets is
2438      actually DWARF2, and GCC doesn't seem to support DWARF (that is
2439      DWARF-1), but we provide the same mapping just in case.  This
2440      mapping is also used for stabs, which GCC does support.  */
2441   set_gdbarch_stab_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
2442   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
2443
2444   /* We don't override SDB_REG_RO_REGNUM, since COFF doesn't seem to
2445      be in use on any of the supported AMD64 targets.  */
2446
2447   /* Call dummy code.  */
2448   set_gdbarch_push_dummy_call (gdbarch, amd64_push_dummy_call);
2449   set_gdbarch_frame_align (gdbarch, amd64_frame_align);
2450   set_gdbarch_frame_red_zone_size (gdbarch, 128);
2451   tdep->call_dummy_num_integer_regs =
2452     ARRAY_SIZE (amd64_dummy_call_integer_regs);
2453   tdep->call_dummy_integer_regs = amd64_dummy_call_integer_regs;
2454   tdep->classify = amd64_classify;
2455
2456   set_gdbarch_convert_register_p (gdbarch, i387_convert_register_p);
2457   set_gdbarch_register_to_value (gdbarch, i387_register_to_value);
2458   set_gdbarch_value_to_register (gdbarch, i387_value_to_register);
2459
2460   set_gdbarch_return_value (gdbarch, amd64_return_value);
2461
2462   set_gdbarch_skip_prologue (gdbarch, amd64_skip_prologue);
2463
2464   tdep->record_regmap = amd64_record_regmap;
2465
2466   set_gdbarch_dummy_id (gdbarch, amd64_dummy_id);
2467
2468   /* Hook the function epilogue frame unwinder.  This unwinder is
2469      appended to the list first, so that it supercedes the other
2470      unwinders in function epilogues.  */
2471   frame_unwind_prepend_unwinder (gdbarch, &amd64_epilogue_frame_unwind);
2472
2473   /* Hook the prologue-based frame unwinders.  */
2474   frame_unwind_append_unwinder (gdbarch, &amd64_sigtramp_frame_unwind);
2475   frame_unwind_append_unwinder (gdbarch, &amd64_frame_unwind);
2476   frame_base_set_default (gdbarch, &amd64_frame_base);
2477
2478   /* If we have a register mapping, enable the generic core file support.  */
2479   if (tdep->gregset_reg_offset)
2480     set_gdbarch_regset_from_core_section (gdbarch,
2481                                           amd64_regset_from_core_section);
2482
2483   set_gdbarch_get_longjmp_target (gdbarch, amd64_get_longjmp_target);
2484
2485   set_gdbarch_relocate_instruction (gdbarch, amd64_relocate_instruction);
2486 }
2487
2488 /* Provide a prototype to silence -Wmissing-prototypes.  */
2489 void _initialize_amd64_tdep (void);
2490
2491 void
2492 _initialize_amd64_tdep (void)
2493 {
2494   initialize_tdesc_amd64 ();
2495   initialize_tdesc_amd64_avx ();
2496 }
2497 \f
2498
2499 /* The 64-bit FXSAVE format differs from the 32-bit format in the
2500    sense that the instruction pointer and data pointer are simply
2501    64-bit offsets into the code segment and the data segment instead
2502    of a selector offset pair.  The functions below store the upper 32
2503    bits of these pointers (instead of just the 16-bits of the segment
2504    selector).  */
2505
2506 /* Fill register REGNUM in REGCACHE with the appropriate
2507    floating-point or SSE register value from *FXSAVE.  If REGNUM is
2508    -1, do this for all registers.  This function masks off any of the
2509    reserved bits in *FXSAVE.  */
2510
2511 void
2512 amd64_supply_fxsave (struct regcache *regcache, int regnum,
2513                      const void *fxsave)
2514 {
2515   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2516   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2517
2518   i387_supply_fxsave (regcache, regnum, fxsave);
2519
2520   if (fxsave && gdbarch_ptr_bit (gdbarch) == 64)
2521     {
2522       const gdb_byte *regs = fxsave;
2523
2524       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
2525         regcache_raw_supply (regcache, I387_FISEG_REGNUM (tdep), regs + 12);
2526       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
2527         regcache_raw_supply (regcache, I387_FOSEG_REGNUM (tdep), regs + 20);
2528     }
2529 }
2530
2531 /* Similar to amd64_supply_fxsave, but use XSAVE extended state.  */
2532
2533 void
2534 amd64_supply_xsave (struct regcache *regcache, int regnum,
2535                     const void *xsave)
2536 {
2537   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2538   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2539
2540   i387_supply_xsave (regcache, regnum, xsave);
2541
2542   if (xsave && gdbarch_ptr_bit (gdbarch) == 64)
2543     {
2544       const gdb_byte *regs = xsave;
2545
2546       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
2547         regcache_raw_supply (regcache, I387_FISEG_REGNUM (tdep),
2548                              regs + 12);
2549       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
2550         regcache_raw_supply (regcache, I387_FOSEG_REGNUM (tdep),
2551                              regs + 20);
2552     }
2553 }
2554
2555 /* Fill register REGNUM (if it is a floating-point or SSE register) in
2556    *FXSAVE with the value from REGCACHE.  If REGNUM is -1, do this for
2557    all registers.  This function doesn't touch any of the reserved
2558    bits in *FXSAVE.  */
2559
2560 void
2561 amd64_collect_fxsave (const struct regcache *regcache, int regnum,
2562                       void *fxsave)
2563 {
2564   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2565   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2566   gdb_byte *regs = fxsave;
2567
2568   i387_collect_fxsave (regcache, regnum, fxsave);
2569
2570   if (gdbarch_ptr_bit (gdbarch) == 64)
2571     {
2572       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
2573         regcache_raw_collect (regcache, I387_FISEG_REGNUM (tdep), regs + 12);
2574       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
2575         regcache_raw_collect (regcache, I387_FOSEG_REGNUM (tdep), regs + 20);
2576     }
2577 }
2578
2579 /* Similar to amd64_collect_fxsave, but but use XSAVE extended state.  */
2580
2581 void
2582 amd64_collect_xsave (const struct regcache *regcache, int regnum,
2583                      void *xsave, int gcore)
2584 {
2585   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2586   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2587   gdb_byte *regs = xsave;
2588
2589   i387_collect_xsave (regcache, regnum, xsave, gcore);
2590
2591   if (gdbarch_ptr_bit (gdbarch) == 64)
2592     {
2593       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
2594         regcache_raw_collect (regcache, I387_FISEG_REGNUM (tdep),
2595                               regs + 12);
2596       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
2597         regcache_raw_collect (regcache, I387_FOSEG_REGNUM (tdep),
2598                               regs + 20);
2599     }
2600 }