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