2010-05-14 Michael Snyder <msnyder@vmware.com>
[external/binutils.git] / gdb / amd64-linux-tdep.c
1 /* Target-dependent code for GNU/Linux x86-64.
2
3    Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5    Contributed by Jiri Smid, SuSE Labs.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "frame.h"
25 #include "gdbcore.h"
26 #include "regcache.h"
27 #include "osabi.h"
28 #include "symtab.h"
29 #include "gdbtypes.h"
30 #include "reggroups.h"
31 #include "regset.h"
32 #include "amd64-linux-tdep.h"
33 #include "i386-linux-tdep.h"
34 #include "linux-tdep.h"
35 #include "i386-xstate.h"
36
37 #include "gdb_string.h"
38
39 #include "amd64-tdep.h"
40 #include "solib-svr4.h"
41 #include "xml-syscall.h"
42
43 #include "features/i386/amd64-linux.c"
44 #include "features/i386/amd64-avx-linux.c"
45
46 /* The syscall's XML filename for i386.  */
47 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
48
49 #include "record.h"
50 #include "linux-record.h"
51
52 /* Supported register note sections.  */
53 static struct core_regset_section amd64_linux_regset_sections[] =
54 {
55   { ".reg", 144, "general-purpose" },
56   { ".reg2", 512, "floating-point" },
57   { ".reg-xstate", I386_XSTATE_MAX_SIZE, "XSAVE extended state" },
58   { NULL, 0 }
59 };
60
61 /* Mapping between the general-purpose registers in `struct user'
62    format and GDB's register cache layout.  */
63
64 /* From <sys/reg.h>.  */
65 int amd64_linux_gregset_reg_offset[] =
66 {
67   10 * 8,                       /* %rax */
68   5 * 8,                        /* %rbx */
69   11 * 8,                       /* %rcx */
70   12 * 8,                       /* %rdx */
71   13 * 8,                       /* %rsi */
72   14 * 8,                       /* %rdi */
73   4 * 8,                        /* %rbp */
74   19 * 8,                       /* %rsp */
75   9 * 8,                        /* %r8 ... */
76   8 * 8,
77   7 * 8,
78   6 * 8,
79   3 * 8,
80   2 * 8,
81   1 * 8,
82   0 * 8,                        /* ... %r15 */
83   16 * 8,                       /* %rip */
84   18 * 8,                       /* %eflags */
85   17 * 8,                       /* %cs */
86   20 * 8,                       /* %ss */
87   23 * 8,                       /* %ds */
88   24 * 8,                       /* %es */
89   25 * 8,                       /* %fs */
90   26 * 8,                       /* %gs */
91   -1, -1, -1, -1, -1, -1, -1, -1,
92   -1, -1, -1, -1, -1, -1, -1, -1,
93   -1, -1, -1, -1, -1, -1, -1, -1,
94   -1, -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   15 * 8                        /* "orig_rax" */
98 };
99 \f
100
101 /* Support for signal handlers.  */
102
103 #define LINUX_SIGTRAMP_INSN0    0x48    /* mov $NNNNNNNN, %rax */
104 #define LINUX_SIGTRAMP_OFFSET0  0
105 #define LINUX_SIGTRAMP_INSN1    0x0f    /* syscall */
106 #define LINUX_SIGTRAMP_OFFSET1  7
107
108 static const gdb_byte linux_sigtramp_code[] =
109 {
110   /* mov $__NR_rt_sigreturn, %rax */
111   LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x0f, 0x00, 0x00, 0x00,
112   /* syscall */
113   LINUX_SIGTRAMP_INSN1, 0x05
114 };
115
116 #define LINUX_SIGTRAMP_LEN (sizeof linux_sigtramp_code)
117
118 /* If PC is in a sigtramp routine, return the address of the start of
119    the routine.  Otherwise, return 0.  */
120
121 static CORE_ADDR
122 amd64_linux_sigtramp_start (struct frame_info *this_frame)
123 {
124   CORE_ADDR pc = get_frame_pc (this_frame);
125   gdb_byte buf[LINUX_SIGTRAMP_LEN];
126
127   /* We only recognize a signal trampoline if PC is at the start of
128      one of the two instructions.  We optimize for finding the PC at
129      the start, as will be the case when the trampoline is not the
130      first frame on the stack.  We assume that in the case where the
131      PC is not at the start of the instruction sequence, there will be
132      a few trailing readable bytes on the stack.  */
133
134   if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
135     return 0;
136
137   if (buf[0] != LINUX_SIGTRAMP_INSN0)
138     {
139       if (buf[0] != LINUX_SIGTRAMP_INSN1)
140         return 0;
141
142       pc -= LINUX_SIGTRAMP_OFFSET1;
143       if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
144         return 0;
145     }
146
147   if (memcmp (buf, linux_sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
148     return 0;
149
150   return pc;
151 }
152
153 /* Return whether THIS_FRAME corresponds to a GNU/Linux sigtramp
154    routine.  */
155
156 static int
157 amd64_linux_sigtramp_p (struct frame_info *this_frame)
158 {
159   CORE_ADDR pc = get_frame_pc (this_frame);
160   char *name;
161
162   find_pc_partial_function (pc, &name, NULL, NULL);
163
164   /* If we have NAME, we can optimize the search.  The trampoline is
165      named __restore_rt.  However, it isn't dynamically exported from
166      the shared C library, so the trampoline may appear to be part of
167      the preceding function.  This should always be sigaction,
168      __sigaction, or __libc_sigaction (all aliases to the same
169      function).  */
170   if (name == NULL || strstr (name, "sigaction") != NULL)
171     return (amd64_linux_sigtramp_start (this_frame) != 0);
172
173   return (strcmp ("__restore_rt", name) == 0);
174 }
175
176 /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>.  */
177 #define AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 40
178
179 /* Assuming THIS_FRAME is a GNU/Linux sigtramp routine, return the
180    address of the associated sigcontext structure.  */
181
182 static CORE_ADDR
183 amd64_linux_sigcontext_addr (struct frame_info *this_frame)
184 {
185   struct gdbarch *gdbarch = get_frame_arch (this_frame);
186   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
187   CORE_ADDR sp;
188   gdb_byte buf[8];
189
190   get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
191   sp = extract_unsigned_integer (buf, 8, byte_order);
192
193   /* The sigcontext structure is part of the user context.  A pointer
194      to the user context is passed as the third argument to the signal
195      handler, i.e. in %rdx.  Unfortunately %rdx isn't preserved across
196      function calls so we can't use it.  Fortunately the user context
197      is part of the signal frame and the unwound %rsp directly points
198      at it.  */
199   return sp + AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET;
200 }
201 \f
202
203 static LONGEST
204 amd64_linux_get_syscall_number (struct gdbarch *gdbarch,
205                                 ptid_t ptid)
206 {
207   struct regcache *regcache = get_thread_regcache (ptid);
208   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
209   /* The content of a register.  */
210   gdb_byte buf[8];
211   /* The result.  */
212   LONGEST ret;
213
214   /* Getting the system call number from the register.
215      When dealing with x86_64 architecture, this information
216      is stored at %rax register.  */
217   regcache_cooked_read (regcache, AMD64_LINUX_ORIG_RAX_REGNUM, buf);
218
219   ret = extract_signed_integer (buf, 8, byte_order);
220
221   return ret;
222 }
223
224
225 /* From <asm/sigcontext.h>.  */
226 static int amd64_linux_sc_reg_offset[] =
227 {
228   13 * 8,                       /* %rax */
229   11 * 8,                       /* %rbx */
230   14 * 8,                       /* %rcx */
231   12 * 8,                       /* %rdx */
232   9 * 8,                        /* %rsi */
233   8 * 8,                        /* %rdi */
234   10 * 8,                       /* %rbp */
235   15 * 8,                       /* %rsp */
236   0 * 8,                        /* %r8 */
237   1 * 8,                        /* %r9 */
238   2 * 8,                        /* %r10 */
239   3 * 8,                        /* %r11 */
240   4 * 8,                        /* %r12 */
241   5 * 8,                        /* %r13 */
242   6 * 8,                        /* %r14 */
243   7 * 8,                        /* %r15 */
244   16 * 8,                       /* %rip */
245   17 * 8,                       /* %eflags */
246
247   /* FIXME: kettenis/2002030531: The registers %cs, %fs and %gs are
248      available in `struct sigcontext'.  However, they only occupy two
249      bytes instead of four, which makes using them here rather
250      difficult.  Leave them out for now.  */
251   -1,                           /* %cs */
252   -1,                           /* %ss */
253   -1,                           /* %ds */
254   -1,                           /* %es */
255   -1,                           /* %fs */
256   -1                            /* %gs */
257 };
258
259 static int
260 amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
261                                  struct reggroup *group)
262
263   if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM)
264     return (group == system_reggroup
265             || group == save_reggroup
266             || group == restore_reggroup);
267   return i386_register_reggroup_p (gdbarch, regnum, group);
268 }
269
270 /* Set the program counter for process PTID to PC.  */
271
272 static void
273 amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
274 {
275   regcache_cooked_write_unsigned (regcache, AMD64_RIP_REGNUM, pc);
276
277   /* We must be careful with modifying the program counter.  If we
278      just interrupted a system call, the kernel might try to restart
279      it when we resume the inferior.  On restarting the system call,
280      the kernel will try backing up the program counter even though it
281      no longer points at the system call.  This typically results in a
282      SIGSEGV or SIGILL.  We can prevent this by writing `-1' in the
283      "orig_rax" pseudo-register.
284
285      Note that "orig_rax" is saved when setting up a dummy call frame.
286      This means that it is properly restored when that frame is
287      popped, and that the interrupted system call will be restarted
288      when we resume the inferior on return from a function call from
289      within GDB.  In all other cases the system call will not be
290      restarted.  */
291   regcache_cooked_write_unsigned (regcache, AMD64_LINUX_ORIG_RAX_REGNUM, -1);
292 }
293
294 /* Record all registers but IP register for process-record.  */
295
296 static int
297 amd64_all_but_ip_registers_record (struct regcache *regcache)
298 {
299   if (record_arch_list_add_reg (regcache, AMD64_RAX_REGNUM))
300     return -1;
301   if (record_arch_list_add_reg (regcache, AMD64_RCX_REGNUM))
302     return -1;
303   if (record_arch_list_add_reg (regcache, AMD64_RDX_REGNUM))
304     return -1;
305   if (record_arch_list_add_reg (regcache, AMD64_RBX_REGNUM))
306     return -1;
307   if (record_arch_list_add_reg (regcache, AMD64_RSP_REGNUM))
308     return -1;
309   if (record_arch_list_add_reg (regcache, AMD64_RBP_REGNUM))
310     return -1;
311   if (record_arch_list_add_reg (regcache, AMD64_RSI_REGNUM))
312     return -1;
313   if (record_arch_list_add_reg (regcache, AMD64_RDI_REGNUM))
314     return -1;
315   if (record_arch_list_add_reg (regcache, AMD64_R8_REGNUM))
316     return -1;
317   if (record_arch_list_add_reg (regcache, AMD64_R9_REGNUM))
318     return -1;
319   if (record_arch_list_add_reg (regcache, AMD64_R10_REGNUM))
320     return -1;
321   if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM))
322     return -1;
323   if (record_arch_list_add_reg (regcache, AMD64_R12_REGNUM))
324     return -1;
325   if (record_arch_list_add_reg (regcache, AMD64_R13_REGNUM))
326     return -1;
327   if (record_arch_list_add_reg (regcache, AMD64_R14_REGNUM))
328     return -1;
329   if (record_arch_list_add_reg (regcache, AMD64_R15_REGNUM))
330     return -1;
331   if (record_arch_list_add_reg (regcache, AMD64_EFLAGS_REGNUM))
332     return -1;
333
334   return 0;
335 }
336
337 /* amd64_canonicalize_syscall maps from the native amd64 Linux set 
338    of syscall ids into a canonical set of syscall ids used by 
339    process record.  */
340
341 static enum gdb_syscall
342 amd64_canonicalize_syscall (enum amd64_syscall syscall)
343 {
344   switch (syscall) {
345   case amd64_sys_read:
346     return gdb_sys_read;
347
348   case amd64_sys_write:
349     return gdb_sys_write;
350
351   case amd64_sys_open:
352     return gdb_sys_open;
353
354   case amd64_sys_close:
355     return gdb_sys_close;
356
357   case amd64_sys_newstat:
358     return gdb_sys_newstat;
359
360   case amd64_sys_newfstat:
361     return gdb_sys_newfstat;
362
363   case amd64_sys_newlstat:
364     return gdb_sys_newlstat;
365
366   case amd64_sys_poll:
367     return gdb_sys_poll;
368
369   case amd64_sys_lseek:
370     return gdb_sys_lseek;
371
372   case amd64_sys_mmap:
373     return gdb_sys_mmap2;
374
375   case amd64_sys_mprotect:
376     return gdb_sys_mprotect;
377
378   case amd64_sys_munmap:
379     return gdb_sys_munmap;
380
381   case amd64_sys_brk:
382     return gdb_sys_brk;
383
384   case amd64_sys_rt_sigaction:
385     return gdb_sys_rt_sigaction;
386
387   case amd64_sys_rt_sigprocmask:
388     return gdb_sys_rt_sigprocmask;
389
390   case amd64_sys_rt_sigreturn:
391     return gdb_sys_rt_sigreturn;
392
393   case amd64_sys_ioctl:
394     return gdb_sys_ioctl;
395
396   case amd64_sys_pread64:
397     return gdb_sys_pread64;
398
399   case amd64_sys_pwrite64:
400     return gdb_sys_pwrite64;
401
402   case amd64_sys_readv:
403     return gdb_sys_readv;
404
405   case amd64_sys_writev:
406     return gdb_sys_writev;
407
408   case amd64_sys_access:
409     return gdb_sys_access;
410
411   case amd64_sys_pipe:
412     return gdb_sys_pipe;
413
414   case amd64_sys_select:
415     return gdb_sys_select;
416
417   case amd64_sys_sched_yield:
418     return gdb_sys_sched_yield;
419
420   case amd64_sys_mremap:
421     return gdb_sys_mremap;
422
423   case amd64_sys_msync:
424     return gdb_sys_msync;
425
426   case amd64_sys_mincore:
427     return gdb_sys_mincore;
428
429   case amd64_sys_madvise:
430     return gdb_sys_madvise;
431
432   case amd64_sys_shmget:
433     return gdb_sys_shmget;
434
435   case amd64_sys_shmat:
436     return gdb_sys_shmat;
437
438   case amd64_sys_shmctl:
439     return gdb_sys_shmctl;
440
441   case amd64_sys_dup:
442     return gdb_sys_dup;
443
444   case amd64_sys_dup2:
445     return gdb_sys_dup2;
446
447   case amd64_sys_pause:
448     return gdb_sys_pause;
449
450   case amd64_sys_nanosleep:
451     return gdb_sys_nanosleep;
452
453   case amd64_sys_getitimer:
454     return gdb_sys_getitimer;
455
456   case amd64_sys_alarm:
457     return gdb_sys_alarm;
458
459   case amd64_sys_setitimer:
460     return gdb_sys_setitimer;
461
462   case amd64_sys_getpid:
463     return gdb_sys_getpid;
464
465   case amd64_sys_sendfile64:
466     return gdb_sys_sendfile64;
467
468   case amd64_sys_socket:
469     return gdb_sys_socket;
470
471   case amd64_sys_connect:
472     return gdb_sys_connect;
473
474   case amd64_sys_accept:
475     return gdb_sys_accept;
476
477   case amd64_sys_sendto:
478     return gdb_sys_sendto;
479
480   case amd64_sys_recvfrom:
481     return gdb_sys_recvfrom;
482
483   case amd64_sys_sendmsg:
484     return gdb_sys_sendmsg;
485
486   case amd64_sys_recvmsg:
487     return gdb_sys_recvmsg;
488
489   case amd64_sys_shutdown:
490     return gdb_sys_shutdown;
491
492   case amd64_sys_bind:
493     return gdb_sys_bind;
494
495   case amd64_sys_listen:
496     return gdb_sys_listen;
497
498   case amd64_sys_getsockname:
499     return gdb_sys_getsockname;
500
501   case amd64_sys_getpeername:
502     return gdb_sys_getpeername;
503
504   case amd64_sys_socketpair:
505     return gdb_sys_socketpair;
506
507   case amd64_sys_setsockopt:
508     return gdb_sys_setsockopt;
509
510   case amd64_sys_getsockopt:
511     return gdb_sys_getsockopt;
512
513   case amd64_sys_clone:
514     return gdb_sys_clone;
515
516   case amd64_sys_fork:
517     return gdb_sys_fork;
518
519   case amd64_sys_vfork:
520     return gdb_sys_vfork;
521
522   case amd64_sys_execve:
523     return gdb_sys_execve;
524
525   case amd64_sys_exit:
526     return gdb_sys_exit;
527
528   case amd64_sys_wait4:
529     return gdb_sys_wait4;
530
531   case amd64_sys_kill:
532     return gdb_sys_kill;
533
534   case amd64_sys_uname:
535     return gdb_sys_uname;
536
537   case amd64_sys_semget:
538     return gdb_sys_semget;
539
540   case amd64_sys_semop:
541     return gdb_sys_semop;
542
543   case amd64_sys_semctl:
544     return gdb_sys_semctl;
545
546   case amd64_sys_shmdt:
547     return gdb_sys_shmdt;
548
549   case amd64_sys_msgget:
550     return gdb_sys_msgget;
551
552   case amd64_sys_msgsnd:
553     return gdb_sys_msgsnd;
554
555   case amd64_sys_msgrcv:
556     return gdb_sys_msgrcv;
557
558   case amd64_sys_msgctl:
559     return gdb_sys_msgctl;
560
561   case amd64_sys_fcntl:
562     return gdb_sys_fcntl;
563
564   case amd64_sys_flock:
565     return gdb_sys_flock;
566
567   case amd64_sys_fsync:
568     return gdb_sys_fsync;
569
570   case amd64_sys_fdatasync:
571     return gdb_sys_fdatasync;
572
573   case amd64_sys_truncate:
574     return gdb_sys_truncate;
575
576   case amd64_sys_ftruncate:
577     return gdb_sys_ftruncate;
578
579   case amd64_sys_getdents:
580     return gdb_sys_getdents;
581
582   case amd64_sys_getcwd:
583     return gdb_sys_getcwd;
584
585   case amd64_sys_chdir:
586     return gdb_sys_chdir;
587
588   case amd64_sys_fchdir:
589     return gdb_sys_fchdir;
590
591   case amd64_sys_rename:
592     return gdb_sys_rename;
593
594   case amd64_sys_mkdir:
595     return gdb_sys_mkdir;
596
597   case amd64_sys_rmdir:
598     return gdb_sys_rmdir;
599
600   case amd64_sys_creat:
601     return gdb_sys_creat;
602
603   case amd64_sys_link:
604     return gdb_sys_link;
605
606   case amd64_sys_unlink:
607     return gdb_sys_unlink;
608
609   case amd64_sys_symlink:
610     return gdb_sys_symlink;
611
612   case amd64_sys_readlink:
613     return gdb_sys_readlink;
614
615   case amd64_sys_chmod:
616     return gdb_sys_chmod;
617
618   case amd64_sys_fchmod:
619     return gdb_sys_fchmod;
620
621   case amd64_sys_chown:
622     return gdb_sys_chown;
623
624   case amd64_sys_fchown:
625     return gdb_sys_fchown;
626
627   case amd64_sys_lchown:
628     return gdb_sys_lchown;
629
630   case amd64_sys_umask:
631     return gdb_sys_umask;
632
633   case amd64_sys_gettimeofday:
634     return gdb_sys_gettimeofday;
635
636   case amd64_sys_getrlimit:
637     return gdb_sys_getrlimit;
638
639   case amd64_sys_getrusage:
640     return gdb_sys_getrusage;
641
642   case amd64_sys_sysinfo:
643     return gdb_sys_sysinfo;
644
645   case amd64_sys_times:
646     return gdb_sys_times;
647
648   case amd64_sys_ptrace:
649     return gdb_sys_ptrace;
650
651   case amd64_sys_getuid:
652     return gdb_sys_getuid;
653
654   case amd64_sys_syslog:
655     return gdb_sys_syslog;
656
657   case amd64_sys_getgid:
658     return gdb_sys_getgid;
659
660   case amd64_sys_setuid:
661     return gdb_sys_setuid;
662
663   case amd64_sys_setgid:
664     return gdb_sys_setgid;
665
666   case amd64_sys_geteuid:
667     return gdb_sys_geteuid;
668
669   case amd64_sys_getegid:
670     return gdb_sys_getegid;
671
672   case amd64_sys_setpgid:
673     return gdb_sys_setpgid;
674
675   case amd64_sys_getppid:
676     return gdb_sys_getppid;
677
678   case amd64_sys_getpgrp:
679     return gdb_sys_getpgrp;
680
681   case amd64_sys_setsid:
682     return gdb_sys_setsid;
683
684   case amd64_sys_setreuid:
685     return gdb_sys_setreuid;
686
687   case amd64_sys_setregid:
688     return gdb_sys_setregid;
689
690   case amd64_sys_getgroups:
691     return gdb_sys_getgroups;
692
693   case amd64_sys_setgroups:
694     return gdb_sys_setgroups;
695
696   case amd64_sys_setresuid:
697     return gdb_sys_setresuid;
698
699   case amd64_sys_getresuid:
700     return gdb_sys_getresuid;
701
702   case amd64_sys_setresgid:
703     return gdb_sys_setresgid;
704
705   case amd64_sys_getresgid:
706     return gdb_sys_getresgid;
707
708   case amd64_sys_getpgid:
709     return gdb_sys_getpgid;
710
711   case amd64_sys_setfsuid:
712     return gdb_sys_setfsuid;
713
714   case amd64_sys_setfsgid:
715     return gdb_sys_setfsgid;
716
717   case amd64_sys_getsid:
718     return gdb_sys_getsid;
719
720   case amd64_sys_capget:
721     return gdb_sys_capget;
722
723   case amd64_sys_capset:
724     return gdb_sys_capset;
725
726   case amd64_sys_rt_sigpending:
727     return gdb_sys_rt_sigpending;
728
729   case amd64_sys_rt_sigtimedwait:
730     return gdb_sys_rt_sigtimedwait;
731
732   case amd64_sys_rt_sigqueueinfo:
733     return gdb_sys_rt_sigqueueinfo;
734
735   case amd64_sys_rt_sigsuspend:
736     return gdb_sys_rt_sigsuspend;
737
738   case amd64_sys_sigaltstack:
739     return gdb_sys_sigaltstack;
740
741   case amd64_sys_utime:
742     return gdb_sys_utime;
743
744   case amd64_sys_mknod:
745     return gdb_sys_mknod;
746
747   case amd64_sys_personality:
748     return gdb_sys_personality;
749
750   case amd64_sys_ustat:
751     return gdb_sys_ustat;
752
753   case amd64_sys_statfs:
754     return gdb_sys_statfs;
755
756   case amd64_sys_fstatfs:
757     return gdb_sys_fstatfs;
758
759   case amd64_sys_sysfs:
760     return gdb_sys_sysfs;
761
762   case amd64_sys_getpriority:
763     return gdb_sys_getpriority;
764
765   case amd64_sys_setpriority:
766     return gdb_sys_setpriority;
767
768   case amd64_sys_sched_setparam:
769     return gdb_sys_sched_setparam;
770
771   case amd64_sys_sched_getparam:
772     return gdb_sys_sched_getparam;
773
774   case amd64_sys_sched_setscheduler:
775     return gdb_sys_sched_setscheduler;
776
777   case amd64_sys_sched_getscheduler:
778     return gdb_sys_sched_getscheduler;
779
780   case amd64_sys_sched_get_priority_max:
781     return gdb_sys_sched_get_priority_max;
782
783   case amd64_sys_sched_get_priority_min:
784     return gdb_sys_sched_get_priority_min;
785
786   case amd64_sys_sched_rr_get_interval:
787     return gdb_sys_sched_rr_get_interval;
788
789   case amd64_sys_mlock:
790     return gdb_sys_mlock;
791
792   case amd64_sys_munlock:
793     return gdb_sys_munlock;
794
795   case amd64_sys_mlockall:
796     return gdb_sys_mlockall;
797
798   case amd64_sys_munlockall:
799     return gdb_sys_munlockall;
800
801   case amd64_sys_vhangup:
802     return gdb_sys_vhangup;
803
804   case amd64_sys_modify_ldt:
805     return gdb_sys_modify_ldt;
806
807   case amd64_sys_pivot_root:
808     return gdb_sys_pivot_root;
809
810   case amd64_sys_sysctl:
811     return gdb_sys_sysctl;
812
813   case amd64_sys_prctl:
814     return gdb_sys_prctl;
815
816   case amd64_sys_arch_prctl:
817     return -1;  /* Note */
818
819   case amd64_sys_adjtimex:
820     return gdb_sys_adjtimex;
821
822   case amd64_sys_setrlimit:
823     return gdb_sys_setrlimit;
824
825   case amd64_sys_chroot:
826     return gdb_sys_chroot;
827
828   case amd64_sys_sync:
829     return gdb_sys_sync;
830
831   case amd64_sys_acct:
832     return gdb_sys_acct;
833
834   case amd64_sys_settimeofday:
835     return gdb_sys_settimeofday;
836
837   case amd64_sys_mount:
838     return gdb_sys_mount;
839
840   case amd64_sys_umount:
841     return gdb_sys_umount;
842
843   case amd64_sys_swapon:
844     return gdb_sys_swapon;
845
846   case amd64_sys_swapoff:
847     return gdb_sys_swapoff;
848
849   case amd64_sys_reboot:
850     return gdb_sys_reboot;
851
852   case amd64_sys_sethostname:
853     return gdb_sys_sethostname;
854
855   case amd64_sys_setdomainname:
856     return gdb_sys_setdomainname;
857
858   case amd64_sys_iopl:
859     return gdb_sys_iopl;
860
861   case amd64_sys_ioperm:
862     return gdb_sys_ioperm;
863
864   case amd64_sys_init_module:
865     return gdb_sys_init_module;
866
867   case amd64_sys_delete_module:
868     return gdb_sys_delete_module;
869
870   case amd64_sys_quotactl:
871     return gdb_sys_quotactl;
872
873   case amd64_sys_nfsservctl:
874     return gdb_sys_nfsservctl;
875
876   case amd64_sys_gettid:
877     return gdb_sys_gettid;
878
879   case amd64_sys_readahead:
880     return gdb_sys_readahead;
881
882   case amd64_sys_setxattr:
883     return gdb_sys_setxattr;
884
885   case amd64_sys_lsetxattr:
886     return gdb_sys_lsetxattr;
887
888   case amd64_sys_fsetxattr:
889     return gdb_sys_fsetxattr;
890
891   case amd64_sys_getxattr:
892     return gdb_sys_getxattr;
893
894   case amd64_sys_lgetxattr:
895     return gdb_sys_lgetxattr;
896
897   case amd64_sys_fgetxattr:
898     return gdb_sys_fgetxattr;
899
900   case amd64_sys_listxattr:
901     return gdb_sys_listxattr;
902
903   case amd64_sys_llistxattr:
904     return gdb_sys_llistxattr;
905
906   case amd64_sys_flistxattr:
907     return gdb_sys_flistxattr;
908
909   case amd64_sys_removexattr:
910     return gdb_sys_removexattr;
911
912   case amd64_sys_lremovexattr:
913     return gdb_sys_lremovexattr;
914
915   case amd64_sys_fremovexattr:
916     return gdb_sys_fremovexattr;
917
918   case amd64_sys_tkill:
919     return gdb_sys_tkill;
920
921   case amd64_sys_time:
922     return gdb_sys_time;
923
924   case amd64_sys_futex:
925     return gdb_sys_futex;
926
927   case amd64_sys_sched_setaffinity:
928     return gdb_sys_sched_setaffinity;
929
930   case amd64_sys_sched_getaffinity:
931     return gdb_sys_sched_getaffinity;
932
933   case amd64_sys_io_setup:
934     return gdb_sys_io_setup;
935
936   case amd64_sys_io_destroy:
937     return gdb_sys_io_destroy;
938
939   case amd64_sys_io_getevents:
940     return gdb_sys_io_getevents;
941
942   case amd64_sys_io_submit:
943     return gdb_sys_io_submit;
944
945   case amd64_sys_io_cancel:
946     return gdb_sys_io_cancel;
947
948   case amd64_sys_lookup_dcookie:
949     return gdb_sys_lookup_dcookie;
950
951   case amd64_sys_epoll_create:
952     return gdb_sys_epoll_create;
953
954   case amd64_sys_remap_file_pages:
955     return gdb_sys_remap_file_pages;
956
957   case amd64_sys_getdents64:
958     return gdb_sys_getdents64;
959
960   case amd64_sys_set_tid_address:
961     return gdb_sys_set_tid_address;
962
963   case amd64_sys_restart_syscall:
964     return gdb_sys_restart_syscall;
965
966   case amd64_sys_semtimedop:
967     return gdb_sys_semtimedop;
968
969   case amd64_sys_fadvise64:
970     return gdb_sys_fadvise64;
971
972   case amd64_sys_timer_create:
973     return gdb_sys_timer_create;
974
975   case amd64_sys_timer_settime:
976     return gdb_sys_timer_settime;
977
978   case amd64_sys_timer_gettime:
979     return gdb_sys_timer_gettime;
980
981   case amd64_sys_timer_getoverrun:
982     return gdb_sys_timer_getoverrun;
983
984   case amd64_sys_timer_delete:
985     return gdb_sys_timer_delete;
986
987   case amd64_sys_clock_settime:
988     return gdb_sys_clock_settime;
989
990   case amd64_sys_clock_gettime:
991     return gdb_sys_clock_gettime;
992
993   case amd64_sys_clock_getres:
994     return gdb_sys_clock_getres;
995
996   case amd64_sys_clock_nanosleep:
997     return gdb_sys_clock_nanosleep;
998
999   case amd64_sys_exit_group:
1000     return gdb_sys_exit_group;
1001
1002   case amd64_sys_epoll_wait:
1003     return gdb_sys_epoll_wait;
1004
1005   case amd64_sys_epoll_ctl:
1006     return gdb_sys_epoll_ctl;
1007
1008   case amd64_sys_tgkill:
1009     return gdb_sys_tgkill;
1010
1011   case amd64_sys_utimes:
1012     return gdb_sys_utimes;
1013
1014   case amd64_sys_mbind:
1015     return gdb_sys_mbind;
1016
1017   case amd64_sys_set_mempolicy:
1018     return gdb_sys_set_mempolicy;
1019
1020   case amd64_sys_get_mempolicy:
1021     return gdb_sys_get_mempolicy;
1022
1023   case amd64_sys_mq_open:
1024     return gdb_sys_mq_open;
1025
1026   case amd64_sys_mq_unlink:
1027     return gdb_sys_mq_unlink;
1028
1029   case amd64_sys_mq_timedsend:
1030     return gdb_sys_mq_timedsend;
1031
1032   case amd64_sys_mq_timedreceive:
1033     return gdb_sys_mq_timedreceive;
1034
1035   case amd64_sys_mq_notify:
1036     return gdb_sys_mq_notify;
1037
1038   case amd64_sys_mq_getsetattr:
1039     return gdb_sys_mq_getsetattr;
1040
1041   case amd64_sys_kexec_load:
1042     return gdb_sys_kexec_load;
1043
1044   case amd64_sys_waitid:
1045     return gdb_sys_waitid;
1046
1047   case amd64_sys_add_key:
1048     return gdb_sys_add_key;
1049
1050   case amd64_sys_request_key:
1051     return gdb_sys_request_key;
1052
1053   case amd64_sys_keyctl:
1054     return gdb_sys_keyctl;
1055
1056   case amd64_sys_ioprio_set:
1057     return gdb_sys_ioprio_set;
1058
1059   case amd64_sys_ioprio_get:
1060     return gdb_sys_ioprio_get;
1061
1062   case amd64_sys_inotify_init:
1063     return gdb_sys_inotify_init;
1064
1065   case amd64_sys_inotify_add_watch:
1066     return gdb_sys_inotify_add_watch;
1067
1068   case amd64_sys_inotify_rm_watch:
1069     return gdb_sys_inotify_rm_watch;
1070
1071   case amd64_sys_migrate_pages:
1072     return gdb_sys_migrate_pages;
1073
1074   case amd64_sys_openat:
1075     return gdb_sys_openat;
1076
1077   case amd64_sys_mkdirat:
1078     return gdb_sys_mkdirat;
1079
1080   case amd64_sys_mknodat:
1081     return gdb_sys_mknodat;
1082
1083   case amd64_sys_fchownat:
1084     return gdb_sys_fchownat;
1085
1086   case amd64_sys_futimesat:
1087     return gdb_sys_futimesat;
1088
1089   case amd64_sys_newfstatat:
1090     return gdb_sys_newfstatat;
1091
1092   case amd64_sys_unlinkat:
1093     return gdb_sys_unlinkat;
1094
1095   case amd64_sys_renameat:
1096     return gdb_sys_renameat;
1097
1098   case amd64_sys_linkat:
1099     return gdb_sys_linkat;
1100
1101   case amd64_sys_symlinkat:
1102     return gdb_sys_symlinkat;
1103
1104   case amd64_sys_readlinkat:
1105     return gdb_sys_readlinkat;
1106
1107   case amd64_sys_fchmodat:
1108     return gdb_sys_fchmodat;
1109
1110   case amd64_sys_faccessat:
1111     return gdb_sys_faccessat;
1112
1113   case amd64_sys_pselect6:
1114     return gdb_sys_pselect6;
1115
1116   case amd64_sys_ppoll:
1117     return gdb_sys_ppoll;
1118
1119   case amd64_sys_unshare:
1120     return gdb_sys_unshare;
1121
1122   case amd64_sys_set_robust_list:
1123     return gdb_sys_set_robust_list;
1124
1125   case amd64_sys_get_robust_list:
1126     return gdb_sys_get_robust_list;
1127
1128   case amd64_sys_splice:
1129     return gdb_sys_splice;
1130
1131   case amd64_sys_tee:
1132     return gdb_sys_tee;
1133
1134   case amd64_sys_sync_file_range:
1135     return gdb_sys_sync_file_range;
1136
1137   case amd64_sys_vmsplice:
1138     return gdb_sys_vmsplice;
1139
1140   case amd64_sys_move_pages:
1141     return gdb_sys_move_pages;
1142
1143   default:
1144     return -1;
1145   }
1146 }
1147
1148 /* Parse the arguments of current system call instruction and record
1149    the values of the registers and memory that will be changed into
1150    "record_arch_list".  This instruction is "syscall".
1151
1152    Return -1 if something wrong.  */
1153
1154 static struct linux_record_tdep amd64_linux_record_tdep;
1155
1156 #define RECORD_ARCH_GET_FS      0x1003
1157 #define RECORD_ARCH_GET_GS      0x1004
1158
1159 static int
1160 amd64_linux_syscall_record (struct regcache *regcache)
1161 {
1162   int ret;
1163   ULONGEST syscall_native;
1164   enum gdb_syscall syscall_gdb = -1;
1165
1166   regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &syscall_native);
1167
1168   switch (syscall_native)
1169     {
1170     case amd64_sys_rt_sigreturn:
1171       if (amd64_all_but_ip_registers_record (regcache))
1172         return -1;
1173       return 0;
1174       break;
1175
1176     case amd64_sys_arch_prctl:
1177       if (syscall_native == amd64_sys_arch_prctl)
1178         {
1179           ULONGEST arg3;
1180
1181           regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.arg3,
1182                                       &arg3);
1183           if (arg3 == RECORD_ARCH_GET_FS || arg3 == RECORD_ARCH_GET_GS)
1184             {
1185               CORE_ADDR addr;
1186
1187               regcache_raw_read_unsigned (regcache,
1188                                           amd64_linux_record_tdep.arg2,
1189                                           &addr);
1190               if (record_arch_list_add_mem (addr,
1191                                             amd64_linux_record_tdep.size_ulong))
1192                 return -1;
1193             }
1194           goto record_regs;
1195         }
1196       break;
1197     }
1198
1199   syscall_gdb = amd64_canonicalize_syscall (syscall_native);
1200
1201   if (syscall_gdb < 0)
1202     {
1203       printf_unfiltered (_("Process record and replay target doesn't "
1204                            "support syscall number %s\n"), 
1205                          pulongest (syscall_native));
1206       return -1;
1207     }
1208   else
1209     {
1210       ret = record_linux_system_call (syscall_gdb, regcache,
1211                                       &amd64_linux_record_tdep);
1212       if (ret)
1213         return ret;
1214     }
1215
1216  record_regs:
1217   /* Record the return value of the system call.  */
1218   if (record_arch_list_add_reg (regcache, AMD64_RCX_REGNUM))
1219     return -1;
1220   if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM))
1221     return -1;
1222
1223   return 0;
1224 }
1225
1226 #define AMD64_LINUX_redzone    128
1227 #define AMD64_LINUX_xstate     512
1228 #define AMD64_LINUX_frame_size 560
1229
1230 int
1231 amd64_linux_record_signal (struct gdbarch *gdbarch,
1232                            struct regcache *regcache,
1233                            enum target_signal signal)
1234 {
1235   ULONGEST rsp;
1236
1237   if (amd64_all_but_ip_registers_record (regcache))
1238     return -1;
1239
1240   if (record_arch_list_add_reg (regcache, AMD64_RIP_REGNUM))
1241     return -1;
1242
1243   /* Record the change in the stack.  */
1244   regcache_raw_read_unsigned (regcache, AMD64_RSP_REGNUM, &rsp);
1245   /* redzone
1246      sp -= 128; */
1247   rsp -= AMD64_LINUX_redzone;
1248   /* This is for xstate.
1249      sp -= sizeof (struct _fpstate);  */
1250   rsp -= AMD64_LINUX_xstate;
1251   /* This is for frame_size.
1252      sp -= sizeof (struct rt_sigframe);  */
1253   rsp -= AMD64_LINUX_frame_size;
1254   if (record_arch_list_add_mem (rsp, AMD64_LINUX_redzone
1255                                      + AMD64_LINUX_xstate
1256                                      + AMD64_LINUX_frame_size))
1257     return -1;
1258
1259   if (record_arch_list_add_end ())
1260     return -1;
1261
1262   return 0;
1263 }
1264
1265 /* Get Linux/x86 target description from core dump.  */
1266
1267 static const struct target_desc *
1268 amd64_linux_core_read_description (struct gdbarch *gdbarch,
1269                                   struct target_ops *target,
1270                                   bfd *abfd)
1271 {
1272   /* Linux/x86-64.  */
1273   uint64_t xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
1274   switch ((xcr0 & I386_XSTATE_AVX_MASK))
1275     {
1276     case I386_XSTATE_AVX_MASK:
1277       return tdesc_amd64_avx_linux;
1278     default:
1279       return tdesc_amd64_linux;
1280     }
1281 }
1282
1283 static void
1284 amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1285 {
1286   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1287   const struct target_desc *tdesc = info.target_desc;
1288   struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
1289   const struct tdesc_feature *feature;
1290   int valid_p;
1291
1292   gdb_assert (tdesc_data);
1293
1294   tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
1295   tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
1296   tdep->sizeof_gregset = 27 * 8;
1297
1298   amd64_init_abi (info, gdbarch);
1299
1300   /* Reserve a number for orig_rax.  */
1301   set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
1302
1303   if (! tdesc_has_registers (tdesc))
1304     tdesc = tdesc_amd64_linux;
1305   tdep->tdesc = tdesc;
1306
1307   feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
1308   if (feature == NULL)
1309     return;
1310
1311   valid_p = tdesc_numbered_register (feature, tdesc_data,
1312                                      AMD64_LINUX_ORIG_RAX_REGNUM,
1313                                      "orig_rax");
1314   if (!valid_p)
1315     return;
1316
1317   tdep->sigtramp_p = amd64_linux_sigtramp_p;
1318   tdep->sigcontext_addr = amd64_linux_sigcontext_addr;
1319   tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
1320   tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
1321
1322   tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET;
1323
1324   /* GNU/Linux uses SVR4-style shared libraries.  */
1325   set_solib_svr4_fetch_link_map_offsets
1326     (gdbarch, svr4_lp64_fetch_link_map_offsets);
1327
1328   /* Add the %orig_rax register used for syscall restarting.  */
1329   set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
1330
1331   tdep->register_reggroup_p = amd64_linux_register_reggroup_p;
1332
1333   /* Functions for 'catch syscall'.  */
1334   set_xml_syscall_file_name (XML_SYSCALL_FILENAME_AMD64);
1335   set_gdbarch_get_syscall_number (gdbarch,
1336                                   amd64_linux_get_syscall_number);
1337
1338   /* Enable TLS support.  */
1339   set_gdbarch_fetch_tls_load_module_address (gdbarch,
1340                                              svr4_fetch_objfile_link_map);
1341
1342   /* GNU/Linux uses SVR4-style shared libraries.  */
1343   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1344
1345   /* Install supported register note sections.  */
1346   set_gdbarch_core_regset_sections (gdbarch, amd64_linux_regset_sections);
1347
1348   set_gdbarch_core_read_description (gdbarch,
1349                                      amd64_linux_core_read_description);
1350
1351   /* Displaced stepping.  */
1352   set_gdbarch_displaced_step_copy_insn (gdbarch,
1353                                         amd64_displaced_step_copy_insn);
1354   set_gdbarch_displaced_step_fixup (gdbarch, amd64_displaced_step_fixup);
1355   set_gdbarch_displaced_step_free_closure (gdbarch,
1356                                            simple_displaced_step_free_closure);
1357   set_gdbarch_displaced_step_location (gdbarch,
1358                                        displaced_step_at_entry_point);
1359
1360   set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
1361
1362   set_gdbarch_process_record (gdbarch, i386_process_record);
1363   set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal);
1364
1365   /* Initialize the amd64_linux_record_tdep.  */
1366   /* These values are the size of the type that will be used in a system
1367      call.  They are obtained from Linux Kernel source.  */
1368   amd64_linux_record_tdep.size_pointer
1369     = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1370   amd64_linux_record_tdep.size__old_kernel_stat = 32;
1371   amd64_linux_record_tdep.size_tms = 32;
1372   amd64_linux_record_tdep.size_loff_t = 8;
1373   amd64_linux_record_tdep.size_flock = 32;
1374   amd64_linux_record_tdep.size_oldold_utsname = 45;
1375   amd64_linux_record_tdep.size_ustat = 32;
1376   /* ADM64 doesn't need this size because it doesn't have sys_sigaction
1377      but sys_rt_sigaction.  */
1378   amd64_linux_record_tdep.size_old_sigaction = 152;
1379   /* ADM64 doesn't need this size because it doesn't have sys_sigpending
1380      but sys_rt_sigpending.  */
1381   amd64_linux_record_tdep.size_old_sigset_t = 128;
1382   amd64_linux_record_tdep.size_rlimit = 16;
1383   amd64_linux_record_tdep.size_rusage = 144;
1384   amd64_linux_record_tdep.size_timeval = 16;
1385   amd64_linux_record_tdep.size_timezone = 8;
1386   /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
1387      but sys_getgroups.  */
1388   amd64_linux_record_tdep.size_old_gid_t = 2;
1389   /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
1390      but sys_getresuid.  */
1391   amd64_linux_record_tdep.size_old_uid_t = 2;
1392   amd64_linux_record_tdep.size_fd_set = 128;
1393   amd64_linux_record_tdep.size_dirent = 280;
1394   amd64_linux_record_tdep.size_dirent64 = 280;
1395   amd64_linux_record_tdep.size_statfs = 120;
1396   amd64_linux_record_tdep.size_statfs64 = 120;
1397   amd64_linux_record_tdep.size_sockaddr = 16;
1398   amd64_linux_record_tdep.size_int
1399     = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
1400   amd64_linux_record_tdep.size_long
1401     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1402   amd64_linux_record_tdep.size_ulong
1403     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1404   amd64_linux_record_tdep.size_msghdr = 56;
1405   amd64_linux_record_tdep.size_itimerval = 32;
1406   amd64_linux_record_tdep.size_stat = 144;
1407   amd64_linux_record_tdep.size_old_utsname = 325;
1408   amd64_linux_record_tdep.size_sysinfo = 112;
1409   amd64_linux_record_tdep.size_msqid_ds = 120;
1410   amd64_linux_record_tdep.size_shmid_ds = 112;
1411   amd64_linux_record_tdep.size_new_utsname = 390;
1412   amd64_linux_record_tdep.size_timex = 208;
1413   amd64_linux_record_tdep.size_mem_dqinfo = 24;
1414   amd64_linux_record_tdep.size_if_dqblk = 72;
1415   amd64_linux_record_tdep.size_fs_quota_stat = 80;
1416   amd64_linux_record_tdep.size_timespec = 16;
1417   amd64_linux_record_tdep.size_pollfd = 8;
1418   amd64_linux_record_tdep.size_NFS_FHSIZE = 32;
1419   amd64_linux_record_tdep.size_knfsd_fh = 132;
1420   amd64_linux_record_tdep.size_TASK_COMM_LEN = 16;
1421   amd64_linux_record_tdep.size_sigaction = 152;
1422   amd64_linux_record_tdep.size_sigset_t = 128;
1423   amd64_linux_record_tdep.size_siginfo_t = 128;
1424   amd64_linux_record_tdep.size_cap_user_data_t = 8;
1425   amd64_linux_record_tdep.size_stack_t = 24;
1426   amd64_linux_record_tdep.size_off_t = 8;
1427   amd64_linux_record_tdep.size_stat64 = 144;
1428   amd64_linux_record_tdep.size_gid_t = 4;
1429   amd64_linux_record_tdep.size_uid_t = 4;
1430   amd64_linux_record_tdep.size_PAGE_SIZE = 4096;
1431   amd64_linux_record_tdep.size_flock64 = 32;
1432   amd64_linux_record_tdep.size_user_desc = 16;
1433   amd64_linux_record_tdep.size_io_event = 32;
1434   amd64_linux_record_tdep.size_iocb = 64;
1435   amd64_linux_record_tdep.size_epoll_event = 12;
1436   amd64_linux_record_tdep.size_itimerspec = 32;
1437   amd64_linux_record_tdep.size_mq_attr = 64;
1438   amd64_linux_record_tdep.size_siginfo = 128;
1439   amd64_linux_record_tdep.size_termios = 60;
1440   amd64_linux_record_tdep.size_termios2 = 44;
1441   amd64_linux_record_tdep.size_pid_t = 4;
1442   amd64_linux_record_tdep.size_winsize = 8;
1443   amd64_linux_record_tdep.size_serial_struct = 72;
1444   amd64_linux_record_tdep.size_serial_icounter_struct = 80;
1445   amd64_linux_record_tdep.size_hayes_esp_config = 12;
1446   amd64_linux_record_tdep.size_size_t = 8;
1447   amd64_linux_record_tdep.size_iovec = 16;
1448
1449   /* These values are the second argument of system call "sys_ioctl".
1450      They are obtained from Linux Kernel source.  */
1451   amd64_linux_record_tdep.ioctl_TCGETS = 0x5401;
1452   amd64_linux_record_tdep.ioctl_TCSETS = 0x5402;
1453   amd64_linux_record_tdep.ioctl_TCSETSW = 0x5403;
1454   amd64_linux_record_tdep.ioctl_TCSETSF = 0x5404;
1455   amd64_linux_record_tdep.ioctl_TCGETA = 0x5405;
1456   amd64_linux_record_tdep.ioctl_TCSETA = 0x5406;
1457   amd64_linux_record_tdep.ioctl_TCSETAW = 0x5407;
1458   amd64_linux_record_tdep.ioctl_TCSETAF = 0x5408;
1459   amd64_linux_record_tdep.ioctl_TCSBRK = 0x5409;
1460   amd64_linux_record_tdep.ioctl_TCXONC = 0x540A;
1461   amd64_linux_record_tdep.ioctl_TCFLSH = 0x540B;
1462   amd64_linux_record_tdep.ioctl_TIOCEXCL = 0x540C;
1463   amd64_linux_record_tdep.ioctl_TIOCNXCL = 0x540D;
1464   amd64_linux_record_tdep.ioctl_TIOCSCTTY = 0x540E;
1465   amd64_linux_record_tdep.ioctl_TIOCGPGRP = 0x540F;
1466   amd64_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
1467   amd64_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
1468   amd64_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
1469   amd64_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
1470   amd64_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
1471   amd64_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
1472   amd64_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
1473   amd64_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
1474   amd64_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
1475   amd64_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
1476   amd64_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541A;
1477   amd64_linux_record_tdep.ioctl_FIONREAD = 0x541B;
1478   amd64_linux_record_tdep.ioctl_TIOCINQ
1479     = amd64_linux_record_tdep.ioctl_FIONREAD;
1480   amd64_linux_record_tdep.ioctl_TIOCLINUX = 0x541C;
1481   amd64_linux_record_tdep.ioctl_TIOCCONS = 0x541D;
1482   amd64_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541E;
1483   amd64_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541F;
1484   amd64_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
1485   amd64_linux_record_tdep.ioctl_FIONBIO = 0x5421;
1486   amd64_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
1487   amd64_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
1488   amd64_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
1489   amd64_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
1490   amd64_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
1491   amd64_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
1492   amd64_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
1493   amd64_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
1494   amd64_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
1495   amd64_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
1496   amd64_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
1497   amd64_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
1498   amd64_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
1499   amd64_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
1500   amd64_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
1501   amd64_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
1502   amd64_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
1503   amd64_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
1504   amd64_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
1505   amd64_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
1506   amd64_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
1507   amd64_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
1508   amd64_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
1509   amd64_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
1510   amd64_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545A;
1511   amd64_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545B;
1512   amd64_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545C;
1513   amd64_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545D;
1514   amd64_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545E;
1515   amd64_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545F;
1516   amd64_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
1517
1518   /* These values are the second argument of system call "sys_fcntl"
1519      and "sys_fcntl64".  They are obtained from Linux Kernel source.  */
1520   amd64_linux_record_tdep.fcntl_F_GETLK = 5;
1521   amd64_linux_record_tdep.fcntl_F_GETLK64 = 12;
1522   amd64_linux_record_tdep.fcntl_F_SETLK64 = 13;
1523   amd64_linux_record_tdep.fcntl_F_SETLKW64 = 14;
1524
1525   amd64_linux_record_tdep.arg1 = AMD64_RDI_REGNUM;
1526   amd64_linux_record_tdep.arg2 = AMD64_RSI_REGNUM;
1527   amd64_linux_record_tdep.arg3 = AMD64_RDX_REGNUM;
1528   amd64_linux_record_tdep.arg4 = AMD64_R10_REGNUM;
1529   amd64_linux_record_tdep.arg5 = AMD64_R8_REGNUM;
1530   amd64_linux_record_tdep.arg6 = AMD64_R9_REGNUM;
1531
1532   tdep->i386_syscall_record = amd64_linux_syscall_record;
1533 }
1534 \f
1535
1536 /* Provide a prototype to silence -Wmissing-prototypes.  */
1537 extern void _initialize_amd64_linux_tdep (void);
1538
1539 void
1540 _initialize_amd64_linux_tdep (void)
1541 {
1542   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
1543                           GDB_OSABI_LINUX, amd64_linux_init_abi);
1544
1545   /* Initialize the Linux target description  */
1546   initialize_tdesc_amd64_linux ();
1547   initialize_tdesc_amd64_avx_linux ();
1548 }