GDB (xrefs)
/tmp/gdb-7.10/gdb/amd64-linux-tdep.c
Go to the documentation of this file.
1 /* Target-dependent code for GNU/Linux x86-64.
2 
3  Copyright (C) 2001-2015 Free Software Foundation, Inc.
4  Contributed by Jiri Smid, SuSE Labs.
5 
6  This file is part of GDB.
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 3 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 
21 #include "defs.h"
22 #include "arch-utils.h"
23 #include "frame.h"
24 #include "gdbcore.h"
25 #include "regcache.h"
26 #include "osabi.h"
27 #include "symtab.h"
28 #include "gdbtypes.h"
29 #include "reggroups.h"
30 #include "regset.h"
31 #include "parser-defs.h"
32 #include "user-regs.h"
33 #include "amd64-linux-tdep.h"
34 #include "i386-linux-tdep.h"
35 #include "linux-tdep.h"
36 #include "x86-xstate.h"
37 
38 #include "amd64-tdep.h"
39 #include "solib-svr4.h"
40 #include "xml-syscall.h"
41 #include "glibc-tdep.h"
42 
47 
51 
52 /* The syscall's XML filename for i386. */
53 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
54 
55 #include "record-full.h"
56 #include "linux-record.h"
57 
58 /* Mapping between the general-purpose registers in `struct user'
59  format and GDB's register cache layout. */
60 
61 /* From <sys/reg.h>. */
63 {
64  10 * 8, /* %rax */
65  5 * 8, /* %rbx */
66  11 * 8, /* %rcx */
67  12 * 8, /* %rdx */
68  13 * 8, /* %rsi */
69  14 * 8, /* %rdi */
70  4 * 8, /* %rbp */
71  19 * 8, /* %rsp */
72  9 * 8, /* %r8 ... */
73  8 * 8,
74  7 * 8,
75  6 * 8,
76  3 * 8,
77  2 * 8,
78  1 * 8,
79  0 * 8, /* ... %r15 */
80  16 * 8, /* %rip */
81  18 * 8, /* %eflags */
82  17 * 8, /* %cs */
83  20 * 8, /* %ss */
84  23 * 8, /* %ds */
85  24 * 8, /* %es */
86  25 * 8, /* %fs */
87  26 * 8, /* %gs */
88  -1, -1, -1, -1, -1, -1, -1, -1,
89  -1, -1, -1, -1, -1, -1, -1, -1,
90  -1, -1, -1, -1, -1, -1, -1, -1,
91  -1, -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, /* MPX registers BND0 ... BND3. */
95  -1, -1, /* MPX registers BNDCFGU and BNDSTATUS. */
96  -1, -1, -1, -1, -1, -1, -1, -1, /* xmm16 ... xmm31 (AVX512) */
97  -1, -1, -1, -1, -1, -1, -1, -1,
98  -1, -1, -1, -1, -1, -1, -1, -1, /* ymm16 ... ymm31 (AVX512) */
99  -1, -1, -1, -1, -1, -1, -1, -1,
100  -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */
101  -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm31 (AVX512) */
102  -1, -1, -1, -1, -1, -1, -1, -1,
103  -1, -1, -1, -1, -1, -1, -1, -1,
104  -1, -1, -1, -1, -1, -1, -1, -1,
105  15 * 8 /* "orig_rax" */
106 };
107 
108 
109 /* Support for signal handlers. */
110 
111 #define LINUX_SIGTRAMP_INSN0 0x48 /* mov $NNNNNNNN, %rax */
112 #define LINUX_SIGTRAMP_OFFSET0 0
113 #define LINUX_SIGTRAMP_INSN1 0x0f /* syscall */
114 #define LINUX_SIGTRAMP_OFFSET1 7
115 
117 {
118  /* mov $__NR_rt_sigreturn, %rax */
119  LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x0f, 0x00, 0x00, 0x00,
120  /* syscall */
122 };
123 
125 {
126  /* mov $__NR_rt_sigreturn, %rax. */
127  LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x01, 0x02, 0x00, 0x40,
128  /* syscall */
130 };
131 
132 #define LINUX_SIGTRAMP_LEN (sizeof amd64_linux_sigtramp_code)
133 
134 /* If PC is in a sigtramp routine, return the address of the start of
135  the routine. Otherwise, return 0. */
136 
137 static CORE_ADDR
139 {
140  struct gdbarch *gdbarch;
141  const gdb_byte *sigtramp_code;
142  CORE_ADDR pc = get_frame_pc (this_frame);
144 
145  /* We only recognize a signal trampoline if PC is at the start of
146  one of the two instructions. We optimize for finding the PC at
147  the start, as will be the case when the trampoline is not the
148  first frame on the stack. We assume that in the case where the
149  PC is not at the start of the instruction sequence, there will be
150  a few trailing readable bytes on the stack. */
151 
152  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
153  return 0;
154 
155  if (buf[0] != LINUX_SIGTRAMP_INSN0)
156  {
157  if (buf[0] != LINUX_SIGTRAMP_INSN1)
158  return 0;
159 
161  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
162  return 0;
163  }
164 
165  gdbarch = get_frame_arch (this_frame);
166  if (gdbarch_ptr_bit (gdbarch) == 32)
167  sigtramp_code = amd64_x32_linux_sigtramp_code;
168  else
169  sigtramp_code = amd64_linux_sigtramp_code;
170  if (memcmp (buf, sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
171  return 0;
172 
173  return pc;
174 }
175 
176 /* Return whether THIS_FRAME corresponds to a GNU/Linux sigtramp
177  routine. */
178 
179 static int
180 amd64_linux_sigtramp_p (struct frame_info *this_frame)
181 {
182  CORE_ADDR pc = get_frame_pc (this_frame);
183  const char *name;
184 
185  find_pc_partial_function (pc, &name, NULL, NULL);
186 
187  /* If we have NAME, we can optimize the search. The trampoline is
188  named __restore_rt. However, it isn't dynamically exported from
189  the shared C library, so the trampoline may appear to be part of
190  the preceding function. This should always be sigaction,
191  __sigaction, or __libc_sigaction (all aliases to the same
192  function). */
193  if (name == NULL || strstr (name, "sigaction") != NULL)
194  return (amd64_linux_sigtramp_start (this_frame) != 0);
195 
196  return (strcmp ("__restore_rt", name) == 0);
197 }
198 
199 /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>. */
200 #define AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 40
201 
202 /* Assuming THIS_FRAME is a GNU/Linux sigtramp routine, return the
203  address of the associated sigcontext structure. */
204 
205 static CORE_ADDR
207 {
208  struct gdbarch *gdbarch = get_frame_arch (this_frame);
209  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
210  CORE_ADDR sp;
211  gdb_byte buf[8];
212 
213  get_frame_register (this_frame, AMD64_RSP_REGNUM, buf);
214  sp = extract_unsigned_integer (buf, 8, byte_order);
215 
216  /* The sigcontext structure is part of the user context. A pointer
217  to the user context is passed as the third argument to the signal
218  handler, i.e. in %rdx. Unfortunately %rdx isn't preserved across
219  function calls so we can't use it. Fortunately the user context
220  is part of the signal frame and the unwound %rsp directly points
221  at it. */
223 }
224 
225 
226 static LONGEST
228  ptid_t ptid)
229 {
230  struct regcache *regcache = get_thread_regcache (ptid);
231  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
232  /* The content of a register. */
233  gdb_byte buf[8];
234  /* The result. */
235  LONGEST ret;
236 
237  /* Getting the system call number from the register.
238  When dealing with x86_64 architecture, this information
239  is stored at %rax register. */
241 
242  ret = extract_signed_integer (buf, 8, byte_order);
243 
244  return ret;
245 }
246 
247 
248 /* From <asm/sigcontext.h>. */
250 {
251  13 * 8, /* %rax */
252  11 * 8, /* %rbx */
253  14 * 8, /* %rcx */
254  12 * 8, /* %rdx */
255  9 * 8, /* %rsi */
256  8 * 8, /* %rdi */
257  10 * 8, /* %rbp */
258  15 * 8, /* %rsp */
259  0 * 8, /* %r8 */
260  1 * 8, /* %r9 */
261  2 * 8, /* %r10 */
262  3 * 8, /* %r11 */
263  4 * 8, /* %r12 */
264  5 * 8, /* %r13 */
265  6 * 8, /* %r14 */
266  7 * 8, /* %r15 */
267  16 * 8, /* %rip */
268  17 * 8, /* %eflags */
269 
270  /* FIXME: kettenis/2002030531: The registers %cs, %fs and %gs are
271  available in `struct sigcontext'. However, they only occupy two
272  bytes instead of four, which makes using them here rather
273  difficult. Leave them out for now. */
274  -1, /* %cs */
275  -1, /* %ss */
276  -1, /* %ds */
277  -1, /* %es */
278  -1, /* %fs */
279  -1 /* %gs */
280 };
281 
282 static int
284  struct reggroup *group)
285 {
286  if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM)
287  return (group == system_reggroup
288  || group == save_reggroup
289  || group == restore_reggroup);
290  return i386_register_reggroup_p (gdbarch, regnum, group);
291 }
292 
293 /* Set the program counter for process PTID to PC. */
294 
295 static void
297 {
299 
300  /* We must be careful with modifying the program counter. If we
301  just interrupted a system call, the kernel might try to restart
302  it when we resume the inferior. On restarting the system call,
303  the kernel will try backing up the program counter even though it
304  no longer points at the system call. This typically results in a
305  SIGSEGV or SIGILL. We can prevent this by writing `-1' in the
306  "orig_rax" pseudo-register.
307 
308  Note that "orig_rax" is saved when setting up a dummy call frame.
309  This means that it is properly restored when that frame is
310  popped, and that the interrupted system call will be restarted
311  when we resume the inferior on return from a function call from
312  within GDB. In all other cases the system call will not be
313  restarted. */
315 }
316 
317 /* Record all registers but IP register for process-record. */
318 
319 static int
321 {
323  return -1;
325  return -1;
327  return -1;
329  return -1;
331  return -1;
333  return -1;
335  return -1;
337  return -1;
339  return -1;
341  return -1;
343  return -1;
345  return -1;
347  return -1;
349  return -1;
351  return -1;
353  return -1;
355  return -1;
356 
357  return 0;
358 }
359 
360 /* amd64_canonicalize_syscall maps from the native amd64 Linux set
361  of syscall ids into a canonical set of syscall ids used by
362  process record. */
363 
364 static enum gdb_syscall
366 {
367  switch (syscall_number) {
368  case amd64_sys_read:
369  case amd64_x32_sys_read:
370  return gdb_sys_read;
371 
372  case amd64_sys_write:
373  case amd64_x32_sys_write:
374  return gdb_sys_write;
375 
376  case amd64_sys_open:
377  case amd64_x32_sys_open:
378  return gdb_sys_open;
379 
380  case amd64_sys_close:
381  case amd64_x32_sys_close:
382  return gdb_sys_close;
383 
384  case amd64_sys_newstat:
386  return gdb_sys_newstat;
387 
388  case amd64_sys_newfstat:
390  return gdb_sys_newfstat;
391 
392  case amd64_sys_newlstat:
394  return gdb_sys_newlstat;
395 
396  case amd64_sys_poll:
397  case amd64_x32_sys_poll:
398  return gdb_sys_poll;
399 
400  case amd64_sys_lseek:
401  case amd64_x32_sys_lseek:
402  return gdb_sys_lseek;
403 
404  case amd64_sys_mmap:
405  case amd64_x32_sys_mmap:
406  return gdb_sys_mmap2;
407 
408  case amd64_sys_mprotect:
410  return gdb_sys_mprotect;
411 
412  case amd64_sys_munmap:
414  return gdb_sys_munmap;
415 
416  case amd64_sys_brk:
417  case amd64_x32_sys_brk:
418  return gdb_sys_brk;
419 
422  return gdb_sys_rt_sigaction;
423 
426  return gdb_sys_rt_sigprocmask;
427 
430  return gdb_sys_rt_sigreturn;
431 
432  case amd64_sys_ioctl:
433  case amd64_x32_sys_ioctl:
434  return gdb_sys_ioctl;
435 
436  case amd64_sys_pread64:
438  return gdb_sys_pread64;
439 
440  case amd64_sys_pwrite64:
442  return gdb_sys_pwrite64;
443 
444  case amd64_sys_readv:
445  case amd64_x32_sys_readv:
446  return gdb_sys_readv;
447 
448  case amd64_sys_writev:
450  return gdb_sys_writev;
451 
452  case amd64_sys_access:
454  return gdb_sys_access;
455 
456  case amd64_sys_pipe:
457  case amd64_x32_sys_pipe:
458  return gdb_sys_pipe;
459 
460  case amd64_sys_select:
462  return gdb_sys_select;
463 
466  return gdb_sys_sched_yield;
467 
468  case amd64_sys_mremap:
470  return gdb_sys_mremap;
471 
472  case amd64_sys_msync:
473  case amd64_x32_sys_msync:
474  return gdb_sys_msync;
475 
476  case amd64_sys_mincore:
478  return gdb_sys_mincore;
479 
480  case amd64_sys_madvise:
482  return gdb_sys_madvise;
483 
484  case amd64_sys_shmget:
486  return gdb_sys_shmget;
487 
488  case amd64_sys_shmat:
489  case amd64_x32_sys_shmat:
490  return gdb_sys_shmat;
491 
492  case amd64_sys_shmctl:
494  return gdb_sys_shmctl;
495 
496  case amd64_sys_dup:
497  case amd64_x32_sys_dup:
498  return gdb_sys_dup;
499 
500  case amd64_sys_dup2:
501  case amd64_x32_sys_dup2:
502  return gdb_sys_dup2;
503 
504  case amd64_sys_pause:
505  case amd64_x32_sys_pause:
506  return gdb_sys_pause;
507 
508  case amd64_sys_nanosleep:
510  return gdb_sys_nanosleep;
511 
512  case amd64_sys_getitimer:
514  return gdb_sys_getitimer;
515 
516  case amd64_sys_alarm:
517  case amd64_x32_sys_alarm:
518  return gdb_sys_alarm;
519 
520  case amd64_sys_setitimer:
522  return gdb_sys_setitimer;
523 
524  case amd64_sys_getpid:
526  return gdb_sys_getpid;
527 
530  return gdb_sys_sendfile64;
531 
532  case amd64_sys_socket:
534  return gdb_sys_socket;
535 
536  case amd64_sys_connect:
538  return gdb_sys_connect;
539 
540  case amd64_sys_accept:
542  return gdb_sys_accept;
543 
544  case amd64_sys_sendto:
546  return gdb_sys_sendto;
547 
548  case amd64_sys_recvfrom:
550  return gdb_sys_recvfrom;
551 
552  case amd64_sys_sendmsg:
554  return gdb_sys_sendmsg;
555 
556  case amd64_sys_recvmsg:
558  return gdb_sys_recvmsg;
559 
560  case amd64_sys_shutdown:
562  return gdb_sys_shutdown;
563 
564  case amd64_sys_bind:
565  case amd64_x32_sys_bind:
566  return gdb_sys_bind;
567 
568  case amd64_sys_listen:
570  return gdb_sys_listen;
571 
574  return gdb_sys_getsockname;
575 
578  return gdb_sys_getpeername;
579 
582  return gdb_sys_socketpair;
583 
586  return gdb_sys_setsockopt;
587 
590  return gdb_sys_getsockopt;
591 
592  case amd64_sys_clone:
593  case amd64_x32_sys_clone:
594  return gdb_sys_clone;
595 
596  case amd64_sys_fork:
597  case amd64_x32_sys_fork:
598  return gdb_sys_fork;
599 
600  case amd64_sys_vfork:
601  case amd64_x32_sys_vfork:
602  return gdb_sys_vfork;
603 
604  case amd64_sys_execve:
606  return gdb_sys_execve;
607 
608  case amd64_sys_exit:
609  case amd64_x32_sys_exit:
610  return gdb_sys_exit;
611 
612  case amd64_sys_wait4:
613  case amd64_x32_sys_wait4:
614  return gdb_sys_wait4;
615 
616  case amd64_sys_kill:
617  case amd64_x32_sys_kill:
618  return gdb_sys_kill;
619 
620  case amd64_sys_uname:
621  case amd64_x32_sys_uname:
622  return gdb_sys_uname;
623 
624  case amd64_sys_semget:
626  return gdb_sys_semget;
627 
628  case amd64_sys_semop:
629  case amd64_x32_sys_semop:
630  return gdb_sys_semop;
631 
632  case amd64_sys_semctl:
634  return gdb_sys_semctl;
635 
636  case amd64_sys_shmdt:
637  case amd64_x32_sys_shmdt:
638  return gdb_sys_shmdt;
639 
640  case amd64_sys_msgget:
642  return gdb_sys_msgget;
643 
644  case amd64_sys_msgsnd:
646  return gdb_sys_msgsnd;
647 
648  case amd64_sys_msgrcv:
650  return gdb_sys_msgrcv;
651 
652  case amd64_sys_msgctl:
654  return gdb_sys_msgctl;
655 
656  case amd64_sys_fcntl:
657  case amd64_x32_sys_fcntl:
658  return gdb_sys_fcntl;
659 
660  case amd64_sys_flock:
661  case amd64_x32_sys_flock:
662  return gdb_sys_flock;
663 
664  case amd64_sys_fsync:
665  case amd64_x32_sys_fsync:
666  return gdb_sys_fsync;
667 
668  case amd64_sys_fdatasync:
670  return gdb_sys_fdatasync;
671 
672  case amd64_sys_truncate:
674  return gdb_sys_truncate;
675 
676  case amd64_sys_ftruncate:
678  return gdb_sys_ftruncate;
679 
680  case amd64_sys_getdents:
682  return gdb_sys_getdents;
683 
684  case amd64_sys_getcwd:
686  return gdb_sys_getcwd;
687 
688  case amd64_sys_chdir:
689  case amd64_x32_sys_chdir:
690  return gdb_sys_chdir;
691 
692  case amd64_sys_fchdir:
694  return gdb_sys_fchdir;
695 
696  case amd64_sys_rename:
698  return gdb_sys_rename;
699 
700  case amd64_sys_mkdir:
701  case amd64_x32_sys_mkdir:
702  return gdb_sys_mkdir;
703 
704  case amd64_sys_rmdir:
705  case amd64_x32_sys_rmdir:
706  return gdb_sys_rmdir;
707 
708  case amd64_sys_creat:
709  case amd64_x32_sys_creat:
710  return gdb_sys_creat;
711 
712  case amd64_sys_link:
713  case amd64_x32_sys_link:
714  return gdb_sys_link;
715 
716  case amd64_sys_unlink:
718  return gdb_sys_unlink;
719 
720  case amd64_sys_symlink:
722  return gdb_sys_symlink;
723 
724  case amd64_sys_readlink:
726  return gdb_sys_readlink;
727 
728  case amd64_sys_chmod:
729  case amd64_x32_sys_chmod:
730  return gdb_sys_chmod;
731 
732  case amd64_sys_fchmod:
734  return gdb_sys_fchmod;
735 
736  case amd64_sys_chown:
737  case amd64_x32_sys_chown:
738  return gdb_sys_chown;
739 
740  case amd64_sys_fchown:
742  return gdb_sys_fchown;
743 
744  case amd64_sys_lchown:
746  return gdb_sys_lchown;
747 
748  case amd64_sys_umask:
749  case amd64_x32_sys_umask:
750  return gdb_sys_umask;
751 
754  return gdb_sys_gettimeofday;
755 
756  case amd64_sys_getrlimit:
758  return gdb_sys_getrlimit;
759 
760  case amd64_sys_getrusage:
762  return gdb_sys_getrusage;
763 
764  case amd64_sys_sysinfo:
766  return gdb_sys_sysinfo;
767 
768  case amd64_sys_times:
769  case amd64_x32_sys_times:
770  return gdb_sys_times;
771 
772  case amd64_sys_ptrace:
774  return gdb_sys_ptrace;
775 
776  case amd64_sys_getuid:
778  return gdb_sys_getuid;
779 
780  case amd64_sys_syslog:
782  return gdb_sys_syslog;
783 
784  case amd64_sys_getgid:
786  return gdb_sys_getgid;
787 
788  case amd64_sys_setuid:
790  return gdb_sys_setuid;
791 
792  case amd64_sys_setgid:
794  return gdb_sys_setgid;
795 
796  case amd64_sys_geteuid:
798  return gdb_sys_geteuid;
799 
800  case amd64_sys_getegid:
802  return gdb_sys_getegid;
803 
804  case amd64_sys_setpgid:
806  return gdb_sys_setpgid;
807 
808  case amd64_sys_getppid:
810  return gdb_sys_getppid;
811 
812  case amd64_sys_getpgrp:
814  return gdb_sys_getpgrp;
815 
816  case amd64_sys_setsid:
818  return gdb_sys_setsid;
819 
820  case amd64_sys_setreuid:
822  return gdb_sys_setreuid;
823 
824  case amd64_sys_setregid:
826  return gdb_sys_setregid;
827 
828  case amd64_sys_getgroups:
830  return gdb_sys_getgroups;
831 
832  case amd64_sys_setgroups:
834  return gdb_sys_setgroups;
835 
836  case amd64_sys_setresuid:
838  return gdb_sys_setresuid;
839 
840  case amd64_sys_getresuid:
842  return gdb_sys_getresuid;
843 
844  case amd64_sys_setresgid:
846  return gdb_sys_setresgid;
847 
848  case amd64_sys_getresgid:
850  return gdb_sys_getresgid;
851 
852  case amd64_sys_getpgid:
854  return gdb_sys_getpgid;
855 
856  case amd64_sys_setfsuid:
858  return gdb_sys_setfsuid;
859 
860  case amd64_sys_setfsgid:
862  return gdb_sys_setfsgid;
863 
864  case amd64_sys_getsid:
866  return gdb_sys_getsid;
867 
868  case amd64_sys_capget:
870  return gdb_sys_capget;
871 
872  case amd64_sys_capset:
874  return gdb_sys_capset;
875 
878  return gdb_sys_rt_sigpending;
879 
883 
887 
890  return gdb_sys_rt_sigsuspend;
891 
894  return gdb_sys_sigaltstack;
895 
896  case amd64_sys_utime:
897  case amd64_x32_sys_utime:
898  return gdb_sys_utime;
899 
900  case amd64_sys_mknod:
901  case amd64_x32_sys_mknod:
902  return gdb_sys_mknod;
903 
906  return gdb_sys_personality;
907 
908  case amd64_sys_ustat:
909  case amd64_x32_sys_ustat:
910  return gdb_sys_ustat;
911 
912  case amd64_sys_statfs:
914  return gdb_sys_statfs;
915 
916  case amd64_sys_fstatfs:
918  return gdb_sys_fstatfs;
919 
920  case amd64_sys_sysfs:
921  case amd64_x32_sys_sysfs:
922  return gdb_sys_sysfs;
923 
926  return gdb_sys_getpriority;
927 
930  return gdb_sys_setpriority;
931 
934  return gdb_sys_sched_setparam;
935 
938  return gdb_sys_sched_getparam;
939 
943 
947 
951 
955 
959 
960  case amd64_sys_mlock:
961  case amd64_x32_sys_mlock:
962  return gdb_sys_mlock;
963 
964  case amd64_sys_munlock:
966  return gdb_sys_munlock;
967 
968  case amd64_sys_mlockall:
970  return gdb_sys_mlockall;
971 
974  return gdb_sys_munlockall;
975 
976  case amd64_sys_vhangup:
978  return gdb_sys_vhangup;
979 
982  return gdb_sys_modify_ldt;
983 
986  return gdb_sys_pivot_root;
987 
988  case amd64_sys_sysctl:
990  return gdb_sys_sysctl;
991 
992  case amd64_sys_prctl:
993  case amd64_x32_sys_prctl:
994  return gdb_sys_prctl;
995 
998  return -1; /* Note */
999 
1000  case amd64_sys_adjtimex:
1002  return gdb_sys_adjtimex;
1003 
1004  case amd64_sys_setrlimit:
1006  return gdb_sys_setrlimit;
1007 
1008  case amd64_sys_chroot:
1009  case amd64_x32_sys_chroot:
1010  return gdb_sys_chroot;
1011 
1012  case amd64_sys_sync:
1013  case amd64_x32_sys_sync:
1014  return gdb_sys_sync;
1015 
1016  case amd64_sys_acct:
1017  case amd64_x32_sys_acct:
1018  return gdb_sys_acct;
1019 
1022  return gdb_sys_settimeofday;
1023 
1024  case amd64_sys_mount:
1025  case amd64_x32_sys_mount:
1026  return gdb_sys_mount;
1027 
1028  case amd64_sys_umount:
1029  case amd64_x32_sys_umount:
1030  return gdb_sys_umount;
1031 
1032  case amd64_sys_swapon:
1033  case amd64_x32_sys_swapon:
1034  return gdb_sys_swapon;
1035 
1036  case amd64_sys_swapoff:
1037  case amd64_x32_sys_swapoff:
1038  return gdb_sys_swapoff;
1039 
1040  case amd64_sys_reboot:
1041  case amd64_x32_sys_reboot:
1042  return gdb_sys_reboot;
1043 
1044  case amd64_sys_sethostname:
1046  return gdb_sys_sethostname;
1047 
1050  return gdb_sys_setdomainname;
1051 
1052  case amd64_sys_iopl:
1053  case amd64_x32_sys_iopl:
1054  return gdb_sys_iopl;
1055 
1056  case amd64_sys_ioperm:
1057  case amd64_x32_sys_ioperm:
1058  return gdb_sys_ioperm;
1059 
1060  case amd64_sys_init_module:
1062  return gdb_sys_init_module;
1063 
1066  return gdb_sys_delete_module;
1067 
1068  case amd64_sys_quotactl:
1070  return gdb_sys_quotactl;
1071 
1072  case amd64_sys_nfsservctl:
1073  return gdb_sys_nfsservctl;
1074 
1075  case amd64_sys_gettid:
1076  case amd64_x32_sys_gettid:
1077  return gdb_sys_gettid;
1078 
1079  case amd64_sys_readahead:
1081  return gdb_sys_readahead;
1082 
1083  case amd64_sys_setxattr:
1085  return gdb_sys_setxattr;
1086 
1087  case amd64_sys_lsetxattr:
1089  return gdb_sys_lsetxattr;
1090 
1091  case amd64_sys_fsetxattr:
1093  return gdb_sys_fsetxattr;
1094 
1095  case amd64_sys_getxattr:
1097  return gdb_sys_getxattr;
1098 
1099  case amd64_sys_lgetxattr:
1101  return gdb_sys_lgetxattr;
1102 
1103  case amd64_sys_fgetxattr:
1105  return gdb_sys_fgetxattr;
1106 
1107  case amd64_sys_listxattr:
1109  return gdb_sys_listxattr;
1110 
1111  case amd64_sys_llistxattr:
1113  return gdb_sys_llistxattr;
1114 
1115  case amd64_sys_flistxattr:
1117  return gdb_sys_flistxattr;
1118 
1119  case amd64_sys_removexattr:
1121  return gdb_sys_removexattr;
1122 
1125  return gdb_sys_lremovexattr;
1126 
1129  return gdb_sys_fremovexattr;
1130 
1131  case amd64_sys_tkill:
1132  case amd64_x32_sys_tkill:
1133  return gdb_sys_tkill;
1134 
1135  case amd64_sys_time:
1136  case amd64_x32_sys_time:
1137  return gdb_sys_time;
1138 
1139  case amd64_sys_futex:
1140  case amd64_x32_sys_futex:
1141  return gdb_sys_futex;
1142 
1146 
1150 
1151  case amd64_sys_io_setup:
1153  return gdb_sys_io_setup;
1154 
1155  case amd64_sys_io_destroy:
1157  return gdb_sys_io_destroy;
1158 
1161  return gdb_sys_io_getevents;
1162 
1163  case amd64_sys_io_submit:
1165  return gdb_sys_io_submit;
1166 
1167  case amd64_sys_io_cancel:
1169  return gdb_sys_io_cancel;
1170 
1173  return gdb_sys_lookup_dcookie;
1174 
1177  return gdb_sys_epoll_create;
1178 
1181  return gdb_sys_remap_file_pages;
1182 
1183  case amd64_sys_getdents64:
1185  return gdb_sys_getdents64;
1186 
1189  return gdb_sys_set_tid_address;
1190 
1193  return gdb_sys_restart_syscall;
1194 
1195  case amd64_sys_semtimedop:
1197  return gdb_sys_semtimedop;
1198 
1199  case amd64_sys_fadvise64:
1201  return gdb_sys_fadvise64;
1202 
1205  return gdb_sys_timer_create;
1206 
1209  return gdb_sys_timer_settime;
1210 
1213  return gdb_sys_timer_gettime;
1214 
1217  return gdb_sys_timer_getoverrun;
1218 
1221  return gdb_sys_timer_delete;
1222 
1225  return gdb_sys_clock_settime;
1226 
1229  return gdb_sys_clock_gettime;
1230 
1233  return gdb_sys_clock_getres;
1234 
1237  return gdb_sys_clock_nanosleep;
1238 
1239  case amd64_sys_exit_group:
1241  return gdb_sys_exit_group;
1242 
1243  case amd64_sys_epoll_wait:
1245  return gdb_sys_epoll_wait;
1246 
1247  case amd64_sys_epoll_ctl:
1249  return gdb_sys_epoll_ctl;
1250 
1251  case amd64_sys_tgkill:
1252  case amd64_x32_sys_tgkill:
1253  return gdb_sys_tgkill;
1254 
1255  case amd64_sys_utimes:
1256  case amd64_x32_sys_utimes:
1257  return gdb_sys_utimes;
1258 
1259  case amd64_sys_mbind:
1260  case amd64_x32_sys_mbind:
1261  return gdb_sys_mbind;
1262 
1265  return gdb_sys_set_mempolicy;
1266 
1269  return gdb_sys_get_mempolicy;
1270 
1271  case amd64_sys_mq_open:
1272  case amd64_x32_sys_mq_open:
1273  return gdb_sys_mq_open;
1274 
1275  case amd64_sys_mq_unlink:
1277  return gdb_sys_mq_unlink;
1278 
1281  return gdb_sys_mq_timedsend;
1282 
1285  return gdb_sys_mq_timedreceive;
1286 
1287  case amd64_sys_mq_notify:
1289  return gdb_sys_mq_notify;
1290 
1293  return gdb_sys_mq_getsetattr;
1294 
1295  case amd64_sys_kexec_load:
1297  return gdb_sys_kexec_load;
1298 
1299  case amd64_sys_waitid:
1300  case amd64_x32_sys_waitid:
1301  return gdb_sys_waitid;
1302 
1303  case amd64_sys_add_key:
1304  case amd64_x32_sys_add_key:
1305  return gdb_sys_add_key;
1306 
1307  case amd64_sys_request_key:
1309  return gdb_sys_request_key;
1310 
1311  case amd64_sys_keyctl:
1312  case amd64_x32_sys_keyctl:
1313  return gdb_sys_keyctl;
1314 
1315  case amd64_sys_ioprio_set:
1317  return gdb_sys_ioprio_set;
1318 
1319  case amd64_sys_ioprio_get:
1321  return gdb_sys_ioprio_get;
1322 
1325  return gdb_sys_inotify_init;
1326 
1330 
1333  return gdb_sys_inotify_rm_watch;
1334 
1337  return gdb_sys_migrate_pages;
1338 
1339  case amd64_sys_openat:
1340  case amd64_x32_sys_openat:
1341  return gdb_sys_openat;
1342 
1343  case amd64_sys_mkdirat:
1344  case amd64_x32_sys_mkdirat:
1345  return gdb_sys_mkdirat;
1346 
1347  case amd64_sys_mknodat:
1348  case amd64_x32_sys_mknodat:
1349  return gdb_sys_mknodat;
1350 
1351  case amd64_sys_fchownat:
1353  return gdb_sys_fchownat;
1354 
1355  case amd64_sys_futimesat:
1357  return gdb_sys_futimesat;
1358 
1359  case amd64_sys_newfstatat:
1361  return gdb_sys_newfstatat;
1362 
1363  case amd64_sys_unlinkat:
1365  return gdb_sys_unlinkat;
1366 
1367  case amd64_sys_renameat:
1369  return gdb_sys_renameat;
1370 
1371  case amd64_sys_linkat:
1372  case amd64_x32_sys_linkat:
1373  return gdb_sys_linkat;
1374 
1375  case amd64_sys_symlinkat:
1377  return gdb_sys_symlinkat;
1378 
1379  case amd64_sys_readlinkat:
1381  return gdb_sys_readlinkat;
1382 
1383  case amd64_sys_fchmodat:
1385  return gdb_sys_fchmodat;
1386 
1387  case amd64_sys_faccessat:
1389  return gdb_sys_faccessat;
1390 
1391  case amd64_sys_pselect6:
1393  return gdb_sys_pselect6;
1394 
1395  case amd64_sys_ppoll:
1396  case amd64_x32_sys_ppoll:
1397  return gdb_sys_ppoll;
1398 
1399  case amd64_sys_unshare:
1400  case amd64_x32_sys_unshare:
1401  return gdb_sys_unshare;
1402 
1405  return gdb_sys_set_robust_list;
1406 
1409  return gdb_sys_get_robust_list;
1410 
1411  case amd64_sys_splice:
1412  case amd64_x32_sys_splice:
1413  return gdb_sys_splice;
1414 
1415  case amd64_sys_tee:
1416  case amd64_x32_sys_tee:
1417  return gdb_sys_tee;
1418 
1421  return gdb_sys_sync_file_range;
1422 
1423  case amd64_sys_vmsplice:
1425  return gdb_sys_vmsplice;
1426 
1427  case amd64_sys_move_pages:
1429  return gdb_sys_move_pages;
1430 
1431  default:
1432  return -1;
1433  }
1434 }
1435 
1436 /* Parse the arguments of current system call instruction and record
1437  the values of the registers and memory that will be changed into
1438  "record_full_arch_list". This instruction is "syscall".
1439 
1440  Return -1 if something wrong. */
1441 
1444 
1445 #define RECORD_ARCH_GET_FS 0x1003
1446 #define RECORD_ARCH_GET_GS 0x1004
1447 
1448 static int
1450  struct linux_record_tdep *linux_record_tdep_p)
1451 {
1452  int ret;
1453  ULONGEST syscall_native;
1454  enum gdb_syscall syscall_gdb = -1;
1455 
1456  regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &syscall_native);
1457 
1458  switch (syscall_native)
1459  {
1462  if (amd64_all_but_ip_registers_record (regcache))
1463  return -1;
1464  return 0;
1465  break;
1466 
1467  case amd64_sys_arch_prctl:
1469  {
1470  ULONGEST arg3;
1471  regcache_raw_read_unsigned (regcache, linux_record_tdep_p->arg3,
1472  &arg3);
1473  if (arg3 == RECORD_ARCH_GET_FS || arg3 == RECORD_ARCH_GET_GS)
1474  {
1475  CORE_ADDR addr;
1476 
1477  regcache_raw_read_unsigned (regcache,
1478  linux_record_tdep_p->arg2,
1479  &addr);
1481  (addr, linux_record_tdep_p->size_ulong))
1482  return -1;
1483  }
1484  goto record_regs;
1485  }
1486  break;
1487  }
1488 
1489  syscall_gdb = amd64_canonicalize_syscall (syscall_native);
1490 
1491  if (syscall_gdb < 0)
1492  {
1493  printf_unfiltered (_("Process record and replay target doesn't "
1494  "support syscall number %s\n"),
1495  pulongest (syscall_native));
1496  return -1;
1497  }
1498  else
1499  {
1500  ret = record_linux_system_call (syscall_gdb, regcache,
1501  linux_record_tdep_p);
1502  if (ret)
1503  return ret;
1504  }
1505 
1506  record_regs:
1507  /* Record the return value of the system call. */
1509  return -1;
1511  return -1;
1512 
1513  return 0;
1514 }
1515 
1516 static int
1518 {
1519  return amd64_linux_syscall_record_common (regcache,
1521 }
1522 
1523 static int
1525 {
1526  return amd64_linux_syscall_record_common (regcache,
1528 }
1529 
1530 #define AMD64_LINUX_redzone 128
1531 #define AMD64_LINUX_xstate 512
1532 #define AMD64_LINUX_frame_size 560
1533 
1534 static int
1536  struct regcache *regcache,
1537  enum gdb_signal signal)
1538 {
1539  ULONGEST rsp;
1540 
1541  if (amd64_all_but_ip_registers_record (regcache))
1542  return -1;
1543 
1545  return -1;
1546 
1547  /* Record the change in the stack. */
1548  regcache_raw_read_unsigned (regcache, AMD64_RSP_REGNUM, &rsp);
1549  /* redzone
1550  sp -= 128; */
1551  rsp -= AMD64_LINUX_redzone;
1552  /* This is for xstate.
1553  sp -= sizeof (struct _fpstate); */
1554  rsp -= AMD64_LINUX_xstate;
1555  /* This is for frame_size.
1556  sp -= sizeof (struct rt_sigframe); */
1557  rsp -= AMD64_LINUX_frame_size;
1561  return -1;
1562 
1564  return -1;
1565 
1566  return 0;
1567 }
1568 
1569 /* Get Linux/x86 target description from core dump. */
1570 
1571 static const struct target_desc *
1573  struct target_ops *target,
1574  bfd *abfd)
1575 {
1576  /* Linux/x86-64. */
1577  uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
1578 
1579  switch (xcr0 & X86_XSTATE_ALL_MASK)
1580  {
1583  if (gdbarch_ptr_bit (gdbarch) == 32)
1584  return tdesc_x32_avx512_linux;
1585  else
1586  return tdesc_amd64_avx512_linux;
1587  case X86_XSTATE_MPX_MASK:
1588  if (gdbarch_ptr_bit (gdbarch) == 32)
1589  return tdesc_x32_avx_linux; /* No x32 MPX falling back to AVX. */
1590  else
1591  return tdesc_amd64_mpx_linux;
1592  case X86_XSTATE_AVX_MASK:
1593  if (gdbarch_ptr_bit (gdbarch) == 32)
1594  return tdesc_x32_avx_linux;
1595  else
1596  return tdesc_amd64_avx_linux;
1597  default:
1598  if (gdbarch_ptr_bit (gdbarch) == 32)
1599  return tdesc_x32_linux;
1600  else
1601  return tdesc_amd64_linux;
1602  }
1603 }
1604 
1605 /* Similar to amd64_supply_fpregset, but use XSAVE extended state. */
1606 
1607 static void
1609  struct regcache *regcache, int regnum,
1610  const void *xstateregs, size_t len)
1611 {
1612  amd64_supply_xsave (regcache, regnum, xstateregs);
1613 }
1614 
1615 /* Similar to amd64_collect_fpregset, but use XSAVE extended state. */
1616 
1617 static void
1619  const struct regcache *regcache,
1620  int regnum, void *xstateregs, size_t len)
1621 {
1622  amd64_collect_xsave (regcache, regnum, xstateregs, 1);
1623 }
1624 
1625 static const struct regset amd64_linux_xstateregset =
1626  {
1627  NULL,
1630  };
1631 
1632 /* Iterate over core file register note sections. */
1633 
1634 static void
1637  void *cb_data,
1638  const struct regcache *regcache)
1639 {
1640  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1641 
1642  cb (".reg", 27 * 8, &i386_gregset, NULL, cb_data);
1643  cb (".reg2", 512, &amd64_fpregset, NULL, cb_data);
1644  cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0),
1645  &amd64_linux_xstateregset, "XSAVE extended state", cb_data);
1646 }
1647 
1648 /* The instruction sequences used in x86_64 machines for a
1649  disabled is-enabled probe. */
1650 
1652  /* xor %rax, %rax */ 0x48, 0x33, 0xc0,
1653  /* nop */ 0x90,
1654  /* nop */ 0x90
1655 };
1656 
1658  /* xor %rax, %rax */ 0x48, 0x33, 0xc0,
1659  /* ret */ 0xc3,
1660  /* nop */ 0x90
1661 };
1662 
1663 /* The instruction sequence used in x86_64 machines for enabling a
1664  DTrace is-enabled probe. */
1665 
1667  /* mov $0x1, %eax */ 0xb8, 0x01, 0x00, 0x00, 0x00
1668 };
1669 
1670 /* The instruction sequence used in x86_64 machines for disabling a
1671  DTrace is-enabled probe. */
1672 
1674  /* xor %rax, %rax; nop; nop */ 0x48, 0x33, 0xC0, 0x90, 0x90
1675 };
1676 
1677 /* Implementation of `gdbarch_dtrace_probe_is_enabled', as defined in
1678  gdbarch.h. */
1679 
1680 static int
1682 {
1683  gdb_byte buf[5];
1684 
1685  /* This function returns 1 if the instructions at ADDR do _not_
1686  follow any of the amd64_dtrace_disabled_probe_sequence_*
1687  patterns.
1688 
1689  Note that ADDR is offset 3 bytes from the beginning of these
1690  sequences. */
1691 
1692  read_code (addr - 3, buf, 5);
1693  return (memcmp (buf, amd64_dtrace_disabled_probe_sequence_1, 5) != 0
1694  && memcmp (buf, amd64_dtrace_disabled_probe_sequence_2, 5) != 0);
1695 }
1696 
1697 /* Implementation of `gdbarch_dtrace_enable_probe', as defined in
1698  gdbarch.h. */
1699 
1700 static void
1702 {
1703  /* Note also that ADDR is offset 3 bytes from the beginning of
1704  amd64_dtrace_enable_probe_sequence. */
1705 
1707 }
1708 
1709 /* Implementation of `gdbarch_dtrace_disable_probe', as defined in
1710  gdbarch.h. */
1711 
1712 static void
1714 {
1715  /* Note also that ADDR is offset 3 bytes from the beginning of
1716  amd64_dtrace_disable_probe_sequence. */
1717 
1719 }
1720 
1721 /* Implementation of `gdbarch_dtrace_parse_probe_argument', as defined
1722  in gdbarch.h. */
1723 
1724 static void
1726  struct parser_state *pstate,
1727  int narg)
1728 {
1729  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1730  struct frame_info *this_frame = get_selected_frame (NULL);
1731  struct stoken str;
1732 
1733  /* DTrace probe arguments can be found on the ABI-defined places for
1734  regular arguments at the current PC. The probe abstraction
1735  currently supports up to 12 arguments for probes. */
1736 
1737  if (narg < 6)
1738  {
1739  static const int arg_reg_map[6] =
1740  {
1741  AMD64_RDI_REGNUM, /* Arg 1. */
1742  AMD64_RSI_REGNUM, /* Arg 2. */
1743  AMD64_RDX_REGNUM, /* Arg 3. */
1744  AMD64_RCX_REGNUM, /* Arg 4. */
1745  AMD64_R8_REGNUM, /* Arg 5. */
1746  AMD64_R9_REGNUM /* Arg 6. */
1747  };
1748  int regno = arg_reg_map[narg];
1749  const char *regname = user_reg_map_regnum_to_name (gdbarch, regno);
1750 
1751  write_exp_elt_opcode (pstate, OP_REGISTER);
1752  str.ptr = regname;
1753  str.length = strlen (regname);
1754  write_exp_string (pstate, str);
1755  write_exp_elt_opcode (pstate, OP_REGISTER);
1756  }
1757  else
1758  {
1759  /* Additional arguments are passed on the stack. */
1760  CORE_ADDR sp;
1761  const char *regname = user_reg_map_regnum_to_name (gdbarch, AMD64_RSP_REGNUM);
1762 
1763  /* Displacement. */
1764  write_exp_elt_opcode (pstate, OP_LONG);
1765  write_exp_elt_type (pstate, builtin_type (gdbarch)->builtin_long);
1766  write_exp_elt_longcst (pstate, narg - 6);
1767  write_exp_elt_opcode (pstate, OP_LONG);
1768 
1769  /* Register: SP. */
1770  write_exp_elt_opcode (pstate, OP_REGISTER);
1771  str.ptr = regname;
1772  str.length = strlen (regname);
1773  write_exp_string (pstate, str);
1774  write_exp_elt_opcode (pstate, OP_REGISTER);
1775 
1776  write_exp_elt_opcode (pstate, BINOP_ADD);
1777 
1778  /* Cast to long. */
1779  write_exp_elt_opcode (pstate, UNOP_CAST);
1780  write_exp_elt_type (pstate,
1781  lookup_pointer_type (builtin_type (gdbarch)->builtin_long));
1782  write_exp_elt_opcode (pstate, UNOP_CAST);
1783 
1784  write_exp_elt_opcode (pstate, UNOP_IND);
1785  }
1786 }
1787 
1788 static void
1790 {
1791  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1792 
1793  linux_init_abi (info, gdbarch);
1794 
1798  tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
1799 
1801 
1802  /* Add the %orig_rax register used for syscall restarting. */
1804 
1806 
1807  /* Functions for 'catch syscall'. */
1811 
1812  /* Enable TLS support. */
1815 
1816  /* GNU/Linux uses SVR4-style shared libraries. */
1818 
1819  /* GNU/Linux uses the dynamic linker included in the GNU C Library. */
1821 
1822  /* Iterate over core file register note sections. */
1825 
1828 
1829  /* Displaced stepping. */
1837 
1840 }
1841 
1842 static void
1844 {
1845  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1846  const struct target_desc *tdesc = info.target_desc;
1847  struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
1848  const struct tdesc_feature *feature;
1849  int valid_p;
1850 
1851  gdb_assert (tdesc_data);
1852 
1854  tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
1855  tdep->sizeof_gregset = 27 * 8;
1856 
1857  amd64_init_abi (info, gdbarch);
1858 
1859  /* Reserve a number for orig_rax. */
1861 
1862  if (! tdesc_has_registers (tdesc))
1863  tdesc = tdesc_amd64_linux;
1864  tdep->tdesc = tdesc;
1865 
1866  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
1867  if (feature == NULL)
1868  return;
1869 
1870  valid_p = tdesc_numbered_register (feature, tdesc_data,
1872  "orig_rax");
1873  if (!valid_p)
1874  return;
1875 
1876  amd64_linux_init_abi_common (info, gdbarch);
1877 
1878  /* Initialize the amd64_linux_record_tdep. */
1879  /* These values are the size of the type that will be used in a system
1880  call. They are obtained from Linux Kernel source. */
1882  = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1889  /* ADM64 doesn't need this size because it doesn't have sys_sigaction
1890  but sys_rt_sigaction. */
1892  /* ADM64 doesn't need this size because it doesn't have sys_sigpending
1893  but sys_rt_sigpending. */
1899  /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
1900  but sys_getgroups. */
1902  /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
1903  but sys_getresuid. */
1912  = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
1914  = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1916  = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
1961 
1962  /* These values are the second argument of system call "sys_fcntl"
1963  and "sys_fcntl64". They are obtained from Linux Kernel source. */
1968 
1975 
1976  /* These values are the second argument of system call "sys_ioctl".
1977  They are obtained from Linux Kernel source. */
2044 
2046 
2047  /* GNU/Linux uses SVR4-style shared libraries. */
2050 
2051  /* Register DTrace handlers. */
2056 }
2057 
2058 static void
2060 {
2061  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2062  const struct target_desc *tdesc = info.target_desc;
2063  struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
2064  const struct tdesc_feature *feature;
2065  int valid_p;
2066 
2067  gdb_assert (tdesc_data);
2068 
2070  tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
2071  tdep->sizeof_gregset = 27 * 8;
2072 
2073  amd64_x32_init_abi (info, gdbarch);
2074 
2075  /* Reserve a number for orig_rax. */
2077 
2078  if (! tdesc_has_registers (tdesc))
2079  tdesc = tdesc_x32_linux;
2080  tdep->tdesc = tdesc;
2081 
2082  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
2083  if (feature == NULL)
2084  return;
2085 
2086  valid_p = tdesc_numbered_register (feature, tdesc_data,
2088  "orig_rax");
2089  if (!valid_p)
2090  return;
2091 
2092  amd64_linux_init_abi_common (info, gdbarch);
2093 
2094  /* Initialize the amd64_x32_linux_record_tdep. */
2095  /* These values are the size of the type that will be used in a system
2096  call. They are obtained from Linux Kernel source. */
2098  = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
2105  /* ADM64 doesn't need this size because it doesn't have sys_sigaction
2106  but sys_rt_sigaction. */
2108  /* ADM64 doesn't need this size because it doesn't have sys_sigpending
2109  but sys_rt_sigpending. */
2115  /* ADM64 doesn't need this size because it doesn't have sys_getgroups16
2116  but sys_getgroups. */
2118  /* ADM64 doesn't need this size because it doesn't have sys_getresuid16
2119  but sys_getresuid. */
2128  = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
2130  = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
2132  = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
2177 
2178  /* These values are the second argument of system call "sys_fcntl"
2179  and "sys_fcntl64". They are obtained from Linux Kernel source. */
2184 
2191 
2192  /* These values are the second argument of system call "sys_ioctl".
2193  They are obtained from Linux Kernel source. */
2259 
2261 
2262  /* GNU/Linux uses SVR4-style shared libraries. */
2265 }
2266 
2267 
2268 /* Provide a prototype to silence -Wmissing-prototypes. */
2269 extern void _initialize_amd64_linux_tdep (void);
2270 
2271 void
2273 {
2274  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
2276  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32,
2278 
2279  /* Initialize the Linux target description. */
2284 
2288 }
int i386_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
Definition: i386-tdep.c:4437
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
Definition: gdbarch.c:1909
#define X86_XSTATE_AVX_MASK
Definition: x86-xstate.h:41
const char * user_reg_map_regnum_to_name(struct gdbarch *gdbarch, int regnum)
Definition: user-regs.c:190
ULONGEST extract_unsigned_integer(const gdb_byte *, int, enum bfd_endian)
Definition: findvar.c:84
static void amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch)
static void amd64_linux_supply_xstateregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *xstateregs, size_t len)
int xsave_xcr0_offset
Definition: i386-tdep.h:142
int size_serial_icounter_struct
Definition: linux-record.h:90
static void amd64_x32_linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
#define LINUX_SIGTRAMP_OFFSET1
static void initialize_tdesc_x32_avx512_linux(void)
struct frame_info * get_selected_frame(const char *message)
Definition: frame.c:1535
void set_gdbarch_displaced_step_fixup(struct gdbarch *gdbarch, gdbarch_displaced_step_fixup_ftype displaced_step_fixup)
Definition: gdbarch.c:3709
CORE_ADDR get_frame_pc(struct frame_info *frame)
Definition: frame.c:2217
const gdb_byte amd64_dtrace_disabled_probe_sequence_2[]
bfd_vma CORE_ADDR
Definition: common-types.h:41
void set_gdbarch_fetch_tls_load_module_address(struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype fetch_tls_load_module_address)
Definition: gdbarch.c:2822
struct link_map_offsets * svr4_lp64_fetch_link_map_offsets(void)
Definition: solib-svr4.c:3180
int i386_process_record(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR input_addr)
Definition: i386-tdep.c:4950
struct regcache * get_thread_regcache(ptid_t ptid)
Definition: regcache.c:529
int sc_num_regs
Definition: i386-tdep.h:216
const char * ptr
Definition: parser-defs.h:79
uint64_t i386_linux_core_read_xcr0(bfd *abfd)
struct displaced_step_closure * amd64_displaced_step_copy_insn(struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
Definition: amd64-tdep.c:1346
#define AMD64_LINUX_redzone
int record_full_arch_list_add_reg(struct regcache *regcache, int regnum)
Definition: record-full.c:466
#define X86_XSTATE_MPX_MASK
Definition: x86-xstate.h:42
int gdbarch_int_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1490
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype skip_trampoline_code)
Definition: gdbarch.c:3084
CORE_ADDR glibc_skip_solib_resolver(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: glibc-tdep.c:38
void set_gdbarch_write_pc(struct gdbarch *gdbarch, gdbarch_write_pc_ftype write_pc)
Definition: gdbarch.c:1802
void set_gdbarch_displaced_step_location(struct gdbarch *gdbarch, gdbarch_displaced_step_location_ftype displaced_step_location)
Definition: gdbarch.c:3743
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1690
void amd64_displaced_step_fixup(struct gdbarch *gdbarch, struct displaced_step_closure *dsc, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
Definition: amd64-tdep.c:1555
void set_gdbarch_process_record_signal(struct gdbarch *gdbarch, gdbarch_process_record_signal_ftype process_record_signal)
Definition: gdbarch.c:3905
int(* i386_syscall_record)(struct regcache *regcache)
Definition: i386-tdep.h:239
static int amd64_x32_linux_syscall_record(struct regcache *regcache)
void linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
Definition: linux-tdep.c:2427
CORE_ADDR(* sigcontext_addr)(struct frame_info *)
Definition: alpha-tdep.h:82
int gdbarch_long_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1507
static void amd64_dtrace_enable_probe(struct gdbarch *gdbarch, CORE_ADDR addr)
struct link_map_offsets * svr4_ilp32_fetch_link_map_offsets(void)
Definition: solib-svr4.c:3149
amd64_syscall
void set_gdbarch_dtrace_probe_is_enabled(struct gdbarch *gdbarch, gdbarch_dtrace_probe_is_enabled_ftype dtrace_probe_is_enabled)
Definition: gdbarch.c:4291
struct reggroup *const restore_reggroup
Definition: reggroups.c:298
#define LINUX_SIGTRAMP_INSN1
#define _(String)
Definition: gdb_locale.h:40
#define AMD64_LINUX_xstate
struct target_desc * tdesc_amd64_mpx_linux
struct target_desc * tdesc_x32_linux
Definition: x32-linux.c:8
struct target_desc * tdesc_amd64_linux
Definition: amd64-linux.c:8
const gdb_byte amd64_dtrace_disable_probe_sequence[]
static struct linux_record_tdep amd64_x32_linux_record_tdep
struct gdbarch_tdep_info * tdep_info
Definition: gdbarch.h:1560
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
Definition: gdbarch.c:1402
static const unsigned short sigtramp_code[]
Definition: cris-tdep.c:175
void _initialize_amd64_linux_tdep(void)
void set_gdbarch_process_record(struct gdbarch *gdbarch, gdbarch_process_record_ftype process_record)
Definition: gdbarch.c:3881
#define X86_XSTATE_SIZE(XCR0)
Definition: x86-xstate.h:62
static LONGEST amd64_linux_get_syscall_number(struct gdbarch *gdbarch, ptid_t ptid)
Definition: ptid.h:35
CORE_ADDR svr4_fetch_objfile_link_map(struct objfile *objfile)
Definition: solib-svr4.c:1573
static int amd64_all_but_ip_registers_record(struct regcache *regcache)
Definition: regset.h:34
void amd64_x32_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
Definition: amd64-tdep.c:3106
int tdesc_numbered_register(const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *name)
const gdb_byte amd64_dtrace_enable_probe_sequence[]
const char *const name
Definition: aarch64-tdep.c:68
void write_exp_elt_longcst(struct parser_state *ps, LONGEST expelt)
Definition: parse.c:276
struct target_desc * tdesc_x32_avx512_linux
#define AMD64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET
struct target_desc * tdesc_x32_avx_linux
Definition: x32-avx-linux.c:8
void set_gdbarch_dtrace_disable_probe(struct gdbarch *gdbarch, gdbarch_dtrace_disable_probe_ftype dtrace_disable_probe)
Definition: gdbarch.c:4339
static int amd64_linux_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
static void amd64_dtrace_disable_probe(struct gdbarch *gdbarch, CORE_ADDR addr)
static struct parser_state * pstate
Definition: ada-exp.c:149
static void amd64_linux_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
#define AMD64_LINUX_ORIG_RAX_REGNUM
int record_linux_system_call(enum gdb_syscall syscall, struct regcache *regcache, struct linux_record_tdep *tdep)
Definition: linux-record.c:227
CORE_ADDR find_solib_trampoline_target(struct frame_info *frame, CORE_ADDR pc)
Definition: minsyms.c:1394
int safe_frame_unwind_memory(struct frame_info *this_frame, CORE_ADDR addr, gdb_byte *buf, int len)
Definition: frame.c:2525
struct reggroup *const system_reggroup
Definition: reggroups.c:294
static const gdb_byte amd64_linux_sigtramp_code[]
static void initialize_tdesc_amd64_mpx_linux(void)
static void amd64_linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
#define AMD64_LINUX_frame_size
void amd64_supply_xsave(struct regcache *regcache, int regnum, const void *xsave)
Definition: amd64-tdep.c:3196
static int amd64_linux_record_signal(struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1420
#define TARGET_CHAR_BIT
Definition: host-defs.h:29
void set_solib_svr4_fetch_link_map_offsets(struct gdbarch *gdbarch, struct link_map_offsets *(*flmo)(void))
Definition: solib-svr4.c:3108
#define XML_SYSCALL_FILENAME_AMD64
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
Definition: blockframe.c:321
void read_code(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
Definition: corefile.c:283
static void initialize_tdesc_x32_avx_linux(void)
Definition: x32-avx-linux.c:10
const void * register_reggroup_p
Definition: i386-tdep.h:196
#define gdb_assert(expr)
Definition: gdb_assert.h:33
#define X86_XSTATE_MPX_AVX512_MASK
Definition: x86-xstate.h:44
int amd64_linux_gregset_reg_offset[]
const struct regset i386_gregset
Definition: i386-tdep.c:3819
#define LINUX_SIGTRAMP_LEN
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
Definition: regcache.c:690
static int amd64_linux_sc_reg_offset[]
static void initialize_tdesc_x32_linux(void)
Definition: x32-linux.c:10
int regnum
Definition: aarch64-tdep.c:69
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)
Definition: xml-syscall.c:392
void printf_unfiltered(const char *format,...)
Definition: utils.c:2399
static int amd64_linux_syscall_record_common(struct regcache *regcache, struct linux_record_tdep *linux_record_tdep_p)
void( iterate_over_regset_sections_cb)(const char *sect_name, int size, const struct regset *regset, const char *human_name, void *cb_data)
Definition: gdbarch.h:98
const gdb_byte amd64_dtrace_disabled_probe_sequence_1[]
static const struct target_desc * amd64_linux_core_read_description(struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
struct target_desc * tdesc_amd64_avx_linux
static const gdb_byte amd64_x32_linux_sigtramp_code[]
CORE_ADDR linux_displaced_step_location(struct gdbarch *gdbarch)
Definition: linux-tdep.c:2384
static void amd64_dtrace_parse_probe_argument(struct gdbarch *gdbarch, struct parser_state *pstate, int narg)
gdb_syscall
Definition: linux-record.h:184
int record_full_arch_list_add_mem(CORE_ADDR addr, int len)
Definition: record-full.c:489
const struct target_desc * target_desc
Definition: gdbarch.h:1566
int * gregset_reg_offset
Definition: i386-tdep.h:59
const struct regset amd64_fpregset
Definition: amd64-tdep.c:2889
#define RECORD_ARCH_GET_GS
void write_exp_elt_opcode(struct parser_state *ps, enum exp_opcode expelt)
Definition: parse.c:236
static void initialize_tdesc_amd64_linux(void)
Definition: amd64-linux.c:10
bfd_byte gdb_byte
Definition: common-types.h:38
int(* sigtramp_p)(struct frame_info *)
Definition: i386-tdep.h:209
static CORE_ADDR amd64_linux_sigtramp_start(struct frame_info *this_frame)
void set_gdbarch_displaced_step_copy_insn(struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype displaced_step_copy_insn)
Definition: gdbarch.c:3667
#define X86_XSTATE_AVX512_MASK
Definition: x86-xstate.h:43
uint64_t xcr0
Definition: i386-tdep.h:139
struct target_desc * tdesc_amd64_avx512_linux
#define AMD64_LINUX_NUM_REGS
static int amd64_linux_syscall_record(struct regcache *regcache)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:871
void amd64_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
Definition: amd64-tdep.c:2937
void set_gdbarch_dtrace_enable_probe(struct gdbarch *gdbarch, gdbarch_dtrace_enable_probe_ftype dtrace_enable_probe)
Definition: gdbarch.c:4315
#define LINUX_SIGTRAMP_INSN0
#define RECORD_ARCH_GET_FS
static CORE_ADDR amd64_linux_sigcontext_addr(struct frame_info *this_frame)
void set_gdbarch_get_syscall_number(struct gdbarch *gdbarch, gdbarch_get_syscall_number_ftype get_syscall_number)
Definition: gdbarch.c:4025
void get_frame_register(struct frame_info *frame, int regnum, gdb_byte *buf)
Definition: frame.c:1085
static int amd64_linux_sigtramp_p(struct frame_info *this_frame)
enum register_status regcache_cooked_read(struct regcache *regcache, int regnum, gdb_byte *buf)
Definition: regcache.c:737
size_t sizeof_gregset
Definition: i386-tdep.h:61
const struct target_desc * tdesc
Definition: i386-tdep.h:193
int * sc_reg_offset
Definition: i386-tdep.h:215
unsigned long long ULONGEST
Definition: common-types.h:53
static void amd64_linux_write_pc(struct regcache *regcache, CORE_ADDR pc)
const struct tdesc_feature * tdesc_find_feature(const struct target_desc *target_desc, const char *name)
void set_gdbarch_dtrace_parse_probe_argument(struct gdbarch *gdbarch, gdbarch_dtrace_parse_probe_argument_ftype dtrace_parse_probe_argument)
Definition: gdbarch.c:4267
static void initialize_tdesc_amd64_avx_linux(void)
static enum gdb_syscall amd64_canonicalize_syscall(enum amd64_syscall syscall_number)
static void initialize_tdesc_amd64_avx512_linux(void)
void set_gdbarch_displaced_step_free_closure(struct gdbarch *gdbarch, gdbarch_displaced_step_free_closure_ftype displaced_step_free_closure)
Definition: gdbarch.c:3726
void amd64_collect_xsave(const struct regcache *regcache, int regnum, void *xsave, int gcore)
Definition: amd64-tdep.c:3245
struct reggroup *const save_reggroup
Definition: reggroups.c:297
static struct linux_record_tdep amd64_linux_record_tdep
#define I386_LINUX_XSAVE_XCR0_OFFSET
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype iterate_over_regset_sections)
Definition: gdbarch.c:3398
LONGEST extract_signed_integer(const gdb_byte *, int, enum bfd_endian)
Definition: findvar.c:49
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
Definition: corefile.c:389
static struct gdbarch_data * tdesc_data
void set_gdbarch_skip_solib_resolver(struct gdbarch *gdbarch, gdbarch_skip_solib_resolver_ftype skip_solib_resolver)
Definition: gdbarch.c:3101
int gregset_num_regs
Definition: i386-tdep.h:60
enum bfd_endian byte_order
Definition: gdbarch.c:128
void write_exp_string(struct parser_state *ps, struct stoken str)
Definition: parse.c:349
int record_full_arch_list_add_end(void)
Definition: record-full.c:520
void set_gdbarch_core_read_description(struct gdbarch *gdbarch, gdbarch_core_read_description_ftype core_read_description)
Definition: gdbarch.c:3816
int tdesc_has_registers(const struct target_desc *target_desc)
void write_exp_elt_type(struct parser_state *ps, struct type *expelt)
Definition: parse.c:308
void gdbarch_register_osabi(enum bfd_architecture arch, unsigned long machine, enum gdb_osabi osabi, void(*init_osabi)(struct gdbarch_info, struct gdbarch *))
Definition: osabi.c:148
struct type * lookup_pointer_type(struct type *type)
Definition: gdbtypes.c:368
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
Definition: frame.c:2535
long long LONGEST
Definition: common-types.h:52
int length
Definition: parser-defs.h:81
static void amd64_linux_collect_xstateregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *xstateregs, size_t len)
static int amd64_dtrace_probe_is_enabled(struct gdbarch *gdbarch, CORE_ADDR addr)
const ULONGEST const LONGEST len
Definition: target.h:309
void simple_displaced_step_free_closure(struct gdbarch *gdbarch, struct displaced_step_closure *closure)
Definition: arch-utils.c:64
#define X86_XSTATE_ALL_MASK
Definition: x86-xstate.h:46