Convert generic probe interface to C++ (and perform some cleanups)
[external/binutils.git] / gdb / amd64-linux-tdep.c
1 /* Target-dependent code for GNU/Linux x86-64.
2
3    Copyright (C) 2001-2017 Free Software Foundation, Inc.
4    Contributed by Jiri Smid, SuSE Labs.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22 #include "arch-utils.h"
23 #include "frame.h"
24 #include "gdbcore.h"
25 #include "regcache.h"
26 #include "osabi.h"
27 #include "symtab.h"
28 #include "gdbtypes.h"
29 #include "reggroups.h"
30 #include "regset.h"
31 #include "parser-defs.h"
32 #include "user-regs.h"
33 #include "amd64-linux-tdep.h"
34 #include "i386-linux-tdep.h"
35 #include "linux-tdep.h"
36 #include "x86-xstate.h"
37
38 #include "amd64-tdep.h"
39 #include "solib-svr4.h"
40 #include "xml-syscall.h"
41 #include "glibc-tdep.h"
42 #include "arch/amd64.h"
43 #include "target-descriptions.h"
44
45 /* The syscall's XML filename for i386.  */
46 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
47
48 #include "record-full.h"
49 #include "linux-record.h"
50
51 /* Mapping between the general-purpose registers in `struct user'
52    format and GDB's register cache layout.  */
53
54 /* From <sys/reg.h>.  */
55 int amd64_linux_gregset_reg_offset[] =
56 {
57   10 * 8,                       /* %rax */
58   5 * 8,                        /* %rbx */
59   11 * 8,                       /* %rcx */
60   12 * 8,                       /* %rdx */
61   13 * 8,                       /* %rsi */
62   14 * 8,                       /* %rdi */
63   4 * 8,                        /* %rbp */
64   19 * 8,                       /* %rsp */
65   9 * 8,                        /* %r8 ...  */
66   8 * 8,
67   7 * 8,
68   6 * 8,
69   3 * 8,
70   2 * 8,
71   1 * 8,
72   0 * 8,                        /* ... %r15 */
73   16 * 8,                       /* %rip */
74   18 * 8,                       /* %eflags */
75   17 * 8,                       /* %cs */
76   20 * 8,                       /* %ss */
77   23 * 8,                       /* %ds */
78   24 * 8,                       /* %es */
79   25 * 8,                       /* %fs */
80   26 * 8,                       /* %gs */
81   -1, -1, -1, -1, -1, -1, -1, -1,
82   -1, -1, -1, -1, -1, -1, -1, -1,
83   -1, -1, -1, -1, -1, -1, -1, -1,
84   -1, -1, -1, -1, -1, -1, -1, -1, -1,
85   -1, -1, -1, -1, -1, -1, -1, -1,
86   -1, -1, -1, -1, -1, -1, -1, -1,
87   -1, -1, -1, -1,               /* MPX registers BND0 ... BND3.  */
88   -1, -1,                       /* MPX registers BNDCFGU and BNDSTATUS.  */
89   -1, -1, -1, -1, -1, -1, -1, -1,     /* xmm16 ... xmm31 (AVX512)  */
90   -1, -1, -1, -1, -1, -1, -1, -1,
91   -1, -1, -1, -1, -1, -1, -1, -1,     /* ymm16 ... ymm31 (AVX512)  */
92   -1, -1, -1, -1, -1, -1, -1, -1,
93   -1, -1, -1, -1, -1, -1, -1, -1,     /* k0 ... k7 (AVX512)  */
94   -1, -1, -1, -1, -1, -1, -1, -1,     /* zmm0 ... zmm31 (AVX512)  */
95   -1, -1, -1, -1, -1, -1, -1, -1,
96   -1, -1, -1, -1, -1, -1, -1, -1,
97   -1, -1, -1, -1, -1, -1, -1, -1,
98   -1,                           /* PKEYS register pkru  */
99
100   /* End of hardware registers */
101   21 * 8, 22 * 8,                     /* fs_base and gs_base.  */
102   15 * 8                              /* "orig_rax" */
103 };
104 \f
105
106 /* Support for signal handlers.  */
107
108 #define LINUX_SIGTRAMP_INSN0    0x48    /* mov $NNNNNNNN, %rax */
109 #define LINUX_SIGTRAMP_OFFSET0  0
110 #define LINUX_SIGTRAMP_INSN1    0x0f    /* syscall */
111 #define LINUX_SIGTRAMP_OFFSET1  7
112
113 static const gdb_byte amd64_linux_sigtramp_code[] =
114 {
115   /* mov $__NR_rt_sigreturn, %rax */
116   LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x0f, 0x00, 0x00, 0x00,
117   /* syscall */
118   LINUX_SIGTRAMP_INSN1, 0x05
119 };
120
121 static const gdb_byte amd64_x32_linux_sigtramp_code[] =
122 {
123   /* mov $__NR_rt_sigreturn, %rax.  */
124   LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x01, 0x02, 0x00, 0x40,
125   /* syscall */
126   LINUX_SIGTRAMP_INSN1, 0x05
127 };
128
129 #define LINUX_SIGTRAMP_LEN (sizeof amd64_linux_sigtramp_code)
130
131 /* If PC is in a sigtramp routine, return the address of the start of
132    the routine.  Otherwise, return 0.  */
133
134 static CORE_ADDR
135 amd64_linux_sigtramp_start (struct frame_info *this_frame)
136 {
137   struct gdbarch *gdbarch;
138   const gdb_byte *sigtramp_code;
139   CORE_ADDR pc = get_frame_pc (this_frame);
140   gdb_byte buf[LINUX_SIGTRAMP_LEN];
141
142   /* We only recognize a signal trampoline if PC is at the start of
143      one of the two instructions.  We optimize for finding the PC at
144      the start, as will be the case when the trampoline is not the
145      first frame on the stack.  We assume that in the case where the
146      PC is not at the start of the instruction sequence, there will be
147      a few trailing readable bytes on the stack.  */
148
149   if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
150     return 0;
151
152   if (buf[0] != LINUX_SIGTRAMP_INSN0)
153     {
154       if (buf[0] != LINUX_SIGTRAMP_INSN1)
155         return 0;
156
157       pc -= LINUX_SIGTRAMP_OFFSET1;
158       if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
159         return 0;
160     }
161
162   gdbarch = get_frame_arch (this_frame);
163   if (gdbarch_ptr_bit (gdbarch) == 32)
164     sigtramp_code = amd64_x32_linux_sigtramp_code;
165   else
166     sigtramp_code = amd64_linux_sigtramp_code;
167   if (memcmp (buf, sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
168     return 0;
169
170   return pc;
171 }
172
173 /* Return whether THIS_FRAME corresponds to a GNU/Linux sigtramp
174    routine.  */
175
176 static int
177 amd64_linux_sigtramp_p (struct frame_info *this_frame)
178 {
179   CORE_ADDR pc = get_frame_pc (this_frame);
180   const char *name;
181
182   find_pc_partial_function (pc, &name, NULL, NULL);
183
184   /* If we have NAME, we can optimize the search.  The trampoline is
185      named __restore_rt.  However, it isn't dynamically exported from
186      the shared C library, so the trampoline may appear to be part of
187      the preceding function.  This should always be sigaction,
188      __sigaction, or __libc_sigaction (all aliases to the same
189      function).  */
190   if (name == NULL || strstr (name, "sigaction") != NULL)
191     return (amd64_linux_sigtramp_start (this_frame) != 0);
192
193   return (strcmp ("__restore_rt", name) == 0);
194 }
195
196 /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>.  */
197 #define AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 40
198
199 /* Assuming THIS_FRAME is a GNU/Linux sigtramp routine, return the
200    address of the associated sigcontext structure.  */
201
202 static CORE_ADDR
203 amd64_linux_sigcontext_addr (struct frame_info *this_frame)
204 {
205   struct gdbarch *gdbarch = get_frame_arch (this_frame);
206   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
207   CORE_ADDR sp;
208   gdb_byte buf[8];
209
210   get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
211   sp = extract_unsigned_integer (buf, 8, byte_order);
212
213   /* The sigcontext structure is part of the user context.  A pointer
214      to the user context is passed as the third argument to the signal
215      handler, i.e. in %rdx.  Unfortunately %rdx isn't preserved across
216      function calls so we can't use it.  Fortunately the user context
217      is part of the signal frame and the unwound %rsp directly points
218      at it.  */
219   return sp + AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET;
220 }
221 \f
222
223 static LONGEST
224 amd64_linux_get_syscall_number (struct gdbarch *gdbarch,
225                                 ptid_t ptid)
226 {
227   struct regcache *regcache = get_thread_regcache (ptid);
228   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
229   /* The content of a register.  */
230   gdb_byte buf[8];
231   /* The result.  */
232   LONGEST ret;
233
234   /* Getting the system call number from the register.
235      When dealing with x86_64 architecture, this information
236      is stored at %rax register.  */
237   regcache_cooked_read (regcache, AMD64_LINUX_ORIG_RAX_REGNUM, buf);
238
239   ret = extract_signed_integer (buf, 8, byte_order);
240
241   return ret;
242 }
243
244
245 /* From <asm/sigcontext.h>.  */
246 static int amd64_linux_sc_reg_offset[] =
247 {
248   13 * 8,                       /* %rax */
249   11 * 8,                       /* %rbx */
250   14 * 8,                       /* %rcx */
251   12 * 8,                       /* %rdx */
252   9 * 8,                        /* %rsi */
253   8 * 8,                        /* %rdi */
254   10 * 8,                       /* %rbp */
255   15 * 8,                       /* %rsp */
256   0 * 8,                        /* %r8 */
257   1 * 8,                        /* %r9 */
258   2 * 8,                        /* %r10 */
259   3 * 8,                        /* %r11 */
260   4 * 8,                        /* %r12 */
261   5 * 8,                        /* %r13 */
262   6 * 8,                        /* %r14 */
263   7 * 8,                        /* %r15 */
264   16 * 8,                       /* %rip */
265   17 * 8,                       /* %eflags */
266
267   /* FIXME: kettenis/2002030531: The registers %cs, %fs and %gs are
268      available in `struct sigcontext'.  However, they only occupy two
269      bytes instead of four, which makes using them here rather
270      difficult.  Leave them out for now.  */
271   -1,                           /* %cs */
272   -1,                           /* %ss */
273   -1,                           /* %ds */
274   -1,                           /* %es */
275   -1,                           /* %fs */
276   -1                            /* %gs */
277 };
278
279 static int
280 amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
281                                  struct reggroup *group)
282
283   if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM
284       || regnum == AMD64_FSBASE_REGNUM
285       || regnum == AMD64_GSBASE_REGNUM)
286     return (group == system_reggroup
287             || group == save_reggroup
288             || group == restore_reggroup);
289   return i386_register_reggroup_p (gdbarch, regnum, group);
290 }
291
292 /* Set the program counter for process PTID to PC.  */
293
294 static void
295 amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
296 {
297   regcache_cooked_write_unsigned (regcache, AMD64_RIP_REGNUM, pc);
298
299   /* We must be careful with modifying the program counter.  If we
300      just interrupted a system call, the kernel might try to restart
301      it when we resume the inferior.  On restarting the system call,
302      the kernel will try backing up the program counter even though it
303      no longer points at the system call.  This typically results in a
304      SIGSEGV or SIGILL.  We can prevent this by writing `-1' in the
305      "orig_rax" pseudo-register.
306
307      Note that "orig_rax" is saved when setting up a dummy call frame.
308      This means that it is properly restored when that frame is
309      popped, and that the interrupted system call will be restarted
310      when we resume the inferior on return from a function call from
311      within GDB.  In all other cases the system call will not be
312      restarted.  */
313   regcache_cooked_write_unsigned (regcache, AMD64_LINUX_ORIG_RAX_REGNUM, -1);
314 }
315
316 /* Record all registers but IP register for process-record.  */
317
318 static int
319 amd64_all_but_ip_registers_record (struct regcache *regcache)
320 {
321   if (record_full_arch_list_add_reg (regcache, AMD64_RAX_REGNUM))
322     return -1;
323   if (record_full_arch_list_add_reg (regcache, AMD64_RCX_REGNUM))
324     return -1;
325   if (record_full_arch_list_add_reg (regcache, AMD64_RDX_REGNUM))
326     return -1;
327   if (record_full_arch_list_add_reg (regcache, AMD64_RBX_REGNUM))
328     return -1;
329   if (record_full_arch_list_add_reg (regcache, AMD64_RSP_REGNUM))
330     return -1;
331   if (record_full_arch_list_add_reg (regcache, AMD64_RBP_REGNUM))
332     return -1;
333   if (record_full_arch_list_add_reg (regcache, AMD64_RSI_REGNUM))
334     return -1;
335   if (record_full_arch_list_add_reg (regcache, AMD64_RDI_REGNUM))
336     return -1;
337   if (record_full_arch_list_add_reg (regcache, AMD64_R8_REGNUM))
338     return -1;
339   if (record_full_arch_list_add_reg (regcache, AMD64_R9_REGNUM))
340     return -1;
341   if (record_full_arch_list_add_reg (regcache, AMD64_R10_REGNUM))
342     return -1;
343   if (record_full_arch_list_add_reg (regcache, AMD64_R11_REGNUM))
344     return -1;
345   if (record_full_arch_list_add_reg (regcache, AMD64_R12_REGNUM))
346     return -1;
347   if (record_full_arch_list_add_reg (regcache, AMD64_R13_REGNUM))
348     return -1;
349   if (record_full_arch_list_add_reg (regcache, AMD64_R14_REGNUM))
350     return -1;
351   if (record_full_arch_list_add_reg (regcache, AMD64_R15_REGNUM))
352     return -1;
353   if (record_full_arch_list_add_reg (regcache, AMD64_EFLAGS_REGNUM))
354     return -1;
355
356   return 0;
357 }
358
359 /* amd64_canonicalize_syscall maps from the native amd64 Linux set 
360    of syscall ids into a canonical set of syscall ids used by 
361    process record.  */
362
363 static enum gdb_syscall
364 amd64_canonicalize_syscall (enum amd64_syscall syscall_number)
365 {
366   switch (syscall_number) {
367   case amd64_sys_read:
368   case amd64_x32_sys_read:
369     return gdb_sys_read;
370
371   case amd64_sys_write:
372   case amd64_x32_sys_write:
373     return gdb_sys_write;
374
375   case amd64_sys_open:
376   case amd64_x32_sys_open:
377     return gdb_sys_open;
378
379   case amd64_sys_close:
380   case amd64_x32_sys_close:
381     return gdb_sys_close;
382
383   case amd64_sys_newstat:
384   case amd64_x32_sys_newstat:
385     return gdb_sys_newstat;
386
387   case amd64_sys_newfstat:
388   case amd64_x32_sys_newfstat:
389     return gdb_sys_newfstat;
390
391   case amd64_sys_newlstat:
392   case amd64_x32_sys_newlstat:
393     return gdb_sys_newlstat;
394
395   case amd64_sys_poll:
396   case amd64_x32_sys_poll:
397     return gdb_sys_poll;
398
399   case amd64_sys_lseek:
400   case amd64_x32_sys_lseek:
401     return gdb_sys_lseek;
402
403   case amd64_sys_mmap:
404   case amd64_x32_sys_mmap:
405     return gdb_sys_mmap2;
406
407   case amd64_sys_mprotect:
408   case amd64_x32_sys_mprotect:
409     return gdb_sys_mprotect;
410
411   case amd64_sys_munmap:
412   case amd64_x32_sys_munmap:
413     return gdb_sys_munmap;
414
415   case amd64_sys_brk:
416   case amd64_x32_sys_brk:
417     return gdb_sys_brk;
418
419   case amd64_sys_rt_sigaction:
420   case amd64_x32_sys_rt_sigaction:
421     return gdb_sys_rt_sigaction;
422
423   case amd64_sys_rt_sigprocmask:
424   case amd64_x32_sys_rt_sigprocmask:
425     return gdb_sys_rt_sigprocmask;
426
427   case amd64_sys_rt_sigreturn:
428   case amd64_x32_sys_rt_sigreturn:
429     return gdb_sys_rt_sigreturn;
430
431   case amd64_sys_ioctl:
432   case amd64_x32_sys_ioctl:
433     return gdb_sys_ioctl;
434
435   case amd64_sys_pread64:
436   case amd64_x32_sys_pread64:
437     return gdb_sys_pread64;
438
439   case amd64_sys_pwrite64:
440   case amd64_x32_sys_pwrite64:
441     return gdb_sys_pwrite64;
442
443   case amd64_sys_readv:
444   case amd64_x32_sys_readv:
445     return gdb_sys_readv;
446
447   case amd64_sys_writev:
448   case amd64_x32_sys_writev:
449     return gdb_sys_writev;
450
451   case amd64_sys_access:
452   case amd64_x32_sys_access:
453     return gdb_sys_access;
454
455   case amd64_sys_pipe:
456   case amd64_x32_sys_pipe:
457     return gdb_sys_pipe;
458
459   case amd64_sys_select:
460   case amd64_x32_sys_select:
461     return gdb_sys_select;
462
463   case amd64_sys_sched_yield:
464   case amd64_x32_sys_sched_yield:
465     return gdb_sys_sched_yield;
466
467   case amd64_sys_mremap:
468   case amd64_x32_sys_mremap:
469     return gdb_sys_mremap;
470
471   case amd64_sys_msync:
472   case amd64_x32_sys_msync:
473     return gdb_sys_msync;
474
475   case amd64_sys_mincore:
476   case amd64_x32_sys_mincore:
477     return gdb_sys_mincore;
478
479   case amd64_sys_madvise:
480   case amd64_x32_sys_madvise:
481     return gdb_sys_madvise;
482
483   case amd64_sys_shmget:
484   case amd64_x32_sys_shmget:
485     return gdb_sys_shmget;
486
487   case amd64_sys_shmat:
488   case amd64_x32_sys_shmat:
489     return gdb_sys_shmat;
490
491   case amd64_sys_shmctl:
492   case amd64_x32_sys_shmctl:
493     return gdb_sys_shmctl;
494
495   case amd64_sys_dup:
496   case amd64_x32_sys_dup:
497     return gdb_sys_dup;
498
499   case amd64_sys_dup2:
500   case amd64_x32_sys_dup2:
501     return gdb_sys_dup2;
502
503   case amd64_sys_pause:
504   case amd64_x32_sys_pause:
505     return gdb_sys_pause;
506
507   case amd64_sys_nanosleep:
508   case amd64_x32_sys_nanosleep:
509     return gdb_sys_nanosleep;
510
511   case amd64_sys_getitimer:
512   case amd64_x32_sys_getitimer:
513     return gdb_sys_getitimer;
514
515   case amd64_sys_alarm:
516   case amd64_x32_sys_alarm:
517     return gdb_sys_alarm;
518
519   case amd64_sys_setitimer:
520   case amd64_x32_sys_setitimer:
521     return gdb_sys_setitimer;
522
523   case amd64_sys_getpid:
524   case amd64_x32_sys_getpid:
525     return gdb_sys_getpid;
526
527   case amd64_sys_sendfile64:
528   case amd64_x32_sys_sendfile64:
529     return gdb_sys_sendfile64;
530
531   case amd64_sys_socket:
532   case amd64_x32_sys_socket:
533     return gdb_sys_socket;
534
535   case amd64_sys_connect:
536   case amd64_x32_sys_connect:
537     return gdb_sys_connect;
538
539   case amd64_sys_accept:
540   case amd64_x32_sys_accept:
541     return gdb_sys_accept;
542
543   case amd64_sys_sendto:
544   case amd64_x32_sys_sendto:
545     return gdb_sys_sendto;
546
547   case amd64_sys_recvfrom:
548   case amd64_x32_sys_recvfrom:
549     return gdb_sys_recvfrom;
550
551   case amd64_sys_sendmsg:
552   case amd64_x32_sys_sendmsg:
553     return gdb_sys_sendmsg;
554
555   case amd64_sys_recvmsg:
556   case amd64_x32_sys_recvmsg:
557     return gdb_sys_recvmsg;
558
559   case amd64_sys_shutdown:
560   case amd64_x32_sys_shutdown:
561     return gdb_sys_shutdown;
562
563   case amd64_sys_bind:
564   case amd64_x32_sys_bind:
565     return gdb_sys_bind;
566
567   case amd64_sys_listen:
568   case amd64_x32_sys_listen:
569     return gdb_sys_listen;
570
571   case amd64_sys_getsockname:
572   case amd64_x32_sys_getsockname:
573     return gdb_sys_getsockname;
574
575   case amd64_sys_getpeername:
576   case amd64_x32_sys_getpeername:
577     return gdb_sys_getpeername;
578
579   case amd64_sys_socketpair:
580   case amd64_x32_sys_socketpair:
581     return gdb_sys_socketpair;
582
583   case amd64_sys_setsockopt:
584   case amd64_x32_sys_setsockopt:
585     return gdb_sys_setsockopt;
586
587   case amd64_sys_getsockopt:
588   case amd64_x32_sys_getsockopt:
589     return gdb_sys_getsockopt;
590
591   case amd64_sys_clone:
592   case amd64_x32_sys_clone:
593     return gdb_sys_clone;
594
595   case amd64_sys_fork:
596   case amd64_x32_sys_fork:
597     return gdb_sys_fork;
598
599   case amd64_sys_vfork:
600   case amd64_x32_sys_vfork:
601     return gdb_sys_vfork;
602
603   case amd64_sys_execve:
604   case amd64_x32_sys_execve:
605     return gdb_sys_execve;
606
607   case amd64_sys_exit:
608   case amd64_x32_sys_exit:
609     return gdb_sys_exit;
610
611   case amd64_sys_wait4:
612   case amd64_x32_sys_wait4:
613     return gdb_sys_wait4;
614
615   case amd64_sys_kill:
616   case amd64_x32_sys_kill:
617     return gdb_sys_kill;
618
619   case amd64_sys_uname:
620   case amd64_x32_sys_uname:
621     return gdb_sys_uname;
622
623   case amd64_sys_semget:
624   case amd64_x32_sys_semget:
625     return gdb_sys_semget;
626
627   case amd64_sys_semop:
628   case amd64_x32_sys_semop:
629     return gdb_sys_semop;
630
631   case amd64_sys_semctl:
632   case amd64_x32_sys_semctl:
633     return gdb_sys_semctl;
634
635   case amd64_sys_shmdt:
636   case amd64_x32_sys_shmdt:
637     return gdb_sys_shmdt;
638
639   case amd64_sys_msgget:
640   case amd64_x32_sys_msgget:
641     return gdb_sys_msgget;
642
643   case amd64_sys_msgsnd:
644   case amd64_x32_sys_msgsnd:
645     return gdb_sys_msgsnd;
646
647   case amd64_sys_msgrcv:
648   case amd64_x32_sys_msgrcv:
649     return gdb_sys_msgrcv;
650
651   case amd64_sys_msgctl:
652   case amd64_x32_sys_msgctl:
653     return gdb_sys_msgctl;
654
655   case amd64_sys_fcntl:
656   case amd64_x32_sys_fcntl:
657     return gdb_sys_fcntl;
658
659   case amd64_sys_flock:
660   case amd64_x32_sys_flock:
661     return gdb_sys_flock;
662
663   case amd64_sys_fsync:
664   case amd64_x32_sys_fsync:
665     return gdb_sys_fsync;
666
667   case amd64_sys_fdatasync:
668   case amd64_x32_sys_fdatasync:
669     return gdb_sys_fdatasync;
670
671   case amd64_sys_truncate:
672   case amd64_x32_sys_truncate:
673     return gdb_sys_truncate;
674
675   case amd64_sys_ftruncate:
676   case amd64_x32_sys_ftruncate:
677     return gdb_sys_ftruncate;
678
679   case amd64_sys_getdents:
680   case amd64_x32_sys_getdents:
681     return gdb_sys_getdents;
682
683   case amd64_sys_getcwd:
684   case amd64_x32_sys_getcwd:
685     return gdb_sys_getcwd;
686
687   case amd64_sys_chdir:
688   case amd64_x32_sys_chdir:
689     return gdb_sys_chdir;
690
691   case amd64_sys_fchdir:
692   case amd64_x32_sys_fchdir:
693     return gdb_sys_fchdir;
694
695   case amd64_sys_rename:
696   case amd64_x32_sys_rename:
697     return gdb_sys_rename;
698
699   case amd64_sys_mkdir:
700   case amd64_x32_sys_mkdir:
701     return gdb_sys_mkdir;
702
703   case amd64_sys_rmdir:
704   case amd64_x32_sys_rmdir:
705     return gdb_sys_rmdir;
706
707   case amd64_sys_creat:
708   case amd64_x32_sys_creat:
709     return gdb_sys_creat;
710
711   case amd64_sys_link:
712   case amd64_x32_sys_link:
713     return gdb_sys_link;
714
715   case amd64_sys_unlink:
716   case amd64_x32_sys_unlink:
717     return gdb_sys_unlink;
718
719   case amd64_sys_symlink:
720   case amd64_x32_sys_symlink:
721     return gdb_sys_symlink;
722
723   case amd64_sys_readlink:
724   case amd64_x32_sys_readlink:
725     return gdb_sys_readlink;
726
727   case amd64_sys_chmod:
728   case amd64_x32_sys_chmod:
729     return gdb_sys_chmod;
730
731   case amd64_sys_fchmod:
732   case amd64_x32_sys_fchmod:
733     return gdb_sys_fchmod;
734
735   case amd64_sys_chown:
736   case amd64_x32_sys_chown:
737     return gdb_sys_chown;
738
739   case amd64_sys_fchown:
740   case amd64_x32_sys_fchown:
741     return gdb_sys_fchown;
742
743   case amd64_sys_lchown:
744   case amd64_x32_sys_lchown:
745     return gdb_sys_lchown;
746
747   case amd64_sys_umask:
748   case amd64_x32_sys_umask:
749     return gdb_sys_umask;
750
751   case amd64_sys_gettimeofday:
752   case amd64_x32_sys_gettimeofday:
753     return gdb_sys_gettimeofday;
754
755   case amd64_sys_getrlimit:
756   case amd64_x32_sys_getrlimit:
757     return gdb_sys_getrlimit;
758
759   case amd64_sys_getrusage:
760   case amd64_x32_sys_getrusage:
761     return gdb_sys_getrusage;
762
763   case amd64_sys_sysinfo:
764   case amd64_x32_sys_sysinfo:
765     return gdb_sys_sysinfo;
766
767   case amd64_sys_times:
768   case amd64_x32_sys_times:
769     return gdb_sys_times;
770
771   case amd64_sys_ptrace:
772   case amd64_x32_sys_ptrace:
773     return gdb_sys_ptrace;
774
775   case amd64_sys_getuid:
776   case amd64_x32_sys_getuid:
777     return gdb_sys_getuid;
778
779   case amd64_sys_syslog:
780   case amd64_x32_sys_syslog:
781     return gdb_sys_syslog;
782
783   case amd64_sys_getgid:
784   case amd64_x32_sys_getgid:
785     return gdb_sys_getgid;
786
787   case amd64_sys_setuid:
788   case amd64_x32_sys_setuid:
789     return gdb_sys_setuid;
790
791   case amd64_sys_setgid:
792   case amd64_x32_sys_setgid:
793     return gdb_sys_setgid;
794
795   case amd64_sys_geteuid:
796   case amd64_x32_sys_geteuid:
797     return gdb_sys_geteuid;
798
799   case amd64_sys_getegid:
800   case amd64_x32_sys_getegid:
801     return gdb_sys_getegid;
802
803   case amd64_sys_setpgid:
804   case amd64_x32_sys_setpgid:
805     return gdb_sys_setpgid;
806
807   case amd64_sys_getppid:
808   case amd64_x32_sys_getppid:
809     return gdb_sys_getppid;
810
811   case amd64_sys_getpgrp:
812   case amd64_x32_sys_getpgrp:
813     return gdb_sys_getpgrp;
814
815   case amd64_sys_setsid:
816   case amd64_x32_sys_setsid:
817     return gdb_sys_setsid;
818
819   case amd64_sys_setreuid:
820   case amd64_x32_sys_setreuid:
821     return gdb_sys_setreuid;
822
823   case amd64_sys_setregid:
824   case amd64_x32_sys_setregid:
825     return gdb_sys_setregid;
826
827   case amd64_sys_getgroups:
828   case amd64_x32_sys_getgroups:
829     return gdb_sys_getgroups;
830
831   case amd64_sys_setgroups:
832   case amd64_x32_sys_setgroups:
833     return gdb_sys_setgroups;
834
835   case amd64_sys_setresuid:
836   case amd64_x32_sys_setresuid:
837     return gdb_sys_setresuid;
838
839   case amd64_sys_getresuid:
840   case amd64_x32_sys_getresuid:
841     return gdb_sys_getresuid;
842
843   case amd64_sys_setresgid:
844   case amd64_x32_sys_setresgid:
845     return gdb_sys_setresgid;
846
847   case amd64_sys_getresgid:
848   case amd64_x32_sys_getresgid:
849     return gdb_sys_getresgid;
850
851   case amd64_sys_getpgid:
852   case amd64_x32_sys_getpgid:
853     return gdb_sys_getpgid;
854
855   case amd64_sys_setfsuid:
856   case amd64_x32_sys_setfsuid:
857     return gdb_sys_setfsuid;
858
859   case amd64_sys_setfsgid:
860   case amd64_x32_sys_setfsgid:
861     return gdb_sys_setfsgid;
862
863   case amd64_sys_getsid:
864   case amd64_x32_sys_getsid:
865     return gdb_sys_getsid;
866
867   case amd64_sys_capget:
868   case amd64_x32_sys_capget:
869     return gdb_sys_capget;
870
871   case amd64_sys_capset:
872   case amd64_x32_sys_capset:
873     return gdb_sys_capset;
874
875   case amd64_sys_rt_sigpending:
876   case amd64_x32_sys_rt_sigpending:
877     return gdb_sys_rt_sigpending;
878
879   case amd64_sys_rt_sigtimedwait:
880   case amd64_x32_sys_rt_sigtimedwait:
881     return gdb_sys_rt_sigtimedwait;
882
883   case amd64_sys_rt_sigqueueinfo:
884   case amd64_x32_sys_rt_sigqueueinfo:
885     return gdb_sys_rt_sigqueueinfo;
886
887   case amd64_sys_rt_sigsuspend:
888   case amd64_x32_sys_rt_sigsuspend:
889     return gdb_sys_rt_sigsuspend;
890
891   case amd64_sys_sigaltstack:
892   case amd64_x32_sys_sigaltstack:
893     return gdb_sys_sigaltstack;
894
895   case amd64_sys_utime:
896   case amd64_x32_sys_utime:
897     return gdb_sys_utime;
898
899   case amd64_sys_mknod:
900   case amd64_x32_sys_mknod:
901     return gdb_sys_mknod;
902
903   case amd64_sys_personality:
904   case amd64_x32_sys_personality:
905     return gdb_sys_personality;
906
907   case amd64_sys_ustat:
908   case amd64_x32_sys_ustat:
909     return gdb_sys_ustat;
910
911   case amd64_sys_statfs:
912   case amd64_x32_sys_statfs:
913     return gdb_sys_statfs;
914
915   case amd64_sys_fstatfs:
916   case amd64_x32_sys_fstatfs:
917     return gdb_sys_fstatfs;
918
919   case amd64_sys_sysfs:
920   case amd64_x32_sys_sysfs:
921     return gdb_sys_sysfs;
922
923   case amd64_sys_getpriority:
924   case amd64_x32_sys_getpriority:
925     return gdb_sys_getpriority;
926
927   case amd64_sys_setpriority:
928   case amd64_x32_sys_setpriority:
929     return gdb_sys_setpriority;
930
931   case amd64_sys_sched_setparam:
932   case amd64_x32_sys_sched_setparam:
933     return gdb_sys_sched_setparam;
934
935   case amd64_sys_sched_getparam:
936   case amd64_x32_sys_sched_getparam:
937     return gdb_sys_sched_getparam;
938
939   case amd64_sys_sched_setscheduler:
940   case amd64_x32_sys_sched_setscheduler:
941     return gdb_sys_sched_setscheduler;
942
943   case amd64_sys_sched_getscheduler:
944   case amd64_x32_sys_sched_getscheduler:
945     return gdb_sys_sched_getscheduler;
946
947   case amd64_sys_sched_get_priority_max:
948   case amd64_x32_sys_sched_get_priority_max:
949     return gdb_sys_sched_get_priority_max;
950
951   case amd64_sys_sched_get_priority_min:
952   case amd64_x32_sys_sched_get_priority_min:
953     return gdb_sys_sched_get_priority_min;
954
955   case amd64_sys_sched_rr_get_interval:
956   case amd64_x32_sys_sched_rr_get_interval:
957     return gdb_sys_sched_rr_get_interval;
958
959   case amd64_sys_mlock:
960   case amd64_x32_sys_mlock:
961     return gdb_sys_mlock;
962
963   case amd64_sys_munlock:
964   case amd64_x32_sys_munlock:
965     return gdb_sys_munlock;
966
967   case amd64_sys_mlockall:
968   case amd64_x32_sys_mlockall:
969     return gdb_sys_mlockall;
970
971   case amd64_sys_munlockall:
972   case amd64_x32_sys_munlockall:
973     return gdb_sys_munlockall;
974
975   case amd64_sys_vhangup:
976   case amd64_x32_sys_vhangup:
977     return gdb_sys_vhangup;
978
979   case amd64_sys_modify_ldt:
980   case amd64_x32_sys_modify_ldt:
981     return gdb_sys_modify_ldt;
982
983   case amd64_sys_pivot_root:
984   case amd64_x32_sys_pivot_root:
985     return gdb_sys_pivot_root;
986
987   case amd64_sys_sysctl:
988   case amd64_x32_sys_sysctl:
989     return gdb_sys_sysctl;
990
991   case amd64_sys_prctl:
992   case amd64_x32_sys_prctl:
993     return gdb_sys_prctl;
994
995   case amd64_sys_arch_prctl:
996   case amd64_x32_sys_arch_prctl:
997     return gdb_sys_no_syscall;  /* Note */
998
999   case amd64_sys_adjtimex:
1000   case amd64_x32_sys_adjtimex:
1001     return gdb_sys_adjtimex;
1002
1003   case amd64_sys_setrlimit:
1004   case amd64_x32_sys_setrlimit:
1005     return gdb_sys_setrlimit;
1006
1007   case amd64_sys_chroot:
1008   case amd64_x32_sys_chroot:
1009     return gdb_sys_chroot;
1010
1011   case amd64_sys_sync:
1012   case amd64_x32_sys_sync:
1013     return gdb_sys_sync;
1014
1015   case amd64_sys_acct:
1016   case amd64_x32_sys_acct:
1017     return gdb_sys_acct;
1018
1019   case amd64_sys_settimeofday:
1020   case amd64_x32_sys_settimeofday:
1021     return gdb_sys_settimeofday;
1022
1023   case amd64_sys_mount:
1024   case amd64_x32_sys_mount:
1025     return gdb_sys_mount;
1026
1027   case amd64_sys_umount:
1028   case amd64_x32_sys_umount:
1029     return gdb_sys_umount;
1030
1031   case amd64_sys_swapon:
1032   case amd64_x32_sys_swapon:
1033     return gdb_sys_swapon;
1034
1035   case amd64_sys_swapoff:
1036   case amd64_x32_sys_swapoff:
1037     return gdb_sys_swapoff;
1038
1039   case amd64_sys_reboot:
1040   case amd64_x32_sys_reboot:
1041     return gdb_sys_reboot;
1042
1043   case amd64_sys_sethostname:
1044   case amd64_x32_sys_sethostname:
1045     return gdb_sys_sethostname;
1046
1047   case amd64_sys_setdomainname:
1048   case amd64_x32_sys_setdomainname:
1049     return gdb_sys_setdomainname;
1050
1051   case amd64_sys_iopl:
1052   case amd64_x32_sys_iopl:
1053     return gdb_sys_iopl;
1054
1055   case amd64_sys_ioperm:
1056   case amd64_x32_sys_ioperm:
1057     return gdb_sys_ioperm;
1058
1059   case amd64_sys_init_module:
1060   case amd64_x32_sys_init_module:
1061     return gdb_sys_init_module;
1062
1063   case amd64_sys_delete_module:
1064   case amd64_x32_sys_delete_module:
1065     return gdb_sys_delete_module;
1066
1067   case amd64_sys_quotactl:
1068   case amd64_x32_sys_quotactl:
1069     return gdb_sys_quotactl;
1070
1071   case amd64_sys_nfsservctl:
1072     return gdb_sys_nfsservctl;
1073
1074   case amd64_sys_gettid:
1075   case amd64_x32_sys_gettid:
1076     return gdb_sys_gettid;
1077
1078   case amd64_sys_readahead:
1079   case amd64_x32_sys_readahead:
1080     return gdb_sys_readahead;
1081
1082   case amd64_sys_setxattr:
1083   case amd64_x32_sys_setxattr:
1084     return gdb_sys_setxattr;
1085
1086   case amd64_sys_lsetxattr:
1087   case amd64_x32_sys_lsetxattr:
1088     return gdb_sys_lsetxattr;
1089
1090   case amd64_sys_fsetxattr:
1091   case amd64_x32_sys_fsetxattr:
1092     return gdb_sys_fsetxattr;
1093
1094   case amd64_sys_getxattr:
1095   case amd64_x32_sys_getxattr:
1096     return gdb_sys_getxattr;
1097
1098   case amd64_sys_lgetxattr:
1099   case amd64_x32_sys_lgetxattr:
1100     return gdb_sys_lgetxattr;
1101
1102   case amd64_sys_fgetxattr:
1103   case amd64_x32_sys_fgetxattr:
1104     return gdb_sys_fgetxattr;
1105
1106   case amd64_sys_listxattr:
1107   case amd64_x32_sys_listxattr:
1108     return gdb_sys_listxattr;
1109
1110   case amd64_sys_llistxattr:
1111   case amd64_x32_sys_llistxattr:
1112     return gdb_sys_llistxattr;
1113
1114   case amd64_sys_flistxattr:
1115   case amd64_x32_sys_flistxattr:
1116     return gdb_sys_flistxattr;
1117
1118   case amd64_sys_removexattr:
1119   case amd64_x32_sys_removexattr:
1120     return gdb_sys_removexattr;
1121
1122   case amd64_sys_lremovexattr:
1123   case amd64_x32_sys_lremovexattr:
1124     return gdb_sys_lremovexattr;
1125
1126   case amd64_sys_fremovexattr:
1127   case amd64_x32_sys_fremovexattr:
1128     return gdb_sys_fremovexattr;
1129
1130   case amd64_sys_tkill:
1131   case amd64_x32_sys_tkill:
1132     return gdb_sys_tkill;
1133
1134   case amd64_sys_time:
1135   case amd64_x32_sys_time:
1136     return gdb_sys_time;
1137
1138   case amd64_sys_futex:
1139   case amd64_x32_sys_futex:
1140     return gdb_sys_futex;
1141
1142   case amd64_sys_sched_setaffinity:
1143   case amd64_x32_sys_sched_setaffinity:
1144     return gdb_sys_sched_setaffinity;
1145
1146   case amd64_sys_sched_getaffinity:
1147   case amd64_x32_sys_sched_getaffinity:
1148     return gdb_sys_sched_getaffinity;
1149
1150   case amd64_sys_io_setup:
1151   case amd64_x32_sys_io_setup:
1152     return gdb_sys_io_setup;
1153
1154   case amd64_sys_io_destroy:
1155   case amd64_x32_sys_io_destroy:
1156     return gdb_sys_io_destroy;
1157
1158   case amd64_sys_io_getevents:
1159   case amd64_x32_sys_io_getevents:
1160     return gdb_sys_io_getevents;
1161
1162   case amd64_sys_io_submit:
1163   case amd64_x32_sys_io_submit:
1164     return gdb_sys_io_submit;
1165
1166   case amd64_sys_io_cancel:
1167   case amd64_x32_sys_io_cancel:
1168     return gdb_sys_io_cancel;
1169
1170   case amd64_sys_lookup_dcookie:
1171   case amd64_x32_sys_lookup_dcookie:
1172     return gdb_sys_lookup_dcookie;
1173
1174   case amd64_sys_epoll_create:
1175   case amd64_x32_sys_epoll_create:
1176     return gdb_sys_epoll_create;
1177
1178   case amd64_sys_remap_file_pages:
1179   case amd64_x32_sys_remap_file_pages:
1180     return gdb_sys_remap_file_pages;
1181
1182   case amd64_sys_getdents64:
1183   case amd64_x32_sys_getdents64:
1184     return gdb_sys_getdents64;
1185
1186   case amd64_sys_set_tid_address:
1187   case amd64_x32_sys_set_tid_address:
1188     return gdb_sys_set_tid_address;
1189
1190   case amd64_sys_restart_syscall:
1191   case amd64_x32_sys_restart_syscall:
1192     return gdb_sys_restart_syscall;
1193
1194   case amd64_sys_semtimedop:
1195   case amd64_x32_sys_semtimedop:
1196     return gdb_sys_semtimedop;
1197
1198   case amd64_sys_fadvise64:
1199   case amd64_x32_sys_fadvise64:
1200     return gdb_sys_fadvise64;
1201
1202   case amd64_sys_timer_create:
1203   case amd64_x32_sys_timer_create:
1204     return gdb_sys_timer_create;
1205
1206   case amd64_sys_timer_settime:
1207   case amd64_x32_sys_timer_settime:
1208     return gdb_sys_timer_settime;
1209
1210   case amd64_sys_timer_gettime:
1211   case amd64_x32_sys_timer_gettime:
1212     return gdb_sys_timer_gettime;
1213
1214   case amd64_sys_timer_getoverrun:
1215   case amd64_x32_sys_timer_getoverrun:
1216     return gdb_sys_timer_getoverrun;
1217
1218   case amd64_sys_timer_delete:
1219   case amd64_x32_sys_timer_delete:
1220     return gdb_sys_timer_delete;
1221
1222   case amd64_sys_clock_settime:
1223   case amd64_x32_sys_clock_settime:
1224     return gdb_sys_clock_settime;
1225
1226   case amd64_sys_clock_gettime:
1227   case amd64_x32_sys_clock_gettime:
1228     return gdb_sys_clock_gettime;
1229
1230   case amd64_sys_clock_getres:
1231   case amd64_x32_sys_clock_getres:
1232     return gdb_sys_clock_getres;
1233
1234   case amd64_sys_clock_nanosleep:
1235   case amd64_x32_sys_clock_nanosleep:
1236     return gdb_sys_clock_nanosleep;
1237
1238   case amd64_sys_exit_group:
1239   case amd64_x32_sys_exit_group:
1240     return gdb_sys_exit_group;
1241
1242   case amd64_sys_epoll_wait:
1243   case amd64_x32_sys_epoll_wait:
1244     return gdb_sys_epoll_wait;
1245
1246   case amd64_sys_epoll_ctl:
1247   case amd64_x32_sys_epoll_ctl:
1248     return gdb_sys_epoll_ctl;
1249
1250   case amd64_sys_tgkill:
1251   case amd64_x32_sys_tgkill:
1252     return gdb_sys_tgkill;
1253
1254   case amd64_sys_utimes:
1255   case amd64_x32_sys_utimes:
1256     return gdb_sys_utimes;
1257
1258   case amd64_sys_mbind:
1259   case amd64_x32_sys_mbind:
1260     return gdb_sys_mbind;
1261
1262   case amd64_sys_set_mempolicy:
1263   case amd64_x32_sys_set_mempolicy:
1264     return gdb_sys_set_mempolicy;
1265
1266   case amd64_sys_get_mempolicy:
1267   case amd64_x32_sys_get_mempolicy:
1268     return gdb_sys_get_mempolicy;
1269
1270   case amd64_sys_mq_open:
1271   case amd64_x32_sys_mq_open:
1272     return gdb_sys_mq_open;
1273
1274   case amd64_sys_mq_unlink:
1275   case amd64_x32_sys_mq_unlink:
1276     return gdb_sys_mq_unlink;
1277
1278   case amd64_sys_mq_timedsend:
1279   case amd64_x32_sys_mq_timedsend:
1280     return gdb_sys_mq_timedsend;
1281
1282   case amd64_sys_mq_timedreceive:
1283   case amd64_x32_sys_mq_timedreceive:
1284     return gdb_sys_mq_timedreceive;
1285
1286   case amd64_sys_mq_notify:
1287   case amd64_x32_sys_mq_notify:
1288     return gdb_sys_mq_notify;
1289
1290   case amd64_sys_mq_getsetattr:
1291   case amd64_x32_sys_mq_getsetattr:
1292     return gdb_sys_mq_getsetattr;
1293
1294   case amd64_sys_kexec_load:
1295   case amd64_x32_sys_kexec_load:
1296     return gdb_sys_kexec_load;
1297
1298   case amd64_sys_waitid:
1299   case amd64_x32_sys_waitid:
1300     return gdb_sys_waitid;
1301
1302   case amd64_sys_add_key:
1303   case amd64_x32_sys_add_key:
1304     return gdb_sys_add_key;
1305
1306   case amd64_sys_request_key:
1307   case amd64_x32_sys_request_key:
1308     return gdb_sys_request_key;
1309
1310   case amd64_sys_keyctl:
1311   case amd64_x32_sys_keyctl:
1312     return gdb_sys_keyctl;
1313
1314   case amd64_sys_ioprio_set:
1315   case amd64_x32_sys_ioprio_set:
1316     return gdb_sys_ioprio_set;
1317
1318   case amd64_sys_ioprio_get:
1319   case amd64_x32_sys_ioprio_get:
1320     return gdb_sys_ioprio_get;
1321
1322   case amd64_sys_inotify_init:
1323   case amd64_x32_sys_inotify_init:
1324     return gdb_sys_inotify_init;
1325
1326   case amd64_sys_inotify_add_watch:
1327   case amd64_x32_sys_inotify_add_watch:
1328     return gdb_sys_inotify_add_watch;
1329
1330   case amd64_sys_inotify_rm_watch:
1331   case amd64_x32_sys_inotify_rm_watch:
1332     return gdb_sys_inotify_rm_watch;
1333
1334   case amd64_sys_migrate_pages:
1335   case amd64_x32_sys_migrate_pages:
1336     return gdb_sys_migrate_pages;
1337
1338   case amd64_sys_openat:
1339   case amd64_x32_sys_openat:
1340     return gdb_sys_openat;
1341
1342   case amd64_sys_mkdirat:
1343   case amd64_x32_sys_mkdirat:
1344     return gdb_sys_mkdirat;
1345
1346   case amd64_sys_mknodat:
1347   case amd64_x32_sys_mknodat:
1348     return gdb_sys_mknodat;
1349
1350   case amd64_sys_fchownat:
1351   case amd64_x32_sys_fchownat:
1352     return gdb_sys_fchownat;
1353
1354   case amd64_sys_futimesat:
1355   case amd64_x32_sys_futimesat:
1356     return gdb_sys_futimesat;
1357
1358   case amd64_sys_newfstatat:
1359   case amd64_x32_sys_newfstatat:
1360     return gdb_sys_newfstatat;
1361
1362   case amd64_sys_unlinkat:
1363   case amd64_x32_sys_unlinkat:
1364     return gdb_sys_unlinkat;
1365
1366   case amd64_sys_renameat:
1367   case amd64_x32_sys_renameat:
1368     return gdb_sys_renameat;
1369
1370   case amd64_sys_linkat:
1371   case amd64_x32_sys_linkat:
1372     return gdb_sys_linkat;
1373
1374   case amd64_sys_symlinkat:
1375   case amd64_x32_sys_symlinkat:
1376     return gdb_sys_symlinkat;
1377
1378   case amd64_sys_readlinkat:
1379   case amd64_x32_sys_readlinkat:
1380     return gdb_sys_readlinkat;
1381
1382   case amd64_sys_fchmodat:
1383   case amd64_x32_sys_fchmodat:
1384     return gdb_sys_fchmodat;
1385
1386   case amd64_sys_faccessat:
1387   case amd64_x32_sys_faccessat:
1388     return gdb_sys_faccessat;
1389
1390   case amd64_sys_pselect6:
1391   case amd64_x32_sys_pselect6:
1392     return gdb_sys_pselect6;
1393
1394   case amd64_sys_ppoll:
1395   case amd64_x32_sys_ppoll:
1396     return gdb_sys_ppoll;
1397
1398   case amd64_sys_unshare:
1399   case amd64_x32_sys_unshare:
1400     return gdb_sys_unshare;
1401
1402   case amd64_sys_set_robust_list:
1403   case amd64_x32_sys_set_robust_list:
1404     return gdb_sys_set_robust_list;
1405
1406   case amd64_sys_get_robust_list:
1407   case amd64_x32_sys_get_robust_list:
1408     return gdb_sys_get_robust_list;
1409
1410   case amd64_sys_splice:
1411   case amd64_x32_sys_splice:
1412     return gdb_sys_splice;
1413
1414   case amd64_sys_tee:
1415   case amd64_x32_sys_tee:
1416     return gdb_sys_tee;
1417
1418   case amd64_sys_sync_file_range:
1419   case amd64_x32_sys_sync_file_range:
1420     return gdb_sys_sync_file_range;
1421
1422   case amd64_sys_vmsplice:
1423   case amd64_x32_sys_vmsplice:
1424     return gdb_sys_vmsplice;
1425
1426   case amd64_sys_move_pages:
1427   case amd64_x32_sys_move_pages:
1428     return gdb_sys_move_pages;
1429
1430   default:
1431     return gdb_sys_no_syscall;
1432   }
1433 }
1434
1435 /* Parse the arguments of current system call instruction and record
1436    the values of the registers and memory that will be changed into
1437    "record_full_arch_list".  This instruction is "syscall".
1438
1439    Return -1 if something wrong.  */
1440
1441 static struct linux_record_tdep amd64_linux_record_tdep;
1442 static struct linux_record_tdep amd64_x32_linux_record_tdep;
1443
1444 #define RECORD_ARCH_GET_FS      0x1003
1445 #define RECORD_ARCH_GET_GS      0x1004
1446
1447 static int
1448 amd64_linux_syscall_record_common (struct regcache *regcache,
1449                                    struct linux_record_tdep *linux_record_tdep_p)
1450 {
1451   int ret;
1452   ULONGEST syscall_native;
1453   enum gdb_syscall syscall_gdb = gdb_sys_no_syscall;
1454
1455   regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &syscall_native);
1456
1457   switch (syscall_native)
1458     {
1459     case amd64_sys_rt_sigreturn:
1460     case amd64_x32_sys_rt_sigreturn:
1461       if (amd64_all_but_ip_registers_record (regcache))
1462         return -1;
1463       return 0;
1464       break;
1465
1466     case amd64_sys_arch_prctl:
1467     case amd64_x32_sys_arch_prctl:
1468       {
1469         ULONGEST arg3;
1470         regcache_raw_read_unsigned (regcache, linux_record_tdep_p->arg3,
1471                                     &arg3);
1472         if (arg3 == RECORD_ARCH_GET_FS || arg3 == RECORD_ARCH_GET_GS)
1473           {
1474             CORE_ADDR addr;
1475
1476             regcache_raw_read_unsigned (regcache,
1477                                         linux_record_tdep_p->arg2,
1478                                         &addr);
1479             if (record_full_arch_list_add_mem
1480                 (addr, linux_record_tdep_p->size_ulong))
1481               return -1;
1482           }
1483         goto record_regs;
1484       }
1485       break;
1486     }
1487
1488   syscall_gdb
1489     = amd64_canonicalize_syscall ((enum amd64_syscall) syscall_native);
1490
1491   if (syscall_gdb == gdb_sys_no_syscall)
1492     {
1493       printf_unfiltered (_("Process record and replay target doesn't "
1494                            "support syscall number %s\n"), 
1495                          pulongest (syscall_native));
1496       return -1;
1497     }
1498   else
1499     {
1500       ret = record_linux_system_call (syscall_gdb, regcache,
1501                                       linux_record_tdep_p);
1502       if (ret)
1503         return ret;
1504     }
1505
1506  record_regs:
1507   /* Record the return value of the system call.  */
1508   if (record_full_arch_list_add_reg (regcache, AMD64_RCX_REGNUM))
1509     return -1;
1510   if (record_full_arch_list_add_reg (regcache, AMD64_R11_REGNUM))
1511     return -1;
1512
1513   return 0;
1514 }
1515
1516 static int
1517 amd64_linux_syscall_record (struct regcache *regcache)
1518 {
1519   return amd64_linux_syscall_record_common (regcache,
1520                                             &amd64_linux_record_tdep);
1521 }
1522
1523 static int
1524 amd64_x32_linux_syscall_record (struct regcache *regcache)
1525 {
1526   return amd64_linux_syscall_record_common (regcache,
1527                                             &amd64_x32_linux_record_tdep);
1528 }
1529
1530 #define AMD64_LINUX_redzone    128
1531 #define AMD64_LINUX_xstate     512
1532 #define AMD64_LINUX_frame_size 560
1533
1534 static int
1535 amd64_linux_record_signal (struct gdbarch *gdbarch,
1536                            struct regcache *regcache,
1537                            enum gdb_signal signal)
1538 {
1539   ULONGEST rsp;
1540
1541   if (amd64_all_but_ip_registers_record (regcache))
1542     return -1;
1543
1544   if (record_full_arch_list_add_reg (regcache, AMD64_RIP_REGNUM))
1545     return -1;
1546
1547   /* Record the change in the stack.  */
1548   regcache_raw_read_unsigned (regcache, AMD64_RSP_REGNUM, &rsp);
1549   /* redzone
1550      sp -= 128; */
1551   rsp -= AMD64_LINUX_redzone;
1552   /* This is for xstate.
1553      sp -= sizeof (struct _fpstate);  */
1554   rsp -= AMD64_LINUX_xstate;
1555   /* This is for frame_size.
1556      sp -= sizeof (struct rt_sigframe);  */
1557   rsp -= AMD64_LINUX_frame_size;
1558   if (record_full_arch_list_add_mem (rsp, AMD64_LINUX_redzone
1559                                      + AMD64_LINUX_xstate
1560                                      + AMD64_LINUX_frame_size))
1561     return -1;
1562
1563   if (record_full_arch_list_add_end ())
1564     return -1;
1565
1566   return 0;
1567 }
1568
1569 const target_desc *
1570 amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
1571 {
1572   static target_desc *amd64_linux_tdescs \
1573     [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
1574   static target_desc *x32_linux_tdescs[2/*AVX*/][2/*AVX512*/] = {};
1575
1576   target_desc **tdesc;
1577
1578   if (is_x32)
1579     {
1580       tdesc = &x32_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0 ]
1581         [(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0];
1582     }
1583   else
1584     {
1585       tdesc = &amd64_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0]
1586         [(xcr0_features_bit & X86_XSTATE_MPX) ? 1 : 0]
1587         [(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0]
1588         [(xcr0_features_bit & X86_XSTATE_PKRU) ? 1 : 0];
1589     }
1590
1591   if (*tdesc == NULL)
1592     *tdesc = amd64_create_target_description (xcr0_features_bit, is_x32, true);
1593
1594   return *tdesc;
1595 }
1596
1597 /* Get Linux/x86 target description from core dump.  */
1598
1599 static const struct target_desc *
1600 amd64_linux_core_read_description (struct gdbarch *gdbarch,
1601                                   struct target_ops *target,
1602                                   bfd *abfd)
1603 {
1604   /* Linux/x86-64.  */
1605   uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
1606
1607   return amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK,
1608                                        gdbarch_ptr_bit (gdbarch) == 32);
1609 }
1610
1611 /* Similar to amd64_supply_fpregset, but use XSAVE extended state.  */
1612
1613 static void
1614 amd64_linux_supply_xstateregset (const struct regset *regset,
1615                                  struct regcache *regcache, int regnum,
1616                                  const void *xstateregs, size_t len)
1617 {
1618   amd64_supply_xsave (regcache, regnum, xstateregs);
1619 }
1620
1621 /* Similar to amd64_collect_fpregset, but use XSAVE extended state.  */
1622
1623 static void
1624 amd64_linux_collect_xstateregset (const struct regset *regset,
1625                                   const struct regcache *regcache,
1626                                   int regnum, void *xstateregs, size_t len)
1627 {
1628   amd64_collect_xsave (regcache, regnum, xstateregs, 1);
1629 }
1630
1631 static const struct regset amd64_linux_xstateregset =
1632   {
1633     NULL,
1634     amd64_linux_supply_xstateregset,
1635     amd64_linux_collect_xstateregset
1636   };
1637
1638 /* Iterate over core file register note sections.  */
1639
1640 static void
1641 amd64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
1642                                           iterate_over_regset_sections_cb *cb,
1643                                           void *cb_data,
1644                                           const struct regcache *regcache)
1645 {
1646   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1647
1648   cb (".reg", 27 * 8, &i386_gregset, NULL, cb_data);
1649   cb (".reg2", 512, &amd64_fpregset, NULL, cb_data);
1650   cb (".reg-xstate",  X86_XSTATE_SIZE (tdep->xcr0),
1651       &amd64_linux_xstateregset, "XSAVE extended state", cb_data);
1652 }
1653
1654 /* The instruction sequences used in x86_64 machines for a
1655    disabled is-enabled probe.  */
1656
1657 const gdb_byte amd64_dtrace_disabled_probe_sequence_1[] = {
1658   /* xor %rax, %rax */  0x48, 0x33, 0xc0,
1659   /* nop            */  0x90,
1660   /* nop            */  0x90
1661 };
1662
1663 const gdb_byte amd64_dtrace_disabled_probe_sequence_2[] = {
1664   /* xor %rax, %rax */  0x48, 0x33, 0xc0,
1665   /* ret            */  0xc3,
1666   /* nop            */  0x90
1667 };
1668
1669 /* The instruction sequence used in x86_64 machines for enabling a
1670    DTrace is-enabled probe.  */
1671
1672 const gdb_byte amd64_dtrace_enable_probe_sequence[] = {
1673   /* mov $0x1, %eax */ 0xb8, 0x01, 0x00, 0x00, 0x00
1674 };
1675
1676 /* The instruction sequence used in x86_64 machines for disabling a
1677    DTrace is-enabled probe.  */
1678
1679 const gdb_byte amd64_dtrace_disable_probe_sequence[] = {
1680   /* xor %rax, %rax; nop; nop */ 0x48, 0x33, 0xC0, 0x90, 0x90
1681 };
1682
1683 /* Implementation of `gdbarch_dtrace_probe_is_enabled', as defined in
1684    gdbarch.h.  */
1685
1686 static int
1687 amd64_dtrace_probe_is_enabled (struct gdbarch *gdbarch, CORE_ADDR addr)
1688 {
1689   gdb_byte buf[5];
1690
1691   /* This function returns 1 if the instructions at ADDR do _not_
1692      follow any of the amd64_dtrace_disabled_probe_sequence_*
1693      patterns.
1694
1695      Note that ADDR is offset 3 bytes from the beginning of these
1696      sequences.  */
1697   
1698   read_code (addr - 3, buf, 5);
1699   return (memcmp (buf, amd64_dtrace_disabled_probe_sequence_1, 5) != 0
1700           && memcmp (buf, amd64_dtrace_disabled_probe_sequence_2, 5) != 0);
1701 }
1702
1703 /* Implementation of `gdbarch_dtrace_enable_probe', as defined in
1704    gdbarch.h.  */
1705
1706 static void
1707 amd64_dtrace_enable_probe (struct gdbarch *gdbarch, CORE_ADDR addr)
1708 {
1709   /* Note also that ADDR is offset 3 bytes from the beginning of
1710      amd64_dtrace_enable_probe_sequence.  */
1711
1712   write_memory (addr - 3, amd64_dtrace_enable_probe_sequence, 5);
1713 }
1714
1715 /* Implementation of `gdbarch_dtrace_disable_probe', as defined in
1716    gdbarch.h.  */
1717
1718 static void
1719 amd64_dtrace_disable_probe (struct gdbarch *gdbarch, CORE_ADDR addr)
1720 {
1721   /* Note also that ADDR is offset 3 bytes from the beginning of
1722      amd64_dtrace_disable_probe_sequence.  */
1723
1724   write_memory (addr - 3, amd64_dtrace_disable_probe_sequence, 5);
1725 }
1726
1727 /* Implementation of `gdbarch_dtrace_parse_probe_argument', as defined
1728    in gdbarch.h.  */
1729
1730 static void
1731 amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch,
1732                                    struct parser_state *pstate,
1733                                    int narg)
1734 {
1735   struct stoken str;
1736
1737   /* DTrace probe arguments can be found on the ABI-defined places for
1738      regular arguments at the current PC.  The probe abstraction
1739      currently supports up to 12 arguments for probes.  */
1740
1741   if (narg < 6)
1742     {
1743       static const int arg_reg_map[6] =
1744         {
1745           AMD64_RDI_REGNUM,  /* Arg 1.  */
1746           AMD64_RSI_REGNUM,  /* Arg 2.  */
1747           AMD64_RDX_REGNUM,  /* Arg 3.  */
1748           AMD64_RCX_REGNUM,  /* Arg 4.  */
1749           AMD64_R8_REGNUM,   /* Arg 5.  */
1750           AMD64_R9_REGNUM    /* Arg 6.  */
1751         };
1752       int regno = arg_reg_map[narg];
1753       const char *regname = user_reg_map_regnum_to_name (gdbarch, regno);
1754
1755       write_exp_elt_opcode (pstate, OP_REGISTER);
1756       str.ptr = regname;
1757       str.length = strlen (regname);
1758       write_exp_string (pstate, str);
1759       write_exp_elt_opcode (pstate, OP_REGISTER);
1760     }
1761   else
1762     {
1763       /* Additional arguments are passed on the stack.  */
1764       const char *regname = user_reg_map_regnum_to_name (gdbarch, AMD64_RSP_REGNUM);
1765
1766       /* Displacement.  */
1767       write_exp_elt_opcode (pstate, OP_LONG);
1768       write_exp_elt_type (pstate, builtin_type (gdbarch)->builtin_long);
1769       write_exp_elt_longcst (pstate, narg - 6);
1770       write_exp_elt_opcode (pstate, OP_LONG);
1771
1772       /* Register: SP.  */
1773       write_exp_elt_opcode (pstate, OP_REGISTER);
1774       str.ptr = regname;
1775       str.length = strlen (regname);
1776       write_exp_string (pstate, str);
1777       write_exp_elt_opcode (pstate, OP_REGISTER);
1778
1779       write_exp_elt_opcode (pstate, BINOP_ADD);
1780
1781       /* Cast to long. */
1782       write_exp_elt_opcode (pstate, UNOP_CAST);
1783       write_exp_elt_type (pstate,
1784                           lookup_pointer_type (builtin_type (gdbarch)->builtin_long));
1785       write_exp_elt_opcode (pstate, UNOP_CAST);
1786
1787       write_exp_elt_opcode (pstate, UNOP_IND);
1788     }
1789 }
1790
1791 static void
1792 amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch)
1793 {
1794   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1795
1796   linux_init_abi (info, gdbarch);
1797
1798   tdep->sigtramp_p = amd64_linux_sigtramp_p;
1799   tdep->sigcontext_addr = amd64_linux_sigcontext_addr;
1800   tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
1801   tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
1802
1803   tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET;
1804
1805   /* Add the %orig_rax register used for syscall restarting.  */
1806   set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
1807
1808   tdep->register_reggroup_p = amd64_linux_register_reggroup_p;
1809
1810   /* Functions for 'catch syscall'.  */
1811   set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_AMD64);
1812   set_gdbarch_get_syscall_number (gdbarch,
1813                                   amd64_linux_get_syscall_number);
1814
1815   /* Enable TLS support.  */
1816   set_gdbarch_fetch_tls_load_module_address (gdbarch,
1817                                              svr4_fetch_objfile_link_map);
1818
1819   /* GNU/Linux uses SVR4-style shared libraries.  */
1820   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1821
1822   /* GNU/Linux uses the dynamic linker included in the GNU C Library.  */
1823   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
1824
1825   /* Iterate over core file register note sections.  */
1826   set_gdbarch_iterate_over_regset_sections
1827     (gdbarch, amd64_linux_iterate_over_regset_sections);
1828
1829   set_gdbarch_core_read_description (gdbarch,
1830                                      amd64_linux_core_read_description);
1831
1832   /* Displaced stepping.  */
1833   set_gdbarch_displaced_step_copy_insn (gdbarch,
1834                                         amd64_displaced_step_copy_insn);
1835   set_gdbarch_displaced_step_fixup (gdbarch, amd64_displaced_step_fixup);
1836   set_gdbarch_displaced_step_location (gdbarch,
1837                                        linux_displaced_step_location);
1838
1839   set_gdbarch_process_record (gdbarch, i386_process_record);
1840   set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal);
1841
1842   set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type);
1843   set_gdbarch_handle_segmentation_fault (gdbarch,
1844                                          i386_linux_handle_segmentation_fault);
1845 }
1846
1847 static void
1848 amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1849 {
1850   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1851   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
1852   const struct tdesc_feature *feature;
1853   int valid_p;
1854
1855   gdb_assert (tdesc_data);
1856
1857   tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
1858   tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
1859   tdep->sizeof_gregset = 27 * 8;
1860
1861   amd64_init_abi (info, gdbarch,
1862                   amd64_linux_read_description (X86_XSTATE_SSE_MASK, false));
1863
1864   const target_desc *tdesc = tdep->tdesc;
1865
1866   /* Reserve a number for orig_rax.  */
1867   set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
1868
1869   feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
1870   if (feature == NULL)
1871     return;
1872
1873   valid_p = tdesc_numbered_register (feature, tdesc_data,
1874                                      AMD64_LINUX_ORIG_RAX_REGNUM,
1875                                      "orig_rax");
1876   if (!valid_p)
1877     return;
1878
1879   amd64_linux_init_abi_common (info, gdbarch);
1880
1881   /* Initialize the amd64_linux_record_tdep.  */
1882   /* These values are the size of the type that will be used in a system
1883      call.  They are obtained from Linux Kernel source.  */
1884   amd64_linux_record_tdep.size_pointer
1885     = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1886   amd64_linux_record_tdep.size__old_kernel_stat = 32;
1887   amd64_linux_record_tdep.size_tms = 32;
1888   amd64_linux_record_tdep.size_loff_t = 8;
1889   amd64_linux_record_tdep.size_flock = 32;
1890   amd64_linux_record_tdep.size_oldold_utsname = 45;
1891   amd64_linux_record_tdep.size_ustat = 32;
1892   /* ADM64 doesn't need this size because it doesn't have sys_sigaction
1893      but sys_rt_sigaction.  */
1894   amd64_linux_record_tdep.size_old_sigaction = 32;
1895   /* ADM64 doesn't need this size because it doesn't have sys_sigpending
1896      but sys_rt_sigpending.  */
1897   amd64_linux_record_tdep.size_old_sigset_t = 8;
1898   amd64_linux_record_tdep.size_rlimit = 16;
1899   amd64_linux_record_tdep.size_rusage = 144;
1900   amd64_linux_record_tdep.size_timeval = 16;
1901   amd64_linux_record_tdep.size_timezone = 8;
1902   /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
1903      but sys_getgroups.  */
1904   amd64_linux_record_tdep.size_old_gid_t = 2;
1905   /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
1906      but sys_getresuid.  */
1907   amd64_linux_record_tdep.size_old_uid_t = 2;
1908   amd64_linux_record_tdep.size_fd_set = 128;
1909   /* ADM64 doesn't need this size because it doesn't have sys_readdir. */
1910   amd64_linux_record_tdep.size_old_dirent = 280;
1911   amd64_linux_record_tdep.size_statfs = 120;
1912   amd64_linux_record_tdep.size_statfs64 = 120;
1913   amd64_linux_record_tdep.size_sockaddr = 16;
1914   amd64_linux_record_tdep.size_int
1915     = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
1916   amd64_linux_record_tdep.size_long
1917     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1918   amd64_linux_record_tdep.size_ulong
1919     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1920   amd64_linux_record_tdep.size_msghdr = 56;
1921   amd64_linux_record_tdep.size_itimerval = 32;
1922   amd64_linux_record_tdep.size_stat = 144;
1923   amd64_linux_record_tdep.size_old_utsname = 325;
1924   amd64_linux_record_tdep.size_sysinfo = 112;
1925   amd64_linux_record_tdep.size_msqid_ds = 120;
1926   amd64_linux_record_tdep.size_shmid_ds = 112;
1927   amd64_linux_record_tdep.size_new_utsname = 390;
1928   amd64_linux_record_tdep.size_timex = 208;
1929   amd64_linux_record_tdep.size_mem_dqinfo = 24;
1930   amd64_linux_record_tdep.size_if_dqblk = 72;
1931   amd64_linux_record_tdep.size_fs_quota_stat = 80;
1932   amd64_linux_record_tdep.size_timespec = 16;
1933   amd64_linux_record_tdep.size_pollfd = 8;
1934   amd64_linux_record_tdep.size_NFS_FHSIZE = 32;
1935   amd64_linux_record_tdep.size_knfsd_fh = 132;
1936   amd64_linux_record_tdep.size_TASK_COMM_LEN = 16;
1937   amd64_linux_record_tdep.size_sigaction = 32;
1938   amd64_linux_record_tdep.size_sigset_t = 8;
1939   amd64_linux_record_tdep.size_siginfo_t = 128;
1940   amd64_linux_record_tdep.size_cap_user_data_t = 8;
1941   amd64_linux_record_tdep.size_stack_t = 24;
1942   amd64_linux_record_tdep.size_off_t = 8;
1943   amd64_linux_record_tdep.size_stat64 = 144;
1944   amd64_linux_record_tdep.size_gid_t = 4;
1945   amd64_linux_record_tdep.size_uid_t = 4;
1946   amd64_linux_record_tdep.size_PAGE_SIZE = 4096;
1947   amd64_linux_record_tdep.size_flock64 = 32;
1948   amd64_linux_record_tdep.size_user_desc = 16;
1949   amd64_linux_record_tdep.size_io_event = 32;
1950   amd64_linux_record_tdep.size_iocb = 64;
1951   amd64_linux_record_tdep.size_epoll_event = 12;
1952   amd64_linux_record_tdep.size_itimerspec = 32;
1953   amd64_linux_record_tdep.size_mq_attr = 64;
1954   amd64_linux_record_tdep.size_termios = 36;
1955   amd64_linux_record_tdep.size_termios2 = 44;
1956   amd64_linux_record_tdep.size_pid_t = 4;
1957   amd64_linux_record_tdep.size_winsize = 8;
1958   amd64_linux_record_tdep.size_serial_struct = 72;
1959   amd64_linux_record_tdep.size_serial_icounter_struct = 80;
1960   amd64_linux_record_tdep.size_hayes_esp_config = 12;
1961   amd64_linux_record_tdep.size_size_t = 8;
1962   amd64_linux_record_tdep.size_iovec = 16;
1963   amd64_linux_record_tdep.size_time_t = 8;
1964
1965   /* These values are the second argument of system call "sys_fcntl"
1966      and "sys_fcntl64".  They are obtained from Linux Kernel source.  */
1967   amd64_linux_record_tdep.fcntl_F_GETLK = 5;
1968   amd64_linux_record_tdep.fcntl_F_GETLK64 = 12;
1969   amd64_linux_record_tdep.fcntl_F_SETLK64 = 13;
1970   amd64_linux_record_tdep.fcntl_F_SETLKW64 = 14;
1971
1972   amd64_linux_record_tdep.arg1 = AMD64_RDI_REGNUM;
1973   amd64_linux_record_tdep.arg2 = AMD64_RSI_REGNUM;
1974   amd64_linux_record_tdep.arg3 = AMD64_RDX_REGNUM;
1975   amd64_linux_record_tdep.arg4 = AMD64_R10_REGNUM;
1976   amd64_linux_record_tdep.arg5 = AMD64_R8_REGNUM;
1977   amd64_linux_record_tdep.arg6 = AMD64_R9_REGNUM;
1978
1979   /* These values are the second argument of system call "sys_ioctl".
1980      They are obtained from Linux Kernel source.  */
1981   amd64_linux_record_tdep.ioctl_TCGETS = 0x5401;
1982   amd64_linux_record_tdep.ioctl_TCSETS = 0x5402;
1983   amd64_linux_record_tdep.ioctl_TCSETSW = 0x5403;
1984   amd64_linux_record_tdep.ioctl_TCSETSF = 0x5404;
1985   amd64_linux_record_tdep.ioctl_TCGETA = 0x5405;
1986   amd64_linux_record_tdep.ioctl_TCSETA = 0x5406;
1987   amd64_linux_record_tdep.ioctl_TCSETAW = 0x5407;
1988   amd64_linux_record_tdep.ioctl_TCSETAF = 0x5408;
1989   amd64_linux_record_tdep.ioctl_TCSBRK = 0x5409;
1990   amd64_linux_record_tdep.ioctl_TCXONC = 0x540A;
1991   amd64_linux_record_tdep.ioctl_TCFLSH = 0x540B;
1992   amd64_linux_record_tdep.ioctl_TIOCEXCL = 0x540C;
1993   amd64_linux_record_tdep.ioctl_TIOCNXCL = 0x540D;
1994   amd64_linux_record_tdep.ioctl_TIOCSCTTY = 0x540E;
1995   amd64_linux_record_tdep.ioctl_TIOCGPGRP = 0x540F;
1996   amd64_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
1997   amd64_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
1998   amd64_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
1999   amd64_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
2000   amd64_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
2001   amd64_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
2002   amd64_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
2003   amd64_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
2004   amd64_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
2005   amd64_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
2006   amd64_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541A;
2007   amd64_linux_record_tdep.ioctl_FIONREAD = 0x541B;
2008   amd64_linux_record_tdep.ioctl_TIOCINQ
2009     = amd64_linux_record_tdep.ioctl_FIONREAD;
2010   amd64_linux_record_tdep.ioctl_TIOCLINUX = 0x541C;
2011   amd64_linux_record_tdep.ioctl_TIOCCONS = 0x541D;
2012   amd64_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541E;
2013   amd64_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541F;
2014   amd64_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
2015   amd64_linux_record_tdep.ioctl_FIONBIO = 0x5421;
2016   amd64_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
2017   amd64_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
2018   amd64_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
2019   amd64_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
2020   amd64_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
2021   amd64_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
2022   amd64_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
2023   amd64_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
2024   amd64_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
2025   amd64_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
2026   amd64_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
2027   amd64_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
2028   amd64_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
2029   amd64_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
2030   amd64_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
2031   amd64_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
2032   amd64_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
2033   amd64_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
2034   amd64_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
2035   amd64_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
2036   amd64_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
2037   amd64_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
2038   amd64_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
2039   amd64_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
2040   amd64_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545A;
2041   amd64_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545B;
2042   amd64_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545C;
2043   amd64_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545D;
2044   amd64_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545E;
2045   amd64_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545F;
2046   amd64_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
2047
2048   tdep->i386_syscall_record = amd64_linux_syscall_record;
2049
2050   /* GNU/Linux uses SVR4-style shared libraries.  */
2051   set_solib_svr4_fetch_link_map_offsets
2052     (gdbarch, svr4_lp64_fetch_link_map_offsets);
2053
2054   /* Register DTrace handlers.  */
2055   set_gdbarch_dtrace_parse_probe_argument (gdbarch, amd64_dtrace_parse_probe_argument);
2056   set_gdbarch_dtrace_probe_is_enabled (gdbarch, amd64_dtrace_probe_is_enabled);
2057   set_gdbarch_dtrace_enable_probe (gdbarch, amd64_dtrace_enable_probe);
2058   set_gdbarch_dtrace_disable_probe (gdbarch, amd64_dtrace_disable_probe);
2059 }
2060
2061 static void
2062 amd64_x32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
2063 {
2064   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2065   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
2066   const struct tdesc_feature *feature;
2067   int valid_p;
2068
2069   gdb_assert (tdesc_data);
2070
2071   tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
2072   tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
2073   tdep->sizeof_gregset = 27 * 8;
2074
2075   amd64_x32_init_abi (info, gdbarch,
2076                       amd64_linux_read_description (X86_XSTATE_SSE_MASK,
2077                                                     true));
2078
2079   /* Reserve a number for orig_rax.  */
2080   set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
2081
2082   const target_desc *tdesc = tdep->tdesc;
2083
2084   feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
2085   if (feature == NULL)
2086     return;
2087
2088   valid_p = tdesc_numbered_register (feature, tdesc_data,
2089                                      AMD64_LINUX_ORIG_RAX_REGNUM,
2090                                      "orig_rax");
2091   if (!valid_p)
2092     return;
2093
2094   amd64_linux_init_abi_common (info, gdbarch);
2095
2096   /* Initialize the amd64_x32_linux_record_tdep.  */
2097   /* These values are the size of the type that will be used in a system
2098      call.  They are obtained from Linux Kernel source.  */
2099   amd64_x32_linux_record_tdep.size_pointer
2100     = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
2101   amd64_x32_linux_record_tdep.size__old_kernel_stat = 32;
2102   amd64_x32_linux_record_tdep.size_tms = 32;
2103   amd64_x32_linux_record_tdep.size_loff_t = 8;
2104   amd64_x32_linux_record_tdep.size_flock = 32;
2105   amd64_x32_linux_record_tdep.size_oldold_utsname = 45;
2106   amd64_x32_linux_record_tdep.size_ustat = 32;
2107   /* ADM64 doesn't need this size because it doesn't have sys_sigaction
2108      but sys_rt_sigaction.  */
2109   amd64_x32_linux_record_tdep.size_old_sigaction = 16;
2110   /* ADM64 doesn't need this size because it doesn't have sys_sigpending
2111      but sys_rt_sigpending.  */
2112   amd64_x32_linux_record_tdep.size_old_sigset_t = 4;
2113   amd64_x32_linux_record_tdep.size_rlimit = 16;
2114   amd64_x32_linux_record_tdep.size_rusage = 144;
2115   amd64_x32_linux_record_tdep.size_timeval = 16;
2116   amd64_x32_linux_record_tdep.size_timezone = 8;
2117   /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
2118      but sys_getgroups.  */
2119   amd64_x32_linux_record_tdep.size_old_gid_t = 2;
2120   /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
2121      but sys_getresuid.  */
2122   amd64_x32_linux_record_tdep.size_old_uid_t = 2;
2123   amd64_x32_linux_record_tdep.size_fd_set = 128;
2124   /* ADM64 doesn't need this size because it doesn't have sys_readdir. */
2125   amd64_x32_linux_record_tdep.size_old_dirent = 268;
2126   amd64_x32_linux_record_tdep.size_statfs = 120;
2127   amd64_x32_linux_record_tdep.size_statfs64 = 120;
2128   amd64_x32_linux_record_tdep.size_sockaddr = 16;
2129   amd64_x32_linux_record_tdep.size_int
2130     = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
2131   amd64_x32_linux_record_tdep.size_long
2132     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
2133   amd64_x32_linux_record_tdep.size_ulong
2134     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
2135   amd64_x32_linux_record_tdep.size_msghdr = 28;
2136   amd64_x32_linux_record_tdep.size_itimerval = 32;
2137   amd64_x32_linux_record_tdep.size_stat = 144;
2138   amd64_x32_linux_record_tdep.size_old_utsname = 325;
2139   amd64_x32_linux_record_tdep.size_sysinfo = 112;
2140   amd64_x32_linux_record_tdep.size_msqid_ds = 120;
2141   amd64_x32_linux_record_tdep.size_shmid_ds = 112;
2142   amd64_x32_linux_record_tdep.size_new_utsname = 390;
2143   amd64_x32_linux_record_tdep.size_timex = 208;
2144   amd64_x32_linux_record_tdep.size_mem_dqinfo = 24;
2145   amd64_x32_linux_record_tdep.size_if_dqblk = 72;
2146   amd64_x32_linux_record_tdep.size_fs_quota_stat = 80;
2147   amd64_x32_linux_record_tdep.size_timespec = 16;
2148   amd64_x32_linux_record_tdep.size_pollfd = 8;
2149   amd64_x32_linux_record_tdep.size_NFS_FHSIZE = 32;
2150   amd64_x32_linux_record_tdep.size_knfsd_fh = 132;
2151   amd64_x32_linux_record_tdep.size_TASK_COMM_LEN = 16;
2152   amd64_x32_linux_record_tdep.size_sigaction = 20;
2153   amd64_x32_linux_record_tdep.size_sigset_t = 8;
2154   amd64_x32_linux_record_tdep.size_siginfo_t = 128;
2155   amd64_x32_linux_record_tdep.size_cap_user_data_t = 8;
2156   amd64_x32_linux_record_tdep.size_stack_t = 12;
2157   amd64_x32_linux_record_tdep.size_off_t = 8;
2158   amd64_x32_linux_record_tdep.size_stat64 = 144;
2159   amd64_x32_linux_record_tdep.size_gid_t = 4;
2160   amd64_x32_linux_record_tdep.size_uid_t = 4;
2161   amd64_x32_linux_record_tdep.size_PAGE_SIZE = 4096;
2162   amd64_x32_linux_record_tdep.size_flock64 = 32;
2163   amd64_x32_linux_record_tdep.size_user_desc = 16;
2164   amd64_x32_linux_record_tdep.size_io_event = 32;
2165   amd64_x32_linux_record_tdep.size_iocb = 64;
2166   amd64_x32_linux_record_tdep.size_epoll_event = 12;
2167   amd64_x32_linux_record_tdep.size_itimerspec = 32;
2168   amd64_x32_linux_record_tdep.size_mq_attr = 64;
2169   amd64_x32_linux_record_tdep.size_termios = 36;
2170   amd64_x32_linux_record_tdep.size_termios2 = 44;
2171   amd64_x32_linux_record_tdep.size_pid_t = 4;
2172   amd64_x32_linux_record_tdep.size_winsize = 8;
2173   amd64_x32_linux_record_tdep.size_serial_struct = 72;
2174   amd64_x32_linux_record_tdep.size_serial_icounter_struct = 80;
2175   amd64_x32_linux_record_tdep.size_hayes_esp_config = 12;
2176   amd64_x32_linux_record_tdep.size_size_t = 4;
2177   amd64_x32_linux_record_tdep.size_iovec = 8;
2178   amd64_x32_linux_record_tdep.size_time_t = 8;
2179
2180   /* These values are the second argument of system call "sys_fcntl"
2181      and "sys_fcntl64".  They are obtained from Linux Kernel source.  */
2182   amd64_x32_linux_record_tdep.fcntl_F_GETLK = 5;
2183   amd64_x32_linux_record_tdep.fcntl_F_GETLK64 = 12;
2184   amd64_x32_linux_record_tdep.fcntl_F_SETLK64 = 13;
2185   amd64_x32_linux_record_tdep.fcntl_F_SETLKW64 = 14;
2186
2187   amd64_x32_linux_record_tdep.arg1 = AMD64_RDI_REGNUM;
2188   amd64_x32_linux_record_tdep.arg2 = AMD64_RSI_REGNUM;
2189   amd64_x32_linux_record_tdep.arg3 = AMD64_RDX_REGNUM;
2190   amd64_x32_linux_record_tdep.arg4 = AMD64_R10_REGNUM;
2191   amd64_x32_linux_record_tdep.arg5 = AMD64_R8_REGNUM;
2192   amd64_x32_linux_record_tdep.arg6 = AMD64_R9_REGNUM;
2193
2194   /* These values are the second argument of system call "sys_ioctl".
2195      They are obtained from Linux Kernel source.  */
2196   amd64_x32_linux_record_tdep.ioctl_TCGETS = 0x5401;
2197   amd64_x32_linux_record_tdep.ioctl_TCSETS = 0x5402;
2198   amd64_x32_linux_record_tdep.ioctl_TCSETSW = 0x5403;
2199   amd64_x32_linux_record_tdep.ioctl_TCSETSF = 0x5404;
2200   amd64_x32_linux_record_tdep.ioctl_TCGETA = 0x5405;
2201   amd64_x32_linux_record_tdep.ioctl_TCSETA = 0x5406;
2202   amd64_x32_linux_record_tdep.ioctl_TCSETAW = 0x5407;
2203   amd64_x32_linux_record_tdep.ioctl_TCSETAF = 0x5408;
2204   amd64_x32_linux_record_tdep.ioctl_TCSBRK = 0x5409;
2205   amd64_x32_linux_record_tdep.ioctl_TCXONC = 0x540A;
2206   amd64_x32_linux_record_tdep.ioctl_TCFLSH = 0x540B;
2207   amd64_x32_linux_record_tdep.ioctl_TIOCEXCL = 0x540C;
2208   amd64_x32_linux_record_tdep.ioctl_TIOCNXCL = 0x540D;
2209   amd64_x32_linux_record_tdep.ioctl_TIOCSCTTY = 0x540E;
2210   amd64_x32_linux_record_tdep.ioctl_TIOCGPGRP = 0x540F;
2211   amd64_x32_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
2212   amd64_x32_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
2213   amd64_x32_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
2214   amd64_x32_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
2215   amd64_x32_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
2216   amd64_x32_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
2217   amd64_x32_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
2218   amd64_x32_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
2219   amd64_x32_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
2220   amd64_x32_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
2221   amd64_x32_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541A;
2222   amd64_x32_linux_record_tdep.ioctl_FIONREAD = 0x541B;
2223   amd64_x32_linux_record_tdep.ioctl_TIOCINQ = amd64_x32_linux_record_tdep.ioctl_FIONREAD;
2224   amd64_x32_linux_record_tdep.ioctl_TIOCLINUX = 0x541C;
2225   amd64_x32_linux_record_tdep.ioctl_TIOCCONS = 0x541D;
2226   amd64_x32_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541E;
2227   amd64_x32_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541F;
2228   amd64_x32_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
2229   amd64_x32_linux_record_tdep.ioctl_FIONBIO = 0x5421;
2230   amd64_x32_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
2231   amd64_x32_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
2232   amd64_x32_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
2233   amd64_x32_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
2234   amd64_x32_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
2235   amd64_x32_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
2236   amd64_x32_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
2237   amd64_x32_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
2238   amd64_x32_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
2239   amd64_x32_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
2240   amd64_x32_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
2241   amd64_x32_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
2242   amd64_x32_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
2243   amd64_x32_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
2244   amd64_x32_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
2245   amd64_x32_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
2246   amd64_x32_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
2247   amd64_x32_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
2248   amd64_x32_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
2249   amd64_x32_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
2250   amd64_x32_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
2251   amd64_x32_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
2252   amd64_x32_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
2253   amd64_x32_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
2254   amd64_x32_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545A;
2255   amd64_x32_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545B;
2256   amd64_x32_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545C;
2257   amd64_x32_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545D;
2258   amd64_x32_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545E;
2259   amd64_x32_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545F;
2260   amd64_x32_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
2261
2262   tdep->i386_syscall_record = amd64_x32_linux_syscall_record;
2263
2264   /* GNU/Linux uses SVR4-style shared libraries.  */
2265   set_solib_svr4_fetch_link_map_offsets
2266     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
2267 }
2268
2269 void
2270 _initialize_amd64_linux_tdep (void)
2271 {
2272   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
2273                           GDB_OSABI_LINUX, amd64_linux_init_abi);
2274   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32,
2275                           GDB_OSABI_LINUX, amd64_x32_linux_init_abi);
2276
2277 #if GDB_SELF_TEST
2278   struct
2279   {
2280     const char *xml;
2281     uint64_t mask;
2282   } xml_masks[] = {
2283     { "i386/amd64-linux.xml", X86_XSTATE_SSE_MASK },
2284     { "i386/amd64-avx-linux.xml", X86_XSTATE_AVX_MASK },
2285     { "i386/amd64-mpx-linux.xml", X86_XSTATE_MPX_MASK },
2286     { "i386/amd64-avx-mpx-linux.xml", X86_XSTATE_AVX_MPX_MASK },
2287     { "i386/amd64-avx-avx512-linux.xml", X86_XSTATE_AVX_AVX512_MASK },
2288     { "i386/amd64-avx-mpx-avx512-pku-linux.xml",
2289       X86_XSTATE_AVX_MPX_AVX512_PKU_MASK },
2290     { "i386/x32-linux.xml", X86_XSTATE_SSE_MASK },
2291     { "i386/x32-avx-linux.xml", X86_XSTATE_AVX_MASK },
2292     { "i386/x32-avx-avx512-linux.xml", X86_XSTATE_AVX_AVX512_MASK },
2293   };
2294
2295   for (auto &a : xml_masks)
2296     {
2297       auto tdesc = amd64_linux_read_description (a.mask,
2298                                                  startswith (a.xml,
2299                                                              "i386/x32"));
2300
2301       selftests::record_xml_tdesc (a.xml, tdesc);
2302     }
2303 #endif /* GDB_SELF_TEST */
2304 }