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