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