Allocate buffer with proper size in amd64_pseudo_register_{read_value,write}
[external/binutils.git] / gdb / amd64-tdep.c
1 /* Target-dependent code for AMD64.
2
3    Copyright (C) 2001-2018 Free Software Foundation, Inc.
4
5    Contributed by Jiri Smid, SuSE Labs.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "opcode/i386.h"
24 #include "dis-asm.h"
25 #include "arch-utils.h"
26 #include "block.h"
27 #include "dummy-frame.h"
28 #include "frame.h"
29 #include "frame-base.h"
30 #include "frame-unwind.h"
31 #include "inferior.h"
32 #include "infrun.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 "amd64-tdep.h"
41 #include "i387-tdep.h"
42 #include "x86-xstate.h"
43 #include <algorithm>
44 #include "target-descriptions.h"
45 #include "arch/amd64.h"
46 #include "producer.h"
47 #include "ax.h"
48 #include "ax-gdb.h"
49 #include "common/byte-vector.h"
50 #include "osabi.h"
51 #include "x86-tdep.h"
52
53 /* Note that the AMD64 architecture was previously known as x86-64.
54    The latter is (forever) engraved into the canonical system name as
55    returned by config.guess, and used as the name for the AMD64 port
56    of GNU/Linux.  The BSD's have renamed their ports to amd64; they
57    don't like to shout.  For GDB we prefer the amd64_-prefix over the
58    x86_64_-prefix since it's so much easier to type.  */
59
60 /* Register information.  */
61
62 static const char *amd64_register_names[] = 
63 {
64   "rax", "rbx", "rcx", "rdx", "rsi", "rdi", "rbp", "rsp",
65
66   /* %r8 is indeed register number 8.  */
67   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
68   "rip", "eflags", "cs", "ss", "ds", "es", "fs", "gs",
69
70   /* %st0 is register number 24.  */
71   "st0", "st1", "st2", "st3", "st4", "st5", "st6", "st7",
72   "fctrl", "fstat", "ftag", "fiseg", "fioff", "foseg", "fooff", "fop",
73
74   /* %xmm0 is register number 40.  */
75   "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
76   "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15",
77   "mxcsr",
78 };
79
80 static const char *amd64_ymm_names[] = 
81 {
82   "ymm0", "ymm1", "ymm2", "ymm3",
83   "ymm4", "ymm5", "ymm6", "ymm7",
84   "ymm8", "ymm9", "ymm10", "ymm11",
85   "ymm12", "ymm13", "ymm14", "ymm15"
86 };
87
88 static const char *amd64_ymm_avx512_names[] =
89 {
90   "ymm16", "ymm17", "ymm18", "ymm19",
91   "ymm20", "ymm21", "ymm22", "ymm23",
92   "ymm24", "ymm25", "ymm26", "ymm27",
93   "ymm28", "ymm29", "ymm30", "ymm31"
94 };
95
96 static const char *amd64_ymmh_names[] = 
97 {
98   "ymm0h", "ymm1h", "ymm2h", "ymm3h",
99   "ymm4h", "ymm5h", "ymm6h", "ymm7h",
100   "ymm8h", "ymm9h", "ymm10h", "ymm11h",
101   "ymm12h", "ymm13h", "ymm14h", "ymm15h"
102 };
103
104 static const char *amd64_ymmh_avx512_names[] =
105 {
106   "ymm16h", "ymm17h", "ymm18h", "ymm19h",
107   "ymm20h", "ymm21h", "ymm22h", "ymm23h",
108   "ymm24h", "ymm25h", "ymm26h", "ymm27h",
109   "ymm28h", "ymm29h", "ymm30h", "ymm31h"
110 };
111
112 static const char *amd64_mpx_names[] =
113 {
114   "bnd0raw", "bnd1raw", "bnd2raw", "bnd3raw", "bndcfgu", "bndstatus"
115 };
116
117 static const char *amd64_k_names[] =
118 {
119   "k0", "k1", "k2", "k3",
120   "k4", "k5", "k6", "k7"
121 };
122
123 static const char *amd64_zmmh_names[] =
124 {
125   "zmm0h", "zmm1h", "zmm2h", "zmm3h",
126   "zmm4h", "zmm5h", "zmm6h", "zmm7h",
127   "zmm8h", "zmm9h", "zmm10h", "zmm11h",
128   "zmm12h", "zmm13h", "zmm14h", "zmm15h",
129   "zmm16h", "zmm17h", "zmm18h", "zmm19h",
130   "zmm20h", "zmm21h", "zmm22h", "zmm23h",
131   "zmm24h", "zmm25h", "zmm26h", "zmm27h",
132   "zmm28h", "zmm29h", "zmm30h", "zmm31h"
133 };
134
135 static const char *amd64_zmm_names[] =
136 {
137   "zmm0", "zmm1", "zmm2", "zmm3",
138   "zmm4", "zmm5", "zmm6", "zmm7",
139   "zmm8", "zmm9", "zmm10", "zmm11",
140   "zmm12", "zmm13", "zmm14", "zmm15",
141   "zmm16", "zmm17", "zmm18", "zmm19",
142   "zmm20", "zmm21", "zmm22", "zmm23",
143   "zmm24", "zmm25", "zmm26", "zmm27",
144   "zmm28", "zmm29", "zmm30", "zmm31"
145 };
146
147 static const char *amd64_xmm_avx512_names[] = {
148     "xmm16",  "xmm17",  "xmm18",  "xmm19",
149     "xmm20",  "xmm21",  "xmm22",  "xmm23",
150     "xmm24",  "xmm25",  "xmm26",  "xmm27",
151     "xmm28",  "xmm29",  "xmm30",  "xmm31"
152 };
153
154 static const char *amd64_pkeys_names[] = {
155     "pkru"
156 };
157
158 /* DWARF Register Number Mapping as defined in the System V psABI,
159    section 3.6.  */
160
161 static int amd64_dwarf_regmap[] =
162 {
163   /* General Purpose Registers RAX, RDX, RCX, RBX, RSI, RDI.  */
164   AMD64_RAX_REGNUM, AMD64_RDX_REGNUM,
165   AMD64_RCX_REGNUM, AMD64_RBX_REGNUM,
166   AMD64_RSI_REGNUM, AMD64_RDI_REGNUM,
167
168   /* Frame Pointer Register RBP.  */
169   AMD64_RBP_REGNUM,
170
171   /* Stack Pointer Register RSP.  */
172   AMD64_RSP_REGNUM,
173
174   /* Extended Integer Registers 8 - 15.  */
175   AMD64_R8_REGNUM,              /* %r8 */
176   AMD64_R9_REGNUM,              /* %r9 */
177   AMD64_R10_REGNUM,             /* %r10 */
178   AMD64_R11_REGNUM,             /* %r11 */
179   AMD64_R12_REGNUM,             /* %r12 */
180   AMD64_R13_REGNUM,             /* %r13 */
181   AMD64_R14_REGNUM,             /* %r14 */
182   AMD64_R15_REGNUM,             /* %r15 */
183
184   /* Return Address RA.  Mapped to RIP.  */
185   AMD64_RIP_REGNUM,
186
187   /* SSE Registers 0 - 7.  */
188   AMD64_XMM0_REGNUM + 0, AMD64_XMM1_REGNUM,
189   AMD64_XMM0_REGNUM + 2, AMD64_XMM0_REGNUM + 3,
190   AMD64_XMM0_REGNUM + 4, AMD64_XMM0_REGNUM + 5,
191   AMD64_XMM0_REGNUM + 6, AMD64_XMM0_REGNUM + 7,
192
193   /* Extended SSE Registers 8 - 15.  */
194   AMD64_XMM0_REGNUM + 8, AMD64_XMM0_REGNUM + 9,
195   AMD64_XMM0_REGNUM + 10, AMD64_XMM0_REGNUM + 11,
196   AMD64_XMM0_REGNUM + 12, AMD64_XMM0_REGNUM + 13,
197   AMD64_XMM0_REGNUM + 14, AMD64_XMM0_REGNUM + 15,
198
199   /* Floating Point Registers 0-7.  */
200   AMD64_ST0_REGNUM + 0, AMD64_ST0_REGNUM + 1,
201   AMD64_ST0_REGNUM + 2, AMD64_ST0_REGNUM + 3,
202   AMD64_ST0_REGNUM + 4, AMD64_ST0_REGNUM + 5,
203   AMD64_ST0_REGNUM + 6, AMD64_ST0_REGNUM + 7,
204
205   /* MMX Registers 0 - 7.
206      We have to handle those registers specifically, as their register
207      number within GDB depends on the target (or they may even not be
208      available at all).  */
209   -1, -1, -1, -1, -1, -1, -1, -1,
210
211   /* Control and Status Flags Register.  */
212   AMD64_EFLAGS_REGNUM,
213
214   /* Selector Registers.  */
215   AMD64_ES_REGNUM,
216   AMD64_CS_REGNUM,
217   AMD64_SS_REGNUM,
218   AMD64_DS_REGNUM,
219   AMD64_FS_REGNUM,
220   AMD64_GS_REGNUM,
221   -1,
222   -1,
223
224   /* Segment Base Address Registers.  */
225   -1,
226   -1,
227   -1,
228   -1,
229
230   /* Special Selector Registers.  */
231   -1,
232   -1,
233
234   /* Floating Point Control Registers.  */
235   AMD64_MXCSR_REGNUM,
236   AMD64_FCTRL_REGNUM,
237   AMD64_FSTAT_REGNUM
238 };
239
240 static const int amd64_dwarf_regmap_len =
241   (sizeof (amd64_dwarf_regmap) / sizeof (amd64_dwarf_regmap[0]));
242
243 /* Convert DWARF register number REG to the appropriate register
244    number used by GDB.  */
245
246 static int
247 amd64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
248 {
249   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
250   int ymm0_regnum = tdep->ymm0_regnum;
251   int regnum = -1;
252
253   if (reg >= 0 && reg < amd64_dwarf_regmap_len)
254     regnum = amd64_dwarf_regmap[reg];
255
256   if (ymm0_regnum >= 0
257            && i386_xmm_regnum_p (gdbarch, regnum))
258     regnum += ymm0_regnum - I387_XMM0_REGNUM (tdep);
259
260   return regnum;
261 }
262
263 /* Map architectural register numbers to gdb register numbers.  */
264
265 static const int amd64_arch_regmap[16] =
266 {
267   AMD64_RAX_REGNUM,     /* %rax */
268   AMD64_RCX_REGNUM,     /* %rcx */
269   AMD64_RDX_REGNUM,     /* %rdx */
270   AMD64_RBX_REGNUM,     /* %rbx */
271   AMD64_RSP_REGNUM,     /* %rsp */
272   AMD64_RBP_REGNUM,     /* %rbp */
273   AMD64_RSI_REGNUM,     /* %rsi */
274   AMD64_RDI_REGNUM,     /* %rdi */
275   AMD64_R8_REGNUM,      /* %r8 */
276   AMD64_R9_REGNUM,      /* %r9 */
277   AMD64_R10_REGNUM,     /* %r10 */
278   AMD64_R11_REGNUM,     /* %r11 */
279   AMD64_R12_REGNUM,     /* %r12 */
280   AMD64_R13_REGNUM,     /* %r13 */
281   AMD64_R14_REGNUM,     /* %r14 */
282   AMD64_R15_REGNUM      /* %r15 */
283 };
284
285 static const int amd64_arch_regmap_len =
286   (sizeof (amd64_arch_regmap) / sizeof (amd64_arch_regmap[0]));
287
288 /* Convert architectural register number REG to the appropriate register
289    number used by GDB.  */
290
291 static int
292 amd64_arch_reg_to_regnum (int reg)
293 {
294   gdb_assert (reg >= 0 && reg < amd64_arch_regmap_len);
295
296   return amd64_arch_regmap[reg];
297 }
298
299 /* Register names for byte pseudo-registers.  */
300
301 static const char *amd64_byte_names[] =
302 {
303   "al", "bl", "cl", "dl", "sil", "dil", "bpl", "spl",
304   "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l",
305   "ah", "bh", "ch", "dh"
306 };
307
308 /* Number of lower byte registers.  */
309 #define AMD64_NUM_LOWER_BYTE_REGS 16
310
311 /* Register names for word pseudo-registers.  */
312
313 static const char *amd64_word_names[] =
314 {
315   "ax", "bx", "cx", "dx", "si", "di", "bp", "", 
316   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
317 };
318
319 /* Register names for dword pseudo-registers.  */
320
321 static const char *amd64_dword_names[] =
322 {
323   "eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp", 
324   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d",
325   "eip"
326 };
327
328 /* Return the name of register REGNUM.  */
329
330 static const char *
331 amd64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
332 {
333   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
334   if (i386_byte_regnum_p (gdbarch, regnum))
335     return amd64_byte_names[regnum - tdep->al_regnum];
336   else if (i386_zmm_regnum_p (gdbarch, regnum))
337     return amd64_zmm_names[regnum - tdep->zmm0_regnum];
338   else if (i386_ymm_regnum_p (gdbarch, regnum))
339     return amd64_ymm_names[regnum - tdep->ymm0_regnum];
340   else if (i386_ymm_avx512_regnum_p (gdbarch, regnum))
341     return amd64_ymm_avx512_names[regnum - tdep->ymm16_regnum];
342   else if (i386_word_regnum_p (gdbarch, regnum))
343     return amd64_word_names[regnum - tdep->ax_regnum];
344   else if (i386_dword_regnum_p (gdbarch, regnum))
345     return amd64_dword_names[regnum - tdep->eax_regnum];
346   else
347     return i386_pseudo_register_name (gdbarch, regnum);
348 }
349
350 static struct value *
351 amd64_pseudo_register_read_value (struct gdbarch *gdbarch,
352                                   readable_regcache *regcache,
353                                   int regnum)
354 {
355   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
356
357   value *result_value = allocate_value (register_type (gdbarch, regnum));
358   VALUE_LVAL (result_value) = lval_register;
359   VALUE_REGNUM (result_value) = regnum;
360   gdb_byte *buf = value_contents_raw (result_value);
361
362   if (i386_byte_regnum_p (gdbarch, regnum))
363     {
364       int gpnum = regnum - tdep->al_regnum;
365
366       /* Extract (always little endian).  */
367       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
368         {
369           gpnum -= AMD64_NUM_LOWER_BYTE_REGS;
370           gdb_byte raw_buf[register_size (gdbarch, gpnum)];
371
372           /* Special handling for AH, BH, CH, DH.  */
373           register_status status = regcache->raw_read (gpnum, raw_buf);
374           if (status == REG_VALID)
375             memcpy (buf, raw_buf + 1, 1);
376           else
377             mark_value_bytes_unavailable (result_value, 0,
378                                           TYPE_LENGTH (value_type (result_value)));
379         }
380       else
381         {
382           gdb_byte raw_buf[register_size (gdbarch, gpnum)];
383           register_status status = regcache->raw_read (gpnum, raw_buf);
384           if (status == REG_VALID)
385             memcpy (buf, raw_buf, 1);
386           else
387             mark_value_bytes_unavailable (result_value, 0,
388                                           TYPE_LENGTH (value_type (result_value)));
389         }
390     }
391   else if (i386_dword_regnum_p (gdbarch, regnum))
392     {
393       int gpnum = regnum - tdep->eax_regnum;
394       gdb_byte raw_buf[register_size (gdbarch, gpnum)];
395       /* Extract (always little endian).  */
396       register_status status = regcache->raw_read (gpnum, raw_buf);
397       if (status == REG_VALID)
398         memcpy (buf, raw_buf, 4);
399       else
400         mark_value_bytes_unavailable (result_value, 0,
401                                       TYPE_LENGTH (value_type (result_value)));
402     }
403   else
404     i386_pseudo_register_read_into_value (gdbarch, regcache, regnum,
405                                           result_value);
406
407   return result_value;
408 }
409
410 static void
411 amd64_pseudo_register_write (struct gdbarch *gdbarch,
412                              struct regcache *regcache,
413                              int regnum, const gdb_byte *buf)
414 {
415   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
416
417   if (i386_byte_regnum_p (gdbarch, regnum))
418     {
419       int gpnum = regnum - tdep->al_regnum;
420
421       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
422         {
423           gpnum -= AMD64_NUM_LOWER_BYTE_REGS;
424           gdb_byte raw_buf[register_size (gdbarch, gpnum)];
425
426           /* Read ... AH, BH, CH, DH.  */
427           regcache->raw_read (gpnum, raw_buf);
428           /* ... Modify ... (always little endian).  */
429           memcpy (raw_buf + 1, buf, 1);
430           /* ... Write.  */
431           regcache->raw_write (gpnum, raw_buf);
432         }
433       else
434         {
435           gdb_byte raw_buf[register_size (gdbarch, gpnum)];
436
437           /* Read ...  */
438           regcache->raw_read (gpnum, raw_buf);
439           /* ... Modify ... (always little endian).  */
440           memcpy (raw_buf, buf, 1);
441           /* ... Write.  */
442           regcache->raw_write (gpnum, raw_buf);
443         }
444     }
445   else if (i386_dword_regnum_p (gdbarch, regnum))
446     {
447       int gpnum = regnum - tdep->eax_regnum;
448       gdb_byte raw_buf[register_size (gdbarch, gpnum)];
449
450       /* Read ...  */
451       regcache->raw_read (gpnum, raw_buf);
452       /* ... Modify ... (always little endian).  */
453       memcpy (raw_buf, buf, 4);
454       /* ... Write.  */
455       regcache->raw_write (gpnum, raw_buf);
456     }
457   else
458     i386_pseudo_register_write (gdbarch, regcache, regnum, buf);
459 }
460
461 /* Implement the 'ax_pseudo_register_collect' gdbarch method.  */
462
463 static int
464 amd64_ax_pseudo_register_collect (struct gdbarch *gdbarch,
465                                   struct agent_expr *ax, int regnum)
466 {
467   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
468
469   if (i386_byte_regnum_p (gdbarch, regnum))
470     {
471       int gpnum = regnum - tdep->al_regnum;
472
473       if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
474         ax_reg_mask (ax, gpnum - AMD64_NUM_LOWER_BYTE_REGS);
475       else
476         ax_reg_mask (ax, gpnum);
477       return 0;
478     }
479   else if (i386_dword_regnum_p (gdbarch, regnum))
480     {
481       int gpnum = regnum - tdep->eax_regnum;
482
483       ax_reg_mask (ax, gpnum);
484       return 0;
485     }
486   else
487     return i386_ax_pseudo_register_collect (gdbarch, ax, regnum);
488 }
489
490 \f
491
492 /* Register classes as defined in the psABI.  */
493
494 enum amd64_reg_class
495 {
496   AMD64_INTEGER,
497   AMD64_SSE,
498   AMD64_SSEUP,
499   AMD64_X87,
500   AMD64_X87UP,
501   AMD64_COMPLEX_X87,
502   AMD64_NO_CLASS,
503   AMD64_MEMORY
504 };
505
506 /* Return the union class of CLASS1 and CLASS2.  See the psABI for
507    details.  */
508
509 static enum amd64_reg_class
510 amd64_merge_classes (enum amd64_reg_class class1, enum amd64_reg_class class2)
511 {
512   /* Rule (a): If both classes are equal, this is the resulting class.  */
513   if (class1 == class2)
514     return class1;
515
516   /* Rule (b): If one of the classes is NO_CLASS, the resulting class
517      is the other class.  */
518   if (class1 == AMD64_NO_CLASS)
519     return class2;
520   if (class2 == AMD64_NO_CLASS)
521     return class1;
522
523   /* Rule (c): If one of the classes is MEMORY, the result is MEMORY.  */
524   if (class1 == AMD64_MEMORY || class2 == AMD64_MEMORY)
525     return AMD64_MEMORY;
526
527   /* Rule (d): If one of the classes is INTEGER, the result is INTEGER.  */
528   if (class1 == AMD64_INTEGER || class2 == AMD64_INTEGER)
529     return AMD64_INTEGER;
530
531   /* Rule (e): If one of the classes is X87, X87UP, COMPLEX_X87 class,
532      MEMORY is used as class.  */
533   if (class1 == AMD64_X87 || class1 == AMD64_X87UP
534       || class1 == AMD64_COMPLEX_X87 || class2 == AMD64_X87
535       || class2 == AMD64_X87UP || class2 == AMD64_COMPLEX_X87)
536     return AMD64_MEMORY;
537
538   /* Rule (f): Otherwise class SSE is used.  */
539   return AMD64_SSE;
540 }
541
542 static void amd64_classify (struct type *type, enum amd64_reg_class theclass[2]);
543
544 /* Return non-zero if TYPE is a non-POD structure or union type.  */
545
546 static int
547 amd64_non_pod_p (struct type *type)
548 {
549   /* ??? A class with a base class certainly isn't POD, but does this
550      catch all non-POD structure types?  */
551   if (TYPE_CODE (type) == TYPE_CODE_STRUCT && TYPE_N_BASECLASSES (type) > 0)
552     return 1;
553
554   return 0;
555 }
556
557 /* Classify TYPE according to the rules for aggregate (structures and
558    arrays) and union types, and store the result in CLASS.  */
559
560 static void
561 amd64_classify_aggregate (struct type *type, enum amd64_reg_class theclass[2])
562 {
563   /* 1. If the size of an object is larger than two eightbytes, or in
564         C++, is a non-POD structure or union type, or contains
565         unaligned fields, it has class memory.  */
566   if (TYPE_LENGTH (type) > 16 || amd64_non_pod_p (type))
567     {
568       theclass[0] = theclass[1] = AMD64_MEMORY;
569       return;
570     }
571
572   /* 2. Both eightbytes get initialized to class NO_CLASS.  */
573   theclass[0] = theclass[1] = AMD64_NO_CLASS;
574
575   /* 3. Each field of an object is classified recursively so that
576         always two fields are considered. The resulting class is
577         calculated according to the classes of the fields in the
578         eightbyte: */
579
580   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
581     {
582       struct type *subtype = check_typedef (TYPE_TARGET_TYPE (type));
583
584       /* All fields in an array have the same type.  */
585       amd64_classify (subtype, theclass);
586       if (TYPE_LENGTH (type) > 8 && theclass[1] == AMD64_NO_CLASS)
587         theclass[1] = theclass[0];
588     }
589   else
590     {
591       int i;
592
593       /* Structure or union.  */
594       gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
595                   || TYPE_CODE (type) == TYPE_CODE_UNION);
596
597       for (i = 0; i < TYPE_NFIELDS (type); i++)
598         {
599           struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
600           int pos = TYPE_FIELD_BITPOS (type, i) / 64;
601           enum amd64_reg_class subclass[2];
602           int bitsize = TYPE_FIELD_BITSIZE (type, i);
603           int endpos;
604
605           if (bitsize == 0)
606             bitsize = TYPE_LENGTH (subtype) * 8;
607           endpos = (TYPE_FIELD_BITPOS (type, i) + bitsize - 1) / 64;
608
609           /* Ignore static fields, or empty fields, for example nested
610              empty structures.*/
611           if (field_is_static (&TYPE_FIELD (type, i)) || bitsize == 0)
612             continue;
613
614           gdb_assert (pos == 0 || pos == 1);
615
616           amd64_classify (subtype, subclass);
617           theclass[pos] = amd64_merge_classes (theclass[pos], subclass[0]);
618           if (bitsize <= 64 && pos == 0 && endpos == 1)
619             /* This is a bit of an odd case:  We have a field that would
620                normally fit in one of the two eightbytes, except that
621                it is placed in a way that this field straddles them.
622                This has been seen with a structure containing an array.
623
624                The ABI is a bit unclear in this case, but we assume that
625                this field's class (stored in subclass[0]) must also be merged
626                into class[1].  In other words, our field has a piece stored
627                in the second eight-byte, and thus its class applies to
628                the second eight-byte as well.
629
630                In the case where the field length exceeds 8 bytes,
631                it should not be necessary to merge the field class
632                into class[1].  As LEN > 8, subclass[1] is necessarily
633                different from AMD64_NO_CLASS.  If subclass[1] is equal
634                to subclass[0], then the normal class[1]/subclass[1]
635                merging will take care of everything.  For subclass[1]
636                to be different from subclass[0], I can only see the case
637                where we have a SSE/SSEUP or X87/X87UP pair, which both
638                use up all 16 bytes of the aggregate, and are already
639                handled just fine (because each portion sits on its own
640                8-byte).  */
641             theclass[1] = amd64_merge_classes (theclass[1], subclass[0]);
642           if (pos == 0)
643             theclass[1] = amd64_merge_classes (theclass[1], subclass[1]);
644         }
645     }
646
647   /* 4. Then a post merger cleanup is done:  */
648
649   /* Rule (a): If one of the classes is MEMORY, the whole argument is
650      passed in memory.  */
651   if (theclass[0] == AMD64_MEMORY || theclass[1] == AMD64_MEMORY)
652     theclass[0] = theclass[1] = AMD64_MEMORY;
653
654   /* Rule (b): If SSEUP is not preceded by SSE, it is converted to
655      SSE.  */
656   if (theclass[0] == AMD64_SSEUP)
657     theclass[0] = AMD64_SSE;
658   if (theclass[1] == AMD64_SSEUP && theclass[0] != AMD64_SSE)
659     theclass[1] = AMD64_SSE;
660 }
661
662 /* Classify TYPE, and store the result in CLASS.  */
663
664 static void
665 amd64_classify (struct type *type, enum amd64_reg_class theclass[2])
666 {
667   enum type_code code = TYPE_CODE (type);
668   int len = TYPE_LENGTH (type);
669
670   theclass[0] = theclass[1] = AMD64_NO_CLASS;
671
672   /* Arguments of types (signed and unsigned) _Bool, char, short, int,
673      long, long long, and pointers are in the INTEGER class.  Similarly,
674      range types, used by languages such as Ada, are also in the INTEGER
675      class.  */
676   if ((code == TYPE_CODE_INT || code == TYPE_CODE_ENUM
677        || code == TYPE_CODE_BOOL || code == TYPE_CODE_RANGE
678        || code == TYPE_CODE_CHAR
679        || code == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type))
680       && (len == 1 || len == 2 || len == 4 || len == 8))
681     theclass[0] = AMD64_INTEGER;
682
683   /* Arguments of types float, double, _Decimal32, _Decimal64 and __m64
684      are in class SSE.  */
685   else if ((code == TYPE_CODE_FLT || code == TYPE_CODE_DECFLOAT)
686            && (len == 4 || len == 8))
687     /* FIXME: __m64 .  */
688     theclass[0] = AMD64_SSE;
689
690   /* Arguments of types __float128, _Decimal128 and __m128 are split into
691      two halves.  The least significant ones belong to class SSE, the most
692      significant one to class SSEUP.  */
693   else if (code == TYPE_CODE_DECFLOAT && len == 16)
694     /* FIXME: __float128, __m128.  */
695     theclass[0] = AMD64_SSE, theclass[1] = AMD64_SSEUP;
696
697   /* The 64-bit mantissa of arguments of type long double belongs to
698      class X87, the 16-bit exponent plus 6 bytes of padding belongs to
699      class X87UP.  */
700   else if (code == TYPE_CODE_FLT && len == 16)
701     /* Class X87 and X87UP.  */
702     theclass[0] = AMD64_X87, theclass[1] = AMD64_X87UP;
703
704   /* Arguments of complex T where T is one of the types float or
705      double get treated as if they are implemented as:
706
707      struct complexT {
708        T real;
709        T imag;
710      };
711
712   */
713   else if (code == TYPE_CODE_COMPLEX && len == 8)
714     theclass[0] = AMD64_SSE;
715   else if (code == TYPE_CODE_COMPLEX && len == 16)
716     theclass[0] = theclass[1] = AMD64_SSE;
717
718   /* A variable of type complex long double is classified as type
719      COMPLEX_X87.  */
720   else if (code == TYPE_CODE_COMPLEX && len == 32)
721     theclass[0] = AMD64_COMPLEX_X87;
722
723   /* Aggregates.  */
724   else if (code == TYPE_CODE_ARRAY || code == TYPE_CODE_STRUCT
725            || code == TYPE_CODE_UNION)
726     amd64_classify_aggregate (type, theclass);
727 }
728
729 static enum return_value_convention
730 amd64_return_value (struct gdbarch *gdbarch, struct value *function,
731                     struct type *type, struct regcache *regcache,
732                     gdb_byte *readbuf, const gdb_byte *writebuf)
733 {
734   enum amd64_reg_class theclass[2];
735   int len = TYPE_LENGTH (type);
736   static int integer_regnum[] = { AMD64_RAX_REGNUM, AMD64_RDX_REGNUM };
737   static int sse_regnum[] = { AMD64_XMM0_REGNUM, AMD64_XMM1_REGNUM };
738   int integer_reg = 0;
739   int sse_reg = 0;
740   int i;
741
742   gdb_assert (!(readbuf && writebuf));
743
744   /* 1. Classify the return type with the classification algorithm.  */
745   amd64_classify (type, theclass);
746
747   /* 2. If the type has class MEMORY, then the caller provides space
748      for the return value and passes the address of this storage in
749      %rdi as if it were the first argument to the function.  In effect,
750      this address becomes a hidden first argument.
751
752      On return %rax will contain the address that has been passed in
753      by the caller in %rdi.  */
754   if (theclass[0] == AMD64_MEMORY)
755     {
756       /* As indicated by the comment above, the ABI guarantees that we
757          can always find the return value just after the function has
758          returned.  */
759
760       if (readbuf)
761         {
762           ULONGEST addr;
763
764           regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &addr);
765           read_memory (addr, readbuf, TYPE_LENGTH (type));
766         }
767
768       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
769     }
770
771   /* 8. If the class is COMPLEX_X87, the real part of the value is
772         returned in %st0 and the imaginary part in %st1.  */
773   if (theclass[0] == AMD64_COMPLEX_X87)
774     {
775       if (readbuf)
776         {
777           regcache->raw_read (AMD64_ST0_REGNUM, readbuf);
778           regcache->raw_read (AMD64_ST1_REGNUM, readbuf + 16);
779         }
780
781       if (writebuf)
782         {
783           i387_return_value (gdbarch, regcache);
784           regcache->raw_write (AMD64_ST0_REGNUM, writebuf);
785           regcache->raw_write (AMD64_ST1_REGNUM, writebuf + 16);
786
787           /* Fix up the tag word such that both %st(0) and %st(1) are
788              marked as valid.  */
789           regcache_raw_write_unsigned (regcache, AMD64_FTAG_REGNUM, 0xfff);
790         }
791
792       return RETURN_VALUE_REGISTER_CONVENTION;
793     }
794
795   gdb_assert (theclass[1] != AMD64_MEMORY);
796   gdb_assert (len <= 16);
797
798   for (i = 0; len > 0; i++, len -= 8)
799     {
800       int regnum = -1;
801       int offset = 0;
802
803       switch (theclass[i])
804         {
805         case AMD64_INTEGER:
806           /* 3. If the class is INTEGER, the next available register
807              of the sequence %rax, %rdx is used.  */
808           regnum = integer_regnum[integer_reg++];
809           break;
810
811         case AMD64_SSE:
812           /* 4. If the class is SSE, the next available SSE register
813              of the sequence %xmm0, %xmm1 is used.  */
814           regnum = sse_regnum[sse_reg++];
815           break;
816
817         case AMD64_SSEUP:
818           /* 5. If the class is SSEUP, the eightbyte is passed in the
819              upper half of the last used SSE register.  */
820           gdb_assert (sse_reg > 0);
821           regnum = sse_regnum[sse_reg - 1];
822           offset = 8;
823           break;
824
825         case AMD64_X87:
826           /* 6. If the class is X87, the value is returned on the X87
827              stack in %st0 as 80-bit x87 number.  */
828           regnum = AMD64_ST0_REGNUM;
829           if (writebuf)
830             i387_return_value (gdbarch, regcache);
831           break;
832
833         case AMD64_X87UP:
834           /* 7. If the class is X87UP, the value is returned together
835              with the previous X87 value in %st0.  */
836           gdb_assert (i > 0 && theclass[0] == AMD64_X87);
837           regnum = AMD64_ST0_REGNUM;
838           offset = 8;
839           len = 2;
840           break;
841
842         case AMD64_NO_CLASS:
843           continue;
844
845         default:
846           gdb_assert (!"Unexpected register class.");
847         }
848
849       gdb_assert (regnum != -1);
850
851       if (readbuf)
852         regcache->raw_read_part (regnum, offset, std::min (len, 8),
853                                  readbuf + i * 8);
854       if (writebuf)
855         regcache->raw_write_part (regnum, offset, std::min (len, 8),
856                                   writebuf + i * 8);
857     }
858
859   return RETURN_VALUE_REGISTER_CONVENTION;
860 }
861 \f
862
863 static CORE_ADDR
864 amd64_push_arguments (struct regcache *regcache, int nargs,
865                       struct value **args, CORE_ADDR sp, int struct_return)
866 {
867   static int integer_regnum[] =
868   {
869     AMD64_RDI_REGNUM,           /* %rdi */
870     AMD64_RSI_REGNUM,           /* %rsi */
871     AMD64_RDX_REGNUM,           /* %rdx */
872     AMD64_RCX_REGNUM,           /* %rcx */
873     AMD64_R8_REGNUM,            /* %r8 */
874     AMD64_R9_REGNUM             /* %r9 */
875   };
876   static int sse_regnum[] =
877   {
878     /* %xmm0 ... %xmm7 */
879     AMD64_XMM0_REGNUM + 0, AMD64_XMM1_REGNUM,
880     AMD64_XMM0_REGNUM + 2, AMD64_XMM0_REGNUM + 3,
881     AMD64_XMM0_REGNUM + 4, AMD64_XMM0_REGNUM + 5,
882     AMD64_XMM0_REGNUM + 6, AMD64_XMM0_REGNUM + 7,
883   };
884   struct value **stack_args = XALLOCAVEC (struct value *, nargs);
885   int num_stack_args = 0;
886   int num_elements = 0;
887   int element = 0;
888   int integer_reg = 0;
889   int sse_reg = 0;
890   int i;
891
892   /* Reserve a register for the "hidden" argument.  */
893   if (struct_return)
894     integer_reg++;
895
896   for (i = 0; i < nargs; i++)
897     {
898       struct type *type = value_type (args[i]);
899       int len = TYPE_LENGTH (type);
900       enum amd64_reg_class theclass[2];
901       int needed_integer_regs = 0;
902       int needed_sse_regs = 0;
903       int j;
904
905       /* Classify argument.  */
906       amd64_classify (type, theclass);
907
908       /* Calculate the number of integer and SSE registers needed for
909          this argument.  */
910       for (j = 0; j < 2; j++)
911         {
912           if (theclass[j] == AMD64_INTEGER)
913             needed_integer_regs++;
914           else if (theclass[j] == AMD64_SSE)
915             needed_sse_regs++;
916         }
917
918       /* Check whether enough registers are available, and if the
919          argument should be passed in registers at all.  */
920       if (integer_reg + needed_integer_regs > ARRAY_SIZE (integer_regnum)
921           || sse_reg + needed_sse_regs > ARRAY_SIZE (sse_regnum)
922           || (needed_integer_regs == 0 && needed_sse_regs == 0))
923         {
924           /* The argument will be passed on the stack.  */
925           num_elements += ((len + 7) / 8);
926           stack_args[num_stack_args++] = args[i];
927         }
928       else
929         {
930           /* The argument will be passed in registers.  */
931           const gdb_byte *valbuf = value_contents (args[i]);
932           gdb_byte buf[8];
933
934           gdb_assert (len <= 16);
935
936           for (j = 0; len > 0; j++, len -= 8)
937             {
938               int regnum = -1;
939               int offset = 0;
940
941               switch (theclass[j])
942                 {
943                 case AMD64_INTEGER:
944                   regnum = integer_regnum[integer_reg++];
945                   break;
946
947                 case AMD64_SSE:
948                   regnum = sse_regnum[sse_reg++];
949                   break;
950
951                 case AMD64_SSEUP:
952                   gdb_assert (sse_reg > 0);
953                   regnum = sse_regnum[sse_reg - 1];
954                   offset = 8;
955                   break;
956
957                 default:
958                   gdb_assert (!"Unexpected register class.");
959                 }
960
961               gdb_assert (regnum != -1);
962               memset (buf, 0, sizeof buf);
963               memcpy (buf, valbuf + j * 8, std::min (len, 8));
964               regcache->raw_write_part (regnum, offset, 8, buf);
965             }
966         }
967     }
968
969   /* Allocate space for the arguments on the stack.  */
970   sp -= num_elements * 8;
971
972   /* The psABI says that "The end of the input argument area shall be
973      aligned on a 16 byte boundary."  */
974   sp &= ~0xf;
975
976   /* Write out the arguments to the stack.  */
977   for (i = 0; i < num_stack_args; i++)
978     {
979       struct type *type = value_type (stack_args[i]);
980       const gdb_byte *valbuf = value_contents (stack_args[i]);
981       int len = TYPE_LENGTH (type);
982
983       write_memory (sp + element * 8, valbuf, len);
984       element += ((len + 7) / 8);
985     }
986
987   /* The psABI says that "For calls that may call functions that use
988      varargs or stdargs (prototype-less calls or calls to functions
989      containing ellipsis (...) in the declaration) %al is used as
990      hidden argument to specify the number of SSE registers used.  */
991   regcache_raw_write_unsigned (regcache, AMD64_RAX_REGNUM, sse_reg);
992   return sp; 
993 }
994
995 static CORE_ADDR
996 amd64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
997                        struct regcache *regcache, CORE_ADDR bp_addr,
998                        int nargs, struct value **args,  CORE_ADDR sp,
999                        int struct_return, CORE_ADDR struct_addr)
1000 {
1001   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1002   gdb_byte buf[8];
1003
1004   /* BND registers can be in arbitrary values at the moment of the
1005      inferior call.  This can cause boundary violations that are not
1006      due to a real bug or even desired by the user.  The best to be done
1007      is set the BND registers to allow access to the whole memory, INIT
1008      state, before pushing the inferior call.   */
1009   i387_reset_bnd_regs (gdbarch, regcache);
1010
1011   /* Pass arguments.  */
1012   sp = amd64_push_arguments (regcache, nargs, args, sp, struct_return);
1013
1014   /* Pass "hidden" argument".  */
1015   if (struct_return)
1016     {
1017       store_unsigned_integer (buf, 8, byte_order, struct_addr);
1018       regcache->cooked_write (AMD64_RDI_REGNUM, buf);
1019     }
1020
1021   /* Store return address.  */
1022   sp -= 8;
1023   store_unsigned_integer (buf, 8, byte_order, bp_addr);
1024   write_memory (sp, buf, 8);
1025
1026   /* Finally, update the stack pointer...  */
1027   store_unsigned_integer (buf, 8, byte_order, sp);
1028   regcache->cooked_write (AMD64_RSP_REGNUM, buf);
1029
1030   /* ...and fake a frame pointer.  */
1031   regcache->cooked_write (AMD64_RBP_REGNUM, buf);
1032
1033   return sp + 16;
1034 }
1035 \f
1036 /* Displaced instruction handling.  */
1037
1038 /* A partially decoded instruction.
1039    This contains enough details for displaced stepping purposes.  */
1040
1041 struct amd64_insn
1042 {
1043   /* The number of opcode bytes.  */
1044   int opcode_len;
1045   /* The offset of the REX/VEX instruction encoding prefix or -1 if
1046      not present.  */
1047   int enc_prefix_offset;
1048   /* The offset to the first opcode byte.  */
1049   int opcode_offset;
1050   /* The offset to the modrm byte or -1 if not present.  */
1051   int modrm_offset;
1052
1053   /* The raw instruction.  */
1054   gdb_byte *raw_insn;
1055 };
1056
1057 struct amd64_displaced_step_closure : public displaced_step_closure
1058 {
1059   amd64_displaced_step_closure (int insn_buf_len)
1060   : insn_buf (insn_buf_len, 0)
1061   {}
1062
1063   /* For rip-relative insns, saved copy of the reg we use instead of %rip.  */
1064   int tmp_used = 0;
1065   int tmp_regno;
1066   ULONGEST tmp_save;
1067
1068   /* Details of the instruction.  */
1069   struct amd64_insn insn_details;
1070
1071   /* The possibly modified insn.  */
1072   gdb::byte_vector insn_buf;
1073 };
1074
1075 /* WARNING: Keep onebyte_has_modrm, twobyte_has_modrm in sync with
1076    ../opcodes/i386-dis.c (until libopcodes exports them, or an alternative,
1077    at which point delete these in favor of libopcodes' versions).  */
1078
1079 static const unsigned char onebyte_has_modrm[256] = {
1080   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
1081   /*       -------------------------------        */
1082   /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
1083   /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
1084   /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
1085   /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
1086   /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
1087   /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
1088   /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
1089   /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
1090   /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
1091   /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
1092   /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
1093   /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
1094   /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
1095   /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
1096   /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
1097   /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
1098   /*       -------------------------------        */
1099   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
1100 };
1101
1102 static const unsigned char twobyte_has_modrm[256] = {
1103   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
1104   /*       -------------------------------        */
1105   /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
1106   /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
1107   /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
1108   /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
1109   /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
1110   /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
1111   /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
1112   /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
1113   /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
1114   /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
1115   /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
1116   /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
1117   /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
1118   /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
1119   /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
1120   /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
1121   /*       -------------------------------        */
1122   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
1123 };
1124
1125 static int amd64_syscall_p (const struct amd64_insn *insn, int *lengthp);
1126
1127 static int
1128 rex_prefix_p (gdb_byte pfx)
1129 {
1130   return REX_PREFIX_P (pfx);
1131 }
1132
1133 /* True if PFX is the start of the 2-byte VEX prefix.  */
1134
1135 static bool
1136 vex2_prefix_p (gdb_byte pfx)
1137 {
1138   return pfx == 0xc5;
1139 }
1140
1141 /* True if PFX is the start of the 3-byte VEX prefix.  */
1142
1143 static bool
1144 vex3_prefix_p (gdb_byte pfx)
1145 {
1146   return pfx == 0xc4;
1147 }
1148
1149 /* Skip the legacy instruction prefixes in INSN.
1150    We assume INSN is properly sentineled so we don't have to worry
1151    about falling off the end of the buffer.  */
1152
1153 static gdb_byte *
1154 amd64_skip_prefixes (gdb_byte *insn)
1155 {
1156   while (1)
1157     {
1158       switch (*insn)
1159         {
1160         case DATA_PREFIX_OPCODE:
1161         case ADDR_PREFIX_OPCODE:
1162         case CS_PREFIX_OPCODE:
1163         case DS_PREFIX_OPCODE:
1164         case ES_PREFIX_OPCODE:
1165         case FS_PREFIX_OPCODE:
1166         case GS_PREFIX_OPCODE:
1167         case SS_PREFIX_OPCODE:
1168         case LOCK_PREFIX_OPCODE:
1169         case REPE_PREFIX_OPCODE:
1170         case REPNE_PREFIX_OPCODE:
1171           ++insn;
1172           continue;
1173         default:
1174           break;
1175         }
1176       break;
1177     }
1178
1179   return insn;
1180 }
1181
1182 /* Return an integer register (other than RSP) that is unused as an input
1183    operand in INSN.
1184    In order to not require adding a rex prefix if the insn doesn't already
1185    have one, the result is restricted to RAX ... RDI, sans RSP.
1186    The register numbering of the result follows architecture ordering,
1187    e.g. RDI = 7.  */
1188
1189 static int
1190 amd64_get_unused_input_int_reg (const struct amd64_insn *details)
1191 {
1192   /* 1 bit for each reg */
1193   int used_regs_mask = 0;
1194
1195   /* There can be at most 3 int regs used as inputs in an insn, and we have
1196      7 to choose from (RAX ... RDI, sans RSP).
1197      This allows us to take a conservative approach and keep things simple.
1198      E.g. By avoiding RAX, we don't have to specifically watch for opcodes
1199      that implicitly specify RAX.  */
1200
1201   /* Avoid RAX.  */
1202   used_regs_mask |= 1 << EAX_REG_NUM;
1203   /* Similarily avoid RDX, implicit operand in divides.  */
1204   used_regs_mask |= 1 << EDX_REG_NUM;
1205   /* Avoid RSP.  */
1206   used_regs_mask |= 1 << ESP_REG_NUM;
1207
1208   /* If the opcode is one byte long and there's no ModRM byte,
1209      assume the opcode specifies a register.  */
1210   if (details->opcode_len == 1 && details->modrm_offset == -1)
1211     used_regs_mask |= 1 << (details->raw_insn[details->opcode_offset] & 7);
1212
1213   /* Mark used regs in the modrm/sib bytes.  */
1214   if (details->modrm_offset != -1)
1215     {
1216       int modrm = details->raw_insn[details->modrm_offset];
1217       int mod = MODRM_MOD_FIELD (modrm);
1218       int reg = MODRM_REG_FIELD (modrm);
1219       int rm = MODRM_RM_FIELD (modrm);
1220       int have_sib = mod != 3 && rm == 4;
1221
1222       /* Assume the reg field of the modrm byte specifies a register.  */
1223       used_regs_mask |= 1 << reg;
1224
1225       if (have_sib)
1226         {
1227           int base = SIB_BASE_FIELD (details->raw_insn[details->modrm_offset + 1]);
1228           int idx = SIB_INDEX_FIELD (details->raw_insn[details->modrm_offset + 1]);
1229           used_regs_mask |= 1 << base;
1230           used_regs_mask |= 1 << idx;
1231         }
1232       else
1233         {
1234           used_regs_mask |= 1 << rm;
1235         }
1236     }
1237
1238   gdb_assert (used_regs_mask < 256);
1239   gdb_assert (used_regs_mask != 255);
1240
1241   /* Finally, find a free reg.  */
1242   {
1243     int i;
1244
1245     for (i = 0; i < 8; ++i)
1246       {
1247         if (! (used_regs_mask & (1 << i)))
1248           return i;
1249       }
1250
1251     /* We shouldn't get here.  */
1252     internal_error (__FILE__, __LINE__, _("unable to find free reg"));
1253   }
1254 }
1255
1256 /* Extract the details of INSN that we need.  */
1257
1258 static void
1259 amd64_get_insn_details (gdb_byte *insn, struct amd64_insn *details)
1260 {
1261   gdb_byte *start = insn;
1262   int need_modrm;
1263
1264   details->raw_insn = insn;
1265
1266   details->opcode_len = -1;
1267   details->enc_prefix_offset = -1;
1268   details->opcode_offset = -1;
1269   details->modrm_offset = -1;
1270
1271   /* Skip legacy instruction prefixes.  */
1272   insn = amd64_skip_prefixes (insn);
1273
1274   /* Skip REX/VEX instruction encoding prefixes.  */
1275   if (rex_prefix_p (*insn))
1276     {
1277       details->enc_prefix_offset = insn - start;
1278       ++insn;
1279     }
1280   else if (vex2_prefix_p (*insn))
1281     {
1282       /* Don't record the offset in this case because this prefix has
1283          no REX.B equivalent.  */
1284       insn += 2;
1285     }
1286   else if (vex3_prefix_p (*insn))
1287     {
1288       details->enc_prefix_offset = insn - start;
1289       insn += 3;
1290     }
1291
1292   details->opcode_offset = insn - start;
1293
1294   if (*insn == TWO_BYTE_OPCODE_ESCAPE)
1295     {
1296       /* Two or three-byte opcode.  */
1297       ++insn;
1298       need_modrm = twobyte_has_modrm[*insn];
1299
1300       /* Check for three-byte opcode.  */
1301       switch (*insn)
1302         {
1303         case 0x24:
1304         case 0x25:
1305         case 0x38:
1306         case 0x3a:
1307         case 0x7a:
1308         case 0x7b:
1309           ++insn;
1310           details->opcode_len = 3;
1311           break;
1312         default:
1313           details->opcode_len = 2;
1314           break;
1315         }
1316     }
1317   else
1318     {
1319       /* One-byte opcode.  */
1320       need_modrm = onebyte_has_modrm[*insn];
1321       details->opcode_len = 1;
1322     }
1323
1324   if (need_modrm)
1325     {
1326       ++insn;
1327       details->modrm_offset = insn - start;
1328     }
1329 }
1330
1331 /* Update %rip-relative addressing in INSN.
1332
1333    %rip-relative addressing only uses a 32-bit displacement.
1334    32 bits is not enough to be guaranteed to cover the distance between where
1335    the real instruction is and where its copy is.
1336    Convert the insn to use base+disp addressing.
1337    We set base = pc + insn_length so we can leave disp unchanged.  */
1338
1339 static void
1340 fixup_riprel (struct gdbarch *gdbarch, amd64_displaced_step_closure *dsc,
1341               CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
1342 {
1343   const struct amd64_insn *insn_details = &dsc->insn_details;
1344   int modrm_offset = insn_details->modrm_offset;
1345   gdb_byte *insn = insn_details->raw_insn + modrm_offset;
1346   CORE_ADDR rip_base;
1347   int insn_length;
1348   int arch_tmp_regno, tmp_regno;
1349   ULONGEST orig_value;
1350
1351   /* %rip+disp32 addressing mode, displacement follows ModRM byte.  */
1352   ++insn;
1353
1354   /* Compute the rip-relative address.  */
1355   insn_length = gdb_buffered_insn_length (gdbarch, dsc->insn_buf.data (),
1356                                           dsc->insn_buf.size (), from);
1357   rip_base = from + insn_length;
1358
1359   /* We need a register to hold the address.
1360      Pick one not used in the insn.
1361      NOTE: arch_tmp_regno uses architecture ordering, e.g. RDI = 7.  */
1362   arch_tmp_regno = amd64_get_unused_input_int_reg (insn_details);
1363   tmp_regno = amd64_arch_reg_to_regnum (arch_tmp_regno);
1364
1365   /* Position of the not-B bit in the 3-byte VEX prefix (in byte 1).  */
1366   static constexpr gdb_byte VEX3_NOT_B = 0x20;
1367
1368   /* REX.B should be unset (VEX.!B set) as we were using rip-relative
1369      addressing, but ensure it's unset (set for VEX) anyway, tmp_regno
1370      is not r8-r15.  */
1371   if (insn_details->enc_prefix_offset != -1)
1372     {
1373       gdb_byte *pfx = &dsc->insn_buf[insn_details->enc_prefix_offset];
1374       if (rex_prefix_p (pfx[0]))
1375         pfx[0] &= ~REX_B;
1376       else if (vex3_prefix_p (pfx[0]))
1377         pfx[1] |= VEX3_NOT_B;
1378       else
1379         gdb_assert_not_reached ("unhandled prefix");
1380     }
1381
1382   regcache_cooked_read_unsigned (regs, tmp_regno, &orig_value);
1383   dsc->tmp_regno = tmp_regno;
1384   dsc->tmp_save = orig_value;
1385   dsc->tmp_used = 1;
1386
1387   /* Convert the ModRM field to be base+disp.  */
1388   dsc->insn_buf[modrm_offset] &= ~0xc7;
1389   dsc->insn_buf[modrm_offset] |= 0x80 + arch_tmp_regno;
1390
1391   regcache_cooked_write_unsigned (regs, tmp_regno, rip_base);
1392
1393   if (debug_displaced)
1394     fprintf_unfiltered (gdb_stdlog, "displaced: %%rip-relative addressing used.\n"
1395                         "displaced: using temp reg %d, old value %s, new value %s\n",
1396                         dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save),
1397                         paddress (gdbarch, rip_base));
1398 }
1399
1400 static void
1401 fixup_displaced_copy (struct gdbarch *gdbarch,
1402                       amd64_displaced_step_closure *dsc,
1403                       CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
1404 {
1405   const struct amd64_insn *details = &dsc->insn_details;
1406
1407   if (details->modrm_offset != -1)
1408     {
1409       gdb_byte modrm = details->raw_insn[details->modrm_offset];
1410
1411       if ((modrm & 0xc7) == 0x05)
1412         {
1413           /* The insn uses rip-relative addressing.
1414              Deal with it.  */
1415           fixup_riprel (gdbarch, dsc, from, to, regs);
1416         }
1417     }
1418 }
1419
1420 struct displaced_step_closure *
1421 amd64_displaced_step_copy_insn (struct gdbarch *gdbarch,
1422                                 CORE_ADDR from, CORE_ADDR to,
1423                                 struct regcache *regs)
1424 {
1425   int len = gdbarch_max_insn_length (gdbarch);
1426   /* Extra space for sentinels so fixup_{riprel,displaced_copy} don't have to
1427      continually watch for running off the end of the buffer.  */
1428   int fixup_sentinel_space = len;
1429   amd64_displaced_step_closure *dsc
1430     = new amd64_displaced_step_closure (len + fixup_sentinel_space);
1431   gdb_byte *buf = &dsc->insn_buf[0];
1432   struct amd64_insn *details = &dsc->insn_details;
1433
1434   read_memory (from, buf, len);
1435
1436   /* Set up the sentinel space so we don't have to worry about running
1437      off the end of the buffer.  An excessive number of leading prefixes
1438      could otherwise cause this.  */
1439   memset (buf + len, 0, fixup_sentinel_space);
1440
1441   amd64_get_insn_details (buf, details);
1442
1443   /* GDB may get control back after the insn after the syscall.
1444      Presumably this is a kernel bug.
1445      If this is a syscall, make sure there's a nop afterwards.  */
1446   {
1447     int syscall_length;
1448
1449     if (amd64_syscall_p (details, &syscall_length))
1450       buf[details->opcode_offset + syscall_length] = NOP_OPCODE;
1451   }
1452
1453   /* Modify the insn to cope with the address where it will be executed from.
1454      In particular, handle any rip-relative addressing.  */
1455   fixup_displaced_copy (gdbarch, dsc, from, to, regs);
1456
1457   write_memory (to, buf, len);
1458
1459   if (debug_displaced)
1460     {
1461       fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
1462                           paddress (gdbarch, from), paddress (gdbarch, to));
1463       displaced_step_dump_bytes (gdb_stdlog, buf, len);
1464     }
1465
1466   return dsc;
1467 }
1468
1469 static int
1470 amd64_absolute_jmp_p (const struct amd64_insn *details)
1471 {
1472   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1473
1474   if (insn[0] == 0xff)
1475     {
1476       /* jump near, absolute indirect (/4) */
1477       if ((insn[1] & 0x38) == 0x20)
1478         return 1;
1479
1480       /* jump far, absolute indirect (/5) */
1481       if ((insn[1] & 0x38) == 0x28)
1482         return 1;
1483     }
1484
1485   return 0;
1486 }
1487
1488 /* Return non-zero if the instruction DETAILS is a jump, zero otherwise.  */
1489
1490 static int
1491 amd64_jmp_p (const struct amd64_insn *details)
1492 {
1493   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1494
1495   /* jump short, relative.  */
1496   if (insn[0] == 0xeb)
1497     return 1;
1498
1499   /* jump near, relative.  */
1500   if (insn[0] == 0xe9)
1501     return 1;
1502
1503   return amd64_absolute_jmp_p (details);
1504 }
1505
1506 static int
1507 amd64_absolute_call_p (const struct amd64_insn *details)
1508 {
1509   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1510
1511   if (insn[0] == 0xff)
1512     {
1513       /* Call near, absolute indirect (/2) */
1514       if ((insn[1] & 0x38) == 0x10)
1515         return 1;
1516
1517       /* Call far, absolute indirect (/3) */
1518       if ((insn[1] & 0x38) == 0x18)
1519         return 1;
1520     }
1521
1522   return 0;
1523 }
1524
1525 static int
1526 amd64_ret_p (const struct amd64_insn *details)
1527 {
1528   /* NOTE: gcc can emit "repz ; ret".  */
1529   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1530
1531   switch (insn[0])
1532     {
1533     case 0xc2: /* ret near, pop N bytes */
1534     case 0xc3: /* ret near */
1535     case 0xca: /* ret far, pop N bytes */
1536     case 0xcb: /* ret far */
1537     case 0xcf: /* iret */
1538       return 1;
1539
1540     default:
1541       return 0;
1542     }
1543 }
1544
1545 static int
1546 amd64_call_p (const struct amd64_insn *details)
1547 {
1548   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1549
1550   if (amd64_absolute_call_p (details))
1551     return 1;
1552
1553   /* call near, relative */
1554   if (insn[0] == 0xe8)
1555     return 1;
1556
1557   return 0;
1558 }
1559
1560 /* Return non-zero if INSN is a system call, and set *LENGTHP to its
1561    length in bytes.  Otherwise, return zero.  */
1562
1563 static int
1564 amd64_syscall_p (const struct amd64_insn *details, int *lengthp)
1565 {
1566   const gdb_byte *insn = &details->raw_insn[details->opcode_offset];
1567
1568   if (insn[0] == 0x0f && insn[1] == 0x05)
1569     {
1570       *lengthp = 2;
1571       return 1;
1572     }
1573
1574   return 0;
1575 }
1576
1577 /* Classify the instruction at ADDR using PRED.
1578    Throw an error if the memory can't be read.  */
1579
1580 static int
1581 amd64_classify_insn_at (struct gdbarch *gdbarch, CORE_ADDR addr,
1582                         int (*pred) (const struct amd64_insn *))
1583 {
1584   struct amd64_insn details;
1585   gdb_byte *buf;
1586   int len, classification;
1587
1588   len = gdbarch_max_insn_length (gdbarch);
1589   buf = (gdb_byte *) alloca (len);
1590
1591   read_code (addr, buf, len);
1592   amd64_get_insn_details (buf, &details);
1593
1594   classification = pred (&details);
1595
1596   return classification;
1597 }
1598
1599 /* The gdbarch insn_is_call method.  */
1600
1601 static int
1602 amd64_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
1603 {
1604   return amd64_classify_insn_at (gdbarch, addr, amd64_call_p);
1605 }
1606
1607 /* The gdbarch insn_is_ret method.  */
1608
1609 static int
1610 amd64_insn_is_ret (struct gdbarch *gdbarch, CORE_ADDR addr)
1611 {
1612   return amd64_classify_insn_at (gdbarch, addr, amd64_ret_p);
1613 }
1614
1615 /* The gdbarch insn_is_jump method.  */
1616
1617 static int
1618 amd64_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr)
1619 {
1620   return amd64_classify_insn_at (gdbarch, addr, amd64_jmp_p);
1621 }
1622
1623 /* Fix up the state of registers and memory after having single-stepped
1624    a displaced instruction.  */
1625
1626 void
1627 amd64_displaced_step_fixup (struct gdbarch *gdbarch,
1628                             struct displaced_step_closure *dsc_,
1629                             CORE_ADDR from, CORE_ADDR to,
1630                             struct regcache *regs)
1631 {
1632   amd64_displaced_step_closure *dsc = (amd64_displaced_step_closure *) dsc_;
1633   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1634   /* The offset we applied to the instruction's address.  */
1635   ULONGEST insn_offset = to - from;
1636   gdb_byte *insn = dsc->insn_buf.data ();
1637   const struct amd64_insn *insn_details = &dsc->insn_details;
1638
1639   if (debug_displaced)
1640     fprintf_unfiltered (gdb_stdlog,
1641                         "displaced: fixup (%s, %s), "
1642                         "insn = 0x%02x 0x%02x ...\n",
1643                         paddress (gdbarch, from), paddress (gdbarch, to),
1644                         insn[0], insn[1]);
1645
1646   /* If we used a tmp reg, restore it.  */
1647
1648   if (dsc->tmp_used)
1649     {
1650       if (debug_displaced)
1651         fprintf_unfiltered (gdb_stdlog, "displaced: restoring reg %d to %s\n",
1652                             dsc->tmp_regno, paddress (gdbarch, dsc->tmp_save));
1653       regcache_cooked_write_unsigned (regs, dsc->tmp_regno, dsc->tmp_save);
1654     }
1655
1656   /* The list of issues to contend with here is taken from
1657      resume_execution in arch/x86/kernel/kprobes.c, Linux 2.6.28.
1658      Yay for Free Software!  */
1659
1660   /* Relocate the %rip back to the program's instruction stream,
1661      if necessary.  */
1662
1663   /* Except in the case of absolute or indirect jump or call
1664      instructions, or a return instruction, the new rip is relative to
1665      the displaced instruction; make it relative to the original insn.
1666      Well, signal handler returns don't need relocation either, but we use the
1667      value of %rip to recognize those; see below.  */
1668   if (! amd64_absolute_jmp_p (insn_details)
1669       && ! amd64_absolute_call_p (insn_details)
1670       && ! amd64_ret_p (insn_details))
1671     {
1672       ULONGEST orig_rip;
1673       int insn_len;
1674
1675       regcache_cooked_read_unsigned (regs, AMD64_RIP_REGNUM, &orig_rip);
1676
1677       /* A signal trampoline system call changes the %rip, resuming
1678          execution of the main program after the signal handler has
1679          returned.  That makes them like 'return' instructions; we
1680          shouldn't relocate %rip.
1681
1682          But most system calls don't, and we do need to relocate %rip.
1683
1684          Our heuristic for distinguishing these cases: if stepping
1685          over the system call instruction left control directly after
1686          the instruction, the we relocate --- control almost certainly
1687          doesn't belong in the displaced copy.  Otherwise, we assume
1688          the instruction has put control where it belongs, and leave
1689          it unrelocated.  Goodness help us if there are PC-relative
1690          system calls.  */
1691       if (amd64_syscall_p (insn_details, &insn_len)
1692           && orig_rip != to + insn_len
1693           /* GDB can get control back after the insn after the syscall.
1694              Presumably this is a kernel bug.
1695              Fixup ensures its a nop, we add one to the length for it.  */
1696           && orig_rip != to + insn_len + 1)
1697         {
1698           if (debug_displaced)
1699             fprintf_unfiltered (gdb_stdlog,
1700                                 "displaced: syscall changed %%rip; "
1701                                 "not relocating\n");
1702         }
1703       else
1704         {
1705           ULONGEST rip = orig_rip - insn_offset;
1706
1707           /* If we just stepped over a breakpoint insn, we don't backup
1708              the pc on purpose; this is to match behaviour without
1709              stepping.  */
1710
1711           regcache_cooked_write_unsigned (regs, AMD64_RIP_REGNUM, rip);
1712
1713           if (debug_displaced)
1714             fprintf_unfiltered (gdb_stdlog,
1715                                 "displaced: "
1716                                 "relocated %%rip from %s to %s\n",
1717                                 paddress (gdbarch, orig_rip),
1718                                 paddress (gdbarch, rip));
1719         }
1720     }
1721
1722   /* If the instruction was PUSHFL, then the TF bit will be set in the
1723      pushed value, and should be cleared.  We'll leave this for later,
1724      since GDB already messes up the TF flag when stepping over a
1725      pushfl.  */
1726
1727   /* If the instruction was a call, the return address now atop the
1728      stack is the address following the copied instruction.  We need
1729      to make it the address following the original instruction.  */
1730   if (amd64_call_p (insn_details))
1731     {
1732       ULONGEST rsp;
1733       ULONGEST retaddr;
1734       const ULONGEST retaddr_len = 8;
1735
1736       regcache_cooked_read_unsigned (regs, AMD64_RSP_REGNUM, &rsp);
1737       retaddr = read_memory_unsigned_integer (rsp, retaddr_len, byte_order);
1738       retaddr = (retaddr - insn_offset) & 0xffffffffffffffffULL;
1739       write_memory_unsigned_integer (rsp, retaddr_len, byte_order, retaddr);
1740
1741       if (debug_displaced)
1742         fprintf_unfiltered (gdb_stdlog,
1743                             "displaced: relocated return addr at %s "
1744                             "to %s\n",
1745                             paddress (gdbarch, rsp),
1746                             paddress (gdbarch, retaddr));
1747     }
1748 }
1749
1750 /* If the instruction INSN uses RIP-relative addressing, return the
1751    offset into the raw INSN where the displacement to be adjusted is
1752    found.  Returns 0 if the instruction doesn't use RIP-relative
1753    addressing.  */
1754
1755 static int
1756 rip_relative_offset (struct amd64_insn *insn)
1757 {
1758   if (insn->modrm_offset != -1)
1759     {
1760       gdb_byte modrm = insn->raw_insn[insn->modrm_offset];
1761
1762       if ((modrm & 0xc7) == 0x05)
1763         {
1764           /* The displacement is found right after the ModRM byte.  */
1765           return insn->modrm_offset + 1;
1766         }
1767     }
1768
1769   return 0;
1770 }
1771
1772 static void
1773 append_insns (CORE_ADDR *to, ULONGEST len, const gdb_byte *buf)
1774 {
1775   target_write_memory (*to, buf, len);
1776   *to += len;
1777 }
1778
1779 static void
1780 amd64_relocate_instruction (struct gdbarch *gdbarch,
1781                             CORE_ADDR *to, CORE_ADDR oldloc)
1782 {
1783   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1784   int len = gdbarch_max_insn_length (gdbarch);
1785   /* Extra space for sentinels.  */
1786   int fixup_sentinel_space = len;
1787   gdb_byte *buf = (gdb_byte *) xmalloc (len + fixup_sentinel_space);
1788   struct amd64_insn insn_details;
1789   int offset = 0;
1790   LONGEST rel32, newrel;
1791   gdb_byte *insn;
1792   int insn_length;
1793
1794   read_memory (oldloc, buf, len);
1795
1796   /* Set up the sentinel space so we don't have to worry about running
1797      off the end of the buffer.  An excessive number of leading prefixes
1798      could otherwise cause this.  */
1799   memset (buf + len, 0, fixup_sentinel_space);
1800
1801   insn = buf;
1802   amd64_get_insn_details (insn, &insn_details);
1803
1804   insn_length = gdb_buffered_insn_length (gdbarch, insn, len, oldloc);
1805
1806   /* Skip legacy instruction prefixes.  */
1807   insn = amd64_skip_prefixes (insn);
1808
1809   /* Adjust calls with 32-bit relative addresses as push/jump, with
1810      the address pushed being the location where the original call in
1811      the user program would return to.  */
1812   if (insn[0] == 0xe8)
1813     {
1814       gdb_byte push_buf[32];
1815       CORE_ADDR ret_addr;
1816       int i = 0;
1817
1818       /* Where "ret" in the original code will return to.  */
1819       ret_addr = oldloc + insn_length;
1820
1821       /* If pushing an address higher than or equal to 0x80000000,
1822          avoid 'pushq', as that sign extends its 32-bit operand, which
1823          would be incorrect.  */
1824       if (ret_addr <= 0x7fffffff)
1825         {
1826           push_buf[0] = 0x68; /* pushq $...  */
1827           store_unsigned_integer (&push_buf[1], 4, byte_order, ret_addr);
1828           i = 5;
1829         }
1830       else
1831         {
1832           push_buf[i++] = 0x48; /* sub    $0x8,%rsp */
1833           push_buf[i++] = 0x83;
1834           push_buf[i++] = 0xec;
1835           push_buf[i++] = 0x08;
1836
1837           push_buf[i++] = 0xc7; /* movl    $imm,(%rsp) */
1838           push_buf[i++] = 0x04;
1839           push_buf[i++] = 0x24;
1840           store_unsigned_integer (&push_buf[i], 4, byte_order,
1841                                   ret_addr & 0xffffffff);
1842           i += 4;
1843
1844           push_buf[i++] = 0xc7; /* movl    $imm,4(%rsp) */
1845           push_buf[i++] = 0x44;
1846           push_buf[i++] = 0x24;
1847           push_buf[i++] = 0x04;
1848           store_unsigned_integer (&push_buf[i], 4, byte_order,
1849                                   ret_addr >> 32);
1850           i += 4;
1851         }
1852       gdb_assert (i <= sizeof (push_buf));
1853       /* Push the push.  */
1854       append_insns (to, i, push_buf);
1855
1856       /* Convert the relative call to a relative jump.  */
1857       insn[0] = 0xe9;
1858
1859       /* Adjust the destination offset.  */
1860       rel32 = extract_signed_integer (insn + 1, 4, byte_order);
1861       newrel = (oldloc - *to) + rel32;
1862       store_signed_integer (insn + 1, 4, byte_order, newrel);
1863
1864       if (debug_displaced)
1865         fprintf_unfiltered (gdb_stdlog,
1866                             "Adjusted insn rel32=%s at %s to"
1867                             " rel32=%s at %s\n",
1868                             hex_string (rel32), paddress (gdbarch, oldloc),
1869                             hex_string (newrel), paddress (gdbarch, *to));
1870
1871       /* Write the adjusted jump into its displaced location.  */
1872       append_insns (to, 5, insn);
1873       return;
1874     }
1875
1876   offset = rip_relative_offset (&insn_details);
1877   if (!offset)
1878     {
1879       /* Adjust jumps with 32-bit relative addresses.  Calls are
1880          already handled above.  */
1881       if (insn[0] == 0xe9)
1882         offset = 1;
1883       /* Adjust conditional jumps.  */
1884       else if (insn[0] == 0x0f && (insn[1] & 0xf0) == 0x80)
1885         offset = 2;
1886     }
1887
1888   if (offset)
1889     {
1890       rel32 = extract_signed_integer (insn + offset, 4, byte_order);
1891       newrel = (oldloc - *to) + rel32;
1892       store_signed_integer (insn + offset, 4, byte_order, newrel);
1893       if (debug_displaced)
1894         fprintf_unfiltered (gdb_stdlog,
1895                             "Adjusted insn rel32=%s at %s to"
1896                             " rel32=%s at %s\n",
1897                             hex_string (rel32), paddress (gdbarch, oldloc),
1898                             hex_string (newrel), paddress (gdbarch, *to));
1899     }
1900
1901   /* Write the adjusted instruction into its displaced location.  */
1902   append_insns (to, insn_length, buf);
1903 }
1904
1905 \f
1906 /* The maximum number of saved registers.  This should include %rip.  */
1907 #define AMD64_NUM_SAVED_REGS    AMD64_NUM_GREGS
1908
1909 struct amd64_frame_cache
1910 {
1911   /* Base address.  */
1912   CORE_ADDR base;
1913   int base_p;
1914   CORE_ADDR sp_offset;
1915   CORE_ADDR pc;
1916
1917   /* Saved registers.  */
1918   CORE_ADDR saved_regs[AMD64_NUM_SAVED_REGS];
1919   CORE_ADDR saved_sp;
1920   int saved_sp_reg;
1921
1922   /* Do we have a frame?  */
1923   int frameless_p;
1924 };
1925
1926 /* Initialize a frame cache.  */
1927
1928 static void
1929 amd64_init_frame_cache (struct amd64_frame_cache *cache)
1930 {
1931   int i;
1932
1933   /* Base address.  */
1934   cache->base = 0;
1935   cache->base_p = 0;
1936   cache->sp_offset = -8;
1937   cache->pc = 0;
1938
1939   /* Saved registers.  We initialize these to -1 since zero is a valid
1940      offset (that's where %rbp is supposed to be stored).
1941      The values start out as being offsets, and are later converted to
1942      addresses (at which point -1 is interpreted as an address, still meaning
1943      "invalid").  */
1944   for (i = 0; i < AMD64_NUM_SAVED_REGS; i++)
1945     cache->saved_regs[i] = -1;
1946   cache->saved_sp = 0;
1947   cache->saved_sp_reg = -1;
1948
1949   /* Frameless until proven otherwise.  */
1950   cache->frameless_p = 1;
1951 }
1952
1953 /* Allocate and initialize a frame cache.  */
1954
1955 static struct amd64_frame_cache *
1956 amd64_alloc_frame_cache (void)
1957 {
1958   struct amd64_frame_cache *cache;
1959
1960   cache = FRAME_OBSTACK_ZALLOC (struct amd64_frame_cache);
1961   amd64_init_frame_cache (cache);
1962   return cache;
1963 }
1964
1965 /* GCC 4.4 and later, can put code in the prologue to realign the
1966    stack pointer.  Check whether PC points to such code, and update
1967    CACHE accordingly.  Return the first instruction after the code
1968    sequence or CURRENT_PC, whichever is smaller.  If we don't
1969    recognize the code, return PC.  */
1970
1971 static CORE_ADDR
1972 amd64_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
1973                            struct amd64_frame_cache *cache)
1974 {
1975   /* There are 2 code sequences to re-align stack before the frame
1976      gets set up:
1977
1978         1. Use a caller-saved saved register:
1979
1980                 leaq  8(%rsp), %reg
1981                 andq  $-XXX, %rsp
1982                 pushq -8(%reg)
1983
1984         2. Use a callee-saved saved register:
1985
1986                 pushq %reg
1987                 leaq  16(%rsp), %reg
1988                 andq  $-XXX, %rsp
1989                 pushq -8(%reg)
1990
1991      "andq $-XXX, %rsp" can be either 4 bytes or 7 bytes:
1992      
1993         0x48 0x83 0xe4 0xf0                     andq $-16, %rsp
1994         0x48 0x81 0xe4 0x00 0xff 0xff 0xff      andq $-256, %rsp
1995    */
1996
1997   gdb_byte buf[18];
1998   int reg, r;
1999   int offset, offset_and;
2000
2001   if (target_read_code (pc, buf, sizeof buf))
2002     return pc;
2003
2004   /* Check caller-saved saved register.  The first instruction has
2005      to be "leaq 8(%rsp), %reg".  */
2006   if ((buf[0] & 0xfb) == 0x48
2007       && buf[1] == 0x8d
2008       && buf[3] == 0x24
2009       && buf[4] == 0x8)
2010     {
2011       /* MOD must be binary 10 and R/M must be binary 100.  */
2012       if ((buf[2] & 0xc7) != 0x44)
2013         return pc;
2014
2015       /* REG has register number.  */
2016       reg = (buf[2] >> 3) & 7;
2017
2018       /* Check the REX.R bit.  */
2019       if (buf[0] == 0x4c)
2020         reg += 8;
2021
2022       offset = 5;
2023     }
2024   else
2025     {
2026       /* Check callee-saved saved register.  The first instruction
2027          has to be "pushq %reg".  */
2028       reg = 0;
2029       if ((buf[0] & 0xf8) == 0x50)
2030         offset = 0;
2031       else if ((buf[0] & 0xf6) == 0x40
2032                && (buf[1] & 0xf8) == 0x50)
2033         {
2034           /* Check the REX.B bit.  */
2035           if ((buf[0] & 1) != 0)
2036             reg = 8;
2037
2038           offset = 1;
2039         }
2040       else
2041         return pc;
2042
2043       /* Get register.  */
2044       reg += buf[offset] & 0x7;
2045
2046       offset++;
2047
2048       /* The next instruction has to be "leaq 16(%rsp), %reg".  */
2049       if ((buf[offset] & 0xfb) != 0x48
2050           || buf[offset + 1] != 0x8d
2051           || buf[offset + 3] != 0x24
2052           || buf[offset + 4] != 0x10)
2053         return pc;
2054
2055       /* MOD must be binary 10 and R/M must be binary 100.  */
2056       if ((buf[offset + 2] & 0xc7) != 0x44)
2057         return pc;
2058       
2059       /* REG has register number.  */
2060       r = (buf[offset + 2] >> 3) & 7;
2061
2062       /* Check the REX.R bit.  */
2063       if (buf[offset] == 0x4c)
2064         r += 8;
2065
2066       /* Registers in pushq and leaq have to be the same.  */
2067       if (reg != r)
2068         return pc;
2069
2070       offset += 5;
2071     }
2072
2073   /* Rigister can't be %rsp nor %rbp.  */
2074   if (reg == 4 || reg == 5)
2075     return pc;
2076
2077   /* The next instruction has to be "andq $-XXX, %rsp".  */
2078   if (buf[offset] != 0x48
2079       || buf[offset + 2] != 0xe4
2080       || (buf[offset + 1] != 0x81 && buf[offset + 1] != 0x83))
2081     return pc;
2082
2083   offset_and = offset;
2084   offset += buf[offset + 1] == 0x81 ? 7 : 4;
2085
2086   /* The next instruction has to be "pushq -8(%reg)".  */
2087   r = 0;
2088   if (buf[offset] == 0xff)
2089     offset++;
2090   else if ((buf[offset] & 0xf6) == 0x40
2091            && buf[offset + 1] == 0xff)
2092     {
2093       /* Check the REX.B bit.  */
2094       if ((buf[offset] & 0x1) != 0)
2095         r = 8;
2096       offset += 2;
2097     }
2098   else
2099     return pc;
2100
2101   /* 8bit -8 is 0xf8.  REG must be binary 110 and MOD must be binary
2102      01.  */
2103   if (buf[offset + 1] != 0xf8
2104       || (buf[offset] & 0xf8) != 0x70)
2105     return pc;
2106
2107   /* R/M has register.  */
2108   r += buf[offset] & 7;
2109
2110   /* Registers in leaq and pushq have to be the same.  */
2111   if (reg != r)
2112     return pc;
2113
2114   if (current_pc > pc + offset_and)
2115     cache->saved_sp_reg = amd64_arch_reg_to_regnum (reg);
2116
2117   return std::min (pc + offset + 2, current_pc);
2118 }
2119
2120 /* Similar to amd64_analyze_stack_align for x32.  */
2121
2122 static CORE_ADDR
2123 amd64_x32_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
2124                                struct amd64_frame_cache *cache) 
2125 {
2126   /* There are 2 code sequences to re-align stack before the frame
2127      gets set up:
2128
2129         1. Use a caller-saved saved register:
2130
2131                 leaq  8(%rsp), %reg
2132                 andq  $-XXX, %rsp
2133                 pushq -8(%reg)
2134
2135            or
2136
2137                 [addr32] leal  8(%rsp), %reg
2138                 andl  $-XXX, %esp
2139                 [addr32] pushq -8(%reg)
2140
2141         2. Use a callee-saved saved register:
2142
2143                 pushq %reg
2144                 leaq  16(%rsp), %reg
2145                 andq  $-XXX, %rsp
2146                 pushq -8(%reg)
2147
2148            or
2149
2150                 pushq %reg
2151                 [addr32] leal  16(%rsp), %reg
2152                 andl  $-XXX, %esp
2153                 [addr32] pushq -8(%reg)
2154
2155      "andq $-XXX, %rsp" can be either 4 bytes or 7 bytes:
2156      
2157         0x48 0x83 0xe4 0xf0                     andq $-16, %rsp
2158         0x48 0x81 0xe4 0x00 0xff 0xff 0xff      andq $-256, %rsp
2159
2160      "andl $-XXX, %esp" can be either 3 bytes or 6 bytes:
2161      
2162         0x83 0xe4 0xf0                  andl $-16, %esp
2163         0x81 0xe4 0x00 0xff 0xff 0xff   andl $-256, %esp
2164    */
2165
2166   gdb_byte buf[19];
2167   int reg, r;
2168   int offset, offset_and;
2169
2170   if (target_read_memory (pc, buf, sizeof buf))
2171     return pc;
2172
2173   /* Skip optional addr32 prefix.  */
2174   offset = buf[0] == 0x67 ? 1 : 0;
2175
2176   /* Check caller-saved saved register.  The first instruction has
2177      to be "leaq 8(%rsp), %reg" or "leal 8(%rsp), %reg".  */
2178   if (((buf[offset] & 0xfb) == 0x48 || (buf[offset] & 0xfb) == 0x40)
2179       && buf[offset + 1] == 0x8d
2180       && buf[offset + 3] == 0x24
2181       && buf[offset + 4] == 0x8)
2182     {
2183       /* MOD must be binary 10 and R/M must be binary 100.  */
2184       if ((buf[offset + 2] & 0xc7) != 0x44)
2185         return pc;
2186
2187       /* REG has register number.  */
2188       reg = (buf[offset + 2] >> 3) & 7;
2189
2190       /* Check the REX.R bit.  */
2191       if ((buf[offset] & 0x4) != 0)
2192         reg += 8;
2193
2194       offset += 5;
2195     }
2196   else
2197     {
2198       /* Check callee-saved saved register.  The first instruction
2199          has to be "pushq %reg".  */
2200       reg = 0;
2201       if ((buf[offset] & 0xf6) == 0x40
2202           && (buf[offset + 1] & 0xf8) == 0x50)
2203         {
2204           /* Check the REX.B bit.  */
2205           if ((buf[offset] & 1) != 0)
2206             reg = 8;
2207
2208           offset += 1;
2209         }
2210       else if ((buf[offset] & 0xf8) != 0x50)
2211         return pc;
2212
2213       /* Get register.  */
2214       reg += buf[offset] & 0x7;
2215
2216       offset++;
2217
2218       /* Skip optional addr32 prefix.  */
2219       if (buf[offset] == 0x67)
2220         offset++;
2221
2222       /* The next instruction has to be "leaq 16(%rsp), %reg" or
2223          "leal 16(%rsp), %reg".  */
2224       if (((buf[offset] & 0xfb) != 0x48 && (buf[offset] & 0xfb) != 0x40)
2225           || buf[offset + 1] != 0x8d
2226           || buf[offset + 3] != 0x24
2227           || buf[offset + 4] != 0x10)
2228         return pc;
2229
2230       /* MOD must be binary 10 and R/M must be binary 100.  */
2231       if ((buf[offset + 2] & 0xc7) != 0x44)
2232         return pc;
2233       
2234       /* REG has register number.  */
2235       r = (buf[offset + 2] >> 3) & 7;
2236
2237       /* Check the REX.R bit.  */
2238       if ((buf[offset] & 0x4) != 0)
2239         r += 8;
2240
2241       /* Registers in pushq and leaq have to be the same.  */
2242       if (reg != r)
2243         return pc;
2244
2245       offset += 5;
2246     }
2247
2248   /* Rigister can't be %rsp nor %rbp.  */
2249   if (reg == 4 || reg == 5)
2250     return pc;
2251
2252   /* The next instruction may be "andq $-XXX, %rsp" or
2253      "andl $-XXX, %esp".  */
2254   if (buf[offset] != 0x48)
2255     offset--;
2256
2257   if (buf[offset + 2] != 0xe4
2258       || (buf[offset + 1] != 0x81 && buf[offset + 1] != 0x83))
2259     return pc;
2260
2261   offset_and = offset;
2262   offset += buf[offset + 1] == 0x81 ? 7 : 4;
2263
2264   /* Skip optional addr32 prefix.  */
2265   if (buf[offset] == 0x67)
2266     offset++;
2267
2268   /* The next instruction has to be "pushq -8(%reg)".  */
2269   r = 0;
2270   if (buf[offset] == 0xff)
2271     offset++;
2272   else if ((buf[offset] & 0xf6) == 0x40
2273            && buf[offset + 1] == 0xff)
2274     {
2275       /* Check the REX.B bit.  */
2276       if ((buf[offset] & 0x1) != 0)
2277         r = 8;
2278       offset += 2;
2279     }
2280   else
2281     return pc;
2282
2283   /* 8bit -8 is 0xf8.  REG must be binary 110 and MOD must be binary
2284      01.  */
2285   if (buf[offset + 1] != 0xf8
2286       || (buf[offset] & 0xf8) != 0x70)
2287     return pc;
2288
2289   /* R/M has register.  */
2290   r += buf[offset] & 7;
2291
2292   /* Registers in leaq and pushq have to be the same.  */
2293   if (reg != r)
2294     return pc;
2295
2296   if (current_pc > pc + offset_and)
2297     cache->saved_sp_reg = amd64_arch_reg_to_regnum (reg);
2298
2299   return std::min (pc + offset + 2, current_pc);
2300 }
2301
2302 /* Do a limited analysis of the prologue at PC and update CACHE
2303    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
2304    address where the analysis stopped.
2305
2306    We will handle only functions beginning with:
2307
2308       pushq %rbp        0x55
2309       movq %rsp, %rbp   0x48 0x89 0xe5 (or 0x48 0x8b 0xec)
2310
2311    or (for the X32 ABI):
2312
2313       pushq %rbp        0x55
2314       movl %esp, %ebp   0x89 0xe5 (or 0x8b 0xec)
2315
2316    Any function that doesn't start with one of these sequences will be
2317    assumed to have no prologue and thus no valid frame pointer in
2318    %rbp.  */
2319
2320 static CORE_ADDR
2321 amd64_analyze_prologue (struct gdbarch *gdbarch,
2322                         CORE_ADDR pc, CORE_ADDR current_pc,
2323                         struct amd64_frame_cache *cache)
2324 {
2325   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2326   /* There are two variations of movq %rsp, %rbp.  */
2327   static const gdb_byte mov_rsp_rbp_1[3] = { 0x48, 0x89, 0xe5 };
2328   static const gdb_byte mov_rsp_rbp_2[3] = { 0x48, 0x8b, 0xec };
2329   /* Ditto for movl %esp, %ebp.  */
2330   static const gdb_byte mov_esp_ebp_1[2] = { 0x89, 0xe5 };
2331   static const gdb_byte mov_esp_ebp_2[2] = { 0x8b, 0xec };
2332
2333   gdb_byte buf[3];
2334   gdb_byte op;
2335
2336   if (current_pc <= pc)
2337     return current_pc;
2338
2339   if (gdbarch_ptr_bit (gdbarch) == 32)
2340     pc = amd64_x32_analyze_stack_align (pc, current_pc, cache);
2341   else
2342     pc = amd64_analyze_stack_align (pc, current_pc, cache);
2343
2344   op = read_code_unsigned_integer (pc, 1, byte_order);
2345
2346   if (op == 0x55)               /* pushq %rbp */
2347     {
2348       /* Take into account that we've executed the `pushq %rbp' that
2349          starts this instruction sequence.  */
2350       cache->saved_regs[AMD64_RBP_REGNUM] = 0;
2351       cache->sp_offset += 8;
2352
2353       /* If that's all, return now.  */
2354       if (current_pc <= pc + 1)
2355         return current_pc;
2356
2357       read_code (pc + 1, buf, 3);
2358
2359       /* Check for `movq %rsp, %rbp'.  */
2360       if (memcmp (buf, mov_rsp_rbp_1, 3) == 0
2361           || memcmp (buf, mov_rsp_rbp_2, 3) == 0)
2362         {
2363           /* OK, we actually have a frame.  */
2364           cache->frameless_p = 0;
2365           return pc + 4;
2366         }
2367
2368       /* For X32, also check for `movq %esp, %ebp'.  */
2369       if (gdbarch_ptr_bit (gdbarch) == 32)
2370         {
2371           if (memcmp (buf, mov_esp_ebp_1, 2) == 0
2372               || memcmp (buf, mov_esp_ebp_2, 2) == 0)
2373             {
2374               /* OK, we actually have a frame.  */
2375               cache->frameless_p = 0;
2376               return pc + 3;
2377             }
2378         }
2379
2380       return pc + 1;
2381     }
2382
2383   return pc;
2384 }
2385
2386 /* Work around false termination of prologue - GCC PR debug/48827.
2387
2388    START_PC is the first instruction of a function, PC is its minimal already
2389    determined advanced address.  Function returns PC if it has nothing to do.
2390
2391    84 c0                test   %al,%al
2392    74 23                je     after
2393    <-- here is 0 lines advance - the false prologue end marker.
2394    0f 29 85 70 ff ff ff movaps %xmm0,-0x90(%rbp)
2395    0f 29 4d 80          movaps %xmm1,-0x80(%rbp)
2396    0f 29 55 90          movaps %xmm2,-0x70(%rbp)
2397    0f 29 5d a0          movaps %xmm3,-0x60(%rbp)
2398    0f 29 65 b0          movaps %xmm4,-0x50(%rbp)
2399    0f 29 6d c0          movaps %xmm5,-0x40(%rbp)
2400    0f 29 75 d0          movaps %xmm6,-0x30(%rbp)
2401    0f 29 7d e0          movaps %xmm7,-0x20(%rbp)
2402    after:  */
2403
2404 static CORE_ADDR
2405 amd64_skip_xmm_prologue (CORE_ADDR pc, CORE_ADDR start_pc)
2406 {
2407   struct symtab_and_line start_pc_sal, next_sal;
2408   gdb_byte buf[4 + 8 * 7];
2409   int offset, xmmreg;
2410
2411   if (pc == start_pc)
2412     return pc;
2413
2414   start_pc_sal = find_pc_sect_line (start_pc, NULL, 0);
2415   if (start_pc_sal.symtab == NULL
2416       || producer_is_gcc_ge_4 (COMPUNIT_PRODUCER
2417            (SYMTAB_COMPUNIT (start_pc_sal.symtab))) < 6
2418       || start_pc_sal.pc != start_pc || pc >= start_pc_sal.end)
2419     return pc;
2420
2421   next_sal = find_pc_sect_line (start_pc_sal.end, NULL, 0);
2422   if (next_sal.line != start_pc_sal.line)
2423     return pc;
2424
2425   /* START_PC can be from overlayed memory, ignored here.  */
2426   if (target_read_code (next_sal.pc - 4, buf, sizeof (buf)) != 0)
2427     return pc;
2428
2429   /* test %al,%al */
2430   if (buf[0] != 0x84 || buf[1] != 0xc0)
2431     return pc;
2432   /* je AFTER */
2433   if (buf[2] != 0x74)
2434     return pc;
2435
2436   offset = 4;
2437   for (xmmreg = 0; xmmreg < 8; xmmreg++)
2438     {
2439       /* 0x0f 0x29 0b??000101 movaps %xmmreg?,-0x??(%rbp) */
2440       if (buf[offset] != 0x0f || buf[offset + 1] != 0x29
2441           || (buf[offset + 2] & 0x3f) != (xmmreg << 3 | 0x5))
2442         return pc;
2443
2444       /* 0b01?????? */
2445       if ((buf[offset + 2] & 0xc0) == 0x40)
2446         {
2447           /* 8-bit displacement.  */
2448           offset += 4;
2449         }
2450       /* 0b10?????? */
2451       else if ((buf[offset + 2] & 0xc0) == 0x80)
2452         {
2453           /* 32-bit displacement.  */
2454           offset += 7;
2455         }
2456       else
2457         return pc;
2458     }
2459
2460   /* je AFTER */
2461   if (offset - 4 != buf[3])
2462     return pc;
2463
2464   return next_sal.end;
2465 }
2466
2467 /* Return PC of first real instruction.  */
2468
2469 static CORE_ADDR
2470 amd64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
2471 {
2472   struct amd64_frame_cache cache;
2473   CORE_ADDR pc;
2474   CORE_ADDR func_addr;
2475
2476   if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
2477     {
2478       CORE_ADDR post_prologue_pc
2479         = skip_prologue_using_sal (gdbarch, func_addr);
2480       struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
2481
2482       /* Clang always emits a line note before the prologue and another
2483          one after.  We trust clang to emit usable line notes.  */
2484       if (post_prologue_pc
2485           && (cust != NULL
2486               && COMPUNIT_PRODUCER (cust) != NULL
2487               && startswith (COMPUNIT_PRODUCER (cust), "clang ")))
2488         return std::max (start_pc, post_prologue_pc);
2489     }
2490
2491   amd64_init_frame_cache (&cache);
2492   pc = amd64_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffLL,
2493                                &cache);
2494   if (cache.frameless_p)
2495     return start_pc;
2496
2497   return amd64_skip_xmm_prologue (pc, start_pc);
2498 }
2499 \f
2500
2501 /* Normal frames.  */
2502
2503 static void
2504 amd64_frame_cache_1 (struct frame_info *this_frame,
2505                      struct amd64_frame_cache *cache)
2506 {
2507   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2508   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2509   gdb_byte buf[8];
2510   int i;
2511
2512   cache->pc = get_frame_func (this_frame);
2513   if (cache->pc != 0)
2514     amd64_analyze_prologue (gdbarch, cache->pc, get_frame_pc (this_frame),
2515                             cache);
2516
2517   if (cache->frameless_p)
2518     {
2519       /* We didn't find a valid frame.  If we're at the start of a
2520          function, or somewhere half-way its prologue, the function's
2521          frame probably hasn't been fully setup yet.  Try to
2522          reconstruct the base address for the stack frame by looking
2523          at the stack pointer.  For truly "frameless" functions this
2524          might work too.  */
2525
2526       if (cache->saved_sp_reg != -1)
2527         {
2528           /* Stack pointer has been saved.  */
2529           get_frame_register (this_frame, cache->saved_sp_reg, buf);
2530           cache->saved_sp = extract_unsigned_integer (buf, 8, byte_order);
2531
2532           /* We're halfway aligning the stack.  */
2533           cache->base = ((cache->saved_sp - 8) & 0xfffffffffffffff0LL) - 8;
2534           cache->saved_regs[AMD64_RIP_REGNUM] = cache->saved_sp - 8;
2535
2536           /* This will be added back below.  */
2537           cache->saved_regs[AMD64_RIP_REGNUM] -= cache->base;
2538         }
2539       else
2540         {
2541           get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
2542           cache->base = extract_unsigned_integer (buf, 8, byte_order)
2543                         + cache->sp_offset;
2544         }
2545     }
2546   else
2547     {
2548       get_frame_register (this_frame, AMD64_RBP_REGNUM, buf);
2549       cache->base = extract_unsigned_integer (buf, 8, byte_order);
2550     }
2551
2552   /* Now that we have the base address for the stack frame we can
2553      calculate the value of %rsp in the calling frame.  */
2554   cache->saved_sp = cache->base + 16;
2555
2556   /* For normal frames, %rip is stored at 8(%rbp).  If we don't have a
2557      frame we find it at the same offset from the reconstructed base
2558      address.  If we're halfway aligning the stack, %rip is handled
2559      differently (see above).  */
2560   if (!cache->frameless_p || cache->saved_sp_reg == -1)
2561     cache->saved_regs[AMD64_RIP_REGNUM] = 8;
2562
2563   /* Adjust all the saved registers such that they contain addresses
2564      instead of offsets.  */
2565   for (i = 0; i < AMD64_NUM_SAVED_REGS; i++)
2566     if (cache->saved_regs[i] != -1)
2567       cache->saved_regs[i] += cache->base;
2568
2569   cache->base_p = 1;
2570 }
2571
2572 static struct amd64_frame_cache *
2573 amd64_frame_cache (struct frame_info *this_frame, void **this_cache)
2574 {
2575   struct amd64_frame_cache *cache;
2576
2577   if (*this_cache)
2578     return (struct amd64_frame_cache *) *this_cache;
2579
2580   cache = amd64_alloc_frame_cache ();
2581   *this_cache = cache;
2582
2583   TRY
2584     {
2585       amd64_frame_cache_1 (this_frame, cache);
2586     }
2587   CATCH (ex, RETURN_MASK_ERROR)
2588     {
2589       if (ex.error != NOT_AVAILABLE_ERROR)
2590         throw_exception (ex);
2591     }
2592   END_CATCH
2593
2594   return cache;
2595 }
2596
2597 static enum unwind_stop_reason
2598 amd64_frame_unwind_stop_reason (struct frame_info *this_frame,
2599                                 void **this_cache)
2600 {
2601   struct amd64_frame_cache *cache =
2602     amd64_frame_cache (this_frame, this_cache);
2603
2604   if (!cache->base_p)
2605     return UNWIND_UNAVAILABLE;
2606
2607   /* This marks the outermost frame.  */
2608   if (cache->base == 0)
2609     return UNWIND_OUTERMOST;
2610
2611   return UNWIND_NO_REASON;
2612 }
2613
2614 static void
2615 amd64_frame_this_id (struct frame_info *this_frame, void **this_cache,
2616                      struct frame_id *this_id)
2617 {
2618   struct amd64_frame_cache *cache =
2619     amd64_frame_cache (this_frame, this_cache);
2620
2621   if (!cache->base_p)
2622     (*this_id) = frame_id_build_unavailable_stack (cache->pc);
2623   else if (cache->base == 0)
2624     {
2625       /* This marks the outermost frame.  */
2626       return;
2627     }
2628   else
2629     (*this_id) = frame_id_build (cache->base + 16, cache->pc);
2630 }
2631
2632 static struct value *
2633 amd64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
2634                            int regnum)
2635 {
2636   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2637   struct amd64_frame_cache *cache =
2638     amd64_frame_cache (this_frame, this_cache);
2639
2640   gdb_assert (regnum >= 0);
2641
2642   if (regnum == gdbarch_sp_regnum (gdbarch) && cache->saved_sp)
2643     return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
2644
2645   if (regnum < AMD64_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
2646     return frame_unwind_got_memory (this_frame, regnum,
2647                                     cache->saved_regs[regnum]);
2648
2649   return frame_unwind_got_register (this_frame, regnum, regnum);
2650 }
2651
2652 static const struct frame_unwind amd64_frame_unwind =
2653 {
2654   NORMAL_FRAME,
2655   amd64_frame_unwind_stop_reason,
2656   amd64_frame_this_id,
2657   amd64_frame_prev_register,
2658   NULL,
2659   default_frame_sniffer
2660 };
2661 \f
2662 /* Generate a bytecode expression to get the value of the saved PC.  */
2663
2664 static void
2665 amd64_gen_return_address (struct gdbarch *gdbarch,
2666                           struct agent_expr *ax, struct axs_value *value,
2667                           CORE_ADDR scope)
2668 {
2669   /* The following sequence assumes the traditional use of the base
2670      register.  */
2671   ax_reg (ax, AMD64_RBP_REGNUM);
2672   ax_const_l (ax, 8);
2673   ax_simple (ax, aop_add);
2674   value->type = register_type (gdbarch, AMD64_RIP_REGNUM);
2675   value->kind = axs_lvalue_memory;
2676 }
2677 \f
2678
2679 /* Signal trampolines.  */
2680
2681 /* FIXME: kettenis/20030419: Perhaps, we can unify the 32-bit and
2682    64-bit variants.  This would require using identical frame caches
2683    on both platforms.  */
2684
2685 static struct amd64_frame_cache *
2686 amd64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
2687 {
2688   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2689   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2690   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2691   struct amd64_frame_cache *cache;
2692   CORE_ADDR addr;
2693   gdb_byte buf[8];
2694   int i;
2695
2696   if (*this_cache)
2697     return (struct amd64_frame_cache *) *this_cache;
2698
2699   cache = amd64_alloc_frame_cache ();
2700
2701   TRY
2702     {
2703       get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
2704       cache->base = extract_unsigned_integer (buf, 8, byte_order) - 8;
2705
2706       addr = tdep->sigcontext_addr (this_frame);
2707       gdb_assert (tdep->sc_reg_offset);
2708       gdb_assert (tdep->sc_num_regs <= AMD64_NUM_SAVED_REGS);
2709       for (i = 0; i < tdep->sc_num_regs; i++)
2710         if (tdep->sc_reg_offset[i] != -1)
2711           cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
2712
2713       cache->base_p = 1;
2714     }
2715   CATCH (ex, RETURN_MASK_ERROR)
2716     {
2717       if (ex.error != NOT_AVAILABLE_ERROR)
2718         throw_exception (ex);
2719     }
2720   END_CATCH
2721
2722   *this_cache = cache;
2723   return cache;
2724 }
2725
2726 static enum unwind_stop_reason
2727 amd64_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
2728                                          void **this_cache)
2729 {
2730   struct amd64_frame_cache *cache =
2731     amd64_sigtramp_frame_cache (this_frame, this_cache);
2732
2733   if (!cache->base_p)
2734     return UNWIND_UNAVAILABLE;
2735
2736   return UNWIND_NO_REASON;
2737 }
2738
2739 static void
2740 amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
2741                               void **this_cache, struct frame_id *this_id)
2742 {
2743   struct amd64_frame_cache *cache =
2744     amd64_sigtramp_frame_cache (this_frame, this_cache);
2745
2746   if (!cache->base_p)
2747     (*this_id) = frame_id_build_unavailable_stack (get_frame_pc (this_frame));
2748   else if (cache->base == 0)
2749     {
2750       /* This marks the outermost frame.  */
2751       return;
2752     }
2753   else
2754     (*this_id) = frame_id_build (cache->base + 16, get_frame_pc (this_frame));
2755 }
2756
2757 static struct value *
2758 amd64_sigtramp_frame_prev_register (struct frame_info *this_frame,
2759                                     void **this_cache, int regnum)
2760 {
2761   /* Make sure we've initialized the cache.  */
2762   amd64_sigtramp_frame_cache (this_frame, this_cache);
2763
2764   return amd64_frame_prev_register (this_frame, this_cache, regnum);
2765 }
2766
2767 static int
2768 amd64_sigtramp_frame_sniffer (const struct frame_unwind *self,
2769                               struct frame_info *this_frame,
2770                               void **this_cache)
2771 {
2772   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2773
2774   /* We shouldn't even bother if we don't have a sigcontext_addr
2775      handler.  */
2776   if (tdep->sigcontext_addr == NULL)
2777     return 0;
2778
2779   if (tdep->sigtramp_p != NULL)
2780     {
2781       if (tdep->sigtramp_p (this_frame))
2782         return 1;
2783     }
2784
2785   if (tdep->sigtramp_start != 0)
2786     {
2787       CORE_ADDR pc = get_frame_pc (this_frame);
2788
2789       gdb_assert (tdep->sigtramp_end != 0);
2790       if (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end)
2791         return 1;
2792     }
2793
2794   return 0;
2795 }
2796
2797 static const struct frame_unwind amd64_sigtramp_frame_unwind =
2798 {
2799   SIGTRAMP_FRAME,
2800   amd64_sigtramp_frame_unwind_stop_reason,
2801   amd64_sigtramp_frame_this_id,
2802   amd64_sigtramp_frame_prev_register,
2803   NULL,
2804   amd64_sigtramp_frame_sniffer
2805 };
2806 \f
2807
2808 static CORE_ADDR
2809 amd64_frame_base_address (struct frame_info *this_frame, void **this_cache)
2810 {
2811   struct amd64_frame_cache *cache =
2812     amd64_frame_cache (this_frame, this_cache);
2813
2814   return cache->base;
2815 }
2816
2817 static const struct frame_base amd64_frame_base =
2818 {
2819   &amd64_frame_unwind,
2820   amd64_frame_base_address,
2821   amd64_frame_base_address,
2822   amd64_frame_base_address
2823 };
2824
2825 /* Normal frames, but in a function epilogue.  */
2826
2827 /* Implement the stack_frame_destroyed_p gdbarch method.
2828
2829    The epilogue is defined here as the 'ret' instruction, which will
2830    follow any instruction such as 'leave' or 'pop %ebp' that destroys
2831    the function's stack frame.  */
2832
2833 static int
2834 amd64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
2835 {
2836   gdb_byte insn;
2837   struct compunit_symtab *cust;
2838
2839   cust = find_pc_compunit_symtab (pc);
2840   if (cust != NULL && COMPUNIT_EPILOGUE_UNWIND_VALID (cust))
2841     return 0;
2842
2843   if (target_read_memory (pc, &insn, 1))
2844     return 0;   /* Can't read memory at pc.  */
2845
2846   if (insn != 0xc3)     /* 'ret' instruction.  */
2847     return 0;
2848
2849   return 1;
2850 }
2851
2852 static int
2853 amd64_epilogue_frame_sniffer (const struct frame_unwind *self,
2854                               struct frame_info *this_frame,
2855                               void **this_prologue_cache)
2856 {
2857   if (frame_relative_level (this_frame) == 0)
2858     return amd64_stack_frame_destroyed_p (get_frame_arch (this_frame),
2859                                           get_frame_pc (this_frame));
2860   else
2861     return 0;
2862 }
2863
2864 static struct amd64_frame_cache *
2865 amd64_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
2866 {
2867   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2868   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2869   struct amd64_frame_cache *cache;
2870   gdb_byte buf[8];
2871
2872   if (*this_cache)
2873     return (struct amd64_frame_cache *) *this_cache;
2874
2875   cache = amd64_alloc_frame_cache ();
2876   *this_cache = cache;
2877
2878   TRY
2879     {
2880       /* Cache base will be %esp plus cache->sp_offset (-8).  */
2881       get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
2882       cache->base = extract_unsigned_integer (buf, 8,
2883                                               byte_order) + cache->sp_offset;
2884
2885       /* Cache pc will be the frame func.  */
2886       cache->pc = get_frame_pc (this_frame);
2887
2888       /* The saved %esp will be at cache->base plus 16.  */
2889       cache->saved_sp = cache->base + 16;
2890
2891       /* The saved %eip will be at cache->base plus 8.  */
2892       cache->saved_regs[AMD64_RIP_REGNUM] = cache->base + 8;
2893
2894       cache->base_p = 1;
2895     }
2896   CATCH (ex, RETURN_MASK_ERROR)
2897     {
2898       if (ex.error != NOT_AVAILABLE_ERROR)
2899         throw_exception (ex);
2900     }
2901   END_CATCH
2902
2903   return cache;
2904 }
2905
2906 static enum unwind_stop_reason
2907 amd64_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
2908                                          void **this_cache)
2909 {
2910   struct amd64_frame_cache *cache
2911     = amd64_epilogue_frame_cache (this_frame, this_cache);
2912
2913   if (!cache->base_p)
2914     return UNWIND_UNAVAILABLE;
2915
2916   return UNWIND_NO_REASON;
2917 }
2918
2919 static void
2920 amd64_epilogue_frame_this_id (struct frame_info *this_frame,
2921                               void **this_cache,
2922                               struct frame_id *this_id)
2923 {
2924   struct amd64_frame_cache *cache = amd64_epilogue_frame_cache (this_frame,
2925                                                                this_cache);
2926
2927   if (!cache->base_p)
2928     (*this_id) = frame_id_build_unavailable_stack (cache->pc);
2929   else
2930     (*this_id) = frame_id_build (cache->base + 8, cache->pc);
2931 }
2932
2933 static const struct frame_unwind amd64_epilogue_frame_unwind =
2934 {
2935   NORMAL_FRAME,
2936   amd64_epilogue_frame_unwind_stop_reason,
2937   amd64_epilogue_frame_this_id,
2938   amd64_frame_prev_register,
2939   NULL, 
2940   amd64_epilogue_frame_sniffer
2941 };
2942
2943 static struct frame_id
2944 amd64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2945 {
2946   CORE_ADDR fp;
2947
2948   fp = get_frame_register_unsigned (this_frame, AMD64_RBP_REGNUM);
2949
2950   return frame_id_build (fp + 16, get_frame_pc (this_frame));
2951 }
2952
2953 /* 16 byte align the SP per frame requirements.  */
2954
2955 static CORE_ADDR
2956 amd64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
2957 {
2958   return sp & -(CORE_ADDR)16;
2959 }
2960 \f
2961
2962 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
2963    in the floating-point register set REGSET to register cache
2964    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
2965
2966 static void
2967 amd64_supply_fpregset (const struct regset *regset, struct regcache *regcache,
2968                        int regnum, const void *fpregs, size_t len)
2969 {
2970   struct gdbarch *gdbarch = regcache->arch ();
2971   const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2972
2973   gdb_assert (len >= tdep->sizeof_fpregset);
2974   amd64_supply_fxsave (regcache, regnum, fpregs);
2975 }
2976
2977 /* Collect register REGNUM from the register cache REGCACHE and store
2978    it in the buffer specified by FPREGS and LEN as described by the
2979    floating-point register set REGSET.  If REGNUM is -1, do this for
2980    all registers in REGSET.  */
2981
2982 static void
2983 amd64_collect_fpregset (const struct regset *regset,
2984                         const struct regcache *regcache,
2985                         int regnum, void *fpregs, size_t len)
2986 {
2987   struct gdbarch *gdbarch = regcache->arch ();
2988   const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2989
2990   gdb_assert (len >= tdep->sizeof_fpregset);
2991   amd64_collect_fxsave (regcache, regnum, fpregs);
2992 }
2993
2994 const struct regset amd64_fpregset =
2995   {
2996     NULL, amd64_supply_fpregset, amd64_collect_fpregset
2997   };
2998 \f
2999
3000 /* Figure out where the longjmp will land.  Slurp the jmp_buf out of
3001    %rdi.  We expect its value to be a pointer to the jmp_buf structure
3002    from which we extract the address that we will land at.  This
3003    address is copied into PC.  This routine returns non-zero on
3004    success.  */
3005
3006 static int
3007 amd64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
3008 {
3009   gdb_byte buf[8];
3010   CORE_ADDR jb_addr;
3011   struct gdbarch *gdbarch = get_frame_arch (frame);
3012   int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
3013   int len = TYPE_LENGTH (builtin_type (gdbarch)->builtin_func_ptr);
3014
3015   /* If JB_PC_OFFSET is -1, we have no way to find out where the
3016      longjmp will land.  */
3017   if (jb_pc_offset == -1)
3018     return 0;
3019
3020   get_frame_register (frame, AMD64_RDI_REGNUM, buf);
3021   jb_addr= extract_typed_address
3022             (buf, builtin_type (gdbarch)->builtin_data_ptr);
3023   if (target_read_memory (jb_addr + jb_pc_offset, buf, len))
3024     return 0;
3025
3026   *pc = extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
3027
3028   return 1;
3029 }
3030
3031 static const int amd64_record_regmap[] =
3032 {
3033   AMD64_RAX_REGNUM, AMD64_RCX_REGNUM, AMD64_RDX_REGNUM, AMD64_RBX_REGNUM,
3034   AMD64_RSP_REGNUM, AMD64_RBP_REGNUM, AMD64_RSI_REGNUM, AMD64_RDI_REGNUM,
3035   AMD64_R8_REGNUM, AMD64_R9_REGNUM, AMD64_R10_REGNUM, AMD64_R11_REGNUM,
3036   AMD64_R12_REGNUM, AMD64_R13_REGNUM, AMD64_R14_REGNUM, AMD64_R15_REGNUM,
3037   AMD64_RIP_REGNUM, AMD64_EFLAGS_REGNUM, AMD64_CS_REGNUM, AMD64_SS_REGNUM,
3038   AMD64_DS_REGNUM, AMD64_ES_REGNUM, AMD64_FS_REGNUM, AMD64_GS_REGNUM
3039 };
3040
3041 /* Implement the "in_indirect_branch_thunk" gdbarch function.  */
3042
3043 static bool
3044 amd64_in_indirect_branch_thunk (struct gdbarch *gdbarch, CORE_ADDR pc)
3045 {
3046   return x86_in_indirect_branch_thunk (pc, amd64_register_names,
3047                                        AMD64_RAX_REGNUM,
3048                                        AMD64_RIP_REGNUM);
3049 }
3050
3051 void
3052 amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
3053                 const target_desc *default_tdesc)
3054 {
3055   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3056   const struct target_desc *tdesc = info.target_desc;
3057   static const char *const stap_integer_prefixes[] = { "$", NULL };
3058   static const char *const stap_register_prefixes[] = { "%", NULL };
3059   static const char *const stap_register_indirection_prefixes[] = { "(",
3060                                                                     NULL };
3061   static const char *const stap_register_indirection_suffixes[] = { ")",
3062                                                                     NULL };
3063
3064   /* AMD64 generally uses `fxsave' instead of `fsave' for saving its
3065      floating-point registers.  */
3066   tdep->sizeof_fpregset = I387_SIZEOF_FXSAVE;
3067   tdep->fpregset = &amd64_fpregset;
3068
3069   if (! tdesc_has_registers (tdesc))
3070     tdesc = default_tdesc;
3071   tdep->tdesc = tdesc;
3072
3073   tdep->num_core_regs = AMD64_NUM_GREGS + I387_NUM_REGS;
3074   tdep->register_names = amd64_register_names;
3075
3076   if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx512") != NULL)
3077     {
3078       tdep->zmmh_register_names = amd64_zmmh_names;
3079       tdep->k_register_names = amd64_k_names;
3080       tdep->xmm_avx512_register_names = amd64_xmm_avx512_names;
3081       tdep->ymm16h_register_names = amd64_ymmh_avx512_names;
3082
3083       tdep->num_zmm_regs = 32;
3084       tdep->num_xmm_avx512_regs = 16;
3085       tdep->num_ymm_avx512_regs = 16;
3086
3087       tdep->zmm0h_regnum = AMD64_ZMM0H_REGNUM;
3088       tdep->k0_regnum = AMD64_K0_REGNUM;
3089       tdep->xmm16_regnum = AMD64_XMM16_REGNUM;
3090       tdep->ymm16h_regnum = AMD64_YMM16H_REGNUM;
3091     }
3092
3093   if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx") != NULL)
3094     {
3095       tdep->ymmh_register_names = amd64_ymmh_names;
3096       tdep->num_ymm_regs = 16;
3097       tdep->ymm0h_regnum = AMD64_YMM0H_REGNUM;
3098     }
3099
3100   if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.mpx") != NULL)
3101     {
3102       tdep->mpx_register_names = amd64_mpx_names;
3103       tdep->bndcfgu_regnum = AMD64_BNDCFGU_REGNUM;
3104       tdep->bnd0r_regnum = AMD64_BND0R_REGNUM;
3105     }
3106
3107   if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.segments") != NULL)
3108     {
3109       const struct tdesc_feature *feature =
3110           tdesc_find_feature (tdesc, "org.gnu.gdb.i386.segments");
3111       struct tdesc_arch_data *tdesc_data_segments =
3112           (struct tdesc_arch_data *) info.tdep_info;
3113
3114       tdesc_numbered_register (feature, tdesc_data_segments,
3115                        AMD64_FSBASE_REGNUM, "fs_base");
3116       tdesc_numbered_register (feature, tdesc_data_segments,
3117                        AMD64_GSBASE_REGNUM, "gs_base");
3118     }
3119
3120   if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.pkeys") != NULL)
3121     {
3122       tdep->pkeys_register_names = amd64_pkeys_names;
3123       tdep->pkru_regnum = AMD64_PKRU_REGNUM;
3124       tdep->num_pkeys_regs = 1;
3125     }
3126
3127   tdep->num_byte_regs = 20;
3128   tdep->num_word_regs = 16;
3129   tdep->num_dword_regs = 16;
3130   /* Avoid wiring in the MMX registers for now.  */
3131   tdep->num_mmx_regs = 0;
3132
3133   set_gdbarch_pseudo_register_read_value (gdbarch,
3134                                           amd64_pseudo_register_read_value);
3135   set_gdbarch_pseudo_register_write (gdbarch,
3136                                      amd64_pseudo_register_write);
3137   set_gdbarch_ax_pseudo_register_collect (gdbarch,
3138                                           amd64_ax_pseudo_register_collect);
3139
3140   set_tdesc_pseudo_register_name (gdbarch, amd64_pseudo_register_name);
3141
3142   /* AMD64 has an FPU and 16 SSE registers.  */
3143   tdep->st0_regnum = AMD64_ST0_REGNUM;
3144   tdep->num_xmm_regs = 16;
3145
3146   /* This is what all the fuss is about.  */
3147   set_gdbarch_long_bit (gdbarch, 64);
3148   set_gdbarch_long_long_bit (gdbarch, 64);
3149   set_gdbarch_ptr_bit (gdbarch, 64);
3150
3151   /* In contrast to the i386, on AMD64 a `long double' actually takes
3152      up 128 bits, even though it's still based on the i387 extended
3153      floating-point format which has only 80 significant bits.  */
3154   set_gdbarch_long_double_bit (gdbarch, 128);
3155
3156   set_gdbarch_num_regs (gdbarch, AMD64_NUM_REGS);
3157
3158   /* Register numbers of various important registers.  */
3159   set_gdbarch_sp_regnum (gdbarch, AMD64_RSP_REGNUM); /* %rsp */
3160   set_gdbarch_pc_regnum (gdbarch, AMD64_RIP_REGNUM); /* %rip */
3161   set_gdbarch_ps_regnum (gdbarch, AMD64_EFLAGS_REGNUM); /* %eflags */
3162   set_gdbarch_fp0_regnum (gdbarch, AMD64_ST0_REGNUM); /* %st(0) */
3163
3164   /* The "default" register numbering scheme for AMD64 is referred to
3165      as the "DWARF Register Number Mapping" in the System V psABI.
3166      The preferred debugging format for all known AMD64 targets is
3167      actually DWARF2, and GCC doesn't seem to support DWARF (that is
3168      DWARF-1), but we provide the same mapping just in case.  This
3169      mapping is also used for stabs, which GCC does support.  */
3170   set_gdbarch_stab_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
3171   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
3172
3173   /* We don't override SDB_REG_RO_REGNUM, since COFF doesn't seem to
3174      be in use on any of the supported AMD64 targets.  */
3175
3176   /* Call dummy code.  */
3177   set_gdbarch_push_dummy_call (gdbarch, amd64_push_dummy_call);
3178   set_gdbarch_frame_align (gdbarch, amd64_frame_align);
3179   set_gdbarch_frame_red_zone_size (gdbarch, 128);
3180
3181   set_gdbarch_convert_register_p (gdbarch, i387_convert_register_p);
3182   set_gdbarch_register_to_value (gdbarch, i387_register_to_value);
3183   set_gdbarch_value_to_register (gdbarch, i387_value_to_register);
3184
3185   set_gdbarch_return_value (gdbarch, amd64_return_value);
3186
3187   set_gdbarch_skip_prologue (gdbarch, amd64_skip_prologue);
3188
3189   tdep->record_regmap = amd64_record_regmap;
3190
3191   set_gdbarch_dummy_id (gdbarch, amd64_dummy_id);
3192
3193   /* Hook the function epilogue frame unwinder.  This unwinder is
3194      appended to the list first, so that it supercedes the other
3195      unwinders in function epilogues.  */
3196   frame_unwind_prepend_unwinder (gdbarch, &amd64_epilogue_frame_unwind);
3197
3198   /* Hook the prologue-based frame unwinders.  */
3199   frame_unwind_append_unwinder (gdbarch, &amd64_sigtramp_frame_unwind);
3200   frame_unwind_append_unwinder (gdbarch, &amd64_frame_unwind);
3201   frame_base_set_default (gdbarch, &amd64_frame_base);
3202
3203   set_gdbarch_get_longjmp_target (gdbarch, amd64_get_longjmp_target);
3204
3205   set_gdbarch_relocate_instruction (gdbarch, amd64_relocate_instruction);
3206
3207   set_gdbarch_gen_return_address (gdbarch, amd64_gen_return_address);
3208
3209   /* SystemTap variables and functions.  */
3210   set_gdbarch_stap_integer_prefixes (gdbarch, stap_integer_prefixes);
3211   set_gdbarch_stap_register_prefixes (gdbarch, stap_register_prefixes);
3212   set_gdbarch_stap_register_indirection_prefixes (gdbarch,
3213                                           stap_register_indirection_prefixes);
3214   set_gdbarch_stap_register_indirection_suffixes (gdbarch,
3215                                           stap_register_indirection_suffixes);
3216   set_gdbarch_stap_is_single_operand (gdbarch,
3217                                       i386_stap_is_single_operand);
3218   set_gdbarch_stap_parse_special_token (gdbarch,
3219                                         i386_stap_parse_special_token);
3220   set_gdbarch_insn_is_call (gdbarch, amd64_insn_is_call);
3221   set_gdbarch_insn_is_ret (gdbarch, amd64_insn_is_ret);
3222   set_gdbarch_insn_is_jump (gdbarch, amd64_insn_is_jump);
3223
3224   set_gdbarch_in_indirect_branch_thunk (gdbarch,
3225                                         amd64_in_indirect_branch_thunk);
3226 }
3227
3228 /* Initialize ARCH for x86-64, no osabi.  */
3229
3230 static void
3231 amd64_none_init_abi (gdbarch_info info, gdbarch *arch)
3232 {
3233   amd64_init_abi (info, arch, amd64_target_description (X86_XSTATE_SSE_MASK,
3234                                                         true));
3235 }
3236
3237 static struct type *
3238 amd64_x32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
3239 {
3240   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3241
3242   switch (regnum - tdep->eax_regnum)
3243     {
3244     case AMD64_RBP_REGNUM:      /* %ebp */
3245     case AMD64_RSP_REGNUM:      /* %esp */
3246       return builtin_type (gdbarch)->builtin_data_ptr;
3247     case AMD64_RIP_REGNUM:      /* %eip */
3248       return builtin_type (gdbarch)->builtin_func_ptr;
3249     }
3250
3251   return i386_pseudo_register_type (gdbarch, regnum);
3252 }
3253
3254 void
3255 amd64_x32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
3256                     const target_desc *default_tdesc)
3257 {
3258   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3259
3260   amd64_init_abi (info, gdbarch, default_tdesc);
3261
3262   tdep->num_dword_regs = 17;
3263   set_tdesc_pseudo_register_type (gdbarch, amd64_x32_pseudo_register_type);
3264
3265   set_gdbarch_long_bit (gdbarch, 32);
3266   set_gdbarch_ptr_bit (gdbarch, 32);
3267 }
3268
3269 /* Initialize ARCH for x64-32, no osabi.  */
3270
3271 static void
3272 amd64_x32_none_init_abi (gdbarch_info info, gdbarch *arch)
3273 {
3274   amd64_x32_init_abi (info, arch,
3275                       amd64_target_description (X86_XSTATE_SSE_MASK, true));
3276 }
3277
3278 /* Return the target description for a specified XSAVE feature mask.  */
3279
3280 const struct target_desc *
3281 amd64_target_description (uint64_t xcr0, bool segments)
3282 {
3283   static target_desc *amd64_tdescs \
3284     [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/][2/*segments*/] = {};
3285   target_desc **tdesc;
3286
3287   tdesc = &amd64_tdescs[(xcr0 & X86_XSTATE_AVX) ? 1 : 0]
3288     [(xcr0 & X86_XSTATE_MPX) ? 1 : 0]
3289     [(xcr0 & X86_XSTATE_AVX512) ? 1 : 0]
3290     [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0]
3291     [segments ? 1 : 0];
3292
3293   if (*tdesc == NULL)
3294     *tdesc = amd64_create_target_description (xcr0, false, false,
3295                                               segments);
3296
3297   return *tdesc;
3298 }
3299
3300 void
3301 _initialize_amd64_tdep (void)
3302 {
3303   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_NONE,
3304                           amd64_none_init_abi);
3305   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32, GDB_OSABI_NONE,
3306                           amd64_x32_none_init_abi);
3307
3308 #if GDB_SELF_TEST
3309   struct
3310   {
3311     const char *xml;
3312     uint64_t mask;
3313   } xml_masks[] = {
3314     { "i386/amd64.xml", X86_XSTATE_SSE_MASK },
3315     { "i386/amd64-avx.xml", X86_XSTATE_AVX_MASK },
3316     { "i386/amd64-mpx.xml", X86_XSTATE_MPX_MASK },
3317     { "i386/amd64-avx-mpx.xml", X86_XSTATE_AVX_MPX_MASK },
3318     { "i386/amd64-avx-avx512.xml", X86_XSTATE_AVX_AVX512_MASK },
3319     { "i386/amd64-avx-mpx-avx512-pku.xml",
3320       X86_XSTATE_AVX_MPX_AVX512_PKU_MASK },
3321   };
3322
3323   for (auto &a : xml_masks)
3324     {
3325       auto tdesc = amd64_target_description (a.mask, true);
3326
3327       selftests::record_xml_tdesc (a.xml, tdesc);
3328     }
3329 #endif /* GDB_SELF_TEST */
3330 }
3331 \f
3332
3333 /* The 64-bit FXSAVE format differs from the 32-bit format in the
3334    sense that the instruction pointer and data pointer are simply
3335    64-bit offsets into the code segment and the data segment instead
3336    of a selector offset pair.  The functions below store the upper 32
3337    bits of these pointers (instead of just the 16-bits of the segment
3338    selector).  */
3339
3340 /* Fill register REGNUM in REGCACHE with the appropriate
3341    floating-point or SSE register value from *FXSAVE.  If REGNUM is
3342    -1, do this for all registers.  This function masks off any of the
3343    reserved bits in *FXSAVE.  */
3344
3345 void
3346 amd64_supply_fxsave (struct regcache *regcache, int regnum,
3347                      const void *fxsave)
3348 {
3349   struct gdbarch *gdbarch = regcache->arch ();
3350   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3351
3352   i387_supply_fxsave (regcache, regnum, fxsave);
3353
3354   if (fxsave
3355       && gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
3356     {
3357       const gdb_byte *regs = (const gdb_byte *) fxsave;
3358
3359       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
3360         regcache->raw_supply (I387_FISEG_REGNUM (tdep), regs + 12);
3361       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
3362         regcache->raw_supply (I387_FOSEG_REGNUM (tdep), regs + 20);
3363     }
3364 }
3365
3366 /* Similar to amd64_supply_fxsave, but use XSAVE extended state.  */
3367
3368 void
3369 amd64_supply_xsave (struct regcache *regcache, int regnum,
3370                     const void *xsave)
3371 {
3372   struct gdbarch *gdbarch = regcache->arch ();
3373   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3374
3375   i387_supply_xsave (regcache, regnum, xsave);
3376
3377   if (xsave
3378       && gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
3379     {
3380       const gdb_byte *regs = (const gdb_byte *) xsave;
3381       ULONGEST clear_bv;
3382
3383       clear_bv = i387_xsave_get_clear_bv (gdbarch, xsave);
3384
3385       /* If the FISEG and FOSEG registers have not been initialised yet
3386          (their CLEAR_BV bit is set) then their default values of zero will
3387          have already been setup by I387_SUPPLY_XSAVE.  */
3388       if (!(clear_bv & X86_XSTATE_X87))
3389         {
3390           if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
3391             regcache->raw_supply (I387_FISEG_REGNUM (tdep), regs + 12);
3392           if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
3393             regcache->raw_supply (I387_FOSEG_REGNUM (tdep), regs + 20);
3394         }
3395     }
3396 }
3397
3398 /* Fill register REGNUM (if it is a floating-point or SSE register) in
3399    *FXSAVE with the value from REGCACHE.  If REGNUM is -1, do this for
3400    all registers.  This function doesn't touch any of the reserved
3401    bits in *FXSAVE.  */
3402
3403 void
3404 amd64_collect_fxsave (const struct regcache *regcache, int regnum,
3405                       void *fxsave)
3406 {
3407   struct gdbarch *gdbarch = regcache->arch ();
3408   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3409   gdb_byte *regs = (gdb_byte *) fxsave;
3410
3411   i387_collect_fxsave (regcache, regnum, fxsave);
3412
3413   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
3414     {
3415       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
3416         regcache->raw_collect (I387_FISEG_REGNUM (tdep), regs + 12);
3417       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
3418         regcache->raw_collect (I387_FOSEG_REGNUM (tdep), regs + 20);
3419     }
3420 }
3421
3422 /* Similar to amd64_collect_fxsave, but use XSAVE extended state.  */
3423
3424 void
3425 amd64_collect_xsave (const struct regcache *regcache, int regnum,
3426                      void *xsave, int gcore)
3427 {
3428   struct gdbarch *gdbarch = regcache->arch ();
3429   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3430   gdb_byte *regs = (gdb_byte *) xsave;
3431
3432   i387_collect_xsave (regcache, regnum, xsave, gcore);
3433
3434   if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
3435     {
3436       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
3437         regcache->raw_collect (I387_FISEG_REGNUM (tdep),
3438                               regs + 12);
3439       if (regnum == -1 || regnum == I387_FOSEG_REGNUM (tdep))
3440         regcache->raw_collect (I387_FOSEG_REGNUM (tdep),
3441                               regs + 20);
3442     }
3443 }