OSDN Git Service

2011-03-04 Michael Snyder <msnyder@msnyder-server.eng.vmware.com>
[pf3gnuchains/sourceware.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, 2011
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", 27 * 8, "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       {
1178         ULONGEST arg3;
1179
1180         regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.arg3,
1181                                     &arg3);
1182         if (arg3 == RECORD_ARCH_GET_FS || arg3 == RECORD_ARCH_GET_GS)
1183           {
1184             CORE_ADDR addr;
1185
1186             regcache_raw_read_unsigned (regcache,
1187                                         amd64_linux_record_tdep.arg2,
1188                                         &addr);
1189             if (record_arch_list_add_mem (addr,
1190                                           amd64_linux_record_tdep.size_ulong))
1191               return -1;
1192           }
1193         goto record_regs;
1194       }
1195       break;
1196     }
1197
1198   syscall_gdb = amd64_canonicalize_syscall (syscall_native);
1199
1200   if (syscall_gdb < 0)
1201     {
1202       printf_unfiltered (_("Process record and replay target doesn't "
1203                            "support syscall number %s\n"), 
1204                          pulongest (syscall_native));
1205       return -1;
1206     }
1207   else
1208     {
1209       ret = record_linux_system_call (syscall_gdb, regcache,
1210                                       &amd64_linux_record_tdep);
1211       if (ret)
1212         return ret;
1213     }
1214
1215  record_regs:
1216   /* Record the return value of the system call.  */
1217   if (record_arch_list_add_reg (regcache, AMD64_RCX_REGNUM))
1218     return -1;
1219   if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM))
1220     return -1;
1221
1222   return 0;
1223 }
1224
1225 #define AMD64_LINUX_redzone    128
1226 #define AMD64_LINUX_xstate     512
1227 #define AMD64_LINUX_frame_size 560
1228
1229 int
1230 amd64_linux_record_signal (struct gdbarch *gdbarch,
1231                            struct regcache *regcache,
1232                            enum target_signal signal)
1233 {
1234   ULONGEST rsp;
1235
1236   if (amd64_all_but_ip_registers_record (regcache))
1237     return -1;
1238
1239   if (record_arch_list_add_reg (regcache, AMD64_RIP_REGNUM))
1240     return -1;
1241
1242   /* Record the change in the stack.  */
1243   regcache_raw_read_unsigned (regcache, AMD64_RSP_REGNUM, &rsp);
1244   /* redzone
1245      sp -= 128; */
1246   rsp -= AMD64_LINUX_redzone;
1247   /* This is for xstate.
1248      sp -= sizeof (struct _fpstate);  */
1249   rsp -= AMD64_LINUX_xstate;
1250   /* This is for frame_size.
1251      sp -= sizeof (struct rt_sigframe);  */
1252   rsp -= AMD64_LINUX_frame_size;
1253   if (record_arch_list_add_mem (rsp, AMD64_LINUX_redzone
1254                                      + AMD64_LINUX_xstate
1255                                      + AMD64_LINUX_frame_size))
1256     return -1;
1257
1258   if (record_arch_list_add_end ())
1259     return -1;
1260
1261   return 0;
1262 }
1263
1264 /* Get Linux/x86 target description from core dump.  */
1265
1266 static const struct target_desc *
1267 amd64_linux_core_read_description (struct gdbarch *gdbarch,
1268                                   struct target_ops *target,
1269                                   bfd *abfd)
1270 {
1271   /* Linux/x86-64.  */
1272   uint64_t xcr0 = i386_linux_core_read_xcr0 (gdbarch, target, abfd);
1273   switch ((xcr0 & I386_XSTATE_AVX_MASK))
1274     {
1275     case I386_XSTATE_AVX_MASK:
1276       return tdesc_amd64_avx_linux;
1277     default:
1278       return tdesc_amd64_linux;
1279     }
1280 }
1281
1282 static void
1283 amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1284 {
1285   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1286   const struct target_desc *tdesc = info.target_desc;
1287   struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
1288   const struct tdesc_feature *feature;
1289   int valid_p;
1290
1291   gdb_assert (tdesc_data);
1292
1293   linux_init_abi (info, gdbarch);
1294
1295   tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
1296   tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
1297   tdep->sizeof_gregset = 27 * 8;
1298
1299   amd64_init_abi (info, gdbarch);
1300
1301   /* Reserve a number for orig_rax.  */
1302   set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
1303
1304   if (! tdesc_has_registers (tdesc))
1305     tdesc = tdesc_amd64_linux;
1306   tdep->tdesc = tdesc;
1307
1308   feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
1309   if (feature == NULL)
1310     return;
1311
1312   valid_p = tdesc_numbered_register (feature, tdesc_data,
1313                                      AMD64_LINUX_ORIG_RAX_REGNUM,
1314                                      "orig_rax");
1315   if (!valid_p)
1316     return;
1317
1318   tdep->sigtramp_p = amd64_linux_sigtramp_p;
1319   tdep->sigcontext_addr = amd64_linux_sigcontext_addr;
1320   tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
1321   tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
1322
1323   tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET;
1324
1325   /* GNU/Linux uses SVR4-style shared libraries.  */
1326   set_solib_svr4_fetch_link_map_offsets
1327     (gdbarch, svr4_lp64_fetch_link_map_offsets);
1328
1329   /* Add the %orig_rax register used for syscall restarting.  */
1330   set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
1331
1332   tdep->register_reggroup_p = amd64_linux_register_reggroup_p;
1333
1334   /* Functions for 'catch syscall'.  */
1335   set_xml_syscall_file_name (XML_SYSCALL_FILENAME_AMD64);
1336   set_gdbarch_get_syscall_number (gdbarch,
1337                                   amd64_linux_get_syscall_number);
1338
1339   /* Enable TLS support.  */
1340   set_gdbarch_fetch_tls_load_module_address (gdbarch,
1341                                              svr4_fetch_objfile_link_map);
1342
1343   /* GNU/Linux uses SVR4-style shared libraries.  */
1344   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1345
1346   /* Install supported register note sections.  */
1347   set_gdbarch_core_regset_sections (gdbarch, amd64_linux_regset_sections);
1348
1349   set_gdbarch_core_read_description (gdbarch,
1350                                      amd64_linux_core_read_description);
1351
1352   /* Displaced stepping.  */
1353   set_gdbarch_displaced_step_copy_insn (gdbarch,
1354                                         amd64_displaced_step_copy_insn);
1355   set_gdbarch_displaced_step_fixup (gdbarch, amd64_displaced_step_fixup);
1356   set_gdbarch_displaced_step_free_closure (gdbarch,
1357                                            simple_displaced_step_free_closure);
1358   set_gdbarch_displaced_step_location (gdbarch,
1359                                        displaced_step_at_entry_point);
1360
1361   set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
1362
1363   set_gdbarch_process_record (gdbarch, i386_process_record);
1364   set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal);
1365
1366   /* Initialize the amd64_linux_record_tdep.  */
1367   /* These values are the size of the type that will be used in a system
1368      call.  They are obtained from Linux Kernel source.  */
1369   amd64_linux_record_tdep.size_pointer
1370     = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1371   amd64_linux_record_tdep.size__old_kernel_stat = 32;
1372   amd64_linux_record_tdep.size_tms = 32;
1373   amd64_linux_record_tdep.size_loff_t = 8;
1374   amd64_linux_record_tdep.size_flock = 32;
1375   amd64_linux_record_tdep.size_oldold_utsname = 45;
1376   amd64_linux_record_tdep.size_ustat = 32;
1377   /* ADM64 doesn't need this size because it doesn't have sys_sigaction
1378      but sys_rt_sigaction.  */
1379   amd64_linux_record_tdep.size_old_sigaction = 152;
1380   /* ADM64 doesn't need this size because it doesn't have sys_sigpending
1381      but sys_rt_sigpending.  */
1382   amd64_linux_record_tdep.size_old_sigset_t = 128;
1383   amd64_linux_record_tdep.size_rlimit = 16;
1384   amd64_linux_record_tdep.size_rusage = 144;
1385   amd64_linux_record_tdep.size_timeval = 16;
1386   amd64_linux_record_tdep.size_timezone = 8;
1387   /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
1388      but sys_getgroups.  */
1389   amd64_linux_record_tdep.size_old_gid_t = 2;
1390   /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
1391      but sys_getresuid.  */
1392   amd64_linux_record_tdep.size_old_uid_t = 2;
1393   amd64_linux_record_tdep.size_fd_set = 128;
1394   amd64_linux_record_tdep.size_dirent = 280;
1395   amd64_linux_record_tdep.size_dirent64 = 280;
1396   amd64_linux_record_tdep.size_statfs = 120;
1397   amd64_linux_record_tdep.size_statfs64 = 120;
1398   amd64_linux_record_tdep.size_sockaddr = 16;
1399   amd64_linux_record_tdep.size_int
1400     = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
1401   amd64_linux_record_tdep.size_long
1402     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1403   amd64_linux_record_tdep.size_ulong
1404     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1405   amd64_linux_record_tdep.size_msghdr = 56;
1406   amd64_linux_record_tdep.size_itimerval = 32;
1407   amd64_linux_record_tdep.size_stat = 144;
1408   amd64_linux_record_tdep.size_old_utsname = 325;
1409   amd64_linux_record_tdep.size_sysinfo = 112;
1410   amd64_linux_record_tdep.size_msqid_ds = 120;
1411   amd64_linux_record_tdep.size_shmid_ds = 112;
1412   amd64_linux_record_tdep.size_new_utsname = 390;
1413   amd64_linux_record_tdep.size_timex = 208;
1414   amd64_linux_record_tdep.size_mem_dqinfo = 24;
1415   amd64_linux_record_tdep.size_if_dqblk = 72;
1416   amd64_linux_record_tdep.size_fs_quota_stat = 80;
1417   amd64_linux_record_tdep.size_timespec = 16;
1418   amd64_linux_record_tdep.size_pollfd = 8;
1419   amd64_linux_record_tdep.size_NFS_FHSIZE = 32;
1420   amd64_linux_record_tdep.size_knfsd_fh = 132;
1421   amd64_linux_record_tdep.size_TASK_COMM_LEN = 16;
1422   amd64_linux_record_tdep.size_sigaction = 152;
1423   amd64_linux_record_tdep.size_sigset_t = 128;
1424   amd64_linux_record_tdep.size_siginfo_t = 128;
1425   amd64_linux_record_tdep.size_cap_user_data_t = 8;
1426   amd64_linux_record_tdep.size_stack_t = 24;
1427   amd64_linux_record_tdep.size_off_t = 8;
1428   amd64_linux_record_tdep.size_stat64 = 144;
1429   amd64_linux_record_tdep.size_gid_t = 4;
1430   amd64_linux_record_tdep.size_uid_t = 4;
1431   amd64_linux_record_tdep.size_PAGE_SIZE = 4096;
1432   amd64_linux_record_tdep.size_flock64 = 32;
1433   amd64_linux_record_tdep.size_user_desc = 16;
1434   amd64_linux_record_tdep.size_io_event = 32;
1435   amd64_linux_record_tdep.size_iocb = 64;
1436   amd64_linux_record_tdep.size_epoll_event = 12;
1437   amd64_linux_record_tdep.size_itimerspec = 32;
1438   amd64_linux_record_tdep.size_mq_attr = 64;
1439   amd64_linux_record_tdep.size_siginfo = 128;
1440   amd64_linux_record_tdep.size_termios = 60;
1441   amd64_linux_record_tdep.size_termios2 = 44;
1442   amd64_linux_record_tdep.size_pid_t = 4;
1443   amd64_linux_record_tdep.size_winsize = 8;
1444   amd64_linux_record_tdep.size_serial_struct = 72;
1445   amd64_linux_record_tdep.size_serial_icounter_struct = 80;
1446   amd64_linux_record_tdep.size_hayes_esp_config = 12;
1447   amd64_linux_record_tdep.size_size_t = 8;
1448   amd64_linux_record_tdep.size_iovec = 16;
1449
1450   /* These values are the second argument of system call "sys_ioctl".
1451      They are obtained from Linux Kernel source.  */
1452   amd64_linux_record_tdep.ioctl_TCGETS = 0x5401;
1453   amd64_linux_record_tdep.ioctl_TCSETS = 0x5402;
1454   amd64_linux_record_tdep.ioctl_TCSETSW = 0x5403;
1455   amd64_linux_record_tdep.ioctl_TCSETSF = 0x5404;
1456   amd64_linux_record_tdep.ioctl_TCGETA = 0x5405;
1457   amd64_linux_record_tdep.ioctl_TCSETA = 0x5406;
1458   amd64_linux_record_tdep.ioctl_TCSETAW = 0x5407;
1459   amd64_linux_record_tdep.ioctl_TCSETAF = 0x5408;
1460   amd64_linux_record_tdep.ioctl_TCSBRK = 0x5409;
1461   amd64_linux_record_tdep.ioctl_TCXONC = 0x540A;
1462   amd64_linux_record_tdep.ioctl_TCFLSH = 0x540B;
1463   amd64_linux_record_tdep.ioctl_TIOCEXCL = 0x540C;
1464   amd64_linux_record_tdep.ioctl_TIOCNXCL = 0x540D;
1465   amd64_linux_record_tdep.ioctl_TIOCSCTTY = 0x540E;
1466   amd64_linux_record_tdep.ioctl_TIOCGPGRP = 0x540F;
1467   amd64_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
1468   amd64_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
1469   amd64_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
1470   amd64_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
1471   amd64_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
1472   amd64_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
1473   amd64_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
1474   amd64_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
1475   amd64_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
1476   amd64_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
1477   amd64_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541A;
1478   amd64_linux_record_tdep.ioctl_FIONREAD = 0x541B;
1479   amd64_linux_record_tdep.ioctl_TIOCINQ
1480     = amd64_linux_record_tdep.ioctl_FIONREAD;
1481   amd64_linux_record_tdep.ioctl_TIOCLINUX = 0x541C;
1482   amd64_linux_record_tdep.ioctl_TIOCCONS = 0x541D;
1483   amd64_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541E;
1484   amd64_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541F;
1485   amd64_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
1486   amd64_linux_record_tdep.ioctl_FIONBIO = 0x5421;
1487   amd64_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
1488   amd64_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
1489   amd64_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
1490   amd64_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
1491   amd64_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
1492   amd64_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
1493   amd64_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
1494   amd64_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
1495   amd64_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
1496   amd64_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
1497   amd64_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
1498   amd64_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
1499   amd64_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
1500   amd64_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
1501   amd64_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
1502   amd64_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
1503   amd64_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
1504   amd64_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
1505   amd64_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
1506   amd64_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
1507   amd64_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
1508   amd64_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
1509   amd64_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
1510   amd64_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
1511   amd64_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545A;
1512   amd64_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545B;
1513   amd64_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545C;
1514   amd64_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545D;
1515   amd64_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545E;
1516   amd64_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545F;
1517   amd64_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
1518
1519   /* These values are the second argument of system call "sys_fcntl"
1520      and "sys_fcntl64".  They are obtained from Linux Kernel source.  */
1521   amd64_linux_record_tdep.fcntl_F_GETLK = 5;
1522   amd64_linux_record_tdep.fcntl_F_GETLK64 = 12;
1523   amd64_linux_record_tdep.fcntl_F_SETLK64 = 13;
1524   amd64_linux_record_tdep.fcntl_F_SETLKW64 = 14;
1525
1526   amd64_linux_record_tdep.arg1 = AMD64_RDI_REGNUM;
1527   amd64_linux_record_tdep.arg2 = AMD64_RSI_REGNUM;
1528   amd64_linux_record_tdep.arg3 = AMD64_RDX_REGNUM;
1529   amd64_linux_record_tdep.arg4 = AMD64_R10_REGNUM;
1530   amd64_linux_record_tdep.arg5 = AMD64_R8_REGNUM;
1531   amd64_linux_record_tdep.arg6 = AMD64_R9_REGNUM;
1532
1533   tdep->i386_syscall_record = amd64_linux_syscall_record;
1534 }
1535 \f
1536
1537 /* Provide a prototype to silence -Wmissing-prototypes.  */
1538 extern void _initialize_amd64_linux_tdep (void);
1539
1540 void
1541 _initialize_amd64_linux_tdep (void)
1542 {
1543   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
1544                           GDB_OSABI_LINUX, amd64_linux_init_abi);
1545
1546   /* Initialize the Linux target description.  */
1547   initialize_tdesc_amd64_linux ();
1548   initialize_tdesc_amd64_avx_linux ();
1549 }