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