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