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