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