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